On 10/15/2018 06:41 AM, Ville Syrjälä wrote:
On Fri, Oct 12, 2018 at 01:14:45PM -0700, clinton.a.tay...@intel.com wrote:
From: Clint Taylor <clinton.a.tay...@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.syrj...@linux.intel.com>
Signed-off-by: Clint Taylor <clinton.a.tay...@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

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to