| From e966974d3ccc47ddd2b6f2bc372c50bb79b0ccec Mon Sep 17 00:00:00 2001 |
| From: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Date: Wed, 5 Jun 2013 13:34:32 +0200 |
| Subject: drm/i915: Fix up cpt pixel multiplier enable sequence |
| |
| Bspec for the "DPLL HDMI multiplier" field says: |
| |
| "Restriction : The DPLL must be enabled and stable before setting these bits. |
| These bits must be programmed after DPLL_SEL is programmed." |
| |
| There is apparently no restriction on programming the DPLL_SEL |
| register wrt the DPLL. So let's just move that up before we enable the |
| pch dpll. |
| |
| Reviewed-by: Imre Deak <imre.deak@intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 3ad8a208abbe1bdfe31512053a81ac4938aed447) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_display.c | 20 +++++++++++--------- |
| 1 file changed, 11 insertions(+), 9 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
| index ddf3d3292eb6..0448b4899ea4 100644 |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -3004,15 +3004,8 @@ static void ironlake_pch_enable(struct drm_crtc *crtc) |
| /* For PCH output, training FDI link */ |
| dev_priv->display.fdi_link_train(crtc); |
| |
| - /* XXX: pch pll's can be enabled any time before we enable the PCH |
| - * transcoder, and we actually should do this to not upset any PCH |
| - * transcoder that already use the clock when we share it. |
| - * |
| - * Note that enable_shared_dpll tries to do the right thing, but |
| - * get_shared_dpll unconditionally resets the pll - we need that to have |
| - * the right LVDS enable sequence. */ |
| - ironlake_enable_shared_dpll(intel_crtc); |
| - |
| + /* We need to program the right clock selection before writing the pixel |
| + * mutliplier into the DPLL. */ |
| if (HAS_PCH_CPT(dev)) { |
| u32 sel; |
| |
| @@ -3026,6 +3019,15 @@ static void ironlake_pch_enable(struct drm_crtc *crtc) |
| I915_WRITE(PCH_DPLL_SEL, temp); |
| } |
| |
| + /* XXX: pch pll's can be enabled any time before we enable the PCH |
| + * transcoder, and we actually should do this to not upset any PCH |
| + * transcoder that already use the clock when we share it. |
| + * |
| + * Note that enable_shared_dpll tries to do the right thing, but |
| + * get_shared_dpll unconditionally resets the pll - we need that to have |
| + * the right LVDS enable sequence. */ |
| + ironlake_enable_shared_dpll(intel_crtc); |
| + |
| /* set transcoder timing, panel must allow it */ |
| assert_panel_unlocked(dev_priv, pipe); |
| ironlake_pch_transcoder_set_timings(intel_crtc, pipe); |
| -- |
| 1.8.5.rc3 |
| |