]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Fix system resume lag issue
authorTom Chung <chiahsuan.chung@amd.com>
Tue, 20 Jan 2026 10:10:31 +0000 (18:10 +0800)
committerSasha Levin <sashal@kernel.org>
Wed, 4 Mar 2026 12:20:47 +0000 (07:20 -0500)
[ Upstream commit 64c94cd9be2e188ed07efeafa6a109bce638c967 ]

[Why]
System will try to apply idle power optimizations setting during
system resume. But system power state is still in D3 state, and
it will cause the idle power optimizations command not actually
to be sent to DMUB and cause some platforms to go into IPS.

[How]
Set power state to D0 first before calling the
dc_dmub_srv_apply_idle_power_optimizations(dm->dc, false)

Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Wayne Lin <wayne.lin@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 150cc3fc7b2a9f96a1215730b522f613060c1522..b6eee94861477bc665e4031e14032c72940b7aa5 100644 (file)
@@ -3468,7 +3468,17 @@ static int dm_resume(struct amdgpu_ip_block *ip_block)
        struct dc_commit_streams_params commit_params = {};
 
        if (dm->dc->caps.ips_support) {
+               if (!amdgpu_in_reset(adev))
+                       mutex_lock(&dm->dc_lock);
+
+               /* Need to set POWER_STATE_D0 first or it will not execute
+                * idle_power_optimizations command to DMUB.
+                */
+               dc_dmub_srv_set_power_state(dm->dc->ctx->dmub_srv, DC_ACPI_CM_POWER_STATE_D0);
                dc_dmub_srv_apply_idle_power_optimizations(dm->dc, false);
+
+               if (!amdgpu_in_reset(adev))
+                       mutex_unlock(&dm->dc_lock);
        }
 
        if (amdgpu_in_reset(adev)) {