[Intel-gfx] [PATCH] drm/i915/hdmi: Initialize SCDC registers according to spec

Clint Taylor clinton.a.taylor at intel.com
Mon Oct 15 16:30:25 UTC 2018



On 10/15/2018 06:41 AM, Ville Syrjälä wrote:
> On Fri, Oct 12, 2018 at 01:14:45PM -0700, clinton.a.taylor at intel.com wrote:
>> From: Clint Taylor <clinton.a.taylor at intel.com>
>>
>> Initialize SCDC Source Version and TDMS_Config_0 registers to nominal
>> values during intel_hdmi_detect(). The i915 driver currently doesn't
>> implement features that require polling of the status update bits. Once
>> FRL, DSC, or Source Test is enabled in the driver the status flags will
>> need to be read by the source according to specification.
>>
>> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
>> Signed-off-by: Clint Taylor <clinton.a.taylor at intel.com>
>> ---
>>   drivers/gpu/drm/i915/intel_hdmi.c | 12 ++++++++++++
>>   1 file changed, 12 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
>> index 2c53efc..ab3eac5 100644
>> --- a/drivers/gpu/drm/i915/intel_hdmi.c
>> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
>> @@ -1910,6 +1910,8 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
>>   	struct drm_i915_private *dev_priv = to_i915(connector->dev);
>>   	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
>>   	struct intel_encoder *encoder = &hdmi_to_dig_port(intel_hdmi)->base;
>> +	struct i2c_adapter *adapter =
>> +		intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
>>   
>>   	DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
>>   		      connector->base.id, connector->name);
>> @@ -1925,6 +1927,16 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
>>   	if (intel_hdmi_set_edid(connector))
>>   		status = connector_status_connected;
>>   
>> +	if (connector->display_info.hdmi.scdc.supported) {
>> +		/* SCDC source version HDMI 2.1 Sec. 10.4.1.2 */
>> +		if (drm_scdc_writeb(adapter, SCDC_SOURCE_VERSION, 0x01) < 0)
>> +			DRM_DEBUG_KMS("Unable to set SCDC Source Version register\n");
>> +
>> +		/* Clear SCDC CONFIG_0 HDMI 2.1 Sec. 10.4.1.6 - RR_Enable Polling Only */
>> +		if (drm_scdc_writeb(adapter, SCDC_CONFIG_0, 0x00) < 0)
>> +			DRM_DEBUG_KMS("Unable to set SCDC CONFIG_0 register\n");
>> +	}
> I'd probably put this into intel_hdmi_set_edid() so that we'll do it for
> the ->force() path as well. Or maybe a separate function called from
> both places.
intel_hdmi_set_edid() doesn't actually decode the edid block that it 
reads. This means
display_info.hdmi.scdc.supported isn't from the new EDID block. I have a 
patch in my sandbox to send the new EDID block to DRM to be decoded.

-Clint

>> +
>>   out:
>>   	intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
>>   
>> -- 
>> 1.9.1



More information about the Intel-gfx mailing list