diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c index f0cc4de9ced5008b1141a9b4fe75c04d15c58e81..ee7827c55626ef977dd6dc767612f90020e0407f 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c @@ -1098,7 +1098,16 @@ static int arcturus_get_fan_speed_percent(struct smu_context *smu, *speed = rpm * 100 / smu->fan_max_rpm; return ret; default: - *speed = smu->user_dpm_profile.fan_speed_percent; + if (smu->user_dpm_profile.fan_speed_percent) { + *speed = smu->user_dpm_profile.fan_speed_percent; + } else { + ret = arcturus_get_smu_metrics_data(smu, + METRICS_CURR_FANSPEED, + &rpm); + if (!ret && smu->fan_max_rpm) + *speed = rpm * 100 / smu->fan_max_rpm; + return ret; + } return 0; } } diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c index f7f78daffd2759fb8c07db9a7bb10cf6dd20eb1d..943f870f1109ee5d07925bd82348c106bd835c6a 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c @@ -1335,7 +1335,16 @@ static int navi10_get_fan_speed_percent(struct smu_context *smu, *speed = rpm * 100 / smu->fan_max_rpm; return ret; default: - *speed = smu->user_dpm_profile.fan_speed_percent; + if (smu->user_dpm_profile.fan_speed_percent) { + *speed = smu->user_dpm_profile.fan_speed_percent; + } else { + ret = navi10_get_smu_metrics_data(smu, + METRICS_CURR_FANSPEED, + &rpm); + if (!ret && smu->fan_max_rpm) + *speed = rpm * 100 / smu->fan_max_rpm; + return ret; + } return 0; } } diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c index e3ba40d9f83f9900768de9c27952720391ac14f7..5447ecfe5984581d79ca352914ee5277506cf897 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c @@ -1255,7 +1255,16 @@ static int sienna_cichlid_get_fan_speed_percent(struct smu_context *smu, *speed = rpm * 100 / smu->fan_max_rpm; return ret; default: - *speed = smu->user_dpm_profile.fan_speed_percent; + if (smu->user_dpm_profile.fan_speed_percent) { + *speed = smu->user_dpm_profile.fan_speed_percent; + } else { + ret = sienna_cichlid_get_smu_metrics_data(smu, + METRICS_CURR_FANSPEED, + &rpm); + if (!ret && smu->fan_max_rpm) + *speed = rpm * 100 / smu->fan_max_rpm; + return ret; + } return 0; } }