On Wed, Jul 10, 2019 at 09:40:05PM +0300, Ville Syrjälä wrote:
On Mon, Jul 08, 2019 at 04:16:21PM -0700, Lucas De Marchi wrote:
From: Mahesh Kumar <mahesh1.ku...@intel.com>

Bit definitions for port-select got changed for TRANS_CLK_SEL &
TRANS_DDI_FUNC_CTL registers in TGL.

Signed-off-by: Mahesh Kumar <mahesh1.ku...@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demar...@intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 48 +++++++++++++++++++-----
 drivers/gpu/drm/i915/i915_reg.h          |  5 +++
 2 files changed, 43 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c 
b/drivers/gpu/drm/i915/display/intel_ddi.c
index e72cf0bb48a7..5125c31af6aa 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -1771,7 +1771,10 @@ void intel_ddi_enable_transcoder_func(const struct 
intel_crtc_state *crtc_state)

        /* Enable TRANS_DDI_FUNC_CTL for the pipe to work in HDMI mode */
        temp = TRANS_DDI_FUNC_ENABLE;
-       temp |= TRANS_DDI_SELECT_PORT(port);
+       if (INTEL_GEN(dev_priv) >= 12)
+               temp |= TGL_TRANS_DDI_SELECT_PORT(port);
+       else
+               temp |= TRANS_DDI_SELECT_PORT(port);

        switch (crtc_state->pipe_bpp) {
        case 18:
@@ -1851,8 +1854,14 @@ void intel_ddi_disable_transcoder_func(const struct 
intel_crtc_state *crtc_state
        i915_reg_t reg = TRANS_DDI_FUNC_CTL(cpu_transcoder);
        u32 val = I915_READ(reg);

-       val &= ~(TRANS_DDI_FUNC_ENABLE | TRANS_DDI_PORT_MASK | 
TRANS_DDI_DP_VC_PAYLOAD_ALLOC);
-       val |= TRANS_DDI_PORT_NONE;
+       if (INTEL_GEN(dev_priv) >= 12) {
+               val &= ~(TRANS_DDI_FUNC_ENABLE | TGL_TRANS_DDI_PORT_MASK |
+                        TRANS_DDI_DP_VC_PAYLOAD_ALLOC);
+       } else {
+               val &= ~(TRANS_DDI_FUNC_ENABLE | TRANS_DDI_PORT_MASK |
+                        TRANS_DDI_DP_VC_PAYLOAD_ALLOC);
+               val |= TRANS_DDI_PORT_NONE;

A bit incosistent leaving the NONE thing here. Maybe just nuke that
entirely?

I can, but the diff is actually

-TRANS_DDI_PORT_MASK
+TGL_TRANS_DDI_PORT_MASK

Lucas De Marchi


Patch is
Reviewed-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

+       }
        I915_WRITE(reg, val);

        if (dev_priv->quirks & QUIRK_INCREASE_DDI_DISABLED_TIME &&
@@ -2004,10 +2013,19 @@ static void intel_ddi_get_encoder_pipes(struct 
intel_encoder *encoder,
        mst_pipe_mask = 0;
        for_each_pipe(dev_priv, p) {
                enum transcoder cpu_transcoder = (enum transcoder)p;
+               unsigned int port_mask, ddi_select;
+
+               if (INTEL_GEN(dev_priv) >= 12) {
+                       port_mask = TGL_TRANS_DDI_PORT_MASK;
+                       ddi_select = TGL_TRANS_DDI_SELECT_PORT(port);
+               } else {
+                       port_mask = TRANS_DDI_PORT_MASK;
+                       ddi_select = TRANS_DDI_SELECT_PORT(port);
+               }

                tmp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));

-               if ((tmp & TRANS_DDI_PORT_MASK) != TRANS_DDI_SELECT_PORT(port))
+               if ((tmp & port_mask) != ddi_select)
                        continue;

                if ((tmp & TRANS_DDI_MODE_SELECT_MASK) ==
@@ -2123,9 +2141,14 @@ void intel_ddi_enable_pipe_clock(const struct 
intel_crtc_state *crtc_state)
        enum port port = encoder->port;
        enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;

-       if (cpu_transcoder != TRANSCODER_EDP)
-               I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
-                          TRANS_CLK_SEL_PORT(port));
+       if (cpu_transcoder != TRANSCODER_EDP) {
+               if (INTEL_GEN(dev_priv) >= 12)
+                       I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
+                                  TGL_TRANS_CLK_SEL_PORT(port));
+               else
+                       I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
+                                  TRANS_CLK_SEL_PORT(port));
+       }
 }

 void intel_ddi_disable_pipe_clock(const struct intel_crtc_state *crtc_state)
@@ -2133,9 +2156,14 @@ void intel_ddi_disable_pipe_clock(const struct 
intel_crtc_state *crtc_state)
        struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
        enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;

-       if (cpu_transcoder != TRANSCODER_EDP)
-               I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
-                          TRANS_CLK_SEL_DISABLED);
+       if (cpu_transcoder != TRANSCODER_EDP) {
+               if (INTEL_GEN(dev_priv) >= 12)
+                       I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
+                                  TGL_TRANS_CLK_SEL_DISABLED);
+               else
+                       I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
+                                  TRANS_CLK_SEL_DISABLED);
+       }
 }

 static void _skl_ddi_set_iboost(struct drm_i915_private *dev_priv,
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index c554df69f289..ccfb95e2aa03 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -9379,8 +9379,10 @@ enum skl_power_gate {
 #define  TRANS_DDI_FUNC_ENABLE         (1 << 31)
 /* Those bits are ignored by pipe EDP since it can only connect to DDI A */
 #define  TRANS_DDI_PORT_MASK           (7 << 28)
+#define  TGL_TRANS_DDI_PORT_MASK       (0xf << 27)
 #define  TRANS_DDI_PORT_SHIFT          28
 #define  TRANS_DDI_SELECT_PORT(x)      ((x) << 28)
+#define  TGL_TRANS_DDI_SELECT_PORT(x)  (((x) + 1) << 27)
 #define  TRANS_DDI_PORT_NONE           (0 << 28)
 #define  TRANS_DDI_MODE_SELECT_MASK    (7 << 24)
 #define  TRANS_DDI_MODE_SELECT_HDMI    (0 << 24)
@@ -9591,6 +9593,9 @@ enum skl_power_gate {
 /* For each transcoder, we need to select the corresponding port clock */
 #define  TRANS_CLK_SEL_DISABLED                (0x0 << 29)
 #define  TRANS_CLK_SEL_PORT(x)         (((x) + 1) << 29)
+#define  TGL_TRANS_CLK_SEL_DISABLED    (0x0 << 28)
+#define  TGL_TRANS_CLK_SEL_PORT(x)     (((x) + 1) << 28)
+

 #define CDCLK_FREQ                     _MMIO(0x46200)

--
2.21.0

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

Reply via email to