]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/gpu/drm/i915/i915_drv.c
Merge tag 'nios2-v3.20-rc1' of git://git.rocketboards.org/linux-socfpga-next
[mirror_ubuntu-artful-kernel.git] / drivers / gpu / drm / i915 / i915_drv.c
index 7643300828c3aef79d32260af5f2c8e4c7ff5b2c..8039cec71fc24a3750812dc519b08bee6a824f41 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... */
 
        /*
@@ -934,8 +936,7 @@ static int i915_pm_suspend(struct device *dev)
 
 static int i915_pm_suspend_late(struct device *dev)
 {
-       struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
+       struct drm_device *drm_dev = dev_to_i915(dev)->dev;
 
        /*
         * We have a suspedn ordering issue with the snd-hda driver also
@@ -954,8 +955,7 @@ static int i915_pm_suspend_late(struct device *dev)
 
 static int i915_pm_resume_early(struct device *dev)
 {
-       struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
+       struct drm_device *drm_dev = dev_to_i915(dev)->dev;
 
        if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF)
                return 0;
@@ -965,8 +965,7 @@ static int i915_pm_resume_early(struct device *dev)
 
 static int i915_pm_resume(struct device *dev)
 {
-       struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
+       struct drm_device *drm_dev = dev_to_i915(dev)->dev;
 
        if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF)
                return 0;
@@ -1293,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)
@@ -1324,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)
@@ -1357,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");
 
        /*
@@ -1396,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;
 
        /*
@@ -1424,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;
 }
@@ -1634,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);
 }