diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c index a6dda3470003..6dc1410b380f 100644 --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c | |||
@@ -1267,30 +1267,33 @@ static int ci_dpm_set_fan_speed_percent(struct amdgpu_device *adev, | |||
1267 | 1267 | ||
1268 | static void ci_dpm_set_fan_control_mode(struct amdgpu_device *adev, u32 mode) | 1268 | static void ci_dpm_set_fan_control_mode(struct amdgpu_device *adev, u32 mode) |
1269 | { | 1269 | { |
1270 | if (mode) { | 1270 | switch (mode) { |
1271 | /* stop auto-manage */ | 1271 | case AMD_FAN_CTRL_NONE: |
1272 | if (adev->pm.dpm.fan.ucode_fan_control) | 1272 | if (adev->pm.dpm.fan.ucode_fan_control) |
1273 | ci_fan_ctrl_stop_smc_fan_control(adev); | 1273 | ci_fan_ctrl_stop_smc_fan_control(adev); |
1274 | ci_fan_ctrl_set_static_mode(adev, mode); | 1274 | ci_dpm_set_fan_speed_percent(adev, 100); |
1275 | } else { | 1275 | break; |
1276 | /* restart auto-manage */ | 1276 | case AMD_FAN_CTRL_MANUAL: |
1277 | if (adev->pm.dpm.fan.ucode_fan_control) | ||
1278 | ci_fan_ctrl_stop_smc_fan_control(adev); | ||
1279 | break; | ||
1280 | case AMD_FAN_CTRL_AUTO: | ||
1277 | if (adev->pm.dpm.fan.ucode_fan_control) | 1281 | if (adev->pm.dpm.fan.ucode_fan_control) |
1278 | ci_thermal_start_smc_fan_control(adev); | 1282 | ci_thermal_start_smc_fan_control(adev); |
1279 | else | 1283 | break; |
1280 | ci_fan_ctrl_set_default_mode(adev); | 1284 | default: |
1285 | break; | ||
1281 | } | 1286 | } |
1282 | } | 1287 | } |
1283 | 1288 | ||
1284 | static u32 ci_dpm_get_fan_control_mode(struct amdgpu_device *adev) | 1289 | static u32 ci_dpm_get_fan_control_mode(struct amdgpu_device *adev) |
1285 | { | 1290 | { |
1286 | struct ci_power_info *pi = ci_get_pi(adev); | 1291 | struct ci_power_info *pi = ci_get_pi(adev); |
1287 | u32 tmp; | ||
1288 | 1292 | ||
1289 | if (pi->fan_is_controlled_by_smc) | 1293 | if (pi->fan_is_controlled_by_smc) |
1290 | return 0; | 1294 | return AMD_FAN_CTRL_AUTO; |
1291 | 1295 | else | |
1292 | tmp = RREG32_SMC(ixCG_FDO_CTRL2) & CG_FDO_CTRL2__FDO_PWM_MODE_MASK; | 1296 | return AMD_FAN_CTRL_MANUAL; |
1293 | return (tmp >> CG_FDO_CTRL2__FDO_PWM_MODE__SHIFT); | ||
1294 | } | 1297 | } |
1295 | 1298 | ||
1296 | #if 0 | 1299 | #if 0 |