OSDN Git Service

Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
[android-x86/kernel.git] / drivers / gpu / drm / i915 / i915_drv.c
index 489b220..8039cec 100644 (file)
@@ -835,6 +835,8 @@ int i915_reset(struct drm_device *dev)
                return ret;
        }
 
+       intel_overlay_reset(dev_priv);
+
        /* Ok, now get things going again... */
 
        /*
@@ -1290,7 +1292,9 @@ static int vlv_suspend_complete(struct drm_i915_private *dev_priv)
        err = vlv_allow_gt_wake(dev_priv, false);
        if (err)
                goto err2;
-       vlv_save_gunit_s0ix_state(dev_priv);
+
+       if (!IS_CHERRYVIEW(dev_priv->dev))
+               vlv_save_gunit_s0ix_state(dev_priv);
 
        err = vlv_force_gfx_clock(dev_priv, false);
        if (err)
@@ -1321,7 +1325,8 @@ static int vlv_resume_prepare(struct drm_i915_private *dev_priv,
         */
        ret = vlv_force_gfx_clock(dev_priv, true);
 
-       vlv_restore_gunit_s0ix_state(dev_priv);
+       if (!IS_CHERRYVIEW(dev_priv->dev))
+               vlv_restore_gunit_s0ix_state(dev_priv);
 
        err = vlv_allow_gt_wake(dev_priv, true);
        if (!ret)
@@ -1354,8 +1359,6 @@ static int intel_runtime_suspend(struct device *device)
        if (WARN_ON_ONCE(!HAS_RUNTIME_PM(dev)))
                return -ENODEV;
 
-       assert_force_wake_inactive(dev_priv);
-
        DRM_DEBUG_KMS("Suspending device\n");
 
        /*
@@ -1393,7 +1396,8 @@ static int intel_runtime_suspend(struct device *device)
                return ret;
        }
 
-       del_timer_sync(&dev_priv->gpu_error.hangcheck_timer);
+       cancel_delayed_work_sync(&dev_priv->gpu_error.hangcheck_work);
+       intel_uncore_forcewake_reset(dev, false);
        dev_priv->pm.suspended = true;
 
        /*
@@ -1421,6 +1425,8 @@ static int intel_runtime_suspend(struct device *device)
                intel_opregion_notify_adapter(dev, PCI_D3hot);
        }
 
+       assert_forcewakes_inactive(dev_priv);
+
        DRM_DEBUG_KMS("Device suspended\n");
        return 0;
 }
@@ -1631,6 +1637,14 @@ static int __init i915_init(void)
 #endif
        }
 
+       /*
+        * FIXME: Note that we're lying to the DRM core here so that we can get access
+        * to the atomic ioctl and the atomic properties.  Only plane operations on
+        * a single CRTC will actually work.
+        */
+       if (i915.nuclear_pageflip)
+               driver.driver_features |= DRIVER_ATOMIC;
+
        return drm_pci_init(&driver, &i915_pci_driver);
 }