Merge airlied/drm-next into drm-misc-fixes
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / i915_drv.c
index aaa861b..07c07d5 100644 (file)
@@ -49,6 +49,7 @@
 #include "i915_drv.h"
 #include "i915_trace.h"
 #include "i915_pmu.h"
+#include "i915_query.h"
 #include "i915_vgpu.h"
 #include "intel_drv.h"
 #include "intel_uc.h"
@@ -428,7 +429,7 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data,
                        return -ENODEV;
                break;
        case I915_PARAM_SUBSLICE_MASK:
-               value = INTEL_INFO(dev_priv)->sseu.subslice_mask;
+               value = INTEL_INFO(dev_priv)->sseu.subslice_mask[0];
                if (!value)
                        return -ENODEV;
                break;
@@ -1610,15 +1611,12 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
        struct pci_dev *pdev = dev_priv->drm.pdev;
-       bool fw_csr;
        int ret;
 
        disable_rpm_wakeref_asserts(dev_priv);
 
        intel_display_set_init_power(dev_priv, false);
 
-       fw_csr = !IS_GEN9_LP(dev_priv) && !hibernation &&
-               suspend_to_idle(dev_priv) && dev_priv->csr.dmc_payload;
        /*
         * In case of firmware assisted context save/restore don't manually
         * deinit the power domains. This also means the CSR/DMC firmware will
@@ -1626,8 +1624,11 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
         * also enable deeper system power states that would be blocked if the
         * firmware was inactive.
         */
-       if (!fw_csr)
+       if (IS_GEN9_LP(dev_priv) || hibernation || !suspend_to_idle(dev_priv) ||
+           dev_priv->csr.dmc_payload == NULL) {
                intel_power_domains_suspend(dev_priv);
+               dev_priv->power_domains_suspended = true;
+       }
 
        ret = 0;
        if (IS_GEN9_LP(dev_priv))
@@ -1639,8 +1640,10 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
 
        if (ret) {
                DRM_ERROR("Suspend complete failed: %d\n", ret);
-               if (!fw_csr)
+               if (dev_priv->power_domains_suspended) {
                        intel_power_domains_init_hw(dev_priv, true);
+                       dev_priv->power_domains_suspended = false;
+               }
 
                goto out;
        }
@@ -1661,8 +1664,6 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
        if (!(hibernation && INTEL_GEN(dev_priv) < 6))
                pci_set_power_state(pdev, PCI_D3hot);
 
-       dev_priv->suspended_to_idle = suspend_to_idle(dev_priv);
-
 out:
        enable_rpm_wakeref_asserts(dev_priv);
 
@@ -1829,8 +1830,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
        intel_uncore_resume_early(dev_priv);
 
        if (IS_GEN9_LP(dev_priv)) {
-               if (!dev_priv->suspended_to_idle)
-                       gen9_sanitize_dc_state(dev_priv);
+               gen9_sanitize_dc_state(dev_priv);
                bxt_disable_dc9(dev_priv);
        } else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
                hsw_disable_pc8(dev_priv);
@@ -1838,8 +1838,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
 
        intel_uncore_sanitize(dev_priv);
 
-       if (IS_GEN9_LP(dev_priv) ||
-           !(dev_priv->suspended_to_idle && dev_priv->csr.dmc_payload))
+       if (dev_priv->power_domains_suspended)
                intel_power_domains_init_hw(dev_priv, true);
        else
                intel_display_set_init_power(dev_priv, true);
@@ -1849,7 +1848,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
        enable_rpm_wakeref_asserts(dev_priv);
 
 out:
-       dev_priv->suspended_to_idle = false;
+       dev_priv->power_domains_suspended = false;
 
        return ret;
 }
@@ -2575,7 +2574,7 @@ static int intel_runtime_suspend(struct device *kdev)
         */
        i915_gem_runtime_suspend(dev_priv);
 
-       intel_guc_suspend(dev_priv);
+       intel_uc_suspend(dev_priv);
 
        intel_runtime_pm_disable_interrupts(dev_priv);
 
@@ -2597,7 +2596,7 @@ static int intel_runtime_suspend(struct device *kdev)
 
                intel_runtime_pm_enable_interrupts(dev_priv);
 
-               intel_guc_resume(dev_priv);
+               intel_uc_resume(dev_priv);
 
                i915_gem_init_swizzling(dev_priv);
                i915_gem_restore_fences(dev_priv);
@@ -2683,7 +2682,7 @@ static int intel_runtime_resume(struct device *kdev)
 
        intel_runtime_pm_enable_interrupts(dev_priv);
 
-       intel_guc_resume(dev_priv);
+       intel_uc_resume(dev_priv);
 
        /*
         * No point of rolling back things in case of an error, as the best
@@ -2832,6 +2831,7 @@ static const struct drm_ioctl_desc i915_ioctls[] = {
        DRM_IOCTL_DEF_DRV(I915_PERF_OPEN, i915_perf_open_ioctl, DRM_RENDER_ALLOW),
        DRM_IOCTL_DEF_DRV(I915_PERF_ADD_CONFIG, i915_perf_add_config_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
        DRM_IOCTL_DEF_DRV(I915_PERF_REMOVE_CONFIG, i915_perf_remove_config_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
+       DRM_IOCTL_DEF_DRV(I915_QUERY, i915_query_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
 };
 
 static struct drm_driver driver = {