On Mon, 2025-09-22 at 14:27 +0000, Kahola, Mika wrote:
> > -----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]>

Thank you Mika for checking my patch. This is now pushed to drm-intel-
next.

BR,

Jouni Högander

> 
> > 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
> 

Reply via email to