The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH] cpufreq: intel_pstate: Fix Raptor Lake-E cpufreq limits
@ 2026-05-11 23:53 Srinivas Pandruvada
  2026-05-12  9:04 ` Henry Tseng
  2026-05-12 10:20 ` Rafael J. Wysocki
  0 siblings, 2 replies; 7+ messages in thread
From: Srinivas Pandruvada @ 2026-05-11 23:53 UTC (permalink / raw)
  To: rafael, viresh.kumar
  Cc: linux-pm, linux-kernel, Srinivas Pandruvada, Henry Tseng, stable

Raptor Lake-E processors are not correctly showing cpufreq frequency
limits.

These CPUs don't set X86_FEATURE_HYBRID_CPU and have no E-cores, but
P-cores still use hybrid scaling factor.

commit 0fcfc9e51990 ("cpufreq: intel_pstate: Fix scaling for
hybrid-capable systems with disabled E-cores") added support for
such configuration. Here using CPPC nominal freq and perf was compared
to still return hybrid scaling factor.

Commit 9b18d536b124 ("cpufreq: intel_pstate: Use CPPC to get scaling
factors") restructured hwp_get_cpu_scaling() and added an explicit check
for X86_FEATURE_HYBRID_CPU and when not set returns core scaling factor.

To address this remove check for X86_FEATURE_HYBRID_CPU and call
intel_pstate_cppc_get_scaling().

Ideally this change should be enough. But using CPPC for scaling factor
results in rounding error, so still doesn't restore the original
behavior.

In intel_pstate_cppc_get_scaling() return core scaling factor when
ACPI CPPC is not present or when CPPC nominal frequency or nominal
performance are invalid.

Use hybrid_scaling_factor for P-cores when defined for a CPU, if not
calculate from ACPI CPPC nominal frequency and performance.

Fixes: 9b18d536b124 ("cpufreq: intel_pstate: Use CPPC to get scaling factors")
Reported-by: Henry Tseng <henrytseng@qnap.com>
Closes: https://lore.kernel.org/linux-pm/20260508063032.3248602-1-henrytseng@qnap.com/
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: stable@vger.kernel.org
---
 drivers/cpufreq/intel_pstate.c | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index 1292da53e5fc..0379efdee5f8 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -421,15 +421,23 @@ static int intel_pstate_cppc_get_scaling(int cpu)
 {
 	struct cppc_perf_caps cppc_perf;
 
+	if (cppc_get_perf_caps(cpu, &cppc_perf) || !cppc_perf.nominal_freq ||
+	    !cppc_perf.nominal_perf)
+		goto core_scaling;
+
+	if (cppc_perf.nominal_perf * 100 == cppc_perf.nominal_freq)
+		goto core_scaling;
+
+	if (hybrid_scaling_factor)
+		return hybrid_scaling_factor;
+
 	/*
-	 * Compute the perf-to-frequency scaling factor for the given CPU if
-	 * possible, unless it would be 0.
+	 * Compute the perf-to-frequency scaling factor for the given CPU
+	 * from nominal freq and nominal_perf
 	 */
-	if (!cppc_get_perf_caps(cpu, &cppc_perf) &&
-	    cppc_perf.nominal_perf && cppc_perf.nominal_freq)
-		return div_u64(cppc_perf.nominal_freq * KHZ_PER_MHZ,
-			       cppc_perf.nominal_perf);
+	return div_u64(cppc_perf.nominal_freq * KHZ_PER_MHZ, cppc_perf.nominal_perf);
 
+core_scaling:
 	return core_get_scaling();
 }
 
@@ -2281,17 +2289,10 @@ static int hwp_get_cpu_scaling(int cpu)
 		 */
 		if (hybrid_get_cpu_type(cpu) == INTEL_CPU_TYPE_CORE)
 			return hybrid_scaling_factor;
-
-		return core_get_scaling();
 	}
 
-	/* Use core scaling on non-hybrid systems. */
-	if (!cpu_feature_enabled(X86_FEATURE_HYBRID_CPU))
-		return core_get_scaling();
-
 	/*
-	 * The system is hybrid, but the hybrid scaling factor is not known or
-	 * the CPU type is not one of the above, so use CPPC to compute the
+	 * The system is hybrid, so use CPPC to compute the
 	 * scaling factor for this CPU.
 	 */
 	return intel_pstate_cppc_get_scaling(cpu);
-- 
2.43.0


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

end of thread, other threads:[~2026-05-12 18:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-11 23:53 [PATCH] cpufreq: intel_pstate: Fix Raptor Lake-E cpufreq limits Srinivas Pandruvada
2026-05-12  9:04 ` Henry Tseng
2026-05-12 10:20 ` Rafael J. Wysocki
2026-05-12 11:15   ` srinivas pandruvada
2026-05-12 12:37     ` Rafael J. Wysocki
2026-05-12 18:45       ` srinivas pandruvada
2026-05-12 18:54         ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox