[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