Skip to content

Commit 7522ffc

Browse files
Rex Zhualexdeucher
authored andcommitted
drm/amd/powerplay: refine pwm1_enable callback functions for Vega10.
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 aad22ca commit 7522ffc

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed

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

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3921,32 +3921,36 @@ static int vega10_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,
39213921

39223922
static int vega10_set_fan_control_mode(struct pp_hwmgr *hwmgr, uint32_t mode)
39233923
{
3924-
if (mode) {
3925-
/* stop auto-manage */
3926-
if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
3927-
PHM_PlatformCaps_MicrocodeFanControl))
3928-
vega10_fan_ctrl_stop_smc_fan_control(hwmgr);
3929-
vega10_fan_ctrl_set_static_mode(hwmgr, mode);
3930-
} else
3931-
/* restart auto-manage */
3932-
vega10_fan_ctrl_reset_fan_speed_to_default(hwmgr);
3924+
int result = 0;
39333925

3934-
return 0;
3926+
switch (mode) {
3927+
case AMD_FAN_CTRL_NONE:
3928+
result = vega10_fan_ctrl_set_fan_speed_percent(hwmgr, 100);
3929+
break;
3930+
case AMD_FAN_CTRL_MANUAL:
3931+
if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
3932+
PHM_PlatformCaps_MicrocodeFanControl))
3933+
result = vega10_fan_ctrl_stop_smc_fan_control(hwmgr);
3934+
break;
3935+
case AMD_FAN_CTRL_AUTO:
3936+
result = vega10_fan_ctrl_set_static_mode(hwmgr, mode);
3937+
if (!result)
3938+
result = vega10_fan_ctrl_start_smc_fan_control(hwmgr);
3939+
break;
3940+
default:
3941+
break;
3942+
}
3943+
return result;
39353944
}
39363945

39373946
static int vega10_get_fan_control_mode(struct pp_hwmgr *hwmgr)
39383947
{
3939-
uint32_t reg;
3948+
struct vega10_hwmgr *data = (struct vega10_hwmgr *)(hwmgr->backend);
39403949

3941-
if (hwmgr->fan_ctrl_is_in_default_mode) {
3942-
return hwmgr->fan_ctrl_default_mode;
3943-
} else {
3944-
reg = soc15_get_register_offset(THM_HWID, 0,
3945-
mmCG_FDO_CTRL2_BASE_IDX, mmCG_FDO_CTRL2);
3946-
return (cgs_read_register(hwmgr->device, reg) &
3947-
CG_FDO_CTRL2__FDO_PWM_MODE_MASK) >>
3948-
CG_FDO_CTRL2__FDO_PWM_MODE__SHIFT;
3949-
}
3950+
if (data->smu_features[GNLD_FAN_CONTROL].enabled == false)
3951+
return AMD_FAN_CTRL_MANUAL;
3952+
else
3953+
return AMD_FAN_CTRL_AUTO;
39503954
}
39513955

39523956
static int vega10_get_dal_power_level(struct pp_hwmgr *hwmgr,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ extern int vega10_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr,
7979
extern int vega10_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr);
8080
extern uint32_t smu7_get_xclk(struct pp_hwmgr *hwmgr);
8181
extern int vega10_thermal_disable_alert(struct pp_hwmgr *hwmgr);
82+
int vega10_fan_ctrl_start_smc_fan_control(struct pp_hwmgr *hwmgr);
8283

8384
#endif
8485

0 commit comments

Comments
 (0)