]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/amd/pm: setup zero rpm parameters for polaris10
authorEvan Quan <evan.quan@amd.com>
Fri, 11 Sep 2020 08:21:34 +0000 (16:21 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 27 Oct 2020 15:58:39 +0000 (11:58 -0400)
Only if the ZeroRPM feature is supported.

Signed-off-by: Evan Quan <evan.quan@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/inc/smu7_ppsmc.h
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_thermal.c
drivers/gpu/drm/amd/pm/powerplay/smumgr/polaris10_smumgr.c

index 6e19f4c7cf8f9eb7bbd0e7328a8621c34f45d650..0454ec990a5e86609bc1458287e748750dcee4cd 100644 (file)
@@ -394,6 +394,7 @@ typedef uint16_t PPSMC_Result;
 
 #define PPSMC_MSG_SetGpuPllDfsForSclk         ((uint16_t) 0x300)
 #define PPSMC_MSG_Didt_Block_Function            ((uint16_t) 0x301)
+#define PPSMC_MSG_EnableZeroRpm               ((uint16_t) 0x302)
 
 #define PPSMC_MSG_SetVBITimeout               ((uint16_t) 0x306)
 
index 0b30f73649a8384ea7fe0498d1dc2a61db995eff..e3d9d969d86aca18653e122b20f2f706da1ef590 100644 (file)
@@ -175,6 +175,17 @@ int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr)
                                hwmgr->thermal_controller.
                                advanceFanControlParameters.ucTargetTemperature,
                                NULL);
+
+       if (!result &&
+           (hwmgr->chip_id == CHIP_POLARIS10 ||
+           hwmgr->chip_id == CHIP_POLARIS11 ||
+           hwmgr->chip_id == CHIP_POLARIS12) &&
+           hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM &&
+           !PP_CAP(PHM_PlatformCaps_customThermalManagement))
+               result = smum_send_msg_to_smc(hwmgr,
+                               PPSMC_MSG_EnableZeroRpm,
+                               NULL);
+
        hwmgr->fan_ctrl_enabled = true;
 
        return result;
index 9b7e9ddc5a1e3fa0ebf03eb0c7ba357667a60f7b..fad6ffb470ba4d0ff77ade5950022ed4576092e1 100644 (file)
@@ -470,6 +470,21 @@ static int polaris10_populate_bapm_parameters_in_dpm_table(struct pp_hwmgr *hwmg
        return 0;
 }
 
+static void polaris10_populate_zero_rpm_parameters(struct pp_hwmgr *hwmgr)
+{
+       struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(hwmgr->smu_backend);
+       SMU74_Discrete_DpmTable  *table = &(smu_data->smc_state_table);
+       uint16_t fan_stop_temp =
+               ((uint16_t)hwmgr->thermal_controller.advanceFanControlParameters.ucFanStopTemperature) << 8;
+       uint16_t fan_start_temp =
+               ((uint16_t)hwmgr->thermal_controller.advanceFanControlParameters.ucFanStartTemperature) << 8;
+
+       if (hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM) {
+               table->FanStartTemperature = PP_HOST_TO_SMC_US(fan_start_temp);
+               table->FanStopTemperature = PP_HOST_TO_SMC_US(fan_stop_temp);
+       }
+}
+
 static int polaris10_populate_svi_load_line(struct pp_hwmgr *hwmgr)
 {
        struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(hwmgr->smu_backend);
@@ -1949,6 +1964,8 @@ static int polaris10_init_smc_table(struct pp_hwmgr *hwmgr)
        PP_ASSERT_WITH_CODE(0 == result,
                        "Failed to populate BAPM Parameters!", return result);
 
+       polaris10_populate_zero_rpm_parameters(hwmgr);
+
        if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
                        PHM_PlatformCaps_ClockStretcher)) {
                result = polaris10_populate_clock_stretcher_data_table(hwmgr);