Skip to content

Commit 921f2d6

Browse files
hoshinolinajannau
authored andcommitted
drm/asahi: Implement ASAHI_BIND_SINGLE_PAGE (uapi)
Signed-off-by: Asahi Lina <lina@asahilina.net>
1 parent 4db9e35 commit 921f2d6

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

drivers/gpu/drm/asahi/file.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,8 @@ impl File {
255255

256256
feat_compat: gpu.get_cfg().gpu_feat_compat
257257
| hw::feat::compat::GETTIME
258-
| hw::feat::compat::USER_TIMESTAMPS,
258+
| hw::feat::compat::USER_TIMESTAMPS
259+
| hw::feat::compat::SINGLE_PAGE_MAP,
259260
feat_incompat: gpu.get_cfg().gpu_feat_incompat,
260261

261262
gpu_generation: gpu.get_dyncfg().id.gpu_gen as u32,
@@ -573,11 +574,16 @@ impl File {
573574
return Err(EINVAL); // Must be page aligned
574575
}
575576

576-
if (data.flags & !(uapi::ASAHI_BIND_READ | uapi::ASAHI_BIND_WRITE)) != 0 {
577+
if (data.flags
578+
& !(uapi::ASAHI_BIND_READ | uapi::ASAHI_BIND_WRITE | uapi::ASAHI_BIND_SINGLE_PAGE))
579+
!= 0
580+
{
577581
cls_pr_debug!(Errors, "gem_bind: Invalid flags {:#x}\n", data.flags);
578582
return Err(EINVAL);
579583
}
580584

585+
let single_page = data.flags & uapi::ASAHI_BIND_SINGLE_PAGE != 0;
586+
581587
let bo = gem::lookup_handle(file, data.handle)?;
582588

583589
let start = data.addr;
@@ -637,7 +643,14 @@ impl File {
637643
return Err(EINVAL);
638644
}
639645

640-
vm.bind_object(&bo.gem, data.addr, data.range, data.offset, prot)?;
646+
vm.bind_object(
647+
&bo.gem,
648+
data.addr,
649+
data.range,
650+
data.offset,
651+
prot,
652+
single_page,
653+
)?;
641654

642655
Ok(0)
643656
}

drivers/gpu/drm/asahi/hw/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ pub(crate) mod feat {
9999
/// User timestamps extension supported
100100
pub(crate) const USER_TIMESTAMPS: u64 =
101101
uapi::drm_asahi_feat_compat_DRM_ASAHI_FEAT_USER_TIMESTAMPS as u64;
102+
/// User timestamps extension supported
103+
pub(crate) const SINGLE_PAGE_MAP: u64 =
104+
uapi::drm_asahi_feat_compat_DRM_ASAHI_FEAT_SINGLE_PAGE_MAP as u64;
102105
}
103106

104107
/// Backwards-incompatible features.

0 commit comments

Comments
 (0)