Skip to content

Commit a1cc29c

Browse files
Perry Yuangregkh
authored andcommitted
cpufreq: amd-pstate: fix the highest frequency issue which limits performance
commit bf202e6 upstream. 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: f3a0523 ("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> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent d200132 commit a1cc29c

1 file changed

Lines changed: 19 additions & 3 deletions

File tree

drivers/cpufreq/amd-pstate.c

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@
5050

5151
#define AMD_PSTATE_TRANSITION_LATENCY 20000
5252
#define AMD_PSTATE_TRANSITION_DELAY 1000
53-
#define AMD_PSTATE_PREFCORE_THRESHOLD 166
53+
#define CPPC_HIGHEST_PERF_PERFORMANCE 196
54+
#define CPPC_HIGHEST_PERF_DEFAULT 166
5455

5556
/*
5657
* TODO: We need more time to fine tune processors with shared memory solution
@@ -290,6 +291,21 @@ static inline int amd_pstate_enable(bool enable)
290291
return static_call(amd_pstate_enable)(enable);
291292
}
292293

294+
static u32 amd_pstate_highest_perf_set(struct amd_cpudata *cpudata)
295+
{
296+
struct cpuinfo_x86 *c = &cpu_data(0);
297+
298+
/*
299+
* For AMD CPUs with Family ID 19H and Model ID range 0x70 to 0x7f,
300+
* the highest performance level is set to 196.
301+
* https://bugzilla.kernel.org/show_bug.cgi?id=218759
302+
*/
303+
if (c->x86 == 0x19 && (c->x86_model >= 0x70 && c->x86_model <= 0x7f))
304+
return CPPC_HIGHEST_PERF_PERFORMANCE;
305+
306+
return CPPC_HIGHEST_PERF_DEFAULT;
307+
}
308+
293309
static int pstate_init_perf(struct amd_cpudata *cpudata)
294310
{
295311
u64 cap1;
@@ -306,7 +322,7 @@ static int pstate_init_perf(struct amd_cpudata *cpudata)
306322
* the default max perf.
307323
*/
308324
if (cpudata->hw_prefcore)
309-
highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
325+
highest_perf = amd_pstate_highest_perf_set(cpudata);
310326
else
311327
highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
312328

@@ -330,7 +346,7 @@ static int cppc_init_perf(struct amd_cpudata *cpudata)
330346
return ret;
331347

332348
if (cpudata->hw_prefcore)
333-
highest_perf = AMD_PSTATE_PREFCORE_THRESHOLD;
349+
highest_perf = amd_pstate_highest_perf_set(cpudata);
334350
else
335351
highest_perf = cppc_perf.highest_perf;
336352

0 commit comments

Comments
 (0)