On Fri, Sep 5, 2025 at 1:41 PM Mario Limonciello <mario.limoncie...@amd.com> wrote: > > From: "Mario Limonciello" <mario.limoncie...@amd.com> > > [Why] > dm_prepare_suspend() was added in commit 50e0bae34fa6b > ("drm/amd/display: Add and use new dm_prepare_suspend() callback") > to allow display to turn off earlier in the suspend sequence. > > This caused a regression that HDMI audio sometimes didn't work > properly after resume unless audio was playing during suspend. > > [How] > Drop dm_prepare_suspend() callback. All code in it will still run > during dm_suspend(). Also drop unnecessary dm_complete() callback. > dm_complete() was used for failed prepare and also for any case > of successful resume. The code in it already runs in dm_resume(). > > This change will introduce more time that the display is turned on > during suspend sequence. The compositor can turn it off sooner if > desired. > > Cc: Harry Wentland <harry.wentl...@amd.com> > Reported-by: Przemysław Kopa <prz.k...@gmail.com> > Closes: > https://lore.kernel.org/amd-gfx/1cea0d56-7739-4ad9-bf8e-c9330faea...@kernel.org/T/#m383d9c08397043a271b36c32b64bb80e524e4b0f > Tested-by: Przemysław Kopa <prz.k...@gmail.com> > Reported-by: Kalvin <hikaph+...@gmail.com> > Closes: https://github.com/alsa-project/alsa-lib/issues/465 > Closes: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4809 > Cc: sta...@vger.kernel.org > Fixes: 50e0bae34fa6b ("drm/amd/display: Add and use new dm_prepare_suspend() > callback") > Signed-off-by: Mario Limonciello <mario.limoncie...@amd.com>
Acked-by: Alex Deucher <alexander.deuc...@amd.com> > --- > NOTE: The complete pmops callback is still present but does nothing right now. > It's left for completeness sake in case another IP needs to do something in > prepare() > and undo it in a failure with complete(). > > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 21 ------------------- > 1 file changed, 21 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > index e34d98a945f2..fadc6098eaee 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -3182,25 +3182,6 @@ static void dm_destroy_cached_state(struct > amdgpu_device *adev) > dm->cached_state = NULL; > } > > -static void dm_complete(struct amdgpu_ip_block *ip_block) > -{ > - struct amdgpu_device *adev = ip_block->adev; > - > - dm_destroy_cached_state(adev); > -} > - > -static int dm_prepare_suspend(struct amdgpu_ip_block *ip_block) > -{ > - struct amdgpu_device *adev = ip_block->adev; > - > - if (amdgpu_in_reset(adev)) > - return 0; > - > - WARN_ON(adev->dm.cached_state); > - > - return dm_cache_state(adev); > -} > - > static int dm_suspend(struct amdgpu_ip_block *ip_block) > { > struct amdgpu_device *adev = ip_block->adev; > @@ -3626,10 +3607,8 @@ static const struct amd_ip_funcs amdgpu_dm_funcs = { > .early_fini = amdgpu_dm_early_fini, > .hw_init = dm_hw_init, > .hw_fini = dm_hw_fini, > - .prepare_suspend = dm_prepare_suspend, > .suspend = dm_suspend, > .resume = dm_resume, > - .complete = dm_complete, > .is_idle = dm_is_idle, > .wait_for_idle = dm_wait_for_idle, > .check_soft_reset = dm_check_soft_reset, > -- > 2.49.0 >