drm/i915/ehl: Ungate DDIC and DDID
authorJosé Roberto de Souza <jose.souza@intel.com>
Tue, 30 Jul 2019 17:51:21 +0000 (10:51 -0700)
committerJosé Roberto de Souza <jose.souza@intel.com>
Wed, 31 Jul 2019 17:52:18 +0000 (10:52 -0700)
Specification states that DDI_CLK_SEL needs to be mapped to MG clock
even if MG do not exist on EHL, this will ungate those DDIs.

BSpec: 20845
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Tested-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190730175121.16413-1-jose.souza@intel.com
drivers/gpu/drm/i915/display/intel_ddi.c

index c6f38c7b397df40067dbbefd9ff94af9d0c9a9cf..fb58845020dc888f6f2fe6ee8992e050a580ae2c 100644 (file)
@@ -2921,6 +2921,12 @@ static void intel_ddi_clk_select(struct intel_encoder *encoder,
                if (!intel_phy_is_combo(dev_priv, phy))
                        I915_WRITE(DDI_CLK_SEL(port),
                                   icl_pll_to_ddi_clk_sel(encoder, crtc_state));
+               else if (IS_ELKHARTLAKE(dev_priv) && port >= PORT_C)
+                       /*
+                        * MG does not exist but the programming is required
+                        * to ungate DDIC and DDID
+                        */
+                       I915_WRITE(DDI_CLK_SEL(port), DDI_CLK_SEL_MG);
        } else if (IS_CANNONLAKE(dev_priv)) {
                /* Configure DPCLKA_CFGCR0 to map the DPLL to the DDI. */
                val = I915_READ(DPCLKA_CFGCR0);
@@ -2961,7 +2967,8 @@ static void intel_ddi_clk_disable(struct intel_encoder *encoder)
        enum phy phy = intel_port_to_phy(dev_priv, port);
 
        if (INTEL_GEN(dev_priv) >= 11) {
-               if (!intel_phy_is_combo(dev_priv, phy))
+               if (!intel_phy_is_combo(dev_priv, phy) ||
+                   (IS_ELKHARTLAKE(dev_priv) && port >= PORT_C))
                        I915_WRITE(DDI_CLK_SEL(port), DDI_CLK_SEL_NONE);
        } else if (IS_CANNONLAKE(dev_priv)) {
                I915_WRITE(DPCLKA_CFGCR0, I915_READ(DPCLKA_CFGCR0) |