[PATCH] drm/i915: Do manual runtime-pm calls for S0 (s2idle)
Chris Wilson
chris at chris-wilson.co.uk
Sat Oct 26 19:44:59 UTC 2019
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_drv.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 355526a35d58..52420b3eb047 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -36,6 +36,7 @@
#include <linux/pm_runtime.h>
#include <linux/pnp.h>
#include <linux/slab.h>
+#include <linux/suspend.h>
#include <linux/vga_switcheroo.h>
#include <linux/vt.h>
#include <acpi/video.h>
@@ -142,6 +143,9 @@ struct vlv_s0ix_state {
u32 clock_gate_dis2;
};
+static int intel_runtime_resume(struct device *kdev);
+static int intel_runtime_suspend(struct device *kdev);
+
static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
{
int domain = pci_domain_nr(dev_priv->drm.pdev->bus);
@@ -1980,6 +1984,7 @@ static int i915_pm_suspend(struct device *kdev)
static int i915_pm_suspend_late(struct device *kdev)
{
struct drm_i915_private *i915 = kdev_to_i915(kdev);
+ int err;
/*
* We have a suspend ordering issue with the snd-hda driver also
@@ -1993,7 +1998,18 @@ static int i915_pm_suspend_late(struct device *kdev)
if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
return 0;
- return i915_drm_suspend_late(&i915->drm, false);
+ err = i915_drm_suspend_late(&i915->drm, false);
+ if (err)
+ return err;
+
+ if (pm_suspend_target_state == PM_SUSPEND_TO_IDLE &&
+ HAS_RUNTIME_PM(i915)) {
+ err = intel_runtime_suspend(kdev);
+ if (err)
+ i915_drm_resume_early(&i915->drm);
+ }
+
+ return err;
}
static int i915_pm_poweroff_late(struct device *kdev)
@@ -2013,6 +2029,10 @@ static int i915_pm_resume_early(struct device *kdev)
if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF)
return 0;
+ if (pm_suspend_target_state == PM_SUSPEND_TO_IDLE &&
+ HAS_RUNTIME_PM(i915))
+ intel_runtime_resume(kdev);
+
return i915_drm_resume_early(&i915->drm);
}
--
2.24.0.rc1
More information about the Intel-gfx-trybot
mailing list