Revert "drm/i915: Make intel_display_suspend atomic, v2."
[deliverable/linux.git] / drivers / gpu / drm / i915 / i915_drv.c
index 51149fb75e96a6f7fd99b554cfab63ed15fd557d..78ef0bb53c36a51b25a23df2082e3f1693ce543a 100644 (file)
@@ -545,15 +545,15 @@ void intel_hpd_cancel_work(struct drm_i915_private *dev_priv)
 {
        spin_lock_irq(&dev_priv->irq_lock);
 
-       dev_priv->long_hpd_port_mask = 0;
-       dev_priv->short_hpd_port_mask = 0;
-       dev_priv->hpd_event_bits = 0;
+       dev_priv->hotplug.long_port_mask = 0;
+       dev_priv->hotplug.short_port_mask = 0;
+       dev_priv->hotplug.event_bits = 0;
 
        spin_unlock_irq(&dev_priv->irq_lock);
 
-       cancel_work_sync(&dev_priv->dig_port_work);
-       cancel_work_sync(&dev_priv->hotplug_work);
-       cancel_delayed_work_sync(&dev_priv->hotplug_reenable_work);
+       cancel_work_sync(&dev_priv->hotplug.dig_port_work);
+       cancel_work_sync(&dev_priv->hotplug.hotplug_work);
+       cancel_delayed_work_sync(&dev_priv->hotplug.reenable_work);
 }
 
 void i915_firmware_load_error_print(const char *fw_path, int err)
@@ -595,12 +595,12 @@ static int intel_suspend_complete(struct drm_i915_private *dev_priv);
 static int vlv_resume_prepare(struct drm_i915_private *dev_priv,
                              bool rpm_resume);
 static int skl_resume_prepare(struct drm_i915_private *dev_priv);
+static int bxt_resume_prepare(struct drm_i915_private *dev_priv);
 
 
 static int i915_drm_suspend(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
-       struct drm_crtc *crtc;
        pci_power_t opregion_target_state;
        int error;
 
@@ -631,8 +631,7 @@ static int i915_drm_suspend(struct drm_device *dev)
         * for _thaw. Also, power gate the CRTC power wells.
         */
        drm_modeset_lock_all(dev);
-       for_each_crtc(dev, crtc)
-               intel_crtc_control(crtc, false);
+       intel_display_suspend(dev);
        drm_modeset_unlock_all(dev);
 
        intel_dp_mst_suspend(dev);
@@ -811,14 +810,17 @@ static int i915_drm_resume_early(struct drm_device *dev)
        if (IS_VALLEYVIEW(dev_priv))
                ret = vlv_resume_prepare(dev_priv, false);
        if (ret)
-               DRM_ERROR("Resume prepare failed: %d,Continuing resume\n", ret);
+               DRM_ERROR("Resume prepare failed: %d, continuing anyway\n",
+                         ret);
 
        intel_uncore_early_sanitize(dev, true);
 
-       if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
-               hsw_disable_pc8(dev_priv);
+       if (IS_BROXTON(dev))
+               ret = bxt_resume_prepare(dev_priv);
        else if (IS_SKYLAKE(dev_priv))
                ret = skl_resume_prepare(dev_priv);
+       else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
+               hsw_disable_pc8(dev_priv);
 
        intel_uncore_sanitize(dev);
        intel_power_domains_init_hw(dev_priv);
@@ -989,7 +991,7 @@ static int i915_pm_suspend_late(struct device *dev)
        struct drm_device *drm_dev = dev_to_i915(dev)->dev;
 
        /*
-        * We have a suspedn ordering issue with the snd-hda driver also
+        * We have a suspend ordering issue with the snd-hda driver also
         * requiring our device to be power up. Due to the lack of a
         * parent/child relationship we currently solve this with an late
         * suspend hook.
@@ -1043,6 +1045,8 @@ static int skl_suspend_complete(struct drm_i915_private *dev_priv)
         */
        intel_csr_load_status_set(dev_priv, FW_UNINITIALIZED);
 
+       skl_uninit_cdclk(dev_priv);
+
        return 0;
 }
 
@@ -1089,6 +1093,7 @@ static int skl_resume_prepare(struct drm_i915_private *dev_priv)
 {
        struct drm_device *dev = dev_priv->dev;
 
+       skl_init_cdclk(dev_priv);
        intel_csr_load_program(dev);
 
        return 0;
@@ -1586,16 +1591,15 @@ static int intel_runtime_resume(struct device *device)
  */
 static int intel_suspend_complete(struct drm_i915_private *dev_priv)
 {
-       struct drm_device *dev = dev_priv->dev;
        int ret;
 
-       if (IS_BROXTON(dev))
+       if (IS_BROXTON(dev_priv))
                ret = bxt_suspend_complete(dev_priv);
-       else if (IS_SKYLAKE(dev))
+       else if (IS_SKYLAKE(dev_priv))
                ret = skl_suspend_complete(dev_priv);
-       else if (IS_HASWELL(dev) || IS_BROADWELL(dev))
+       else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
                ret = hsw_suspend_complete(dev_priv);
-       else if (IS_VALLEYVIEW(dev))
+       else if (IS_VALLEYVIEW(dev_priv))
                ret = vlv_suspend_complete(dev_priv);
        else
                ret = 0;
This page took 0.038437 seconds and 5 git commands to generate.