On Wed, Feb 7, 2024 at 4:18 PM Mario Limonciello <mario.limonciello@xxxxxxx> 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@xxxxxxx> Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > 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 >