aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_runtime_pm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_runtime_pm.c')
-rw-r--r--drivers/gpu/drm/i915/intel_runtime_pm.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index d051b0d440c4..3cf8533e0834 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -3243,14 +3243,25 @@ static void icl_mbus_init(struct drm_i915_private *dev_priv)
3243static void intel_pch_reset_handshake(struct drm_i915_private *dev_priv, 3243static void intel_pch_reset_handshake(struct drm_i915_private *dev_priv,
3244 bool enable) 3244 bool enable)
3245{ 3245{
3246 u32 val = I915_READ(HSW_NDE_RSTWRN_OPT); 3246 i915_reg_t reg;
3247 u32 reset_bits, val;
3248
3249 if (IS_IVYBRIDGE(dev_priv)) {
3250 reg = GEN7_MSG_CTL;
3251 reset_bits = WAIT_FOR_PCH_FLR_ACK | WAIT_FOR_PCH_RESET_ACK;
3252 } else {
3253 reg = HSW_NDE_RSTWRN_OPT;
3254 reset_bits = RESET_PCH_HANDSHAKE_ENABLE;
3255 }
3256
3257 val = I915_READ(reg);
3247 3258
3248 if (enable) 3259 if (enable)
3249 val |= RESET_PCH_HANDSHAKE_ENABLE; 3260 val |= reset_bits;
3250 else 3261 else
3251 val &= ~RESET_PCH_HANDSHAKE_ENABLE; 3262 val &= ~reset_bits;
3252 3263
3253 I915_WRITE(HSW_NDE_RSTWRN_OPT, val); 3264 I915_WRITE(reg, val);
3254} 3265}
3255 3266
3256static void skl_display_core_init(struct drm_i915_private *dev_priv, 3267static void skl_display_core_init(struct drm_i915_private *dev_priv,
@@ -3262,7 +3273,7 @@ static void skl_display_core_init(struct drm_i915_private *dev_priv,
3262 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE); 3273 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
3263 3274
3264 /* enable PCH reset handshake */ 3275 /* enable PCH reset handshake */
3265 intel_pch_reset_handshake(dev_priv, true); 3276 intel_pch_reset_handshake(dev_priv, !HAS_PCH_NOP(dev_priv));
3266 3277
3267 /* enable PG1 and Misc I/O */ 3278 /* enable PG1 and Misc I/O */
3268 mutex_lock(&power_domains->lock); 3279 mutex_lock(&power_domains->lock);
@@ -3448,7 +3459,7 @@ static void cnl_display_core_init(struct drm_i915_private *dev_priv, bool resume
3448 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE); 3459 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
3449 3460
3450 /* 1. Enable PCH Reset Handshake */ 3461 /* 1. Enable PCH Reset Handshake */
3451 intel_pch_reset_handshake(dev_priv, true); 3462 intel_pch_reset_handshake(dev_priv, !HAS_PCH_NOP(dev_priv));
3452 3463
3453 /* 2. Enable Comp */ 3464 /* 2. Enable Comp */
3454 val = I915_READ(CHICKEN_MISC_2); 3465 val = I915_READ(CHICKEN_MISC_2);
@@ -3531,7 +3542,7 @@ static void icl_display_core_init(struct drm_i915_private *dev_priv,
3531 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE); 3542 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
3532 3543
3533 /* 1. Enable PCH reset handshake. */ 3544 /* 1. Enable PCH reset handshake. */
3534 intel_pch_reset_handshake(dev_priv, true); 3545 intel_pch_reset_handshake(dev_priv, !HAS_PCH_NOP(dev_priv));
3535 3546
3536 for (port = PORT_A; port <= PORT_B; port++) { 3547 for (port = PORT_A; port <= PORT_B; port++) {
3537 /* 2. Enable DDI combo PHY comp. */ 3548 /* 2. Enable DDI combo PHY comp. */
@@ -3763,7 +3774,8 @@ void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume)
3763 mutex_lock(&power_domains->lock); 3774 mutex_lock(&power_domains->lock);
3764 vlv_cmnlane_wa(dev_priv); 3775 vlv_cmnlane_wa(dev_priv);
3765 mutex_unlock(&power_domains->lock); 3776 mutex_unlock(&power_domains->lock);
3766 } 3777 } else if (IS_IVYBRIDGE(dev_priv) || INTEL_GEN(dev_priv) >= 7)
3778 intel_pch_reset_handshake(dev_priv, !HAS_PCH_NOP(dev_priv));
3767 3779
3768 /* 3780 /*
3769 * Keep all power wells enabled for any dependent HW access during 3781 * Keep all power wells enabled for any dependent HW access during