[PATCH v2] drm/i915/psr: Skip PSR exit for legacy cursor updates on LunarLake onwards
From: Aaron Ma
Date: Thu Jun 25 2026 - 01:56:00 EST
ORIGIN_CURSOR_UPDATE falls through to _psr_flush_handle() on
DISPLAY_VER >= 20, which calls intel_psr_exit(). Cursor plane updated
via legacy ioctl (drmModeMoveCursor) does not dirty the primary
frontbuffer, no PSR2 state change is needed. Match the existing
ORIGIN_FLIP behavior by returning early on DISPLAY_VER >= 20.
Before this, the psr2_sel_fetch_enabled guard only prevented the early
return when PSR2 selective fetch was active, sending cursor updates
through intel_psr_exit() and causing a black line artifact on some
panels during the exit/re-enable transition.
Preserve the fallthrough for pre-LNL platforms with PSR2 selective
fetch, where intel_psr_force_update() (CURSURFLIVE write) is needed
for cursor tracking.
Fixes: ef39826c12b4 ("drm/i915/display: Fix glitches when moving cursor with PSR2 selective fetch enabled")
Signed-off-by: Aaron Ma <aaron.ma@xxxxxxxxxxxxx>
---
Changes in v2:
- Add DISPLAY_VER >= 20 guard to only skip PSR exit on LunarLake onwards,
preserving the intel_psr_force_update() fallthrough for pre-LNL platforms
with PSR2 selective fetch (addresses Sashiko review about cursor trailing
artifacts on pre-LNL)
v1: https://lore.kernel.org/r/20260623084137.3421894-1-aaron.ma@xxxxxxxxxxxxx
drivers/gpu/drm/i915/display/intel_psr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index e138982dc91f6..ba8c427f45463 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -3772,7 +3772,7 @@ void intel_psr_flush(struct intel_display *display,
if (origin == ORIGIN_FLIP ||
(origin == ORIGIN_CURSOR_UPDATE &&
- !intel_dp->psr.psr2_sel_fetch_enabled)) {
+ (DISPLAY_VER(display) >= 20 || !intel_dp->psr.psr2_sel_fetch_enabled))) {
tgl_dc3co_flush_locked(intel_dp, frontbuffer_bits, origin);
goto unlock;
}
--
2.43.0