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

Dibin Moolakadan Subrahmanian <[email protected]>
Newsgroups org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe
Message-ID <[email protected]>
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 = get_pr_alpm_as_sdp_transmission_time(crtc_state);
> +			u32 skip_frames = 0;
> +
> +			/* AS SDP skip frames field only exists on Xe3LPD+ */
> +			if (DISPLAY_VER(display) >= 35)
> +				skip_frames = intel_pr_as_sdp_skip_frames(crtc_state);
>   
>   			if (crtc_state->link_off_after_as_sdp_when_pr_active)
>   				pr_alpm_ctl |= PR_ALPM_CTL_ALLOW_LINK_OFF_BETWEEN_AS_SDP_AND_SU;
> -			if (crtc_state->disable_as_sdp_when_pr_active)
> -				pr_alpm_ctl |= PR_ALPM_CTL_AS_SDP_TRANSMISSION_IN_ACTIVE_DISABLE;
>   
> -			if (intel_display_power_dc3co_allowed(display))
> -				pr_alpm_ctl |= 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 |= PR_ALPM_CTL_AS_SDP_SKIP_FRAMES(skip_frames);
> +				pr_alpm_ctl &= ~PR_ALPM_CTL_AS_SDP_TRANSMISSION_IN_ACTIVE_DISABLE;
>   				pr_alpm_ctl &= ~PR_ALPM_CTL_USE_DC3CO_IDLE_PROTOCOL;
> +			} else {
> +				if (crtc_state->disable_as_sdp_when_pr_active)
> +					pr_alpm_ctl |= PR_ALPM_CTL_AS_SDP_TRANSMISSION_IN_ACTIVE_DISABLE;
>   
> -			/* AS SDP skip frames field only exists on Xe3LPD+ */
> -			if (DISPLAY_VER(display) >= 35)
> -				pr_alpm_ctl |= 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 |= PR_ALPM_CTL_USE_DC3CO_IDLE_PROTOCOL;
Do we also need to clear the AS SDP skip frame bits here?
Otherwise, LGTM.

Regards,
Dibin

> +			}
>   
>   			intel_de_write(display, PR_ALPM_CTL(display, cpu_transcoder),
>   				       pr_alpm_ctl);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.