fixes for SI fan handling
Added temperature values to SMC payload. Fan mode check moved check to proper place. Signed-off-by: Oleg Chernovskiy <algonkvel@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
5e8150a687
commit
47fd97ca73
|
@ -5976,6 +5976,10 @@ static int si_thermal_setup_fan_table(struct radeon_device *rdev)
|
||||||
slope1 = (u16)((50 + ((16 * duty100 * pwm_diff1) / t_diff1)) / 100);
|
slope1 = (u16)((50 + ((16 * duty100 * pwm_diff1) / t_diff1)) / 100);
|
||||||
slope2 = (u16)((50 + ((16 * duty100 * pwm_diff2) / t_diff2)) / 100);
|
slope2 = (u16)((50 + ((16 * duty100 * pwm_diff2) / t_diff2)) / 100);
|
||||||
|
|
||||||
|
fan_table.temp_min = cpu_to_be16((50 + rdev->pm.dpm.fan.t_min) / 100);
|
||||||
|
fan_table.temp_med = cpu_to_be16((50 + rdev->pm.dpm.fan.t_med) / 100);
|
||||||
|
fan_table.temp_max = cpu_to_be16((50 + rdev->pm.dpm.fan.t_max) / 100);
|
||||||
|
|
||||||
fan_table.slope1 = cpu_to_be16(slope1);
|
fan_table.slope1 = cpu_to_be16(slope1);
|
||||||
fan_table.slope2 = cpu_to_be16(slope2);
|
fan_table.slope2 = cpu_to_be16(slope2);
|
||||||
|
|
||||||
|
@ -6045,16 +6049,12 @@ static int si_fan_ctrl_stop_smc_fan_control(struct radeon_device *rdev)
|
||||||
int si_fan_ctrl_get_fan_speed_percent(struct radeon_device *rdev,
|
int si_fan_ctrl_get_fan_speed_percent(struct radeon_device *rdev,
|
||||||
u32 *speed)
|
u32 *speed)
|
||||||
{
|
{
|
||||||
struct si_power_info *si_pi = si_get_pi(rdev);
|
|
||||||
u32 duty, duty100;
|
u32 duty, duty100;
|
||||||
u64 tmp64;
|
u64 tmp64;
|
||||||
|
|
||||||
if (rdev->pm.no_fan)
|
if (rdev->pm.no_fan)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
if (si_pi->fan_is_controlled_by_smc)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
duty100 = (RREG32(CG_FDO_CTRL1) & FMAX_DUTY100_MASK) >> FMAX_DUTY100_SHIFT;
|
duty100 = (RREG32(CG_FDO_CTRL1) & FMAX_DUTY100_MASK) >> FMAX_DUTY100_SHIFT;
|
||||||
duty = (RREG32(CG_THERMAL_STATUS) & FDO_PWM_DUTY_MASK) >> FDO_PWM_DUTY_SHIFT;
|
duty = (RREG32(CG_THERMAL_STATUS) & FDO_PWM_DUTY_MASK) >> FDO_PWM_DUTY_SHIFT;
|
||||||
|
|
||||||
|
@ -6074,6 +6074,7 @@ int si_fan_ctrl_get_fan_speed_percent(struct radeon_device *rdev,
|
||||||
int si_fan_ctrl_set_fan_speed_percent(struct radeon_device *rdev,
|
int si_fan_ctrl_set_fan_speed_percent(struct radeon_device *rdev,
|
||||||
u32 speed)
|
u32 speed)
|
||||||
{
|
{
|
||||||
|
struct si_power_info *si_pi = si_get_pi(rdev);
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
u32 duty, duty100;
|
u32 duty, duty100;
|
||||||
u64 tmp64;
|
u64 tmp64;
|
||||||
|
@ -6081,6 +6082,9 @@ int si_fan_ctrl_set_fan_speed_percent(struct radeon_device *rdev,
|
||||||
if (rdev->pm.no_fan)
|
if (rdev->pm.no_fan)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
|
if (si_pi->fan_is_controlled_by_smc)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (speed > 100)
|
if (speed > 100)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue