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>
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
index 3cde272..80e2944 100644
--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -5976,6 +5976,10 @@
 	slope1 = (u16)((50 + ((16 * duty100 * pwm_diff1) / t_diff1)) / 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.slope2 = cpu_to_be16(slope2);
 
@@ -6045,16 +6049,12 @@
 int si_fan_ctrl_get_fan_speed_percent(struct radeon_device *rdev,
 				      u32 *speed)
 {
-	struct si_power_info *si_pi = si_get_pi(rdev);
 	u32 duty, duty100;
 	u64 tmp64;
 
 	if (rdev->pm.no_fan)
 		return -ENOENT;
 
-	if (si_pi->fan_is_controlled_by_smc)
- 		return -EINVAL;
-
 	duty100 = (RREG32(CG_FDO_CTRL1) & FMAX_DUTY100_MASK) >> FMAX_DUTY100_SHIFT;
 	duty = (RREG32(CG_THERMAL_STATUS) & FDO_PWM_DUTY_MASK) >> FDO_PWM_DUTY_SHIFT;
 
@@ -6074,6 +6074,7 @@
 int si_fan_ctrl_set_fan_speed_percent(struct radeon_device *rdev,
 				      u32 speed)
 {
+	struct si_power_info *si_pi = si_get_pi(rdev);
 	u32 tmp;
 	u32 duty, duty100;
 	u64 tmp64;
@@ -6081,6 +6082,9 @@
 	if (rdev->pm.no_fan)
 		return -ENOENT;
 
+	if (si_pi->fan_is_controlled_by_smc)
+		return -EINVAL;
+
 	if (speed > 100)
 		return -EINVAL;