Commit 9610a3bf authored by Evan Quan's avatar Evan Quan Committed by Alex Deucher

drm/amd/pm: setup zero rpm parameters for polaris10

Only if the ZeroRPM feature is supported.
Signed-off-by: default avatarEvan Quan <evan.quan@amd.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c420418f
...@@ -394,6 +394,7 @@ typedef uint16_t PPSMC_Result; ...@@ -394,6 +394,7 @@ typedef uint16_t PPSMC_Result;
#define PPSMC_MSG_SetGpuPllDfsForSclk ((uint16_t) 0x300) #define PPSMC_MSG_SetGpuPllDfsForSclk ((uint16_t) 0x300)
#define PPSMC_MSG_Didt_Block_Function ((uint16_t) 0x301) #define PPSMC_MSG_Didt_Block_Function ((uint16_t) 0x301)
#define PPSMC_MSG_EnableZeroRpm ((uint16_t) 0x302)
#define PPSMC_MSG_SetVBITimeout ((uint16_t) 0x306) #define PPSMC_MSG_SetVBITimeout ((uint16_t) 0x306)
......
...@@ -175,6 +175,17 @@ int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr) ...@@ -175,6 +175,17 @@ int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr)
hwmgr->thermal_controller. hwmgr->thermal_controller.
advanceFanControlParameters.ucTargetTemperature, advanceFanControlParameters.ucTargetTemperature,
NULL); 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; hwmgr->fan_ctrl_enabled = true;
return result; return result;
......
...@@ -470,6 +470,21 @@ static int polaris10_populate_bapm_parameters_in_dpm_table(struct pp_hwmgr *hwmg ...@@ -470,6 +470,21 @@ static int polaris10_populate_bapm_parameters_in_dpm_table(struct pp_hwmgr *hwmg
return 0; 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) static int polaris10_populate_svi_load_line(struct pp_hwmgr *hwmgr)
{ {
struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(hwmgr->smu_backend); 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) ...@@ -1949,6 +1964,8 @@ static int polaris10_init_smc_table(struct pp_hwmgr *hwmgr)
PP_ASSERT_WITH_CODE(0 == result, PP_ASSERT_WITH_CODE(0 == result,
"Failed to populate BAPM Parameters!", return result); "Failed to populate BAPM Parameters!", return result);
polaris10_populate_zero_rpm_parameters(hwmgr);
if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
PHM_PlatformCaps_ClockStretcher)) { PHM_PlatformCaps_ClockStretcher)) {
result = polaris10_populate_clock_stretcher_data_table(hwmgr); result = polaris10_populate_clock_stretcher_data_table(hwmgr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment