Skip to content

Commit 2fde9ab

Browse files
Rex Zhualexdeucher
authored andcommitted
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>
1 parent 7522ffc commit 2fde9ab

File tree

4 files changed

+27
-20
lines changed

4 files changed

+27
-20
lines changed

drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4334,26 +4334,31 @@ static int smu7_print_clock_levels(struct pp_hwmgr *hwmgr,
43344334

43354335
static int smu7_set_fan_control_mode(struct pp_hwmgr *hwmgr, uint32_t mode)
43364336
{
4337-
if (mode) {
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);
4337+
int result = 0;
43464338

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;
43484357
}
43494358

43504359
static int smu7_get_fan_control_mode(struct pp_hwmgr *hwmgr)
43514360
{
4352-
if (hwmgr->fan_ctrl_is_in_default_mode)
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);
4361+
return hwmgr->fan_ctrl_enabled ? AMD_FAN_CTRL_AUTO : AMD_FAN_CTRL_MANUAL;
43574362
}
43584363

43594364
static int smu7_get_sclk_od(struct pp_hwmgr *hwmgr)

drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,9 @@ int smu7_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *speed)
112112
*/
113113
int smu7_fan_ctrl_set_static_mode(struct pp_hwmgr *hwmgr, uint32_t mode)
114114
{
115-
116115
if (hwmgr->fan_ctrl_is_in_default_mode) {
117116
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,
119118
CG_FDO_CTRL2, FDO_PWM_MODE);
120119
hwmgr->tmin =
121120
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)
149148
return 0;
150149
}
151150

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)
153152
{
154153
int result;
155154

@@ -179,13 +178,15 @@ static int smu7_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr)
179178
PPSMC_MSG_SetFanTemperatureTarget,
180179
hwmgr->thermal_controller.
181180
advanceFanControlParameters.ucTargetTemperature);
181+
hwmgr->fan_ctrl_enabled = true;
182182

183183
return result;
184184
}
185185

186186

187187
int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr)
188188
{
189+
hwmgr->fan_ctrl_enabled = false;
189190
return smum_send_msg_to_smc(hwmgr->smumgr, PPSMC_StopFanControl);
190191
}
191192

@@ -280,7 +281,7 @@ int smu7_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed)
280281
PHM_WRITE_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC,
281282
CG_TACH_STATUS, TACH_PERIOD, tach_period);
282283

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);
284285
}
285286

286287
/**

drivers/gpu/drm/amd/powerplay/hwmgr/smu7_thermal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,6 @@ extern int smu7_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *spe
5454
extern int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr);
5555
extern int smu7_thermal_enable_alert(struct pp_hwmgr *hwmgr);
5656
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);
5858
#endif
5959

drivers/gpu/drm/amd/powerplay/inc/hwmgr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,7 @@ struct pp_hwmgr {
764764
struct pp_thermal_controller_info thermal_controller;
765765
bool fan_ctrl_is_in_default_mode;
766766
uint32_t fan_ctrl_default_mode;
767+
bool fan_ctrl_enabled;
767768
uint32_t tmin;
768769
struct phm_microcode_version_info microcode_version_info;
769770
uint32_t ps_size;

0 commit comments

Comments
 (0)