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