Please ignore this. A second version is sent with coding style changes.

Thanks,
Lijo

On 7/12/2025 9:58 AM, Lijo Lazar wrote:
> If dpm tables are already populated on SMU v13.0.6 SOCs, use the cached
> data. Otherwise, fetch values from firmware.
> 
> Signed-off-by: Lijo Lazar <[email protected]>
> ---
>  .../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c  | 38 +++++++++----------
>  1 file changed, 19 insertions(+), 19 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 68624afe7d83..3d092fcd77b2 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
> @@ -881,51 +881,51 @@ static int smu_v13_0_6_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_table_context *smu_table = &smu->smu_table;
> +     struct smu_13_0_dpm_table *dpm_table = NULL;
>       struct PPTable_t *pptable =
>               (struct PPTable_t *)smu_table->driver_pptable;
> -     uint32_t clock_limit = 0, param;
> +     uint32_t min_clk = 0, max_clk = 0, param;
>       int ret = 0, clk_id = 0;
>  
> -     if (!smu_cmn_clk_dpm_is_enabled(smu, clk_type)) {
> +     /* Use dpm tables, if data is already fetched */
> +     if (pptable->Init) {
>               switch (clk_type) {
>               case SMU_MCLK:
>               case SMU_UCLK:
> -                     if (pptable->Init)
> -                             clock_limit = pptable->UclkFrequencyTable[0];
> +                     dpm_table = &dpm_context->dpm_tables.uclk_table;
>                       break;
>               case SMU_GFXCLK:
>               case SMU_SCLK:
> -                     if (pptable->Init)
> -                             clock_limit = pptable->MinGfxclkFrequency;
> +                     dpm_table = &dpm_context->dpm_tables.gfx_table;
>                       break;
>               case SMU_SOCCLK:
> -                     if (pptable->Init)
> -                             clock_limit = pptable->SocclkFrequencyTable[0];
> +                     dpm_table = &dpm_context->dpm_tables.soc_table;
>                       break;
>               case SMU_FCLK:
> -                     if (pptable->Init)
> -                             clock_limit = pptable->FclkFrequencyTable[0];
> +                     dpm_table = &dpm_context->dpm_tables.fclk_table;
>                       break;
>               case SMU_VCLK:
> -                     if (pptable->Init)
> -                             clock_limit = pptable->VclkFrequencyTable[0];
> +                     dpm_table = &dpm_context->dpm_tables.vclk_table;
>                       break;
>               case SMU_DCLK:
> -                     if (pptable->Init)
> -                             clock_limit = pptable->DclkFrequencyTable[0];
> +                     dpm_table = &dpm_context->dpm_tables.dclk_table;
>                       break;
>               default:
> -                     break;
> +                     return -EINVAL;
>               }
>  
> -             if (min)
> -                     *min = clock_limit;
> +             min_clk = dpm_table->min;
> +             max_clk = dpm_table->max;
>  
> +             if (min)
> +                     *min = min_clk;
>               if (max)
> -                     *max = clock_limit;
> +                     *max = max_clk;
>  
> -             return 0;
> +             if (min_clk && max_clk)
> +                     return 0;
>       }
>  
>       if (!(clk_type == SMU_GFXCLK || clk_type == SMU_SCLK)) {

Reply via email to