aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2013-06-05 07:34:33 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-07-12 12:54:02 -0400
commit50b44a449ff1a19712ebc36ffccf9ac0a68033bf (patch)
treef8a6e26f0f824b7212838bdfa31d5e31b1565459 /drivers/gpu/drm/i915
parent3ad8a208abbe1bdfe31512053a81ac4938aed447 (diff)
drm/i915: clear DPLL reg when disabling i9xx dplls
Toghether with the hw state readout this should catch cases where we don't properly updated the pll state (either in sw or hw). At least for the shared dpll code the equivalent tricke helped a lot in catching bugs. Also rename the function prefix, it's not a generic piece of infrastructure. Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3d1c97abee28..ae3dc5d1ff52 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1406,7 +1406,7 @@ static void i9xx_enable_pll(struct intel_crtc *crtc)
1406} 1406}
1407 1407
1408/** 1408/**
1409 * intel_disable_pll - disable a PLL 1409 * i9xx_disable_pll - disable a PLL
1410 * @dev_priv: i915 private structure 1410 * @dev_priv: i915 private structure
1411 * @pipe: pipe PLL to disable 1411 * @pipe: pipe PLL to disable
1412 * 1412 *
@@ -1414,11 +1414,8 @@ static void i9xx_enable_pll(struct intel_crtc *crtc)
1414 * 1414 *
1415 * Note! This is for pre-ILK only. 1415 * Note! This is for pre-ILK only.
1416 */ 1416 */
1417static void intel_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe) 1417static void i9xx_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
1418{ 1418{
1419 int reg;
1420 u32 val;
1421
1422 /* Don't disable pipe A or pipe A PLLs if needed */ 1419 /* Don't disable pipe A or pipe A PLLs if needed */
1423 if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE)) 1420 if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE))
1424 return; 1421 return;
@@ -1426,11 +1423,8 @@ static void intel_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
1426 /* Make sure the pipe isn't still relying on us */ 1423 /* Make sure the pipe isn't still relying on us */
1427 assert_pipe_disabled(dev_priv, pipe); 1424 assert_pipe_disabled(dev_priv, pipe);
1428 1425
1429 reg = DPLL(pipe); 1426 I915_WRITE(DPLL(pipe), 0);
1430 val = I915_READ(reg); 1427 POSTING_READ(DPLL(pipe));
1431 val &= ~DPLL_VCO_ENABLE;
1432 I915_WRITE(reg, val);
1433 POSTING_READ(reg);
1434} 1428}
1435 1429
1436void vlv_wait_port_ready(struct drm_i915_private *dev_priv, int port) 1430void vlv_wait_port_ready(struct drm_i915_private *dev_priv, int port)
@@ -3782,7 +3776,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
3782 if (encoder->post_disable) 3776 if (encoder->post_disable)
3783 encoder->post_disable(encoder); 3777 encoder->post_disable(encoder);
3784 3778
3785 intel_disable_pll(dev_priv, pipe); 3779 i9xx_disable_pll(dev_priv, pipe);
3786 3780
3787 intel_crtc->active = false; 3781 intel_crtc->active = false;
3788 intel_update_fbc(dev); 3782 intel_update_fbc(dev);