| From 7b750380f5da4eb0cc683840208a8d22a035c549 Mon Sep 17 00:00:00 2001 |
| From: Paulo Zanoni <paulo.r.zanoni@intel.com> |
| Date: Mon, 19 Aug 2013 13:18:11 -0300 |
| Subject: drm/i915: add i915.pc8_timeout function |
| |
| We currently only enter PC8+ after all its required conditions are |
| met, there's no rendering, and we stay like that for at least 5 |
| seconds. |
| |
| I chose "5 seconds" because this value is conservative and won't make |
| us enter/leave PC8+ thousands of times after the screen is off: some |
| desktop environments have applications that wake up and do rendering |
| every 1-3 seconds, even when the screen is off and the machine is |
| completely idle. |
| |
| But when I was testing my PC8+ patches I set the default value to |
| 100ms so I could use the bad-behaving desktop environments to |
| stress-test my patches. I also thought it would be a good idea to ask |
| our power management team to test different values, but I'm pretty |
| sure they would ask me for an easy way to change the timeout. So to |
| help these 2 cases I decided to create an option that would make it |
| easier to change the default value. I also expect people making |
| specific products that use our driver could try to find the perfect |
| timeout for them. |
| |
| Anyway, fixing the bad-behaving applications will always lead to |
| better power savings than just changing the timeout value: you need to |
| stop waking the Kernel, not quickly put it back to sleep again after |
| you wake it for nothing. Bad sleep leads to bad mood! |
| |
| Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> |
| Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 900587453219f6090a1e28db1bb790aa64820131) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/i915_drv.c | 4 ++++ |
| drivers/gpu/drm/i915/i915_drv.h | 1 + |
| drivers/gpu/drm/i915/intel_display.c | 2 +- |
| 3 files changed, 6 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c |
| index f19736208214..ad28a72cf373 100644 |
| --- a/drivers/gpu/drm/i915/i915_drv.c |
| +++ b/drivers/gpu/drm/i915/i915_drv.c |
| @@ -145,6 +145,10 @@ int i915_enable_pc8 __read_mostly = 0; |
| module_param_named(enable_pc8, i915_enable_pc8, int, 0600); |
| MODULE_PARM_DESC(enable_pc8, "Enable support for low power package C states (PC8+) (default: false)"); |
| |
| +int i915_pc8_timeout __read_mostly = 5000; |
| +module_param_named(pc8_timeout, i915_pc8_timeout, int, 0600); |
| +MODULE_PARM_DESC(pc8_timeout, "Number of msecs of idleness required to enter PC8+ (default: 5000)"); |
| + |
| bool i915_prefault_disable __read_mostly; |
| module_param_named(prefault_disable, i915_prefault_disable, bool, 0600); |
| MODULE_PARM_DESC(prefault_disable, |
| diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h |
| index 85a352860a83..8ee15b471854 100644 |
| --- a/drivers/gpu/drm/i915/i915_drv.h |
| +++ b/drivers/gpu/drm/i915/i915_drv.h |
| @@ -1707,6 +1707,7 @@ extern int i915_disable_power_well __read_mostly; |
| extern int i915_enable_ips __read_mostly; |
| extern bool i915_fastboot __read_mostly; |
| extern int i915_enable_pc8 __read_mostly; |
| +extern int i915_pc8_timeout __read_mostly; |
| extern bool i915_prefault_disable __read_mostly; |
| |
| extern int i915_suspend(struct drm_device *dev, pm_message_t state); |
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
| index 6cf35357afad..7453d6f82631 100644 |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -6101,7 +6101,7 @@ static void __hsw_enable_package_c8(struct drm_i915_private *dev_priv) |
| return; |
| |
| schedule_delayed_work(&dev_priv->pc8.enable_work, |
| - msecs_to_jiffies(5 * 1000)); |
| + msecs_to_jiffies(i915_pc8_timeout)); |
| } |
| |
| static void __hsw_disable_package_c8(struct drm_i915_private *dev_priv) |
| -- |
| 1.8.5.rc3 |
| |