@@ -1627,6 +1627,39 @@ static void smu_v14_0_2_get_unique_id(struct smu_context *smu)
1627
1627
adev -> unique_id = ((uint64_t )upper32 << 32 ) | lower32 ;
1628
1628
}
1629
1629
1630
+ static int smu_v14_0_2_get_fan_speed_pwm (struct smu_context * smu ,
1631
+ uint32_t * speed )
1632
+ {
1633
+ int ret ;
1634
+
1635
+ if (!speed )
1636
+ return - EINVAL ;
1637
+
1638
+ ret = smu_v14_0_2_get_smu_metrics_data (smu ,
1639
+ METRICS_CURR_FANPWM ,
1640
+ speed );
1641
+ if (ret ) {
1642
+ dev_err (smu -> adev -> dev , "Failed to get fan speed(PWM)!" );
1643
+ return ret ;
1644
+ }
1645
+
1646
+ /* Convert the PMFW output which is in percent to pwm(255) based */
1647
+ * speed = min (* speed * 255 / 100 , (uint32_t )255 );
1648
+
1649
+ return 0 ;
1650
+ }
1651
+
1652
+ static int smu_v14_0_2_get_fan_speed_rpm (struct smu_context * smu ,
1653
+ uint32_t * speed )
1654
+ {
1655
+ if (!speed )
1656
+ return - EINVAL ;
1657
+
1658
+ return smu_v14_0_2_get_smu_metrics_data (smu ,
1659
+ METRICS_CURR_FANSPEED ,
1660
+ speed );
1661
+ }
1662
+
1630
1663
static int smu_v14_0_2_get_power_limit (struct smu_context * smu ,
1631
1664
uint32_t * current_power_limit ,
1632
1665
uint32_t * default_power_limit ,
@@ -2804,6 +2837,8 @@ static const struct pptable_funcs smu_v14_0_2_ppt_funcs = {
2804
2837
.set_performance_level = smu_v14_0_set_performance_level ,
2805
2838
.gfx_off_control = smu_v14_0_gfx_off_control ,
2806
2839
.get_unique_id = smu_v14_0_2_get_unique_id ,
2840
+ .get_fan_speed_pwm = smu_v14_0_2_get_fan_speed_pwm ,
2841
+ .get_fan_speed_rpm = smu_v14_0_2_get_fan_speed_rpm ,
2807
2842
.get_power_limit = smu_v14_0_2_get_power_limit ,
2808
2843
.set_power_limit = smu_v14_0_2_set_power_limit ,
2809
2844
.get_power_profile_mode = smu_v14_0_2_get_power_profile_mode ,
0 commit comments