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;
 	}
 }