On 9/4/2025 8:03 AM, Przemysław Kopa wrote:
I'm attaching two new dmesg logs.

Sorry, I attached wrong files to my previous message. The proper ones are attached to this one.

I'm guessing what's going on is a race between the HDMI device going to D3 through snd-hda-intel (which provides HDMI) and the prepare() callback.

The easiest solution will be to drop the prepare() and complete() callbacks, but I will need to think about this because we had a variety of reasons for adding them.

Have a try with this diff on 6.17-rc4.

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 a0ca3b2c6bd8..d83aeeaf5653 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -3127,25 +3127,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;
@@ -3571,10 +3552,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,

Reply via email to