| From 8c752d26ea728855eb65b48c650cdd96bc75a3fd Mon Sep 17 00:00:00 2001 |
| From: Jani Nikula <jani.nikula@intel.com> |
| Date: Fri, 13 Sep 2013 11:03:08 +0300 |
| Subject: drm/i915: add asserts for cursor disabled |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| The cursor is supposed to be disabled during crtc mode set (disabled by |
| ctrc disable). Assert this is the case. |
| |
| v2: move cursor disabled assert next to plane asserts (Ville) |
| |
| Suggested-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Signed-off-by: Jani Nikula <jani.nikula@intel.com> |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 93ce0ba6985245ba806f0846a9ce42ca7a3184f2) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_display.c | 23 +++++++++++++++++++++++ |
| 1 file changed, 23 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
| index bb638d8d66f2..394e4d3631e7 100644 |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -1069,6 +1069,26 @@ static void assert_panel_unlocked(struct drm_i915_private *dev_priv, |
| pipe_name(pipe)); |
| } |
| |
| +static void assert_cursor(struct drm_i915_private *dev_priv, |
| + enum pipe pipe, bool state) |
| +{ |
| + struct drm_device *dev = dev_priv->dev; |
| + bool cur_state; |
| + |
| + if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) |
| + cur_state = I915_READ(CURCNTR_IVB(pipe)) & CURSOR_MODE; |
| + else if (IS_845G(dev) || IS_I865G(dev)) |
| + cur_state = I915_READ(_CURACNTR) & CURSOR_ENABLE; |
| + else |
| + cur_state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE; |
| + |
| + WARN(cur_state != state, |
| + "cursor on pipe %c assertion failure (expected %s, current %s)\n", |
| + pipe_name(pipe), state_string(state), state_string(cur_state)); |
| +} |
| +#define assert_cursor_enabled(d, p) assert_cursor(d, p, true) |
| +#define assert_cursor_disabled(d, p) assert_cursor(d, p, false) |
| + |
| void assert_pipe(struct drm_i915_private *dev_priv, |
| enum pipe pipe, bool state) |
| { |
| @@ -1670,6 +1690,7 @@ static void intel_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe, |
| u32 val; |
| |
| assert_planes_disabled(dev_priv, pipe); |
| + assert_cursor_disabled(dev_priv, pipe); |
| assert_sprites_disabled(dev_priv, pipe); |
| |
| if (HAS_PCH_LPT(dev_priv->dev)) |
| @@ -1731,6 +1752,7 @@ static void intel_disable_pipe(struct drm_i915_private *dev_priv, |
| * or we might hang the display. |
| */ |
| assert_planes_disabled(dev_priv, pipe); |
| + assert_cursor_disabled(dev_priv, pipe); |
| assert_sprites_disabled(dev_priv, pipe); |
| |
| /* Don't disable pipe A or pipe A PLLs if needed */ |
| @@ -3867,6 +3889,7 @@ static void intel_crtc_disable(struct drm_crtc *crtc) |
| dev_priv->display.off(crtc); |
| |
| assert_plane_disabled(dev->dev_private, to_intel_crtc(crtc)->plane); |
| + assert_cursor_disabled(dev_priv, to_intel_crtc(crtc)->pipe); |
| assert_pipe_disabled(dev->dev_private, to_intel_crtc(crtc)->pipe); |
| |
| if (crtc->fb) { |
| -- |
| 1.8.5.rc3 |
| |