Is the resume failed, it's unlikely that the GPU will be usable.
Reset the ASIC in hopes that it will be able to recover from the
problem.

Link: 
https://lore.kernel.org/stable/mn0pr12mb6101fa3ff375a961e67ae89ce2...@mn0pr12mb6101.namprd12.prod.outlook.com/T/#mf90fc5d39b02d4cf7d430a49d3b58243083042a7
Signed-off-by: Mario Limonciello <mario.limoncie...@amd.com>
---
This is RFC as it's conceptual, and we should wait for testing
that it actually works.
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 3b9dc1803be9..4c2a0aea5a6b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -2333,6 +2333,13 @@ static int amdgpu_pmops_resume(struct device *dev)
                adev->no_hw_access = true;
 
        r = amdgpu_device_resume(drm_dev, true);
+       if (r) {
+               dev_err(adev->dev, "resume failed with %d; attempting to reset 
ASIC\n", r);
+               r = amdgpu_asic_reset(adev);
+               if (!r)
+                       r = amdgpu_device_resume(drm_dev, true);
+       }
+
        if (amdgpu_acpi_is_s0ix_active(adev))
                adev->in_s0ix = false;
        else
-- 
2.34.1

Reply via email to