[PATCH] drm/i915/psr: Do not trigger Frame Change events from frontbuffer flush

Hogander, Jouni jouni.hogander at intel.com
Thu Aug 7 05:26:18 UTC 2025


On Thu, 2025-08-07 at 04:38 +0000, Kandpal, Suraj wrote:
> > Subject: [PATCH] drm/i915/psr: Do not trigger Frame Change events
> > from
> > frontbuffer flush
> > 
> > We want to get rid of triggering "Frame Change" events from
> > frontbuffer flush
> > calls. We are about to move using TRANS_PUSH register for this on
> > LunarLake
> > and onwards. Touching TRANS_PUSH register from fronbuffer flush
> > would be
> > problematic as it's written by DSB as well.
> > 
> > Fix this by using intel_psr_exit when flush or invalidate is done
> > on LunarLake
> > and onwards. This is not possible on AlderLake and MeteorLake due
> > to HW bug
> > in PSR2 disable.
> > 
> > This patch is also fixing problems with cursor plane where cursor
> > is
> > disappearing or duplicate cursor is seen on the screen.
> > 
> 
> Any Bspec link that documents this tried to look through the patch
> series this was plucked of from
> Didn’t find any there either.

I can add following:

Bspec: 68927, 68934, 66624

BR,

Jouni Högander

> 
> Regards,
> Suraj Kandpal
> 
> > v2: Commit message updated
> > 
> > Reported-by: Janna Martl <janna.martl109 at gmail.com>
> > Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/5522
> > Fixes: 411ad63877bb ("drm/i915/psr: Use SFF_CTL on invalidate/flush
> > for
> > LunarLake onwards")
> > Tested-by: Janna Martl <janna.martl109 at gmail.com>
> > Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_psr.c | 14 +++++++++-----
> >  1 file changed, 9 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> > b/drivers/gpu/drm/i915/display/intel_psr.c
> > index 6bd3454bb00e..4279c28ae27c 100644
> > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > @@ -3254,7 +3254,9 @@ static void
> > intel_psr_configure_full_frame_update(struct intel_dp *intel_dp)
> > 
> >  static void _psr_invalidate_handle(struct intel_dp *intel_dp)  {
> > -	if (intel_dp->psr.psr2_sel_fetch_enabled) {
> > +	struct intel_display *display =
> > to_intel_display(intel_dp);
> > +
> > +	if (DISPLAY_VER(display) < 20 && intel_dp-
> > > psr.psr2_sel_fetch_enabled)
> > +{
> >  		if (!intel_dp->psr.psr2_sel_fetch_cff_enabled) {
> >  			intel_dp->psr.psr2_sel_fetch_cff_enabled =
> > true;
> >  			intel_psr_configure_full_frame_update(inte
> > l_dp);
> > @@ -3340,7 +3342,7 @@ static void _psr_flush_handle(struct intel_dp
> > *intel_dp)  {
> >  	struct intel_display *display =
> > to_intel_display(intel_dp);
> > 
> > -	if (intel_dp->psr.psr2_sel_fetch_enabled) {
> > +	if (DISPLAY_VER(display) < 20 && intel_dp-
> > > psr.psr2_sel_fetch_enabled)
> > +{
> >  		if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
> >  			/* can we turn CFF off? */
> >  			if (intel_dp->psr.busy_frontbuffer_bits ==
> > 0) @@ -
> > 3357,11 +3359,13 @@ static void _psr_flush_handle(struct intel_dp
> > *intel_dp)
> >  		 * existing SU configuration
> >  		 */
> >  		intel_psr_configure_full_frame_update(intel_dp);
> > -	}
> > 
> > -	intel_psr_force_update(intel_dp);
> > +		intel_psr_force_update(intel_dp);
> > +	} else {
> > +		intel_psr_exit(intel_dp);
> > +	}
> > 
> > -	if (!intel_dp->psr.psr2_sel_fetch_enabled && !intel_dp-
> > >psr.active &&
> > +	if ((!intel_dp->psr.psr2_sel_fetch_enabled ||
> > DISPLAY_VER(display) >=
> > +20) &&
> >  	    !intel_dp->psr.busy_frontbuffer_bits)
> >  		queue_work(display->wq.unordered, &intel_dp-
> > >psr.work);  }
> > --
> > 2.43.0
> 



More information about the Intel-xe mailing list