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?

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