[PATCH v2 1/2] Revert "drm/amd: flush any delayed gfxoff on suspend entry"
Alex Deucher
alexdeucher at gmail.com
Wed Feb 7 22:37:12 UTC 2024
On Wed, Feb 7, 2024 at 4:18 PM Mario Limonciello
<mario.limonciello at amd.com> wrote:
>
> commit ab4750332dbe ("drm/amdgpu/sdma5.2: add begin/end_use ring callbacks")
> caused GFXOFF control to be used more heavily and the codepath that was
> removed from commit 0dee72639533 ("drm/amd: flush any delayed gfxoff on
> suspend entry") now can be exercised at suspend again.
>
> Users report that by using GNOME to suspend the lockscreen trigger will
> cause SDMA traffic and the system can deadlock.
>
> This reverts commit 0dee726395333fea833eaaf838bc80962df886c8.
>
> Fixes: ab4750332dbe ("drm/amdgpu/sdma5.2: add begin/end_use ring callbacks")
> Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>
Acked-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 -
> drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 9 ++++++++-
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 670ecb789d59..2bc460cb993d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -4573,7 +4573,6 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon)
> drm_fb_helper_set_suspend_unlocked(adev_to_drm(adev)->fb_helper, true);
>
> cancel_delayed_work_sync(&adev->delayed_init_work);
> - flush_delayed_work(&adev->gfx.gfx_off_delay_work);
>
> amdgpu_ras_suspend(adev);
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> index aa8e1d29d10a..9831dd854532 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> @@ -727,8 +727,15 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable)
>
> if (adev->gfx.gfx_off_req_count == 0 &&
> !adev->gfx.gfx_off_state) {
> - schedule_delayed_work(&adev->gfx.gfx_off_delay_work,
> + /* If going to s2idle, no need to wait */
> + if (adev->in_s0ix) {
> + if (!amdgpu_dpm_set_powergating_by_smu(adev,
> + AMD_IP_BLOCK_TYPE_GFX, true))
> + adev->gfx.gfx_off_state = true;
> + } else {
> + schedule_delayed_work(&adev->gfx.gfx_off_delay_work,
> delay);
> + }
> }
> } else {
> if (adev->gfx.gfx_off_req_count == 0) {
> --
> 2.34.1
>
More information about the amd-gfx
mailing list