[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