drm/amdgpu/smu11.5: restore cclks in vangogh_set_performance_level
authorAlex Deucher <alexander.deucher@amd.com>
Mon, 24 Jan 2022 21:08:32 +0000 (16:08 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 17 Feb 2022 20:59:05 +0000 (15:59 -0500)
When we disable manual clock setting, we need to restore the cclks
as well as the gfxclk.

Acked-by: Huang Rui <ray.huang@amd.com>
Acked-by: Evan Quan <evan.quan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c

index 96a5b31..5551e14 100644 (file)
@@ -1384,7 +1384,7 @@ static int vangogh_set_peak_clock_by_device(struct smu_context *smu)
 static int vangogh_set_performance_level(struct smu_context *smu,
                                        enum amd_dpm_forced_level level)
 {
-       int ret = 0;
+       int ret = 0, i;
        uint32_t soc_mask, mclk_mask, fclk_mask;
        uint32_t vclk_mask = 0, dclk_mask = 0;
 
@@ -1478,6 +1478,24 @@ static int vangogh_set_performance_level(struct smu_context *smu,
        if (ret)
                return ret;
 
+       if (smu->adev->pm.fw_version >= 0x43f1b00) {
+               for (i = 0; i < smu->cpu_core_num; i++) {
+                       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetSoftMinCclk,
+                                                             ((i << 20)
+                                                              | smu->cpu_actual_soft_min_freq),
+                                                             NULL);
+                       if (ret)
+                               return ret;
+
+                       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetSoftMaxCclk,
+                                                             ((i << 20)
+                                                              | smu->cpu_actual_soft_max_freq),
+                                                             NULL);
+                       if (ret)
+                               return ret;
+               }
+       }
+
        return ret;
 }