On Thu, Apr 24, 2014 at 11:55:37PM +0200, Daniel Vetter wrote: > Still tacked onto the side, but slowly getting there. > > v2: Don't forget the debugfs file. > > Signed-off-by: Daniel Vetter <daniel.vet...@ffwll.ch>
Reviewed-by: Damien Lespiau <damien.lesp...@intel.com> > --- > drivers/gpu/drm/i915/i915_debugfs.c | 1 + > drivers/gpu/drm/i915/i915_drv.h | 1 + > drivers/gpu/drm/i915/i915_reg.h | 1 + > drivers/gpu/drm/i915/intel_ddi.c | 16 ++++++++++++++++ > drivers/gpu/drm/i915/intel_display.c | 9 +++++++++ > 5 files changed, 28 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c > b/drivers/gpu/drm/i915/i915_debugfs.c > index c99951fdc572..a579685348aa 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -2389,6 +2389,7 @@ static int i915_shared_dplls_info(struct seq_file *m, > void *unused) > seq_printf(m, " dpll_md: 0x%08x\n", pll->hw_state.dpll_md); > seq_printf(m, " fp0: 0x%08x\n", pll->hw_state.fp0); > seq_printf(m, " fp1: 0x%08x\n", pll->hw_state.fp1); > + seq_printf(m, " wrpll: 0x%08x\n", pll->hw_state.wrpll); > } > drm_modeset_unlock_all(dev); > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index b01ee265310f..bebc507f776b 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -188,6 +188,7 @@ struct intel_dpll_hw_state { > uint32_t dpll_md; > uint32_t fp0; > uint32_t fp1; > + uint32_t wrpll; > }; > > struct intel_shared_dpll { > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h > index 4c1cefb5f3eb..99051e6348b8 100644 > --- a/drivers/gpu/drm/i915/i915_reg.h > +++ b/drivers/gpu/drm/i915/i915_reg.h > @@ -5505,6 +5505,7 @@ enum punit_power_well { > /* WRPLL */ > #define WRPLL_CTL1 0x46040 > #define WRPLL_CTL2 0x46060 > +#define WRPLL_CTL(pll) (pll == 0 ? WRPLL_CTL1 : > WRPLL_CTL2) > #define WRPLL_PLL_ENABLE (1<<31) > #define WRPLL_PLL_SSC (1<<28) > #define WRPLL_PLL_NON_SSC (2<<28) > diff --git a/drivers/gpu/drm/i915/intel_ddi.c > b/drivers/gpu/drm/i915/intel_ddi.c > index 8316e0e624a4..73875ee4bb68 100644 > --- a/drivers/gpu/drm/i915/intel_ddi.c > +++ b/drivers/gpu/drm/i915/intel_ddi.c > @@ -659,6 +659,8 @@ bool intel_ddi_pll_select(struct intel_crtc *intel_crtc) > intel_crtc->config.ddi_pll_sel = PORT_CLK_SEL_WRPLL2; > intel_crtc->config.shared_dpll = DPLL_ID_WRPLL2; > } > + > + intel_crtc->config.dpll_hw_state.wrpll = val; > } > > return true; > @@ -1185,6 +1187,18 @@ int intel_ddi_get_cdclk_freq(struct drm_i915_private > *dev_priv) > } > } > > +static bool hsw_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv, > + struct intel_shared_dpll *pll, > + struct intel_dpll_hw_state *hw_state) > +{ > + uint32_t val; > + > + val = I915_READ(WRPLL_CTL(pll->id)); > + hw_state->wrpll = val; > + > + return val & WRPLL_PLL_ENABLE; > +} > + > static char *hsw_ddi_pll_names[] = { > "WRPLL 1", > "WRPLL 2", > @@ -1203,6 +1217,8 @@ void intel_ddi_pll_init(struct drm_device *dev) > for (i = 0; i < 2; i++) { > dev_priv->shared_dplls[i].id = i; > dev_priv->shared_dplls[i].name = hsw_ddi_pll_names[i]; > + dev_priv->shared_dplls[i].get_hw_state = > + hsw_ddi_pll_get_hw_state; > } > > /* The LCPLL register should be turned on by the BIOS. For now let's > diff --git a/drivers/gpu/drm/i915/intel_display.c > b/drivers/gpu/drm/i915/intel_display.c > index fc7cd89b8921..b5086fd83596 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -7011,6 +7011,7 @@ static void haswell_get_ddi_port_state(struct > intel_crtc *crtc, > { > struct drm_device *dev = crtc->base.dev; > struct drm_i915_private *dev_priv = dev->dev_private; > + struct intel_shared_dpll *pll; > enum port port; > uint32_t tmp; > > @@ -7029,6 +7030,13 @@ static void haswell_get_ddi_port_state(struct > intel_crtc *crtc, > break; > } > > + if (pipe_config->shared_dpll >= 0) { > + pll = &dev_priv->shared_dplls[pipe_config->shared_dpll]; > + > + WARN_ON(!pll->get_hw_state(dev_priv, pll, > + &pipe_config->dpll_hw_state)); > + } > + > /* > * Haswell has only FDI/PCH transcoder A. It is which is connected to > * DDI E. So just check whether this pipe is wired to DDI E and whether > @@ -9552,6 +9560,7 @@ intel_pipe_config_compare(struct drm_device *dev, > PIPE_CONF_CHECK_X(dpll_hw_state.dpll_md); > PIPE_CONF_CHECK_X(dpll_hw_state.fp0); > PIPE_CONF_CHECK_X(dpll_hw_state.fp1); > + PIPE_CONF_CHECK_X(dpll_hw_state.wrpll); > > if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) > PIPE_CONF_CHECK_I(pipe_bpp); > -- > 1.8.1.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx