On Mon, Jul 08, 2019 at 04:16:21PM -0700, Lucas De Marchi wrote: > From: Mahesh Kumar <mahesh1.kumar@xxxxxxxxx> > > Bit definitions for port-select got changed for TRANS_CLK_SEL & > TRANS_DDI_FUNC_CTL registers in TGL. > > Signed-off-by: Mahesh Kumar <mahesh1.kumar@xxxxxxxxx> > Signed-off-by: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> > --- > 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.syrjala@xxxxxxxxxxxxxxx> > + } > 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@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx