Per DP 1.4a section 2.2.4.3, the MSA MISC1 VSC_SDP bit signals that the sink should defer colorimetry to the VSC SDP. It should only be set when the sink advertises DP_VSC_SDP_EXT_FOR_COLORIMETRY_SUPPORTED and a VSC SDP with pixel encoding/colorimetry payload will actually be sent.
Fold the colorimetry_support check into intel_dp_needs_vsc_colorimetry() so both intel_ddi_set_dp_msa() and intel_dp_compute_vsc_sdp() share a single consistent gate. Assisted-by: GitHub_Copilot:claude-sonnet-4.6 Signed-off-by: Chaitanya Kumar Borah <[email protected]> --- drivers/gpu/drm/i915/display/intel_ddi.c | 2 ++ drivers/gpu/drm/i915/display/intel_dp.c | 14 ++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index c764472bd69a..13010375e21b 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -469,6 +469,8 @@ void intel_ddi_set_dp_msa(const struct intel_crtc_state *crtc_state, * of Color Encoding Format and Content Color Gamut] while sending * YCBCR 420, HDR BT.2020 signals we should program MSA MISC1 fields * which indicate VSC SDP for the Pixel Encoding/Colorimetry Format. + * Only set the delegation bit when the content needs it and + * the sink advertises support. */ if (intel_dp_needs_vsc_colorimetry(crtc_state, conn_state)) temp |= DP_MSA_MISC_COLOR_VSC_SDP; diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 93282694c29b..53688c5bef74 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -3163,8 +3163,7 @@ static void intel_dp_compute_vsc_sdp(struct intel_dp *intel_dp, { struct drm_dp_vsc_sdp *vsc; - if ((!intel_dp->colorimetry_support || - !intel_dp_needs_vsc_colorimetry(crtc_state, conn_state)) && + if (!intel_dp_needs_vsc_colorimetry(crtc_state, conn_state) && !crtc_state->has_psr) return; @@ -3173,7 +3172,6 @@ static void intel_dp_compute_vsc_sdp(struct intel_dp *intel_dp, crtc_state->infoframes.enable |= intel_hdmi_infoframe_enable(DP_SDP_VSC); vsc->sdp_type = DP_SDP_VSC; - /* Needs colorimetry */ if (intel_dp_needs_vsc_colorimetry(crtc_state, conn_state)) { intel_dp_compute_vsc_colorimetry(crtc_state, conn_state, vsc); @@ -5103,11 +5101,19 @@ bool intel_dp_needs_vsc_colorimetry(const struct intel_crtc_state *crtc_state, const struct drm_connector_state *conn_state) { + struct intel_dp *intel_dp = + enc_to_intel_dp(to_intel_encoder(conn_state->best_encoder)); + /* * As per DP 1.4a spec section 2.2.4.3 [MSA Field for Indication * of Color Encoding Format and Content Color Gamut], in order to - * sending YCBCR 420 or HDR BT.2020 signals we should use DP VSC SDP. + * send YCBCR 420 or HDR BT.2020 signals we should use DP VSC SDP. + * Only signal this when the sink advertises VSC SDP colorimetry + * support. */ + if (!intel_dp->colorimetry_support) + return false; + if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) return true; -- 2.25.1
