summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Wang <kevinyang.wang@amd.com>2026-01-12 17:48:26 +0800
committerAlex Deucher <alexander.deucher@amd.com>2026-01-14 14:28:49 -0500
commitd81e52fc61fb98dc98f9fdb166ab21f502cb701c (patch)
tree465e225dd6fd0d6fe3805f5b6e6384509a68d78e
parent6c160001661b6c4e20f5c31909c722741e14c2d8 (diff)
drm/amd/pm: fix issue of missing '*' on pp_dpm_xxx nodes
refine the code to fix '*' missing on pp_dpm_xxx series node. e.g.: missing '*' on navi10 pp_dpm_sclk $ cat /sys/class/drm/card0/device/pp_dpm_sclk 0: 300Mhz 1: 1930Mhz (missing symbol '*') Fixes: a08ea4bc7711 ("drm/amd/pm: Add a helper to show dpm table") Signed-off-by: Yang Wang <kevinyang.wang@amd.com> Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
index 5b1f059105d6..24835600c1cd 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c
@@ -1286,11 +1286,11 @@ int smu_cmn_print_dpm_clk_levels(struct smu_context *smu,
struct smu_dpm_table *dpm_table,
uint32_t cur_clk, char *buf, int *offset)
{
- uint32_t min_clk, level_index, count;
- uint32_t freq_values[3] = { 0 };
+ uint32_t min_clk, max_clk, level_index, count;
+ uint32_t freq_values[3];
+ int size, lvl, i;
bool is_fine_grained;
bool is_deep_sleep;
- int size, lvl, i;
bool freq_match;
if (!dpm_table || !buf)
@@ -1301,6 +1301,7 @@ int smu_cmn_print_dpm_clk_levels(struct smu_context *smu,
count = dpm_table->count;
is_fine_grained = dpm_table->flags & SMU_DPM_TABLE_FINE_GRAINED;
min_clk = SMU_DPM_TABLE_MIN(dpm_table);
+ max_clk = SMU_DPM_TABLE_MAX(dpm_table);
/* Deep sleep - current clock < min_clock/2, TBD: cur_clk = 0 as GFXOFF */
is_deep_sleep = cur_clk < min_clk / 2;
@@ -1321,22 +1322,22 @@ int smu_cmn_print_dpm_clk_levels(struct smu_context *smu,
freq_match ? "*" : "");
}
} else {
+ count = 2;
freq_values[0] = min_clk;
- freq_values[2] = SMU_DPM_TABLE_MAX(dpm_table);
- freq_values[1] = cur_clk;
+ freq_values[1] = max_clk;
- lvl = -1;
if (!is_deep_sleep) {
- lvl = 1;
- if (smu_cmn_freqs_match(cur_clk, freq_values[0]))
+ if (smu_cmn_freqs_match(cur_clk, min_clk)) {
lvl = 0;
- else if (smu_cmn_freqs_match(cur_clk, freq_values[2]))
- lvl = 2;
- }
- count = 3;
- if (lvl != 1) {
- count = 2;
- freq_values[1] = freq_values[2];
+ } else if (smu_cmn_freqs_match(cur_clk, max_clk)) {
+ lvl = 1;
+ } else {
+ /* NOTE: use index '1' to show current clock value */
+ lvl = 1;
+ count = 3;
+ freq_values[1] = cur_clk;
+ freq_values[2] = max_clk;
+ }
}
for (i = 0; i < count; i++) {