]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
cpufreq: CPPC: Fix wrong max_freq in policy initialization
authorLifeng Zheng <zhenglifeng1@huawei.com>
Fri, 17 Jan 2025 10:14:56 +0000 (18:14 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 23 Jan 2025 20:06:33 +0000 (21:06 +0100)
In policy initialization, policy->max and policy->cpuinfo.max_freq are
always set to the value calculated from caps->nominal_perf.

This will cause the frequency stay on base frequency even if the policy
is already boosted when a CPU is going online.

Fix this by using policy->boost_enabled to determine which value should
be set.

Signed-off-by: Lifeng Zheng <zhenglifeng1@huawei.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Link: https://patch.msgid.link/20250117101457.1530653-4-zhenglifeng1@huawei.com
[ rjw: Changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/cppc_cpufreq.c

index 2486a6c5256ae93044d5e8e4c735b78fdd4f8c00..8f512448382f4e242ecdea3b4b96d1c965ee4ec1 100644 (file)
@@ -611,7 +611,8 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_policy *policy)
         * Section 8.4.7.1.1.5 of ACPI 6.1 spec)
         */
        policy->min = cppc_perf_to_khz(caps, caps->lowest_nonlinear_perf);
-       policy->max = cppc_perf_to_khz(caps, caps->nominal_perf);
+       policy->max = cppc_perf_to_khz(caps, policy->boost_enabled ?
+                                               caps->highest_perf : caps->nominal_perf);
 
        /*
         * Set cpuinfo.min_freq to Lowest to make the full range of performance
@@ -619,7 +620,7 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_policy *policy)
         * nonlinear perf
         */
        policy->cpuinfo.min_freq = cppc_perf_to_khz(caps, caps->lowest_perf);
-       policy->cpuinfo.max_freq = cppc_perf_to_khz(caps, caps->nominal_perf);
+       policy->cpuinfo.max_freq = policy->max;
 
        policy->transition_delay_us = cppc_cpufreq_get_transition_delay_us(cpu);
        policy->shared_type = cpu_data->shared_type;