drm/i915/guc: Enable interrupts before resuming GuC during runtime resume
authorSagar Arun Kamble <sagar.a.kamble@intel.com>
Wed, 24 Jan 2018 15:46:57 +0000 (21:16 +0530)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 24 Jan 2018 19:44:03 +0000 (19:44 +0000)
GuC log streaming needs interrupts enabled prior to GuC resume but
runtime pm interrupt setup was happening post GuC resume. Fix it.
While at it, fix the unwinding of steps in the runtime suspend path.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104695
Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: MichaƂ Winiarski <michal.winiarski@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Marta Lofstedt <marta.lofstedt@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/1516808821-3638-2-git-send-email-sagar.a.kamble@intel.com
drivers/gpu/drm/i915/i915_drv.c

index 1fbe37889d92569257e7e2703333b5bbef747089..95e1c161a887f6ce6f128b07a4fed7a1aaf06d53 100644 (file)
@@ -2600,6 +2600,11 @@ static int intel_runtime_suspend(struct device *kdev)
 
                intel_runtime_pm_enable_interrupts(dev_priv);
 
+               intel_guc_resume(dev_priv);
+
+               i915_gem_init_swizzling(dev_priv);
+               i915_gem_restore_fences(dev_priv);
+
                enable_rpm_wakeref_asserts(dev_priv);
 
                return ret;
@@ -2665,8 +2670,6 @@ static int intel_runtime_resume(struct device *kdev)
        if (intel_uncore_unclaimed_mmio(dev_priv))
                DRM_DEBUG_DRIVER("Unclaimed access during suspend, bios?\n");
 
-       intel_guc_resume(dev_priv);
-
        if (IS_GEN9_LP(dev_priv)) {
                bxt_disable_dc9(dev_priv);
                bxt_display_core_init(dev_priv, true);
@@ -2681,6 +2684,10 @@ static int intel_runtime_resume(struct device *kdev)
 
        intel_uncore_runtime_resume(dev_priv);
 
+       intel_runtime_pm_enable_interrupts(dev_priv);
+
+       intel_guc_resume(dev_priv);
+
        /*
         * No point of rolling back things in case of an error, as the best
         * we can do is to hope that things will still work (and disable RPM).
@@ -2688,8 +2695,6 @@ static int intel_runtime_resume(struct device *kdev)
        i915_gem_init_swizzling(dev_priv);
        i915_gem_restore_fences(dev_priv);
 
-       intel_runtime_pm_enable_interrupts(dev_priv);
-
        /*
         * On VLV/CHV display interrupts are part of the display
         * power well, so hpd is reinitialized from there. For