[PATCH] drm/amd/pm: Get max/min frequency on aldebaran VF

Kamal, Asad Asad.Kamal at amd.com
Tue Jul 15 06:17:58 UTC 2025


[AMD Official Use Only - AMD Internal Distribution Only]

Reviewed-by: Asad Kamal <asad.kamal at amd.com>

Thanks & Regards
Asad

-----Original Message-----
From: Lazar, Lijo <Lijo.Lazar at amd.com>
Sent: Tuesday, July 15, 2025 8:53 AM
To: amd-gfx at lists.freedesktop.org
Cc: Zhang, Hawking <Hawking.Zhang at amd.com>; Deucher, Alexander <Alexander.Deucher at amd.com>; Kamal, Asad <Asad.Kamal at amd.com>
Subject: [PATCH] drm/amd/pm: Get max/min frequency on aldebaran VF

PMFW interface to get max/min frequencies is not available on aldebaran VFs. Use data, if available, in DPM tables to get the max/min frequencies.

Signed-off-by: Lijo Lazar <lijo.lazar at amd.com>
---
 .../drm/amd/pm/swsmu/smu13/aldebaran_ppt.c    | 57 ++++++++++++++++++-
 1 file changed, 56 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
index 9a61cf904275..b067147b7c41 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
@@ -342,6 +342,61 @@ static int aldebaran_get_allowed_feature_mask(struct smu_context *smu,
        return 0;
 }

+static int aldebaran_get_dpm_ultimate_freq(struct smu_context *smu,
+                                          enum smu_clk_type clk_type,
+                                          uint32_t *min, uint32_t *max)
+{
+       struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
+       struct smu_13_0_dpm_table *dpm_table;
+       uint32_t min_clk, max_clk;
+
+       if (amdgpu_sriov_vf(smu->adev)) {
+               switch (clk_type) {
+               case SMU_MCLK:
+               case SMU_UCLK:
+                       dpm_table = &dpm_context->dpm_tables.uclk_table;
+                       break;
+               case SMU_GFXCLK:
+               case SMU_SCLK:
+                       dpm_table = &dpm_context->dpm_tables.gfx_table;
+                       break;
+               case SMU_SOCCLK:
+                       dpm_table = &dpm_context->dpm_tables.soc_table;
+                       break;
+               case SMU_FCLK:
+                       dpm_table = &dpm_context->dpm_tables.fclk_table;
+                       break;
+               case SMU_VCLK:
+                       dpm_table = &dpm_context->dpm_tables.vclk_table;
+                       break;
+               case SMU_DCLK:
+                       dpm_table = &dpm_context->dpm_tables.dclk_table;
+                       break;
+               default:
+                       return -EINVAL;
+               }
+
+               min_clk = dpm_table->min;
+               max_clk = dpm_table->max;
+
+               if (min) {
+                       if (!min_clk)
+                               return -ENODATA;
+                       *min = min_clk;
+               }
+               if (max) {
+                       if (!max_clk)
+                               return -ENODATA;
+                       *max = max_clk;
+               }
+
+       } else {
+               return smu_v13_0_get_dpm_ultimate_freq(smu, clk_type, min, max);
+       }
+
+       return 0;
+}
+
 static int aldebaran_set_default_dpm_table(struct smu_context *smu)  {
        struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context; @@ -2081,7 +2136,7 @@ static const struct pptable_funcs aldebaran_ppt_funcs = {
        .set_azalia_d3_pme = smu_v13_0_set_azalia_d3_pme,
        .get_max_sustainable_clocks_by_dc = smu_v13_0_get_max_sustainable_clocks_by_dc,
        .get_bamaco_support = aldebaran_get_bamaco_support,
-       .get_dpm_ultimate_freq = smu_v13_0_get_dpm_ultimate_freq,
+       .get_dpm_ultimate_freq = aldebaran_get_dpm_ultimate_freq,
        .set_soft_freq_limited_range = aldebaran_set_soft_freq_limited_range,
        .od_edit_dpm_table = aldebaran_usr_edit_dpm_table,
        .set_df_cstate = aldebaran_set_df_cstate,
--
2.49.0



More information about the amd-gfx mailing list