]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu: cancel gfx idle work in device suspend for s0ix
authorAlex Deucher <alexander.deucher@amd.com>
Sun, 6 Apr 2025 21:27:24 +0000 (17:27 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 8 Apr 2025 20:05:35 +0000 (16:05 -0400)
This is normally handled in the gfx IP suspend callbacks, but
for S0ix, those are skipped because we don't want to touch
gfx.  So handle it in device suspend.

Fixes: b9467983b774 ("drm/amdgpu: add dynamic workload profile switching for gfx10")
Fixes: 963537ca2325 ("drm/amdgpu: add dynamic workload profile switching for gfx11")
Fixes: 5f95a1549555 ("drm/amdgpu: add dynamic workload profile switching for gfx12")
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 1878bbacf0a2fd58c98a024dc0204c34d470f69e..979942f26dda7e997ec1c4770bdd2fc2e12e1552 100644 (file)
@@ -3653,6 +3653,13 @@ static int amdgpu_device_ip_suspend_phase2(struct amdgpu_device *adev)
                            adev, adev->ip_blocks[i].version->type))
                        continue;
 
+               /* Since we skip suspend for S0i3, we need to cancel the delayed
+                * idle work here as the suspend callback never gets called.
+                */
+               if (adev->in_s0ix &&
+                   adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX &&
+                   amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(10, 0, 0))
+                       cancel_delayed_work_sync(&adev->gfx.idle_work);
                /* skip suspend of gfx/mes and psp for S0ix
                 * gfx is in gfxoff state, so on resume it will exit gfxoff just
                 * like at runtime. PSP is also part of the always on hardware