diff --git a/local/recipes/gpu/redox-drm/source/src/drivers/intel/ring.rs b/local/recipes/gpu/redox-drm/source/src/drivers/intel/ring.rs index a4417033e1..27541fb0c6 100644 --- a/local/recipes/gpu/redox-drm/source/src/drivers/intel/ring.rs +++ b/local/recipes/gpu/redox-drm/source/src/drivers/intel/ring.rs @@ -27,7 +27,7 @@ const RING_CTL_SIZE_MASK: u32 = !0x0FFF; const MI_NOOP: u32 = 0x0000_0000; const MI_FLUSH_DW: u32 = 0x0200_0000; -const MI_USER_INTERRUPT: u32 = 0x0200_0000; +const MI_USER_INTERRUPT: u32 = 0x6200_0000; #[derive(Clone, Copy, Debug)] pub enum RingType { @@ -161,7 +161,7 @@ impl IntelRing { } pub fn flush(&mut self) -> Result<()> { - self.submit_batch(&[MI_FLUSH_DW, MI_NOOP]) + self.submit_batch(&[MI_FLUSH_DW | (1 << 22), 0x0000_0000]) } pub fn has_activity(&mut self) -> Result { diff --git a/local/recipes/gpu/redox-drm/source/src/scheme.rs b/local/recipes/gpu/redox-drm/source/src/scheme.rs index 339a89789f..6601d0fb05 100644 --- a/local/recipes/gpu/redox-drm/source/src/scheme.rs +++ b/local/recipes/gpu/redox-drm/source/src/scheme.rs @@ -1810,9 +1810,15 @@ impl DrmScheme { } DRM_IOCTL_MODE_SETPLANE => { - let _req = decode_wire::(payload)?; - warn!("redox-drm: SETPLANE not implemented (hardware overlay/cursor planes require DC)"); - return Err(Error::new(EOPNOTSUPP)); + let req = decode_wire::(payload)?; + if req.plane_id == PRIMARY_PLANE_ID && req.fb_id != 0 { + self.driver.page_flip(req.crtc_id, req.fb_id, 0) + .map_err(driver_to_syscall)?; + Vec::new() + } else { + debug!("redox-drm: SETPLANE ignored (overlay/cursor plane {})", req.plane_id); + Vec::new() + } } DRM_IOCTL_MODE_ADDFB => {