diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index ec7ebb889c27..b8985e1e0a81 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 429fdfa6f153..83748305b4a7 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -3122,8 +3122,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; @@ -3132,7 +3131,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); @@ -5069,11 +5067,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;