aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_runtime_pm.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2014-10-16 13:52:33 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-11-04 17:22:08 -0500
commit5d93a6e5a9d225d9c38a63d2e0164ddc4228b354 (patch)
treea4d898e81f8aaf9e6244b617b73f3e2643ed496d /drivers/gpu/drm/i915/intel_runtime_pm.c
parent77cde95217484e845743818691df026cec2534f4 (diff)
drm/i915: Do vlv cmnlane toggle w/a in more cases
In case the cmnlane power well is down but cmnreset isn't asserted we would currently skip the off+on toggle for the power well. That could leave cmnreset deasserted while cmnlane is powered down which might lead to problems with the PHY. To avoid such issues skip the cmnlane toggle only if both cmnlane and disp2d wells are up and cmnreset is already deasserted. In all other cases power down the cmnlane well which will also make sure cmnreset gets asserted correctly while cmnlane is powered down. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_runtime_pm.c')
-rw-r--r--drivers/gpu/drm/i915/intel_runtime_pm.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 39c33e0a753c..59ca54fc2487 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -1137,12 +1137,9 @@ static void vlv_cmnlane_wa(struct drm_i915_private *dev_priv)
1137 struct i915_power_well *disp2d = 1137 struct i915_power_well *disp2d =
1138 lookup_power_well(dev_priv, PUNIT_POWER_WELL_DISP2D); 1138 lookup_power_well(dev_priv, PUNIT_POWER_WELL_DISP2D);
1139 1139
1140 /* nothing to do if common lane is already off */
1141 if (!cmn->ops->is_enabled(dev_priv, cmn))
1142 return;
1143
1144 /* If the display might be already active skip this */ 1140 /* If the display might be already active skip this */
1145 if (disp2d->ops->is_enabled(dev_priv, disp2d) && 1141 if (cmn->ops->is_enabled(dev_priv, cmn) &&
1142 disp2d->ops->is_enabled(dev_priv, disp2d) &&
1146 I915_READ(DPIO_CTL) & DPIO_CMNRST) 1143 I915_READ(DPIO_CTL) & DPIO_CMNRST)
1147 return; 1144 return;
1148 1145