Linux kernel -stable discussions
 help / color / mirror / Atom feed
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


             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