RE: [PATCH 2/2] drm/i915/display: Keep AS SDP flowing when skip frames is enabled

"Shankar, Uma" <[email protected]> Tue, 4 Aug 2026 07:50:21 +0000
Newsgroups org.freedesktop.lists.intel-xe,org.freedesktop.lists.intel-gfx
Message-ID <DM4PR11MB6360D72489B3C836FFE68E68F4D42@DM4PR11MB6360.namprd11.prod.outlook.com>

> -----Original Message-----
> From: Dibin Moolakadan Subrahmanian
> <[email protected]>
> Sent: Tuesday, August 4, 2026 12:52 PM
> To: Shankar, Uma <[email protected]>; [email protected]=
;
> [email protected]
> Cc: Manna, Animesh <[email protected]>
> Subject: Re: [PATCH 2/2] drm/i915/display: Keep AS SDP flowing when skip
> frames is enabled
>=20
> On 8/4/2026 12:23 AM, Uma Shankar wrote:
> > The AS SDP skip-frame mechanism relies on the AS SDP still being
> > transmitted (just less often) while Panel Replay is active, so the
> > source must not stop sending it in the PR active state, nor enter the
> > DC3CO idle protocol which would suppress it entirely.
> >
> > When a non-zero skip-frame count is programmed, leave both
> > PR_ALPM_CTL_AS_SDP_TRANSMISSION_IN_ACTIVE_DISABLE and
> > PR_ALPM_CTL_USE_DC3CO_IDLE_PROTOCOL cleared. The previous
> behaviour
> > (honouring disable_as_sdp_when_pr_active and the DC3CO idle protocol)
> > is retained for the non skip-frame case.
> >
> > Assisted-by: Claude:claude-opus-4-8
> > Signed-off-by: Naladala Ramanaidu <[email protected]>
> > Signed-off-by: Uma Shankar <[email protected]>
> > ---
> >   drivers/gpu/drm/i915/display/intel_alpm.c | 28 +++++++++++++++-------=
-
> >   1 file changed, 19 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_alpm.c
> > b/drivers/gpu/drm/i915/display/intel_alpm.c
> > index 0f98f02a1848..7e2292f93e1e 100644
> > --- a/drivers/gpu/drm/i915/display/intel_alpm.c
> > +++ b/drivers/gpu/drm/i915/display/intel_alpm.c
> > @@ -439,21 +439,31 @@ static void lnl_alpm_configure(struct intel_dp
> > *intel_dp,
> >
> >   		if (intel_dp->as_sdp_supported) {
> >   			u32 pr_alpm_ctl =3D
> > get_pr_alpm_as_sdp_transmission_time(crtc_state);
> > +			u32 skip_frames =3D 0;
> > +
> > +			/* AS SDP skip frames field only exists on Xe3LPD+ */
> > +			if (DISPLAY_VER(display) >=3D 35)
> > +				skip_frames =3D
> intel_pr_as_sdp_skip_frames(crtc_state);
> >
> >   			if (crtc_state->link_off_after_as_sdp_when_pr_active)
> >   				pr_alpm_ctl |=3D
> PR_ALPM_CTL_ALLOW_LINK_OFF_BETWEEN_AS_SDP_AND_SU;
> > -			if (crtc_state->disable_as_sdp_when_pr_active)
> > -				pr_alpm_ctl |=3D
> PR_ALPM_CTL_AS_SDP_TRANSMISSION_IN_ACTIVE_DISABLE;
> >
> > -			if (intel_display_power_dc3co_allowed(display))
> > -				pr_alpm_ctl |=3D
> PR_ALPM_CTL_USE_DC3CO_IDLE_PROTOCOL;
> > -			else
> > +			/*
> > +			 * Skip frames needs the AS SDP to keep flowing during
> PR
> > +			 * active, so it is mutually exclusive with disabling AS
> SDP
> > +			 * transmission in active and with the DC3CO idle
> protocol.
> > +			 */
> > +			if (skip_frames) {
> > +				pr_alpm_ctl |=3D
> PR_ALPM_CTL_AS_SDP_SKIP_FRAMES(skip_frames);
> > +				pr_alpm_ctl &=3D
> > +~PR_ALPM_CTL_AS_SDP_TRANSMISSION_IN_ACTIVE_DISABLE;
> >   				pr_alpm_ctl &=3D
> ~PR_ALPM_CTL_USE_DC3CO_IDLE_PROTOCOL;
> > +			} else {
> > +				if (crtc_state->disable_as_sdp_when_pr_active)
> > +					pr_alpm_ctl |=3D
> > +PR_ALPM_CTL_AS_SDP_TRANSMISSION_IN_ACTIVE_DISABLE;
> >
> > -			/* AS SDP skip frames field only exists on Xe3LPD+ */
> > -			if (DISPLAY_VER(display) >=3D 35)
> > -				pr_alpm_ctl |=3D
> PR_ALPM_CTL_AS_SDP_SKIP_FRAMES(
> > -					intel_pr_as_sdp_skip_frames(crtc_state));
> > +				if (intel_display_power_dc3co_allowed(display))
> > +					pr_alpm_ctl |=3D
> PR_ALPM_CTL_USE_DC3CO_IDLE_PROTOCOL;
> Do we also need to clear the AS SDP skip frame bits here?

Yeah we should explicitly clear it to 0 here. Will update the same.
Thanks Dibin for the review.

Regards,
Uma Shankar

> Otherwise, LGTM.
>=20
> Regards,
> Dibin
>=20
> > +			}
> >
> >   			intel_de_write(display, PR_ALPM_CTL(display,
> cpu_transcoder),
> >   				       pr_alpm_ctl);