[PATCH] drm/amd/pm: Use one level table if dpm not enabled
Lijo Lazar
lijo.lazar at amd.com
Thu Jan 30 09:20:00 UTC 2025
For SMU v13.0.6 variants, if dpm is disabled for a clock, fill current
frequency as the only level in frequency table. Also, drop Lclk table as
it is not used.
Signed-off-by: Lijo Lazar <lijo.lazar at amd.com>
---
.../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 33 +++++++++++--------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
index de533076e157..7f0b4cc1141b 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
@@ -279,6 +279,20 @@ struct PPTable_t {
sizeof(MetricsTableV1_t),\
sizeof(MetricsTableV2_t)))
+#define METRICS_CURR_FREQ_F0(clk) \
+ SMUQ10_ROUND(GET_METRIC_FIELD(clk##Frequency, version))
+#define METRICS_CURR_FREQ_F1(clk) \
+ SMUQ10_ROUND(GET_METRIC_FIELD(clk##Frequency, version)[0])
+
+#define INIT_FREQ_TABLE(type, clk, levels, f) \
+ if (!smu_cmn_clk_dpm_is_enabled(smu, type)) \
+ pptable->clk##FrequencyTable[0] = f(clk); \
+ else \
+ for (i = 0; i < levels; i++) \
+ pptable->clk##FrequencyTable[i] = SMUQ10_ROUND( \
+ GET_METRIC_FIELD(clk##FrequencyTable, \
+ version)[i]);
+
struct smu_v13_0_6_dpm_map {
enum smu_clk_type clk_type;
uint32_t feature_num;
@@ -806,20 +820,11 @@ static int smu_v13_0_6_setup_driver_pptable(struct smu_context *smu)
pptable->MinGfxclkFrequency =
SMUQ10_ROUND(GET_METRIC_FIELD(MinGfxclkFrequency, version));
- for (i = 0; i < 4; ++i) {
- pptable->FclkFrequencyTable[i] =
- SMUQ10_ROUND(GET_METRIC_FIELD(FclkFrequencyTable, version)[i]);
- pptable->UclkFrequencyTable[i] =
- SMUQ10_ROUND(GET_METRIC_FIELD(UclkFrequencyTable, version)[i]);
- pptable->SocclkFrequencyTable[i] = SMUQ10_ROUND(
- GET_METRIC_FIELD(SocclkFrequencyTable, version)[i]);
- pptable->VclkFrequencyTable[i] =
- SMUQ10_ROUND(GET_METRIC_FIELD(VclkFrequencyTable, version)[i]);
- pptable->DclkFrequencyTable[i] =
- SMUQ10_ROUND(GET_METRIC_FIELD(DclkFrequencyTable, version)[i]);
- pptable->LclkFrequencyTable[i] =
- SMUQ10_ROUND(GET_METRIC_FIELD(LclkFrequencyTable, version)[i]);
- }
+ INIT_FREQ_TABLE(SMU_FCLK, Fclk, 4, METRICS_CURR_FREQ_F0);
+ INIT_FREQ_TABLE(SMU_UCLK, Uclk, 4, METRICS_CURR_FREQ_F0);
+ INIT_FREQ_TABLE(SMU_SOCCLK, Socclk, 4, METRICS_CURR_FREQ_F1);
+ INIT_FREQ_TABLE(SMU_VCLK, Vclk, 4, METRICS_CURR_FREQ_F1);
+ INIT_FREQ_TABLE(SMU_DCLK, Dclk, 4, METRICS_CURR_FREQ_F1);
/* use AID0 serial number by default */
pptable->PublicSerialNumber_AID =
--
2.25.1
More information about the amd-gfx
mailing list