From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
To: rafael@kernel.org, viresh.kumar@linaro.org
Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
Henry Tseng <henrytseng@qnap.com>,
stable@vger.kernel.org
Subject: [PATCH] cpufreq: intel_pstate: Fix Raptor Lake-E cpufreq limits
Date: Mon, 11 May 2026 16:53:28 -0700 [thread overview]
Message-ID: <20260511235328.2018458-1-srinivas.pandruvada@linux.intel.com> (raw)
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
next reply other threads:[~2026-05-11 23:53 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 23:53 Srinivas Pandruvada [this message]
2026-05-12 9:04 ` [PATCH] cpufreq: intel_pstate: Fix Raptor Lake-E cpufreq limits 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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260511235328.2018458-1-srinivas.pandruvada@linux.intel.com \
--to=srinivas.pandruvada@linux.intel.com \
--cc=henrytseng@qnap.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=stable@vger.kernel.org \
--cc=viresh.kumar@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox