[PATCH] drm/amdgpu/smu13: set the threshold for TEMP_HOTSPOT throttling

Umio Yasuno coelacanth_dream at protonmail.com
Fri May 2 06:40:44 UTC 2025


ThrottlingPercentage for TEMP_HOTSPOT on SMU v13.0.0/7 is almost always
greater then or equal to 1, so we set the threshold value.

Link: https://gitlab.freedesktop.org/drm/amd/-/issues/3251

Signed-off-by: Umio Yasuno <coelacanth_dream at protonmail.com>
---
 .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c    | 13 ++++++++++---
 .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c    | 13 ++++++++++---
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
index 5a9711e8c..f708f0ccd 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
@@ -744,14 +744,21 @@ static int smu_v13_0_0_system_features_control(struct smu_context *smu,
 	return smu_v13_0_system_features_control(smu, en);
 }
 
+#define SMU_13_0_0_TEMP_HOTSPOT_THRESHOLD	90
 static uint32_t smu_v13_0_get_throttler_status(SmuMetrics_t *metrics)
 {
 	uint32_t throttler_status = 0;
 	int i;
 
-	for (i = 0; i < THROTTLER_COUNT; i++)
-		throttler_status |=
-			(metrics->ThrottlingPercentage[i] ? 1U << i : 0);
+	for (i = 0; i < THROTTLER_COUNT; i++) {
+		if(i == THROTTLER_TEMP_HOTSPOT_BIT) {
+			throttler_status |=
+				((metrics->ThrottlingPercentage[i] >= SMU_13_0_0_TEMP_HOTSPOT_THRESHOLD) ? 1U << i : 0);
+		} else {
+			throttler_status |=
+				(metrics->ThrottlingPercentage[i] ? 1U << i : 0);
+		}
+	}
 
 	return throttler_status;
 }
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
index c8f4f6fb4..ff49b835b 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
@@ -736,14 +736,21 @@ static bool smu_v13_0_7_is_dpm_running(struct smu_context *smu)
 	return !!(feature_enabled & SMC_DPM_FEATURE);
 }
 
+#define SMU_13_0_7_TEMP_HOTSPOT_THRESHOLD	90
 static uint32_t smu_v13_0_7_get_throttler_status(SmuMetrics_t *metrics)
 {
 	uint32_t throttler_status = 0;
 	int i;
 
-	for (i = 0; i < THROTTLER_COUNT; i++)
-		throttler_status |=
-			(metrics->ThrottlingPercentage[i] ? 1U << i : 0);
+	for (i = 0; i < THROTTLER_COUNT; i++) {
+		if(i == THROTTLER_TEMP_HOTSPOT_BIT) {
+			throttler_status |=
+				((metrics->ThrottlingPercentage[i] >= SMU_13_0_7_TEMP_HOTSPOT_THRESHOLD) ? 1U << i : 0);
+		} else {
+			throttler_status |=
+				(metrics->ThrottlingPercentage[i] ? 1U << i : 0);
+		}
+	}
 
 	return throttler_status;
 }
-- 
2.39.5




More information about the amd-gfx mailing list