Re: [PATCH 2/2] drm/i915/dp: set VSC_SDP MSA delegation only for capable sinks

"Borah, Chaitanya Kumar" <[email protected]> Tue, 28 Jul 2026 15:42:51 +0530
Newsgroups org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe
Message-ID <[email protected]>
Hi Jani,

On 7/28/2026 3:11 PM, Jani Nikula wrote:
> On Thu, 09 Jul 2026, Chaitanya Kumar Borah <[email protected]> wrote:
>> 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
> 
> Who would teach Claude to add proper Fixes: and Cc: stable tags so
> important fixes actually propagate to users in a timely fashion?
> 

I would have to take the fall for this one instead of Claude. I 
intentionally did not cc: stable here because this is a pre-emptive 
defensive change - only necessary if the user space is acting dumb which 
has not been the case in the wild (only a internal ticket). Therefore, 
there was no Fixes: tag either.

==
Chaitanya


> BR,
> Jani.
> 
>> 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;
>