diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index eec47bd00353..735dd5625e9e 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -122,10 +122,10 @@ int i915_enable_psr __read_mostly = 0; | |||
122 | module_param_named(enable_psr, i915_enable_psr, int, 0600); | 122 | module_param_named(enable_psr, i915_enable_psr, int, 0600); |
123 | MODULE_PARM_DESC(enable_psr, "Enable PSR (default: false)"); | 123 | MODULE_PARM_DESC(enable_psr, "Enable PSR (default: false)"); |
124 | 124 | ||
125 | unsigned int i915_preliminary_hw_support __read_mostly = 0; | 125 | unsigned int i915_preliminary_hw_support __read_mostly = IS_ENABLED(CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT); |
126 | module_param_named(preliminary_hw_support, i915_preliminary_hw_support, int, 0600); | 126 | module_param_named(preliminary_hw_support, i915_preliminary_hw_support, int, 0600); |
127 | MODULE_PARM_DESC(preliminary_hw_support, | 127 | MODULE_PARM_DESC(preliminary_hw_support, |
128 | "Enable preliminary hardware support. (default: false)"); | 128 | "Enable preliminary hardware support."); |
129 | 129 | ||
130 | int i915_disable_power_well __read_mostly = 1; | 130 | int i915_disable_power_well __read_mostly = 1; |
131 | module_param_named(disable_power_well, i915_disable_power_well, int, 0600); | 131 | module_param_named(disable_power_well, i915_disable_power_well, int, 0600); |
@@ -141,6 +141,14 @@ module_param_named(fastboot, i915_fastboot, bool, 0600); | |||
141 | MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time " | 141 | MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time " |
142 | "(default: false)"); | 142 | "(default: false)"); |
143 | 143 | ||
144 | int i915_enable_pc8 __read_mostly = 1; | ||
145 | module_param_named(enable_pc8, i915_enable_pc8, int, 0600); | ||
146 | MODULE_PARM_DESC(enable_pc8, "Enable support for low power package C states (PC8+) (default: true)"); | ||
147 | |||
148 | int i915_pc8_timeout __read_mostly = 5000; | ||
149 | module_param_named(pc8_timeout, i915_pc8_timeout, int, 0600); | ||
150 | MODULE_PARM_DESC(pc8_timeout, "Number of msecs of idleness required to enter PC8+ (default: 5000)"); | ||
151 | |||
144 | bool i915_prefault_disable __read_mostly; | 152 | bool i915_prefault_disable __read_mostly; |
145 | module_param_named(prefault_disable, i915_prefault_disable, bool, 0600); | 153 | module_param_named(prefault_disable, i915_prefault_disable, bool, 0600); |
146 | MODULE_PARM_DESC(prefault_disable, | 154 | MODULE_PARM_DESC(prefault_disable, |
@@ -557,6 +565,9 @@ static int i915_drm_freeze(struct drm_device *dev) | |||
557 | dev_priv->modeset_restore = MODESET_SUSPENDED; | 565 | dev_priv->modeset_restore = MODESET_SUSPENDED; |
558 | mutex_unlock(&dev_priv->modeset_restore_lock); | 566 | mutex_unlock(&dev_priv->modeset_restore_lock); |
559 | 567 | ||
568 | /* We do a lot of poking in a lot of registers, make sure they work | ||
569 | * properly. */ | ||
570 | hsw_disable_package_c8(dev_priv); | ||
560 | intel_set_power_well(dev, true); | 571 | intel_set_power_well(dev, true); |
561 | 572 | ||
562 | drm_kms_helper_poll_disable(dev); | 573 | drm_kms_helper_poll_disable(dev); |
@@ -713,6 +724,10 @@ static int __i915_drm_thaw(struct drm_device *dev) | |||
713 | schedule_work(&dev_priv->console_resume_work); | 724 | schedule_work(&dev_priv->console_resume_work); |
714 | } | 725 | } |
715 | 726 | ||
727 | /* Undo what we did at i915_drm_freeze so the refcount goes back to the | ||
728 | * expected level. */ | ||
729 | hsw_enable_package_c8(dev_priv); | ||
730 | |||
716 | mutex_lock(&dev_priv->modeset_restore_lock); | 731 | mutex_lock(&dev_priv->modeset_restore_lock); |
717 | dev_priv->modeset_restore = MODESET_DONE; | 732 | dev_priv->modeset_restore = MODESET_DONE; |
718 | mutex_unlock(&dev_priv->modeset_restore_lock); | 733 | mutex_unlock(&dev_priv->modeset_restore_lock); |