diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 69f9f68faa6b78..f4d8672b2765ab 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -1177,14 +1177,22 @@ static int amdgpu_pmops_suspend(struct device *dev) { struct drm_device *drm_dev = dev_get_drvdata(dev); struct amdgpu_device *adev = (struct amdgpu_device *) drm_dev->dev_private; - int r; - r = amdgpu_device_suspend(drm_dev, true, true); - if (r) - return r; + adev->suspend_complete = false; - r = amdgpu_asic_reset(adev); - return r; + return amdgpu_device_suspend(drm_dev, true, true); +} + +static int amdgpu_pmops_suspend_noirq(struct device *dev) +{ + struct drm_device *drm_dev = dev_get_drvdata(dev); + struct amdgpu_device *adev = (struct amdgpu_device *) drm_dev->dev_private; + + adev->suspend_complete = true; + if (adev->flags & AMD_IS_APU) + return 0; + else + return amdgpu_asic_reset(adev); } static int amdgpu_pmops_resume(struct device *dev) @@ -1326,6 +1334,7 @@ out: static const struct dev_pm_ops amdgpu_pm_ops = { .suspend = amdgpu_pmops_suspend, + .suspend_noirq = amdgpu_pmops_suspend_noirq, .resume = amdgpu_pmops_resume, .freeze = amdgpu_pmops_freeze, .thaw = amdgpu_pmops_thaw, |