linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance
@ 2024-05-07 17:48 Mario Limonciello
  2024-05-07 19:38 ` Mario Limonciello
  0 siblings, 1 reply; 7+ messages in thread
From: Mario Limonciello @ 2024-05-07 17:48 UTC (permalink / raw)
  To: gautham.shenoy
  Cc: linux-pm, linux-kernel, regressions, rafael, Perry Yuan,
	Mario Limonciello

From: Perry Yuan <perry.yuan@amd.com>

To address the performance drop issue, an optimization has been
implemented. The incorrect highest performance value previously set by the
low-level power firmware for AMD CPUs with Family ID 0x19 and Model ID
ranging from 0x70 to 0x7F series has been identified as the cause.

To resolve this, a check has been implemented to accurately determine the
CPU family and model ID. The correct highest performance value is now set
and the performance drop caused by the incorrect highest performance value
are eliminated.

Before the fix, the highest frequency was set to 4200MHz, now it is set
to 4971MHz which is correct.

CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
  0    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
  1    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
  2    0      0    1 1:1:1:0          yes 4971.0000 400.0000 4865.8140
  3    0      0    1 1:1:1:0          yes 4971.0000 400.0000  400.0000

Fixes: f3a052391822 ("cpufreq: amd-pstate: Enable amd-pstate preferred core support")
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218759
Signed-off-by: Perry Yuan <perry.yuan@amd.com>
Co-developed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
This comes from patch 10 originally by Perry in [1].  As there is a regression in 6.9
it's pulled out separately from the rest of the series.
This should go to 6.9 final if possible; otherwise 6.10-rc1 and CC to stable
at that time.

[1] https://lore.kernel.org/linux-pm/cover.1715065568.git.perry.yuan@amd.com/T/#t.

 drivers/cpufreq/amd-pstate.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index fbe57d356ee4..4859902eaf1a 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -50,7 +50,8 @@
 
 #define AMD_PSTATE_TRANSITION_LATENCY	20000
 #define AMD_PSTATE_TRANSITION_DELAY	1000
-#define AMD_PSTATE_PREFCORE_THRESHOLD	166
+#define CPPC_HIGHEST_PERF_PERFORMANCE	196
+#define CPPC_HIGHEST_PERF_DEFAULT	166
 
 /*
  * TODO: We need more time to fine tune processors with shared memory solution
@@ -264,6 +265,21 @@ static inline int amd_pstate_enable(bool enable)
 	return static_call(amd_pstate_enable)(enable);
 }
 
+static u32 amd_pstate_highest_perf_set(struct amd_cpudata *cpudata)
+{
+	struct cpuinfo_x86 *c = &cpu_data(0);
+
+	/*
+	 * For AMD CPUs with Family ID 19H and Model ID range 0x70 to 0x7f,
+	 * the highest performance level is set to 196.
+	 * https://bugzilla.kernel.org/show_bug.cgi?id=218759
+	 */
+	if (c->x86 == 0x19 && (c->x86_model >= 0x70 && c->x86_model <= 0x7f))
+		return CPPC_HIGHEST_PERF_PERFORMANCE;
+
+	return CPPC_HIGHEST_PERF_DEFAULT;
+}
+
 static int pstate_init_perf(struct amd_cpudata *cpudata)
 {
 	u64 cap1;
@@ -280,7 +296,7 @@ static int pstate_init_perf(struct amd_cpudata *cpudata)
 	 * the default max perf.
 	 */
 	if (cpudata->hw_prefcore)
-		highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
+		highest_perf = amd_pstate_highest_perf_set(cpudata);
 	else
 		highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
 
@@ -304,7 +320,7 @@ static int cppc_init_perf(struct amd_cpudata *cpudata)
 		return ret;
 
 	if (cpudata->hw_prefcore)
-		highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
+		highest_perf = amd_pstate_highest_perf_set(cpudata);
 	else
 		highest_perf = cppc_perf.highest_perf;
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance
  2024-05-07 17:48 [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance Mario Limonciello
@ 2024-05-07 19:38 ` Mario Limonciello
  0 siblings, 0 replies; 7+ messages in thread
From: Mario Limonciello @ 2024-05-07 19:38 UTC (permalink / raw)
  To: gautham.shenoy
  Cc: linux-pm, linux-kernel, regressions, rafael, Perry Yuan, Gaha Bana

On 5/7/2024 12:48, Mario Limonciello wrote:
> From: Perry Yuan <perry.yuan@amd.com>
> 
> To address the performance drop issue, an optimization has been
> implemented. The incorrect highest performance value previously set by the
> low-level power firmware for AMD CPUs with Family ID 0x19 and Model ID
> ranging from 0x70 to 0x7F series has been identified as the cause.
> 
> To resolve this, a check has been implemented to accurately determine the
> CPU family and model ID. The correct highest performance value is now set
> and the performance drop caused by the incorrect highest performance value
> are eliminated.
> 
> Before the fix, the highest frequency was set to 4200MHz, now it is set
> to 4971MHz which is correct.
> 
> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>    0    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
>    1    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
>    2    0      0    1 1:1:1:0          yes 4971.0000 400.0000 4865.8140
>    3    0      0    1 1:1:1:0          yes 4971.0000 400.0000  400.0000
> 
> Fixes: f3a052391822 ("cpufreq: amd-pstate: Enable amd-pstate preferred core support")
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218759
> Signed-off-by: Perry Yuan <perry.yuan@amd.com>
> Co-developed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> ---

One of the reporters on the bug also confirmed this helped them on 
6.9-rc7.  Here's their tag:

Tested-by: Gaha Bana <gahabana@gmail.com>

> This comes from patch 10 originally by Perry in [1].  As there is a regression in 6.9
> it's pulled out separately from the rest of the series.
> This should go to 6.9 final if possible; otherwise 6.10-rc1 and CC to stable
> at that time.
> 
> [1] https://lore.kernel.org/linux-pm/cover.1715065568.git.perry.yuan@amd.com/T/#t.
> 
>   drivers/cpufreq/amd-pstate.c | 22 +++++++++++++++++++---
>   1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index fbe57d356ee4..4859902eaf1a 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -50,7 +50,8 @@
>   
>   #define AMD_PSTATE_TRANSITION_LATENCY	20000
>   #define AMD_PSTATE_TRANSITION_DELAY	1000
> -#define AMD_PSTATE_PREFCORE_THRESHOLD	166
> +#define CPPC_HIGHEST_PERF_PERFORMANCE	196
> +#define CPPC_HIGHEST_PERF_DEFAULT	166
>   
>   /*
>    * TODO: We need more time to fine tune processors with shared memory solution
> @@ -264,6 +265,21 @@ static inline int amd_pstate_enable(bool enable)
>   	return static_call(amd_pstate_enable)(enable);
>   }
>   
> +static u32 amd_pstate_highest_perf_set(struct amd_cpudata *cpudata)
> +{
> +	struct cpuinfo_x86 *c = &cpu_data(0);
> +
> +	/*
> +	 * For AMD CPUs with Family ID 19H and Model ID range 0x70 to 0x7f,
> +	 * the highest performance level is set to 196.
> +	 * https://bugzilla.kernel.org/show_bug.cgi?id=218759
> +	 */
> +	if (c->x86 == 0x19 && (c->x86_model >= 0x70 && c->x86_model <= 0x7f))
> +		return CPPC_HIGHEST_PERF_PERFORMANCE;
> +
> +	return CPPC_HIGHEST_PERF_DEFAULT;
> +}
> +
>   static int pstate_init_perf(struct amd_cpudata *cpudata)
>   {
>   	u64 cap1;
> @@ -280,7 +296,7 @@ static int pstate_init_perf(struct amd_cpudata *cpudata)
>   	 * the default max perf.
>   	 */
>   	if (cpudata->hw_prefcore)
> -		highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
> +		highest_perf = amd_pstate_highest_perf_set(cpudata);
>   	else
>   		highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
>   
> @@ -304,7 +320,7 @@ static int cppc_init_perf(struct amd_cpudata *cpudata)
>   		return ret;
>   
>   	if (cpudata->hw_prefcore)
> -		highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
> +		highest_perf = amd_pstate_highest_perf_set(cpudata);
>   	else
>   		highest_perf = cppc_perf.highest_perf;
>   


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance
  2024-05-18 22:07 ` Thomas Weißschuh
@ 2024-05-19  5:32   ` Linux regression tracking (Thorsten Leemhuis)
  0 siblings, 0 replies; 7+ messages in thread
From: Linux regression tracking (Thorsten Leemhuis) @ 2024-05-19  5:32 UTC (permalink / raw)
  To: Thomas Weißschuh, stable
  Cc: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Alexander.Deucher, Xinmei.Huang,
	Xiaojian.Du, Li.Meng, linux-pm, linux-kernel, Perry Yuan

On 19.05.24 00:07, Thomas Weißschuh wrote:

> Please backport the mainline commit
> bf202e654bfa ("cpufreq: amd-pstate: fix the highest frequency issue which limits performance")
> to the 6.9 stable series.
> [...]

FWIW, that commit already queued, as can be seen here:

https://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git/tree/queue-6.9

Ciao, Thorsten

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance
  2024-05-08  5:47 Perry Yuan
  2024-05-08 11:58 ` Rafael J. Wysocki
@ 2024-05-18 22:07 ` Thomas Weißschuh
  2024-05-19  5:32   ` Linux regression tracking (Thorsten Leemhuis)
  1 sibling, 1 reply; 7+ messages in thread
From: Thomas Weißschuh @ 2024-05-18 22:07 UTC (permalink / raw)
  To: stable
  Cc: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Alexander.Deucher, Xinmei.Huang,
	Xiaojian.Du, Li.Meng, linux-pm, linux-kernel, Perry Yuan

Hi stable team,

Please backport the mainline commit
bf202e654bfa ("cpufreq: amd-pstate: fix the highest frequency issue which limits performance")
to the 6.9 stable series.

It fixes a performance regression on AMD Phoenix platforms.

It was meant to get into the 6.9 release or the stable branch shortly
after, but apparently that didn't happen.

On 2024-05-08 13:47:03+0000, Perry Yuan wrote:
> To address the performance drop issue, an optimization has been
> implemented. The incorrect highest performance value previously set by the
> low-level power firmware for AMD CPUs with Family ID 0x19 and Model ID
> ranging from 0x70 to 0x7F series has been identified as the cause.
> 
> To resolve this, a check has been implemented to accurately determine the
> CPU family and model ID. The correct highest performance value is now set
> and the performance drop caused by the incorrect highest performance value
> are eliminated.
> 
> Before the fix, the highest frequency was set to 4200MHz, now it is set
> to 4971MHz which is correct.
> 
> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>   0    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
>   1    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
>   2    0      0    1 1:1:1:0          yes 4971.0000 400.0000 4865.8140
>   3    0      0    1 1:1:1:0          yes 4971.0000 400.0000  400.0000
> 
> v1->v2:
>  * add test by flag from Gaha Bana
> 
> Fixes: f3a052391822 ("cpufreq: amd-pstate: Enable amd-pstate preferred core support")
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218759
> Signed-off-by: Perry Yuan <perry.yuan@amd.com>
> Co-developed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> Tested-by: Gaha Bana <gahabana@gmail.com>
> ---
>  drivers/cpufreq/amd-pstate.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index 2db095867d03..6a342b0c0140 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -50,7 +50,8 @@
>  
>  #define AMD_PSTATE_TRANSITION_LATENCY	20000
>  #define AMD_PSTATE_TRANSITION_DELAY	1000
> -#define AMD_PSTATE_PREFCORE_THRESHOLD	166
> +#define CPPC_HIGHEST_PERF_PERFORMANCE	196
> +#define CPPC_HIGHEST_PERF_DEFAULT	166
>  
>  /*
>   * TODO: We need more time to fine tune processors with shared memory solution
> @@ -326,6 +327,21 @@ static inline int amd_pstate_enable(bool enable)
>  	return static_call(amd_pstate_enable)(enable);
>  }
>  
> +static u32 amd_pstate_highest_perf_set(struct amd_cpudata *cpudata)
> +{
> +	struct cpuinfo_x86 *c = &cpu_data(0);
> +
> +	/*
> +	 * For AMD CPUs with Family ID 19H and Model ID range 0x70 to 0x7f,
> +	 * the highest performance level is set to 196.
> +	 * https://bugzilla.kernel.org/show_bug.cgi?id=218759
> +	 */
> +	if (c->x86 == 0x19 && (c->x86_model >= 0x70 && c->x86_model <= 0x7f))
> +		return CPPC_HIGHEST_PERF_PERFORMANCE;
> +
> +	return CPPC_HIGHEST_PERF_DEFAULT;
> +}
> +
>  static int pstate_init_perf(struct amd_cpudata *cpudata)
>  {
>  	u64 cap1;
> @@ -342,7 +358,7 @@ static int pstate_init_perf(struct amd_cpudata *cpudata)
>  	 * the default max perf.
>  	 */
>  	if (cpudata->hw_prefcore)
> -		highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
> +		highest_perf = amd_pstate_highest_perf_set(cpudata);
>  	else
>  		highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
>  
> @@ -366,7 +382,7 @@ static int cppc_init_perf(struct amd_cpudata *cpudata)
>  		return ret;
>  
>  	if (cpudata->hw_prefcore)
> -		highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
> +		highest_perf = amd_pstate_highest_perf_set(cpudata);
>  	else
>  		highest_perf = cppc_perf.highest_perf;
>  
> -- 
> 2.34.1
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance
  2024-05-08 11:58 ` Rafael J. Wysocki
@ 2024-05-08 12:19   ` Yuan, Perry
  0 siblings, 0 replies; 7+ messages in thread
From: Yuan, Perry @ 2024-05-08 12:19 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: rafael.j.wysocki, Limonciello, Mario, viresh.kumar, Huang, Ray,
	Shenoy, Gautham Ranjal, Petkov, Borislav, Deucher, Alexander,
	Huang, Shimmer, Du, Xiaojian, Meng, Li (Jassmine),
	linux-pm, linux-kernel

[AMD Official Use Only - General]

Hi Rafael

> -----Original Message-----
> From: Rafael J. Wysocki <rafael@kernel.org>
> Sent: Wednesday, May 8, 2024 7:59 PM
> To: Yuan, Perry <Perry.Yuan@amd.com>
> Cc: rafael.j.wysocki@intel.com; Limonciello, Mario
> <Mario.Limonciello@amd.com>; viresh.kumar@linaro.org; Huang, Ray
> <Ray.Huang@amd.com>; Shenoy, Gautham Ranjal
> <gautham.shenoy@amd.com>; Petkov, Borislav
> <Borislav.Petkov@amd.com>; Deucher, Alexander
> <Alexander.Deucher@amd.com>; Huang, Shimmer
> <Shimmer.Huang@amd.com>; Du, Xiaojian <Xiaojian.Du@amd.com>; Meng,
> Li (Jassmine) <Li.Meng@amd.com>; linux-pm@vger.kernel.org; linux-
> kernel@vger.kernel.org
> Subject: Re: [PATCH] cpufreq: amd-pstate: fix the highest frequency issue
> which limit performance
>
> On Wed, May 8, 2024 at 7:47 AM Perry Yuan <perry.yuan@amd.com> wrote:
> >
> > To address the performance drop issue, an optimization has been
> > implemented. The incorrect highest performance value previously set by
> > the low-level power firmware for AMD CPUs with Family ID 0x19 and
> > Model ID ranging from 0x70 to 0x7F series has been identified as the cause.
> >
> > To resolve this, a check has been implemented to accurately determine
> > the CPU family and model ID. The correct highest performance value is
> > now set and the performance drop caused by the incorrect highest
> > performance value are eliminated.
> >
> > Before the fix, the highest frequency was set to 4200MHz, now it is
> > set to 4971MHz which is correct.
> >
> > CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ
> MHZ
> >   0    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
> >   1    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
> >   2    0      0    1 1:1:1:0          yes 4971.0000 400.0000 4865.8140
> >   3    0      0    1 1:1:1:0          yes 4971.0000 400.0000  400.0000
> >
> > v1->v2:
> >  * add test by flag from Gaha Bana
>
> This should go into the section below the tags.
>
> And if you send a v2 of a patch, please indicate that this is a v2 in the subject.
>
> > Fixes: f3a052391822 ("cpufreq: amd-pstate: Enable amd-pstate preferred
> > core support")
> > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218759
> > Signed-off-by: Perry Yuan <perry.yuan@amd.com>
> > Co-developed-by: Mario Limonciello <mario.limonciello@amd.com>
> > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> > Tested-by: Gaha Bana <gahabana@gmail.com>
> > ---
> >  drivers/cpufreq/amd-pstate.c | 22 +++++++++++++++++++---
> >  1 file changed, 19 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/cpufreq/amd-pstate.c
> > b/drivers/cpufreq/amd-pstate.c index 2db095867d03..6a342b0c0140
> 100644
> > --- a/drivers/cpufreq/amd-pstate.c
> > +++ b/drivers/cpufreq/amd-pstate.c
> > @@ -50,7 +50,8 @@
> >
> >  #define AMD_PSTATE_TRANSITION_LATENCY  20000
> >  #define AMD_PSTATE_TRANSITION_DELAY    1000
> > -#define AMD_PSTATE_PREFCORE_THRESHOLD  166
> > +#define CPPC_HIGHEST_PERF_PERFORMANCE  196
> > +#define CPPC_HIGHEST_PERF_DEFAULT      166
> >
> >  /*
> >   * TODO: We need more time to fine tune processors with shared memory
> > solution @@ -326,6 +327,21 @@ static inline int amd_pstate_enable(bool
> enable)
> >         return static_call(amd_pstate_enable)(enable);
> >  }
> >
> > +static u32 amd_pstate_highest_perf_set(struct amd_cpudata *cpudata) {
> > +       struct cpuinfo_x86 *c = &cpu_data(0);
> > +
> > +       /*
> > +        * For AMD CPUs with Family ID 19H and Model ID range 0x70 to 0x7f,
> > +        * the highest performance level is set to 196.
> > +        * https://bugzilla.kernel.org/show_bug.cgi?id=218759
> > +        */
> > +       if (c->x86 == 0x19 && (c->x86_model >= 0x70 && c->x86_model <=
> 0x7f))
> > +               return CPPC_HIGHEST_PERF_PERFORMANCE;
> > +
> > +       return CPPC_HIGHEST_PERF_DEFAULT; }
> > +
> >  static int pstate_init_perf(struct amd_cpudata *cpudata)  {
> >         u64 cap1;
> > @@ -342,7 +358,7 @@ static int pstate_init_perf(struct amd_cpudata
> *cpudata)
> >          * the default max perf.
> >          */
> >         if (cpudata->hw_prefcore)
> > -               highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
> > +               highest_perf = amd_pstate_highest_perf_set(cpudata);
> >         else
> >                 highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
> >
> > @@ -366,7 +382,7 @@ static int cppc_init_perf(struct amd_cpudata
> *cpudata)
> >                 return ret;
> >
> >         if (cpudata->hw_prefcore)
> > -               highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
> > +               highest_perf = amd_pstate_highest_perf_set(cpudata);
> >         else
> >                 highest_perf = cppc_perf.highest_perf;
> >
> > --
>
> Applied as 6.10 material, thanks!

Thank you,  I forget to update the patch version.


Regards.
Perry

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance
  2024-05-08  5:47 Perry Yuan
@ 2024-05-08 11:58 ` Rafael J. Wysocki
  2024-05-08 12:19   ` Yuan, Perry
  2024-05-18 22:07 ` Thomas Weißschuh
  1 sibling, 1 reply; 7+ messages in thread
From: Rafael J. Wysocki @ 2024-05-08 11:58 UTC (permalink / raw)
  To: Perry Yuan
  Cc: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov, Alexander.Deucher, Xinmei.Huang,
	Xiaojian.Du, Li.Meng, linux-pm, linux-kernel

On Wed, May 8, 2024 at 7:47 AM Perry Yuan <perry.yuan@amd.com> wrote:
>
> To address the performance drop issue, an optimization has been
> implemented. The incorrect highest performance value previously set by the
> low-level power firmware for AMD CPUs with Family ID 0x19 and Model ID
> ranging from 0x70 to 0x7F series has been identified as the cause.
>
> To resolve this, a check has been implemented to accurately determine the
> CPU family and model ID. The correct highest performance value is now set
> and the performance drop caused by the incorrect highest performance value
> are eliminated.
>
> Before the fix, the highest frequency was set to 4200MHz, now it is set
> to 4971MHz which is correct.
>
> CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
>   0    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
>   1    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
>   2    0      0    1 1:1:1:0          yes 4971.0000 400.0000 4865.8140
>   3    0      0    1 1:1:1:0          yes 4971.0000 400.0000  400.0000
>
> v1->v2:
>  * add test by flag from Gaha Bana

This should go into the section below the tags.

And if you send a v2 of a patch, please indicate that this is a v2 in
the subject.

> Fixes: f3a052391822 ("cpufreq: amd-pstate: Enable amd-pstate preferred core support")
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218759
> Signed-off-by: Perry Yuan <perry.yuan@amd.com>
> Co-developed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> Tested-by: Gaha Bana <gahabana@gmail.com>
> ---
>  drivers/cpufreq/amd-pstate.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index 2db095867d03..6a342b0c0140 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -50,7 +50,8 @@
>
>  #define AMD_PSTATE_TRANSITION_LATENCY  20000
>  #define AMD_PSTATE_TRANSITION_DELAY    1000
> -#define AMD_PSTATE_PREFCORE_THRESHOLD  166
> +#define CPPC_HIGHEST_PERF_PERFORMANCE  196
> +#define CPPC_HIGHEST_PERF_DEFAULT      166
>
>  /*
>   * TODO: We need more time to fine tune processors with shared memory solution
> @@ -326,6 +327,21 @@ static inline int amd_pstate_enable(bool enable)
>         return static_call(amd_pstate_enable)(enable);
>  }
>
> +static u32 amd_pstate_highest_perf_set(struct amd_cpudata *cpudata)
> +{
> +       struct cpuinfo_x86 *c = &cpu_data(0);
> +
> +       /*
> +        * For AMD CPUs with Family ID 19H and Model ID range 0x70 to 0x7f,
> +        * the highest performance level is set to 196.
> +        * https://bugzilla.kernel.org/show_bug.cgi?id=218759
> +        */
> +       if (c->x86 == 0x19 && (c->x86_model >= 0x70 && c->x86_model <= 0x7f))
> +               return CPPC_HIGHEST_PERF_PERFORMANCE;
> +
> +       return CPPC_HIGHEST_PERF_DEFAULT;
> +}
> +
>  static int pstate_init_perf(struct amd_cpudata *cpudata)
>  {
>         u64 cap1;
> @@ -342,7 +358,7 @@ static int pstate_init_perf(struct amd_cpudata *cpudata)
>          * the default max perf.
>          */
>         if (cpudata->hw_prefcore)
> -               highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
> +               highest_perf = amd_pstate_highest_perf_set(cpudata);
>         else
>                 highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
>
> @@ -366,7 +382,7 @@ static int cppc_init_perf(struct amd_cpudata *cpudata)
>                 return ret;
>
>         if (cpudata->hw_prefcore)
> -               highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
> +               highest_perf = amd_pstate_highest_perf_set(cpudata);
>         else
>                 highest_perf = cppc_perf.highest_perf;
>
> --

Applied as 6.10 material, thanks!

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance
@ 2024-05-08  5:47 Perry Yuan
  2024-05-08 11:58 ` Rafael J. Wysocki
  2024-05-18 22:07 ` Thomas Weißschuh
  0 siblings, 2 replies; 7+ messages in thread
From: Perry Yuan @ 2024-05-08  5:47 UTC (permalink / raw)
  To: rafael.j.wysocki, Mario.Limonciello, viresh.kumar, Ray.Huang,
	gautham.shenoy, Borislav.Petkov
  Cc: Alexander.Deucher, Xinmei.Huang, Xiaojian.Du, Li.Meng, linux-pm,
	linux-kernel

To address the performance drop issue, an optimization has been
implemented. The incorrect highest performance value previously set by the
low-level power firmware for AMD CPUs with Family ID 0x19 and Model ID
ranging from 0x70 to 0x7F series has been identified as the cause.

To resolve this, a check has been implemented to accurately determine the
CPU family and model ID. The correct highest performance value is now set
and the performance drop caused by the incorrect highest performance value
are eliminated.

Before the fix, the highest frequency was set to 4200MHz, now it is set
to 4971MHz which is correct.

CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
  0    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
  1    0      0    0 0:0:0:0          yes 4971.0000 400.0000  400.0000
  2    0      0    1 1:1:1:0          yes 4971.0000 400.0000 4865.8140
  3    0      0    1 1:1:1:0          yes 4971.0000 400.0000  400.0000

v1->v2:
 * add test by flag from Gaha Bana

Fixes: f3a052391822 ("cpufreq: amd-pstate: Enable amd-pstate preferred core support")
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218759
Signed-off-by: Perry Yuan <perry.yuan@amd.com>
Co-developed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Tested-by: Gaha Bana <gahabana@gmail.com>
---
 drivers/cpufreq/amd-pstate.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index 2db095867d03..6a342b0c0140 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -50,7 +50,8 @@
 
 #define AMD_PSTATE_TRANSITION_LATENCY	20000
 #define AMD_PSTATE_TRANSITION_DELAY	1000
-#define AMD_PSTATE_PREFCORE_THRESHOLD	166
+#define CPPC_HIGHEST_PERF_PERFORMANCE	196
+#define CPPC_HIGHEST_PERF_DEFAULT	166
 
 /*
  * TODO: We need more time to fine tune processors with shared memory solution
@@ -326,6 +327,21 @@ static inline int amd_pstate_enable(bool enable)
 	return static_call(amd_pstate_enable)(enable);
 }
 
+static u32 amd_pstate_highest_perf_set(struct amd_cpudata *cpudata)
+{
+	struct cpuinfo_x86 *c = &cpu_data(0);
+
+	/*
+	 * For AMD CPUs with Family ID 19H and Model ID range 0x70 to 0x7f,
+	 * the highest performance level is set to 196.
+	 * https://bugzilla.kernel.org/show_bug.cgi?id=218759
+	 */
+	if (c->x86 == 0x19 && (c->x86_model >= 0x70 && c->x86_model <= 0x7f))
+		return CPPC_HIGHEST_PERF_PERFORMANCE;
+
+	return CPPC_HIGHEST_PERF_DEFAULT;
+}
+
 static int pstate_init_perf(struct amd_cpudata *cpudata)
 {
 	u64 cap1;
@@ -342,7 +358,7 @@ static int pstate_init_perf(struct amd_cpudata *cpudata)
 	 * the default max perf.
 	 */
 	if (cpudata->hw_prefcore)
-		highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
+		highest_perf = amd_pstate_highest_perf_set(cpudata);
 	else
 		highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
 
@@ -366,7 +382,7 @@ static int cppc_init_perf(struct amd_cpudata *cpudata)
 		return ret;
 
 	if (cpudata->hw_prefcore)
-		highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
+		highest_perf = amd_pstate_highest_perf_set(cpudata);
 	else
 		highest_perf = cppc_perf.highest_perf;
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-05-19  5:32 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-07 17:48 [PATCH] cpufreq: amd-pstate: fix the highest frequency issue which limit performance Mario Limonciello
2024-05-07 19:38 ` Mario Limonciello
2024-05-08  5:47 Perry Yuan
2024-05-08 11:58 ` Rafael J. Wysocki
2024-05-08 12:19   ` Yuan, Perry
2024-05-18 22:07 ` Thomas Weißschuh
2024-05-19  5:32   ` Linux regression tracking (Thorsten Leemhuis)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).