> -----Original Message----- > From: Intel-gfx <[email protected]> On Behalf Of Jouni > Högander > Sent: Monday, 22 September 2025 13.27 > To: [email protected]; [email protected] > Cc: Hogander, Jouni <[email protected]>; Lemen <[email protected]>; Koos > Vriezen <[email protected]> > Subject: [PATCH] drm/i915/psr: Deactivate PSR only on LNL and when selective > fetch enabled > > Using intel_psr_exit in frontbuffer flush on older platforms seems to be > causing problems. > > Sending single full frame update using intel_psr_force_update is anyways more > optimal compared to psr deactivate/activate -> > move back to this approach on PSR1, PSR HW tracking and Panel Replay full > frame update and use deactivate/activate only on > LunarLake and only when selective fetch is enabled. > > Tested-by: Lemen <[email protected]> > Tested-by: Koos Vriezen <[email protected]> > Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14946
Reviewed-by: Mika Kahola <[email protected]> > Signed-off-by: Jouni Högander <[email protected]> > --- > drivers/gpu/drm/i915/display/intel_psr.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c > b/drivers/gpu/drm/i915/display/intel_psr.c > index 01bf304c705f..10eb93a34cf2 100644 > --- a/drivers/gpu/drm/i915/display/intel_psr.c > +++ b/drivers/gpu/drm/i915/display/intel_psr.c > @@ -3402,6 +3402,7 @@ static void _psr_flush_handle(struct intel_dp *intel_dp) > struct intel_display *display = to_intel_display(intel_dp); > > if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_enabled) { > + /* Selective fetch prior LNL */ > if (intel_dp->psr.psr2_sel_fetch_cff_enabled) { > /* can we turn CFF off? */ > if (intel_dp->psr.busy_frontbuffer_bits == 0) @@ > -3420,12 +3421,19 @@ static void > _psr_flush_handle(struct intel_dp *intel_dp) > intel_psr_configure_full_frame_update(intel_dp); > > intel_psr_force_update(intel_dp); > + } else if (!intel_dp->psr.psr2_sel_fetch_enabled) { > + /* > + * PSR1 on all platforms > + * PSR2 HW tracking > + * Panel Replay Full frame update > + */ > + intel_psr_force_update(intel_dp); > } else { > + /* Selective update LNL onwards */ > intel_psr_exit(intel_dp); > } > > - if ((!intel_dp->psr.psr2_sel_fetch_enabled || DISPLAY_VER(display) >= > 20) && > - !intel_dp->psr.busy_frontbuffer_bits) > + if (!intel_dp->psr.active && !intel_dp->psr.busy_frontbuffer_bits) > queue_work(display->wq.unordered, &intel_dp->psr.work); } > > -- > 2.43.0
