mirror of
https://github.com/torvalds/linux.git
synced 2024-12-15 15:41:58 +00:00
drm/i915: vlv: fix switcheroo/legacy suspend/resume
During switcheroo/legacy suspend we don't call the suspend_late handler
but when resuming afterwards we call resume_early. This happened to work
so far, since suspend_late only disabled the PCI device. This changed in
commit 016970beb0
Author: Sagar Kamble <sagar.a.kamble@intel.com>
Date: Wed Aug 13 23:07:06 2014 +0530
drm/i915: Sharing platform specific sequence between runtime and system susp
after which we also saved/restored the VLV Gunit HW state in
suspend_late/resume_early. So now since we don't save the state during
suspend a following resume will restore a corrupted state.
Fix this by calling the suspend_late handler during both switcheroo and
legacy suspend.
CC: Sagar Kamble <sagar.a.kamble@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Sagar Kamble <sagar.a.kamble@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
50a0072f38
commit
5a17514ed9
@ -670,11 +670,7 @@ int i915_suspend(struct drm_device *dev, pm_message_t state)
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/* Shut down the device */
|
||||
pci_disable_device(dev->pdev);
|
||||
pci_set_power_state(dev->pdev, PCI_D3hot);
|
||||
|
||||
return 0;
|
||||
return i915_drm_suspend_late(dev);
|
||||
}
|
||||
|
||||
static int i915_drm_thaw_early(struct drm_device *dev)
|
||||
@ -790,7 +786,7 @@ static int i915_resume_early(struct drm_device *dev)
|
||||
return i915_drm_thaw_early(dev);
|
||||
}
|
||||
|
||||
int i915_resume(struct drm_device *dev)
|
||||
static int i915_drm_resume(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
int ret;
|
||||
@ -816,7 +812,12 @@ static int i915_resume_legacy(struct drm_device *dev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return i915_resume(dev);
|
||||
return i915_drm_resume(dev);
|
||||
}
|
||||
|
||||
int i915_resume(struct drm_device *dev)
|
||||
{
|
||||
return i915_resume_legacy(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1004,7 +1005,7 @@ static int i915_pm_resume(struct device *dev)
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct drm_device *drm_dev = pci_get_drvdata(pdev);
|
||||
|
||||
return i915_resume(drm_dev);
|
||||
return i915_drm_resume(drm_dev);
|
||||
}
|
||||
|
||||
static int i915_pm_freeze(struct device *dev)
|
||||
|
Loading…
Reference in New Issue
Block a user