aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2017-05-05 04:50:36 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-05-10 13:36:35 -0400
commit2fde9ab218b7f8446c2428b7f9dad602afce8be6 (patch)
tree22b88c42b6c845a21bbaa27212703aab21095851
parent7522ffc41b73a3dd1f9d19164f033bd649c0404b (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.c35
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.c9
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.h2
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/hwmgr.h1
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
4335static int smu7_set_fan_control_mode(struct pp_hwmgr *hwmgr, uint32_t mode) 4335static 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
4350static int smu7_get_fan_control_mode(struct pp_hwmgr *hwmgr) 4359static 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
4359static int smu7_get_sclk_od(struct pp_hwmgr *hwmgr) 4364static 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*/
113int smu7_fan_ctrl_set_static_mode(struct pp_hwmgr *hwmgr, uint32_t mode) 113int 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
152static int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr) 151int 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
187int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr) 187int 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
54extern int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr); 54extern int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr);
55extern int smu7_thermal_enable_alert(struct pp_hwmgr *hwmgr); 55extern int smu7_thermal_enable_alert(struct pp_hwmgr *hwmgr);
56extern int smu7_thermal_disable_alert(struct pp_hwmgr *hwmgr); 56extern int smu7_thermal_disable_alert(struct pp_hwmgr *hwmgr);
57 57extern 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;