RE: [PATCH v2] drm/amd/swsmu: enable more Pstates profile levels for SMU v14.0.0 and v14.0.1

2024-07-01 Thread Huang, Tim
[AMD Official Use Only - AMD Internal Distribution Only]

Hi Li,

> -Original Message-
> From: Ma, Li 
> Sent: Monday, July 1, 2024 9:14 PM
> To: Huang, Tim ; amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander ; Zhang, Yifan
> 
> Subject: RE: [PATCH v2] drm/amd/swsmu: enable more Pstates profile levels
> for SMU v14.0.0 and v14.0.1
>
> [AMD Official Use Only - AMD Internal Distribution Only]
>
> Hi Tim,
>
> > -Original Message-
> > From: Huang, Tim 
> > Sent: Monday, July 1, 2024 7:32 PM
> > To: Ma, Li ; amd-gfx@lists.freedesktop.org
> > Cc: Deucher, Alexander ; Zhang, Yifan
> > 
> > Subject: RE: [PATCH v2] drm/amd/swsmu: enable more Pstates profile
> > levels for SMU v14.0.0 and v14.0.1
> >
> > [AMD Official Use Only - AMD Internal Distribution Only]
> >
> > Hi Li,
> >
> > > -Original Message-
> > > From: Ma, Li 
> > > Sent: Monday, July 1, 2024 6:44 PM
> > > To: amd-gfx@lists.freedesktop.org
> > > Cc: Deucher, Alexander ; Zhang, Yifan
> > > ; Huang, Tim ; Ma, Li
> > > 
> > > Subject: [PATCH v2] drm/amd/swsmu: enable more Pstates profile
> > > levels for SMU v14.0.0 and v14.0.1
> > >
> > > This patch enables following UMD stable Pstates profile levels for
> > > power_dpm_force_performance_level interface.
> > >
> > > - profile_peak
> > > - profile_min_mclk
> > > - profile_min_sclk
> > > - profile_standard
> > >
> > > Signed-off-by: Li Ma 
> > > ---
> > >  .../drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c  | 138
> > > +-
> > >  1 file changed, 131 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > > b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > > index 3a9d58c036ea..72fca481dec1 100644
> > > --- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > > @@ -65,6 +65,10 @@
> > >
> > >  #define SMU_MALL_PG_CONFIG_DEFAULT
> > > SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_ON
> > >
> > > +#define SMU_14_0_0_UMD_PSTATE_GFXCLK 700
> > > +#define SMU_14_0_0_UMD_PSTATE_SOCCLK 678
> > > +#define SMU_14_0_0_UMD_PSTATE_FCLK   1800
> > > +
> > >  #define FEATURE_MASK(feature) (1ULL << feature)  #define
> > > SMC_DPM_FEATURE ( \
> > >   FEATURE_MASK(FEATURE_CCLK_DPM_BIT) | \ @@ -818,9 +822,11
> @@
> > > static int smu_v14_0_1_get_dpm_ultimate_freq(struct smu_context *smu,
> > >   break;
> > >   case SMU_MCLK:
> > >   case SMU_UCLK:
> > > - case SMU_FCLK:
> > >   max_dpm_level = 0;
> > >   break;
> > > + case SMU_FCLK:
> > > + max_dpm_level =
> clk_table->NumFclkLevelsEnabled - 1;
> > > + break;
> > >   case SMU_SOCCLK:
> > >   max_dpm_level =
> clk_table->NumSocClkLevelsEnabled - 1;
> > >   break;
> > > @@ -855,7 +861,7 @@ static int
> > > smu_v14_0_1_get_dpm_ultimate_freq(struct smu_context *smu,
> > >   min_dpm_level =
> clk_table->NumMemPstatesEnabled - 1;
> > >   break;
> > >   case SMU_FCLK:
> > > - min_dpm_level =
> clk_table->NumFclkLevelsEnabled - 1;
> > > + min_dpm_level = 0;
> > >   break;
> > >   case SMU_SOCCLK:
> > >   min_dpm_level = 0; @@ -936,9 +942,11 @@
> static
> > > int smu_v14_0_0_get_dpm_ultimate_freq(struct smu_context *smu,
> > >   break;
> > >   case SMU_MCLK:
> > >   case SMU_UCLK:
> > > - case SMU_FCLK:
> > >   max_dpm_level = 0;
> > >   break;
> > > + case SMU_FCLK:
> > > + max_dpm_level =
> clk_table->NumFclkLevelsEnabled - 1;
> > > + break;
> > >   case SMU_SOCCLK:
> > >   max_dpm_level =
> clk_table->NumSocClkLevelsEnabled - 1;
> > >   break;
> > > @@ -969,7 +977,7 @@ 

RE: [PATCH v2] drm/amd/swsmu: enable more Pstates profile levels for SMU v14.0.0 and v14.0.1

2024-07-01 Thread Ma, Li
[AMD Official Use Only - AMD Internal Distribution Only]

Hi Tim,

> -Original Message-
> From: Huang, Tim 
> Sent: Monday, July 1, 2024 7:32 PM
> To: Ma, Li ; amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander ; Zhang, Yifan
> 
> Subject: RE: [PATCH v2] drm/amd/swsmu: enable more Pstates profile levels
> for SMU v14.0.0 and v14.0.1
>
> [AMD Official Use Only - AMD Internal Distribution Only]
>
> Hi Li,
>
> > -Original Message-
> > From: Ma, Li 
> > Sent: Monday, July 1, 2024 6:44 PM
> > To: amd-gfx@lists.freedesktop.org
> > Cc: Deucher, Alexander ; Zhang, Yifan
> > ; Huang, Tim ; Ma, Li
> > 
> > Subject: [PATCH v2] drm/amd/swsmu: enable more Pstates profile levels for
> > SMU v14.0.0 and v14.0.1
> >
> > This patch enables following UMD stable Pstates profile levels for
> > power_dpm_force_performance_level interface.
> >
> > - profile_peak
> > - profile_min_mclk
> > - profile_min_sclk
> > - profile_standard
> >
> > Signed-off-by: Li Ma 
> > ---
> >  .../drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c  | 138
> > +-
> >  1 file changed, 131 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > index 3a9d58c036ea..72fca481dec1 100644
> > --- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> > @@ -65,6 +65,10 @@
> >
> >  #define SMU_MALL_PG_CONFIG_DEFAULT
> > SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_ON
> >
> > +#define SMU_14_0_0_UMD_PSTATE_GFXCLK 700
> > +#define SMU_14_0_0_UMD_PSTATE_SOCCLK 678
> > +#define SMU_14_0_0_UMD_PSTATE_FCLK   1800
> > +
> >  #define FEATURE_MASK(feature) (1ULL << feature)  #define
> > SMC_DPM_FEATURE ( \
> >   FEATURE_MASK(FEATURE_CCLK_DPM_BIT) | \ @@ -818,9 +822,11 @@
> > static int smu_v14_0_1_get_dpm_ultimate_freq(struct smu_context *smu,
> >   break;
> >   case SMU_MCLK:
> >   case SMU_UCLK:
> > - case SMU_FCLK:
> >   max_dpm_level = 0;
> >   break;
> > + case SMU_FCLK:
> > + max_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
> > + break;
> >   case SMU_SOCCLK:
> >   max_dpm_level = clk_table->NumSocClkLevelsEnabled - 1;
> >   break;
> > @@ -855,7 +861,7 @@ static int
> > smu_v14_0_1_get_dpm_ultimate_freq(struct smu_context *smu,
> >   min_dpm_level = clk_table->NumMemPstatesEnabled - 1;
> >   break;
> >   case SMU_FCLK:
> > - min_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
> > + min_dpm_level = 0;
> >   break;
> >   case SMU_SOCCLK:
> >   min_dpm_level = 0;
> > @@ -936,9 +942,11 @@ static int
> > smu_v14_0_0_get_dpm_ultimate_freq(struct smu_context *smu,
> >   break;
> >   case SMU_MCLK:
> >   case SMU_UCLK:
> > - case SMU_FCLK:
> >   max_dpm_level = 0;
> >   break;
> > + case SMU_FCLK:
> > + max_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
> > + break;
> >   case SMU_SOCCLK:
> >   max_dpm_level = clk_table->NumSocClkLevelsEnabled - 1;
> >   break;
> > @@ -969,7 +977,7 @@ static int
> > smu_v14_0_0_get_dpm_ultimate_freq(struct smu_context *smu,
> >   min_dpm_level = clk_table->NumMemPstatesEnabled - 1;
> >   break;
> >   case SMU_FCLK:
> > - min_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
> > + min_dpm_level = 0;
> >   break;
> >   case SMU_SOCCLK:
> >   min_dpm_level = 0;
> > @@ -1268,13 +1276,67 @@ static int smu_v14_0_0_force_clk_levels(struct
> > smu_context *smu,
> >   return ret;
> >  }
> >
> > -static int smu_v14_0_0_set_performance_level(struct smu_context *smu,
> > +static int smu_v14_0_common_get_dpm_profile_freq(struct smu_context
> > *smu,
> > +  

RE: [PATCH v2] drm/amd/swsmu: enable more Pstates profile levels for SMU v14.0.0 and v14.0.1

2024-07-01 Thread Huang, Tim
[AMD Official Use Only - AMD Internal Distribution Only]

Hi Li,

> -Original Message-
> From: Ma, Li 
> Sent: Monday, July 1, 2024 6:44 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander ; Zhang, Yifan
> ; Huang, Tim ; Ma, Li
> 
> Subject: [PATCH v2] drm/amd/swsmu: enable more Pstates profile levels for
> SMU v14.0.0 and v14.0.1
>
> This patch enables following UMD stable Pstates profile levels for
> power_dpm_force_performance_level interface.
>
> - profile_peak
> - profile_min_mclk
> - profile_min_sclk
> - profile_standard
>
> Signed-off-by: Li Ma 
> ---
>  .../drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c  | 138
> +-
>  1 file changed, 131 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> index 3a9d58c036ea..72fca481dec1 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
> @@ -65,6 +65,10 @@
>
>  #define SMU_MALL_PG_CONFIG_DEFAULT
> SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_ON
>
> +#define SMU_14_0_0_UMD_PSTATE_GFXCLK 700
> +#define SMU_14_0_0_UMD_PSTATE_SOCCLK 678
> +#define SMU_14_0_0_UMD_PSTATE_FCLK   1800
> +
>  #define FEATURE_MASK(feature) (1ULL << feature)  #define
> SMC_DPM_FEATURE ( \
>   FEATURE_MASK(FEATURE_CCLK_DPM_BIT) | \ @@ -818,9 +822,11 @@
> static int smu_v14_0_1_get_dpm_ultimate_freq(struct smu_context *smu,
>   break;
>   case SMU_MCLK:
>   case SMU_UCLK:
> - case SMU_FCLK:
>   max_dpm_level = 0;
>   break;
> + case SMU_FCLK:
> + max_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
> + break;
>   case SMU_SOCCLK:
>   max_dpm_level = clk_table->NumSocClkLevelsEnabled - 1;
>   break;
> @@ -855,7 +861,7 @@ static int
> smu_v14_0_1_get_dpm_ultimate_freq(struct smu_context *smu,
>   min_dpm_level = clk_table->NumMemPstatesEnabled - 1;
>   break;
>   case SMU_FCLK:
> - min_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
> + min_dpm_level = 0;
>   break;
>   case SMU_SOCCLK:
>   min_dpm_level = 0;
> @@ -936,9 +942,11 @@ static int
> smu_v14_0_0_get_dpm_ultimate_freq(struct smu_context *smu,
>   break;
>   case SMU_MCLK:
>   case SMU_UCLK:
> - case SMU_FCLK:
>   max_dpm_level = 0;
>   break;
> + case SMU_FCLK:
> + max_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
> + break;
>   case SMU_SOCCLK:
>   max_dpm_level = clk_table->NumSocClkLevelsEnabled - 1;
>   break;
> @@ -969,7 +977,7 @@ static int
> smu_v14_0_0_get_dpm_ultimate_freq(struct smu_context *smu,
>   min_dpm_level = clk_table->NumMemPstatesEnabled - 1;
>   break;
>   case SMU_FCLK:
> - min_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
> + min_dpm_level = 0;
>   break;
>   case SMU_SOCCLK:
>   min_dpm_level = 0;
> @@ -1268,13 +1276,67 @@ static int smu_v14_0_0_force_clk_levels(struct
> smu_context *smu,
>   return ret;
>  }
>
> -static int smu_v14_0_0_set_performance_level(struct smu_context *smu,
> +static int smu_v14_0_common_get_dpm_profile_freq(struct smu_context
> *smu,
> + enum amd_dpm_forced_level level,
> + enum smu_clk_type clk_type,
> + uint32_t *min_clk,
> + uint32_t *max_clk)
> +{
> + uint32_t clk_limit = 0;
> + int ret = 0;
> +
> + switch (clk_type) {
> + case SMU_GFXCLK:
> + case SMU_SCLK:
> + clk_limit = SMU_14_0_0_UMD_PSTATE_GFXCLK;
> + if (level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)
> + smu_v14_0_common_get_dpm_ultimate_freq(smu, SMU_SCLK,
> NULL, _limit);
> + else if (level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK)
> + smu_v14_0_common_get_dpm_ultimate_freq(smu, SMU_SCLK,
> _limit, NULL);
> + break;
> + case SMU_SOCCLK:
> 

[PATCH v2] drm/amd/swsmu: enable more Pstates profile levels for SMU v14.0.0 and v14.0.1

2024-07-01 Thread Li Ma
This patch enables following UMD stable Pstates profile
levels for power_dpm_force_performance_level interface.

- profile_peak
- profile_min_mclk
- profile_min_sclk
- profile_standard

Signed-off-by: Li Ma 
---
 .../drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c  | 138 +-
 1 file changed, 131 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
index 3a9d58c036ea..72fca481dec1 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_0_ppt.c
@@ -65,6 +65,10 @@
 
 #define SMU_MALL_PG_CONFIG_DEFAULT SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_ON
 
+#define SMU_14_0_0_UMD_PSTATE_GFXCLK   700
+#define SMU_14_0_0_UMD_PSTATE_SOCCLK   678
+#define SMU_14_0_0_UMD_PSTATE_FCLK 1800
+
 #define FEATURE_MASK(feature) (1ULL << feature)
 #define SMC_DPM_FEATURE ( \
FEATURE_MASK(FEATURE_CCLK_DPM_BIT) | \
@@ -818,9 +822,11 @@ static int smu_v14_0_1_get_dpm_ultimate_freq(struct 
smu_context *smu,
break;
case SMU_MCLK:
case SMU_UCLK:
-   case SMU_FCLK:
max_dpm_level = 0;
break;
+   case SMU_FCLK:
+   max_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
+   break;
case SMU_SOCCLK:
max_dpm_level = clk_table->NumSocClkLevelsEnabled - 1;
break;
@@ -855,7 +861,7 @@ static int smu_v14_0_1_get_dpm_ultimate_freq(struct 
smu_context *smu,
min_dpm_level = clk_table->NumMemPstatesEnabled - 1;
break;
case SMU_FCLK:
-   min_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
+   min_dpm_level = 0;
break;
case SMU_SOCCLK:
min_dpm_level = 0;
@@ -936,9 +942,11 @@ static int smu_v14_0_0_get_dpm_ultimate_freq(struct 
smu_context *smu,
break;
case SMU_MCLK:
case SMU_UCLK:
-   case SMU_FCLK:
max_dpm_level = 0;
break;
+   case SMU_FCLK:
+   max_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
+   break;
case SMU_SOCCLK:
max_dpm_level = clk_table->NumSocClkLevelsEnabled - 1;
break;
@@ -969,7 +977,7 @@ static int smu_v14_0_0_get_dpm_ultimate_freq(struct 
smu_context *smu,
min_dpm_level = clk_table->NumMemPstatesEnabled - 1;
break;
case SMU_FCLK:
-   min_dpm_level = clk_table->NumFclkLevelsEnabled - 1;
+   min_dpm_level = 0;
break;
case SMU_SOCCLK:
min_dpm_level = 0;
@@ -1268,13 +1276,67 @@ static int smu_v14_0_0_force_clk_levels(struct 
smu_context *smu,
return ret;
 }
 
-static int smu_v14_0_0_set_performance_level(struct smu_context *smu,
+static int smu_v14_0_common_get_dpm_profile_freq(struct smu_context *smu,
+   enum amd_dpm_forced_level level,
+   enum smu_clk_type clk_type,
+   uint32_t *min_clk,
+   uint32_t *max_clk)
+{
+   uint32_t clk_limit = 0;
+   int ret = 0;
+
+   switch (clk_type) {
+   case SMU_GFXCLK:
+   case SMU_SCLK:
+   clk_limit = SMU_14_0_0_UMD_PSTATE_GFXCLK;
+   if (level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)
+   smu_v14_0_common_get_dpm_ultimate_freq(smu, SMU_SCLK, 
NULL, _limit);
+   else if (level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK)
+   smu_v14_0_common_get_dpm_ultimate_freq(smu, SMU_SCLK, 
_limit, NULL);
+   break;
+   case SMU_SOCCLK:
+   clk_limit = SMU_14_0_0_UMD_PSTATE_SOCCLK;
+   if (level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)
+   smu_v14_0_common_get_dpm_ultimate_freq(smu, SMU_SOCCLK, 
NULL, _limit);
+   break;
+   case SMU_FCLK:
+   clk_limit = SMU_14_0_0_UMD_PSTATE_FCLK;
+   if (level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)
+   smu_v14_0_common_get_dpm_ultimate_freq(smu, SMU_FCLK, 
NULL, _limit);
+   else if (level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_MCLK)
+   smu_v14_0_common_get_dpm_ultimate_freq(smu, SMU_FCLK, 
_limit, NULL);
+   break;
+   case SMU_VCLK:
+   smu_v14_0_common_get_dpm_ultimate_freq(smu, SMU_VCLK, NULL, 
_limit);
+   break;
+   case SMU_VCLK1:
+