Skip to content

Commit

Permalink
drm/i915: send proper opregion notifications on suspend/resume
Browse files Browse the repository at this point in the history
This indicates to the firmware that it can power down various other
components or bring them back up, depending on the target system state.

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
  • Loading branch information
Jesse Barnes authored and Daniel Vetter committed Jun 12, 2014
1 parent 10d8d36 commit e5747e3
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions drivers/gpu/drm/i915/i915_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
*/

#include <linux/device.h>
#include <linux/acpi.h>
#include <drm/drmP.h>
#include <drm/i915_drm.h>
#include "i915_drv.h"
Expand Down Expand Up @@ -499,6 +500,7 @@ static int i915_drm_freeze(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_crtc *crtc;
pci_power_t opregion_target_state;

intel_runtime_pm_get(dev_priv);

Expand Down Expand Up @@ -548,6 +550,12 @@ static int i915_drm_freeze(struct drm_device *dev)

i915_save_state(dev);

if (acpi_target_system_state() >= ACPI_STATE_S3)
opregion_target_state = PCI_D3cold;
else
opregion_target_state = PCI_D1;
intel_opregion_notify_adapter(dev, opregion_target_state);

intel_uncore_forcewake_reset(dev, false);
intel_opregion_fini(dev);

Expand Down Expand Up @@ -680,6 +688,8 @@ static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
dev_priv->modeset_restore = MODESET_DONE;
mutex_unlock(&dev_priv->modeset_restore_lock);

intel_opregion_notify_adapter(dev, PCI_D0);

intel_runtime_pm_put(dev_priv);
return 0;
}
Expand Down

0 comments on commit e5747e3

Please sign in to comment.