]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu: restore UMD profile pstate after runtime resume
authorCandice Li <candice.li@amd.com>
Tue, 21 Jul 2026 13:38:58 +0000 (21:38 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 29 Jul 2026 00:00:49 +0000 (20:00 -0400)
Runtime suspend runs GFX hw_fini and clears perfmon clock gating while
the UMD profile DPM level remains set in software.  Re-apply stable
pstate after a successful runtime resume when a profile mode is active.

Signed-off-by: Candice Li <candice.li@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Yang Wang <kevinyang.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 138531c8850cc247aa12b104bb29ea387bcdcbb1)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c

index 4c0c77eafbd1c4de71684502e1a7f1b69bf334ce..1aed121f4ddb6773d07ae3e071ac552894f7ff9c 100644 (file)
@@ -2908,6 +2908,19 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)
        return 0;
 }
 
+static void amdgpu_restore_umd_profile_pstate_after_runpm(struct amdgpu_device *adev)
+{
+       enum amd_dpm_forced_level level;
+       uint32_t profile_mode_mask = AMD_DPM_FORCED_LEVEL_PROFILE_STANDARD |
+               AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK |
+               AMD_DPM_FORCED_LEVEL_PROFILE_MIN_MCLK |
+               AMD_DPM_FORCED_LEVEL_PROFILE_PEAK;
+
+       level = amdgpu_dpm_get_performance_level(adev);
+       if (level & profile_mode_mask)
+               amdgpu_asic_update_umd_stable_pstate(adev, true);
+}
+
 static int amdgpu_pmops_runtime_resume(struct device *dev)
 {
        struct pci_dev *pdev = to_pci_dev(dev);
@@ -2952,6 +2965,8 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)
 
        if (adev->pm.rpm_mode == AMDGPU_RUNPM_PX)
                drm_dev->switch_power_state = DRM_SWITCH_POWER_ON;
+
+       amdgpu_restore_umd_profile_pstate_after_runpm(adev);
        adev->in_runpm = false;
        return 0;
 }