drm/i915: Move reset forcewake processing to gen6_do_reset
authorKeith Packard <keithp@keithp.com>
Fri, 6 Jan 2012 19:34:04 +0000 (11:34 -0800)
committerKeith Packard <keithp@keithp.com>
Thu, 19 Jan 2012 20:27:24 +0000 (12:27 -0800)
No reason to have half of the reset split from the other half.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_drv.c

index bdf6a1b3622353360e1ad59f5d53097c53104c8a..a6fcd941e3ab60828e825cb2e16069923929ef7c 100644 (file)
@@ -600,9 +600,17 @@ static int ironlake_do_reset(struct drm_device *dev, u8 flags)
 static int gen6_do_reset(struct drm_device *dev, u8 flags)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
+       int     ret;
+       unsigned long irqflags;
 
        I915_WRITE(GEN6_GDRST, GEN6_GRDOM_FULL);
-       return wait_for((I915_READ(GEN6_GDRST) & GEN6_GRDOM_FULL) == 0, 500);
+       ret = wait_for((I915_READ(GEN6_GDRST) & GEN6_GRDOM_FULL) == 0, 500);
+       /* If reset with a user forcewake, try to restore */
+       spin_lock_irqsave(&dev_priv->gt_lock, irqflags);
+       if (dev_priv->forcewake_count)
+               dev_priv->display.force_wake_get(dev_priv);
+       spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags);
+       return ret;
 }
 
 /**
@@ -629,7 +637,6 @@ int i915_reset(struct drm_device *dev, u8 flags)
         * need to
         */
        bool need_display = true;
-       unsigned long irqflags;
        int ret;
 
        if (!i915_try_reset)
@@ -647,11 +654,6 @@ int i915_reset(struct drm_device *dev, u8 flags)
        case 7:
        case 6:
                ret = gen6_do_reset(dev, flags);
-               /* If reset with a user forcewake, try to restore */
-               spin_lock_irqsave(&dev_priv->gt_lock, irqflags);
-               if (dev_priv->forcewake_count)
-                       dev_priv->display.force_wake_get(dev_priv);
-               spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags);
                break;
        case 5:
                ret = ironlake_do_reset(dev, flags);