[Intel-gfx] [PATCH v2] drm/i915/hdmi: Go for scrambling only if platform supports TMDS clock > 340MHz

Nautiyal, Ankit K ankit.k.nautiyal at intel.com
Tue Dec 20 11:12:35 UTC 2022


On 12/20/2022 2:31 PM, Jani Nikula wrote:
> On Tue, 20 Dec 2022, Ankit Nautiyal <ankit.k.nautiyal at intel.com> wrote:
>> There are cases, where devices have an HDMI1.4 retimer, and TMDS clock rate
>> is capped to 340MHz via VBT. In such cases scrambling might be supported
>> by the platform and an HDMI2.0 sink for lower TMDS rates, but not
>> supported by the retimer, causing blankouts.
>>
>> So avoid enabling scrambling, if the TMDS clock is capped to <= 340MHz.
>>
>> v2: Added comment, documenting the rationale to check for TMDS clock,
>> before going for scrambling. (Arun)
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
>> Reviewed-by: Arun R Murthy <arun.r.murthy at intel.com>
>> ---
>>   drivers/gpu/drm/i915/display/intel_hdmi.c | 21 ++++++++++++++++++++-
>>   1 file changed, 20 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
>> index efa2da080f62..7603426af9a0 100644
>> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
>> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
>> @@ -2244,6 +2244,25 @@ static bool intel_hdmi_is_cloned(const struct intel_crtc_state *crtc_state)
>>   		!is_power_of_2(crtc_state->uapi.encoder_mask);
>>   }
>>   
>> +static bool source_can_support_scrambling(struct intel_encoder *encoder)
> "source can support scrambling" reads like "if this function returns
> true, source might support scrambing, but also might not, depends on
> something else".
>
> So does this mean "source supports scrambling" or "source can support
> scrambling"? If the latter, as it is now named, what *else* is required
> for source to support scrambling?

Hmm.. the intention is to have a function to check if source supports 
scrambling.

Sink side support is checked by 'scdc->scrambling.supported' so we want 
to have a function that tells us, whether source supports scrambling.

I will modify the function name to : source_supports_scrambling() to 
avoid the confusion.

Thanks & Regards,

Ankit


> BR,
> Jani.
>
>
>
>> +{
>> +	/*
>> +	 * Gen 10+ support HDMI 2.0 : the max tmds clock is 594MHz, and
>> +	 * scrambling is supported.
>> +	 * But there seem to be cases where certain platforms that support
>> +	 * HDMI 2.0, have an HDMI1.4 retimer chip, and the max tmds clock is
>> +	 * capped by VBT to less than 340MHz.
>> +	 *
>> +	 * In such cases when an HDMI2.0 sink is connected, it creates a
>> +	 * problem : the platform and the sink both support scrambling but the
>> +	 * HDMI 1.4 retimer chip doesn't.
>> +	 *
>> +	 * So go for scrambling, based on the max tmds clock taking into account,
>> +	 * restrictions coming from VBT.
>> +	 */
>> +	return intel_hdmi_source_max_tmds_clock(encoder) > 340000;
>> +}
>> +
>>   int intel_hdmi_compute_config(struct intel_encoder *encoder,
>>   			      struct intel_crtc_state *pipe_config,
>>   			      struct drm_connector_state *conn_state)
>> @@ -2301,7 +2320,7 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
>>   
>>   	pipe_config->lane_count = 4;
>>   
>> -	if (scdc->scrambling.supported && DISPLAY_VER(dev_priv) >= 10) {
>> +	if (scdc->scrambling.supported && source_can_support_scrambling(encoder)) {
>>   		if (scdc->scrambling.low_rates)
>>   			pipe_config->hdmi_scrambling = true;


More information about the Intel-gfx mailing list