Commit e59150dc authored by Jesse Barnes's avatar Jesse Barnes Committed by Daniel Vetter

drm/i915/bdw: don't try to check IPS state on BDW v2

According to Art, we don't have a way to read back the state reliably at
runtime, through the control reg or the mailbox, at least not without risking
disabling it again.  So drop the readout and checking on BDW.

v2: drop TODO comment (Paulo)
    move POSTING_READ of control reg under HSW branch in disable (Paulo)
    always report IPS as enabled on BDW (Paulo)

References: https://bugs.freedesktop.org/show_bug.cgi?id=71906Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 576b259e
...@@ -1357,7 +1357,7 @@ static int i915_ips_status(struct seq_file *m, void *unused) ...@@ -1357,7 +1357,7 @@ static int i915_ips_status(struct seq_file *m, void *unused)
return 0; return 0;
} }
if (I915_READ(IPS_CTL) & IPS_ENABLE) if (IS_BROADWELL(dev) || I915_READ(IPS_CTL) & IPS_ENABLE)
seq_puts(m, "enabled\n"); seq_puts(m, "enabled\n");
else else
seq_puts(m, "disabled\n"); seq_puts(m, "disabled\n");
......
...@@ -3433,9 +3433,8 @@ void hsw_enable_ips(struct intel_crtc *crtc) ...@@ -3433,9 +3433,8 @@ void hsw_enable_ips(struct intel_crtc *crtc)
mutex_unlock(&dev_priv->rps.hw_lock); mutex_unlock(&dev_priv->rps.hw_lock);
/* Quoting Art Runyan: "its not safe to expect any particular /* Quoting Art Runyan: "its not safe to expect any particular
* value in IPS_CTL bit 31 after enabling IPS through the * value in IPS_CTL bit 31 after enabling IPS through the
* mailbox." Therefore we need to defer waiting on the state * mailbox." Moreover, the mailbox may return a bogus state,
* change. * so we need to just enable it and continue on.
* TODO: need to fix this for state checker
*/ */
} else { } else {
I915_WRITE(IPS_CTL, IPS_ENABLE); I915_WRITE(IPS_CTL, IPS_ENABLE);
...@@ -3462,9 +3461,10 @@ void hsw_disable_ips(struct intel_crtc *crtc) ...@@ -3462,9 +3461,10 @@ void hsw_disable_ips(struct intel_crtc *crtc)
mutex_lock(&dev_priv->rps.hw_lock); mutex_lock(&dev_priv->rps.hw_lock);
WARN_ON(sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 0)); WARN_ON(sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 0));
mutex_unlock(&dev_priv->rps.hw_lock); mutex_unlock(&dev_priv->rps.hw_lock);
} else } else {
I915_WRITE(IPS_CTL, 0); I915_WRITE(IPS_CTL, 0);
POSTING_READ(IPS_CTL); POSTING_READ(IPS_CTL);
}
/* We need to wait for a vblank before we can disable the plane. */ /* We need to wait for a vblank before we can disable the plane. */
intel_wait_for_vblank(dev, crtc->pipe); intel_wait_for_vblank(dev, crtc->pipe);
...@@ -7006,8 +7006,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc, ...@@ -7006,8 +7006,9 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
if (intel_display_power_enabled(dev, pfit_domain)) if (intel_display_power_enabled(dev, pfit_domain))
ironlake_get_pfit_config(crtc, pipe_config); ironlake_get_pfit_config(crtc, pipe_config);
pipe_config->ips_enabled = hsw_crtc_supports_ips(crtc) && if (IS_HASWELL(dev))
(I915_READ(IPS_CTL) & IPS_ENABLE); pipe_config->ips_enabled = hsw_crtc_supports_ips(crtc) &&
(I915_READ(IPS_CTL) & IPS_ENABLE);
pipe_config->pixel_multiplier = 1; pipe_config->pixel_multiplier = 1;
...@@ -9336,7 +9337,9 @@ intel_pipe_config_compare(struct drm_device *dev, ...@@ -9336,7 +9337,9 @@ intel_pipe_config_compare(struct drm_device *dev,
PIPE_CONF_CHECK_I(pch_pfit.size); PIPE_CONF_CHECK_I(pch_pfit.size);
} }
PIPE_CONF_CHECK_I(ips_enabled); /* BDW+ don't expose a synchronous way to read the state */
if (IS_HASWELL(dev))
PIPE_CONF_CHECK_I(ips_enabled);
PIPE_CONF_CHECK_I(double_wide); PIPE_CONF_CHECK_I(double_wide);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment