Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/psr: Reject async flips when selective fetch is enabled

The selective fetch code doesn't handle asycn flips correctly.
There is a nonsense check for async flips in
intel_psr2_sel_fetch_config_valid() but that only gets called
for modesets/fastsets and thus does nothing for async flips.

Currently intel_async_flip_check_hw() is very unhappy as the
selective fetch code pulls in planes that are not even async
flips capable.

Reject async flips when selective fetch is enabled, until
someone fixes this properly (ie. disable selective fetch while
async flips are being issued).

Cc: stable@vger.kernel.org
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20251105171015.22234-1-ville.syrjala@linux.intel.com
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
(cherry picked from commit a5f0cc8e0cd4007370af6985cb152001310cf20c)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

authored by

Ville Syrjälä and committed by
Rodrigo Vivi
7c373b3b ac3fd01e

+8 -6
+8
drivers/gpu/drm/i915/display/intel_display.c
··· 5964 5964 return -EINVAL; 5965 5965 } 5966 5966 5967 + /* FIXME: selective fetch should be disabled for async flips */ 5968 + if (new_crtc_state->enable_psr2_sel_fetch) { 5969 + drm_dbg_kms(display->drm, 5970 + "[CRTC:%d:%s] async flip disallowed with PSR2 selective fetch\n", 5971 + crtc->base.base.id, crtc->base.name); 5972 + return -EINVAL; 5973 + } 5974 + 5967 5975 for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state, 5968 5976 new_plane_state, i) { 5969 5977 if (plane->pipe != crtc->pipe)
-6
drivers/gpu/drm/i915/display/intel_psr.c
··· 1256 1256 return false; 1257 1257 } 1258 1258 1259 - if (crtc_state->uapi.async_flip) { 1260 - drm_dbg_kms(display->drm, 1261 - "PSR2 sel fetch not enabled, async flip enabled\n"); 1262 - return false; 1263 - } 1264 - 1265 1259 return crtc_state->enable_psr2_sel_fetch = true; 1266 1260 } 1267 1261