[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