[PATCH] drm/amdgpu: cancel gfx idle work in device suspend for s0ix
Mario Limonciello
mario.limonciello at amd.com
Mon Apr 7 15:55:42 UTC 2025
On 4/6/2025 4:36 PM, Alex Deucher wrote:
> 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")
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index c2c2ca7922d5c..8a14caeb808dd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -3641,6 +3641,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
More information about the amd-gfx
mailing list