diff options
author | Rex Zhu <Rex.Zhu@amd.com> | 2017-05-05 04:50:36 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-05-10 13:36:35 -0400 |
commit | 2fde9ab218b7f8446c2428b7f9dad602afce8be6 (patch) | |
tree | 22b88c42b6c845a21bbaa27212703aab21095851 | |
parent | 7522ffc41b73a3dd1f9d19164f033bd649c0404b (diff) |
drm/amd/powerplay: refine pwm1_enable callback functions for vi.
Use the new enums for setting and getting the fan control mode.
Fixes problems due to previous inconsistencies between enums.
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 35 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 1 |
4 files changed, 27 insertions, 20 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c index b3d42858f68b..a74a3db3056c 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | |||
@@ -4334,26 +4334,31 @@ static int smu7_print_clock_levels(struct pp_hwmgr *hwmgr, | |||
4334 | 4334 | ||
4335 | static int smu7_set_fan_control_mode(struct pp_hwmgr *hwmgr, uint32_t mode) | 4335 | static int smu7_set_fan_control_mode(struct pp_hwmgr *hwmgr, uint32_t mode) |
4336 | { | 4336 | { |
4337 | if (mode) { | 4337 | int result = 0; |
4338 | /* stop auto-manage */ | ||
4339 | if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, | ||
4340 | PHM_PlatformCaps_MicrocodeFanControl)) | ||
4341 | smu7_fan_ctrl_stop_smc_fan_control(hwmgr); | ||
4342 | smu7_fan_ctrl_set_static_mode(hwmgr, mode); | ||
4343 | } else | ||
4344 | /* restart auto-manage */ | ||
4345 | smu7_fan_ctrl_reset_fan_speed_to_default(hwmgr); | ||
4346 | 4338 | ||
4347 | return 0; | 4339 | switch (mode) { |
4340 | case AMD_FAN_CTRL_NONE: | ||
4341 | result = smu7_fan_ctrl_set_fan_speed_percent(hwmgr, 100); | ||
4342 | break; | ||
4343 | case AMD_FAN_CTRL_MANUAL: | ||
4344 | if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, | ||
4345 | PHM_PlatformCaps_MicrocodeFanControl)) | ||
4346 | result = smu7_fan_ctrl_stop_smc_fan_control(hwmgr); | ||
4347 | break; | ||
4348 | case AMD_FAN_CTRL_AUTO: | ||
4349 | result = smu7_fan_ctrl_set_static_mode(hwmgr, mode); | ||
4350 | if (!result) | ||
4351 | result = smu7_fan_ctrl_start_smc_fan_control(hwmgr); | ||
4352 | break; | ||
4353 | default: | ||
4354 | break; | ||
4355 | } | ||
4356 | return result; | ||
4348 | } | 4357 | } |
4349 | 4358 | ||
4350 | static int smu7_get_fan_control_mode(struct pp_hwmgr *hwmgr) | 4359 | static int smu7_get_fan_control_mode(struct pp_hwmgr *hwmgr) |
4351 | { | 4360 | { |
4352 | if (hwmgr->fan_ctrl_is_in_default_mode) | 4361 | return hwmgr->fan_ctrl_enabled ? AMD_FAN_CTRL_AUTO : AMD_FAN_CTRL_MANUAL; |
4353 | return hwmgr->fan_ctrl_default_mode; | ||
4354 | else | ||
4355 | return PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, | ||
4356 | CG_FDO_CTRL2, FDO_PWM_MODE); | ||
4357 | } | 4362 | } |
4358 | 4363 | ||
4359 | static int smu7_get_sclk_od(struct pp_hwmgr *hwmgr) | 4364 | static int smu7_get_sclk_od(struct pp_hwmgr *hwmgr) |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.c index 436ca5ce8248..baddb569a8b8 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.c | |||
@@ -112,10 +112,9 @@ int smu7_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *speed) | |||
112 | */ | 112 | */ |
113 | int smu7_fan_ctrl_set_static_mode(struct pp_hwmgr *hwmgr, uint32_t mode) | 113 | int smu7_fan_ctrl_set_static_mode(struct pp_hwmgr *hwmgr, uint32_t mode) |
114 | { | 114 | { |
115 | |||
116 | if (hwmgr->fan_ctrl_is_in_default_mode) { | 115 | if (hwmgr->fan_ctrl_is_in_default_mode) { |
117 | hwmgr->fan_ctrl_default_mode = | 116 | hwmgr->fan_ctrl_default_mode = |
118 | PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, | 117 | PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, |
119 | CG_FDO_CTRL2, FDO_PWM_MODE); | 118 | CG_FDO_CTRL2, FDO_PWM_MODE); |
120 | hwmgr->tmin = | 119 | hwmgr->tmin = |
121 | PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, | 120 | PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, |
@@ -149,7 +148,7 @@ int smu7_fan_ctrl_set_default_mode(struct pp_hwmgr *hwmgr) | |||
149 | return 0; | 148 | return 0; |
150 | } | 149 | } |
151 | 150 | ||
152 | static int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr) | 151 | int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr) |
153 | { | 152 | { |
154 | int result; | 153 | int result; |
155 | 154 | ||
@@ -179,6 +178,7 @@ static int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr) | |||
179 | PPSMC_MSG_SetFanTemperatureTarget, | 178 | PPSMC_MSG_SetFanTemperatureTarget, |
180 | hwmgr->thermal_controller. | 179 | hwmgr->thermal_controller. |
181 | advanceFanControlParameters.ucTargetTemperature); | 180 | advanceFanControlParameters.ucTargetTemperature); |
181 | hwmgr->fan_ctrl_enabled = true; | ||
182 | 182 | ||
183 | return result; | 183 | return result; |
184 | } | 184 | } |
@@ -186,6 +186,7 @@ static int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr) | |||
186 | 186 | ||
187 | int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr) | 187 | int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr) |
188 | { | 188 | { |
189 | hwmgr->fan_ctrl_enabled = false; | ||
189 | return smum_send_msg_to_smc(hwmgr->smumgr, PPSMC_StopFanControl); | 190 | return smum_send_msg_to_smc(hwmgr->smumgr, PPSMC_StopFanControl); |
190 | } | 191 | } |
191 | 192 | ||
@@ -280,7 +281,7 @@ int smu7_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed) | |||
280 | PHM_WRITE_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, | 281 | PHM_WRITE_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, |
281 | CG_TACH_STATUS, TACH_PERIOD, tach_period); | 282 | CG_TACH_STATUS, TACH_PERIOD, tach_period); |
282 | 283 | ||
283 | return smu7_fan_ctrl_set_static_mode(hwmgr, FDO_PWM_MODE_STATIC); | 284 | return smu7_fan_ctrl_set_static_mode(hwmgr, FDO_PWM_MODE_STATIC_RPM); |
284 | } | 285 | } |
285 | 286 | ||
286 | /** | 287 | /** |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.h b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.h index 2ed774db42c7..ba71b608fa75 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.h +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.h | |||
@@ -54,6 +54,6 @@ extern int smu7_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *spe | |||
54 | extern int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr); | 54 | extern int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr); |
55 | extern int smu7_thermal_enable_alert(struct pp_hwmgr *hwmgr); | 55 | extern int smu7_thermal_enable_alert(struct pp_hwmgr *hwmgr); |
56 | extern int smu7_thermal_disable_alert(struct pp_hwmgr *hwmgr); | 56 | extern int smu7_thermal_disable_alert(struct pp_hwmgr *hwmgr); |
57 | 57 | extern int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr); | |
58 | #endif | 58 | #endif |
59 | 59 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h index e4574c215c38..805b9df452a3 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h +++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | |||
@@ -764,6 +764,7 @@ struct pp_hwmgr { | |||
764 | struct pp_thermal_controller_info thermal_controller; | 764 | struct pp_thermal_controller_info thermal_controller; |
765 | bool fan_ctrl_is_in_default_mode; | 765 | bool fan_ctrl_is_in_default_mode; |
766 | uint32_t fan_ctrl_default_mode; | 766 | uint32_t fan_ctrl_default_mode; |
767 | bool fan_ctrl_enabled; | ||
767 | uint32_t tmin; | 768 | uint32_t tmin; |
768 | struct phm_microcode_version_info microcode_version_info; | 769 | struct phm_microcode_version_info microcode_version_info; |
769 | uint32_t ps_size; | 770 | uint32_t ps_size; |