On Wed, Mar 11, 2026 at 05:06:10PM +0530, Ankit Nautiyal wrote:
> Currently we are setting AS SDP version to 2 without checking if the sink
> supports it or whether we need to send version 1.
> 
> For PR with Link ON, the AS SDP version V1 is used.
> When using AS SDP Version 1, AS SDP payload and parity bytes
> are all set to zeroes.
> 
> Add a helper to compute the AS SDP version based on sink support and
> feature requirement.
> 
> If AS SDP V2 is supported we use V2, unless Panel Replay with Link On is
> enabled, for which we use V1.
> If AS SDP V1 is not supported, we always send V1, without the payload.
> 
> Bspec: 75639
> Signed-off-by: Ankit Nautiyal <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 4d0a7695be5a..6b45894e40e0 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5109,6 +5109,10 @@ static ssize_t intel_dp_as_sdp_pack(const struct 
> drm_dp_as_sdp *as_sdp,
>       sdp->sdp_header.HB2 = as_sdp->revision;
>       sdp->sdp_header.HB3 = as_sdp->length;
>  
> +     /* No Payload Data bytes for Version 1 */
> +     if (as_sdp->revision == 0x1)
> +             return length;
> +
>       /* Fill AS (Adaptive Sync) SDP Payload */
>       sdp->db[0] = as_sdp->mode;
>       sdp->db[1] = as_sdp->vtotal & 0xFF;
> @@ -7330,6 +7334,19 @@ void intel_dp_mst_resume(struct intel_display *display)
>       }
>  }
>  
> +static bool intel_dp_get_as_sdp_revision(struct intel_dp *intel_dp,
> +                                      struct intel_crtc_state *crtc_state)
> +{
> +     if (crtc_state->has_panel_replay &&
> +         !intel_alpm_is_alpm_aux_less(intel_dp, crtc_state))
> +             return 1;

The bogus v1 in PR link ON requirement got nuked from bspec.

> +
> +     if (intel_dp->as_sdp_v2_supported)
> +             return 2;
> +
> +     return 1;
> +}
> +
>  static
>  void intel_dp_as_sdp_compute_config_late(struct intel_dp *intel_dp,
>                                        struct intel_crtc_state *crtc_state)
> @@ -7345,7 +7362,12 @@ void intel_dp_as_sdp_compute_config_late(struct 
> intel_dp *intel_dp,
>       as_sdp->sdp_type = DP_SDP_ADAPTIVE_SYNC;
>       as_sdp->length = 0x9;
>       as_sdp->duration_incr_ms = 0;
> -     as_sdp->revision = 0x2;
> +     as_sdp->revision = intel_dp_get_as_sdp_revision(intel_dp, crtc_state);
> +
> +     /* No payload data bytes for Version 1 */
> +     if (as_sdp->revision == 1)
> +             return;
> +
>       as_sdp->vtotal = intel_vrr_vmin_vtotal(crtc_state);
>  
>       if (crtc_state->cmrr.enable) {
> -- 
> 2.45.2

-- 
Ville Syrjälä
Intel

Reply via email to