On Thu, Mar 05, 2026 at 09:31:18AM +0530, Ankit Nautiyal wrote:
> Enable the Common SDP Transmission line for the SDP packets.
> We get the clear picture about the SDPs and guardband only in
> intel_dp_sdp_compute_config_late() therefore we must configure the
> crtc_state members related to Common SDP Transmission line at this
> point.
>
> Currently, the stagger values are set as per the default policy of the
> Hardware. This can be optimized later if we come up with a specific
> driver policy to sequence the SDPs better.
>
> Signed-off-by: Ankit Nautiyal <[email protected]>
> ---
> drivers/gpu/drm/i915/display/intel_ddi.c | 3 ++
> drivers/gpu/drm/i915/display/intel_dp.c | 64 ++++++++++++++++++++++++
> 2 files changed, 67 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index bdbd89600bee..e1e95f18f0ed 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -2726,6 +2726,8 @@ static void mtl_ddi_pre_enable_dp(struct
> intel_atomic_state *state,
> /* 6.o Configure and enable FEC if needed */
> intel_ddi_enable_fec(encoder, crtc_state);
>
> + intel_dp_cmn_sdp_transmission_line_enable(crtc_state);
> +
> /* 7.a 128b/132b SST. */
> if (!is_mst && intel_dp_is_uhbr(crtc_state)) {
> /* VCPID 1, start slot 0 for 128b/132b, tu slots */
> @@ -3113,6 +3115,7 @@ static void intel_ddi_buf_disable(struct intel_encoder
> *encoder,
> DP_TP_CTL_ENABLE, 0);
> }
>
> + intel_dp_cmn_sdp_transmission_line_disable(crtc_state);
> intel_ddi_disable_fec(encoder, crtc_state);
>
> if (DISPLAY_VER(display) < 14)
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 59a8fa5e5ba9..87d73d0239bc 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -7189,6 +7189,68 @@ void intel_dp_mst_resume(struct intel_display *display)
> }
> }
>
> +static
> +void intel_dp_cmn_sdp_tl_compute_config_late(struct intel_crtc_state
> *crtc_state)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> + bool as_sdp, gmp_sdp, pps_sdp, vsc_sdp, vsc_ext_sdp;
> +
> + if (!HAS_CMN_SDP_TL(display))
> + return;
> +
> + as_sdp = crtc_state->infoframes.enable &
> + intel_hdmi_infoframe_enable(DP_SDP_ADAPTIVE_SYNC);
> +
> + gmp_sdp = crtc_state->infoframes.enable &
> + intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GAMUT_METADATA);
> +
> + pps_sdp = crtc_state->infoframes.enable &
> + intel_hdmi_infoframe_enable(DP_SDP_PPS);
> +
> + vsc_sdp = crtc_state->infoframes.enable &
> + intel_hdmi_infoframe_enable(DP_SDP_VSC);
> +
> + vsc_ext_sdp = crtc_state->infoframes.enable &
> + (intel_hdmi_infoframe_enable(DP_SDP_VSC_EXT_VESA) |
> + intel_hdmi_infoframe_enable(DP_SDP_VSC_EXT_CEA));
> +
> + if (!gmp_sdp && !pps_sdp && !vsc_sdp && !vsc_ext_sdp)
> + return;
I don't see why we wouldn't just always program this stuff.
> +
> + crtc_state->cmn_sdp_tl.enable = true;
> +
> + /*
> + * When AS SDP is enabled :
> + * - The common SDP Transmission Line matches the EMP SDP Transmission
> Line.
> + *
> + * When AS SDP is disabled:
> + * - Bspec mentions the positions as lines of delayed vblank.
> + * - Guardband = 1st line of delayed vblank
> + * - Common SDP Transmission line is set to 2nd line of delayed vblank.
> + */
> +
> + if (as_sdp)
> + crtc_state->cmn_sdp_tl.transmission_line =
> + intel_dp_emp_as_sdp_tl(crtc_state);
> + else
> + crtc_state->cmn_sdp_tl.transmission_line =
> + crtc_state->vrr.guardband - 1;
> +
> + /*
> + * Currently we are programming the default stagger values, but these
> + * can be optimized if required, based on number of SDPs enabled.
> + *
> + * Default values of the Transmission lines for SDPs other than AS SDP:
> + * VSC : CMN SDP Transmission line
> + * GMP : CMN SDP Transmission line
> + * PPS : CMN SDP Transmission line + 1
> + * VSC_EXT: CMN SDP Transmission line + 2
> + */
> + crtc_state->cmn_sdp_tl.gmp_stagger = GMP_STAGGER_DEFAULT;
> + crtc_state->cmn_sdp_tl.pps_stagger = PPS_STAGGER_DEFAULT;
> + crtc_state->cmn_sdp_tl.vsc_ext_stagger = VSC_EXT_STAGGER_DEFAULT;
> +}
> +
> static
> int intel_dp_sdp_compute_config_late(struct intel_crtc_state *crtc_state)
> {
> @@ -7202,6 +7264,8 @@ int intel_dp_sdp_compute_config_late(struct
> intel_crtc_state *crtc_state)
> return -EINVAL;
> }
>
> + intel_dp_cmn_sdp_tl_compute_config_late(crtc_state);
> +
> return 0;
> }
>
> --
> 2.45.2
--
Ville Syrjälä
Intel