lkml.org 
[lkml]   [2024]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] cpufreq/cppc: changing highest_perf to nominal_perf in cppc_cpufreq_cpu_init()
    CC'ing few folks who are working with the driver.

    On 28-04-24, 17:28, liwei wrote:
    > When turning on turbo, if frequency configuration takes effect slowly,
    > the updated policy->cur may be equal to the frequency configured in
    > governor->limits(), performance governor will not adjust the frequency,
    > configured frequency will remain at turbo-freq.
    >
    > Simplified call stack looks as follows:
    > cpufreq_register_driver(&cppc_cpufreq_driver)
    > ...
    > cppc_cpufreq_cpu_init()
    > cppc_get_perf_caps()
    > policy->max = cppc_perf_to_khz(caps, caps->nominal_perf)
    > cppc_set_perf(highest_perf) // set highest_perf
    > policy->cur = cpufreq_driver->get() // if cur == policy->max
    > cpufreq_init_policy()
    > ...
    > cpufreq_start_governor() // governor: performance
    > new_freq = cpufreq_driver->get() // if new_freq == policy->max
    > if (policy->cur != new_freq)
    > cpufreq_out_of_sync(policy, new_freq)
    > ...
    > policy->cur = new_freq
    > ...
    > policy->governor->limits()
    > __cpufreq_driver_target(policy->max)
    > if (policy->cur==target)
    > // generate error, keep set highest_perf
    > ret
    > cppc_set_perf(target)
    >
    > Fix this by changing highest_perf to nominal_perf in cppc_cpufreq_cpu_init().
    >
    > Fixes: 5477fb3bd1e8 ("ACPI / CPPC: Add a CPUFreq driver for use with CPPC")
    > Signed-off-by: liwei <liwei728@huawei.com>
    > ---
    > drivers/cpufreq/cppc_cpufreq.c | 8 ++++----
    > 1 file changed, 4 insertions(+), 4 deletions(-)
    >
    > diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c
    > index 64420d9cfd1e..db04a82b8a97 100644
    > --- a/drivers/cpufreq/cppc_cpufreq.c
    > +++ b/drivers/cpufreq/cppc_cpufreq.c
    > @@ -669,14 +669,14 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_policy *policy)
    > if (caps->highest_perf > caps->nominal_perf)
    > boost_supported = true;
    >
    > - /* Set policy->cur to max now. The governors will adjust later. */
    > - policy->cur = cppc_perf_to_khz(caps, caps->highest_perf);
    > - cpu_data->perf_ctrls.desired_perf = caps->highest_perf;
    > + /* Set policy->cur to norm now. */
    > + policy->cur = cppc_perf_to_khz(caps, caps->nominal_perf);
    > + cpu_data->perf_ctrls.desired_perf = caps->nominal_perf;
    >
    > ret = cppc_set_perf(cpu, &cpu_data->perf_ctrls);
    > if (ret) {
    > pr_debug("Err setting perf value:%d on CPU:%d. ret:%d\n",
    > - caps->highest_perf, cpu, ret);
    > + caps->nominal_perf, cpu, ret);
    > goto out;
    > }
    >
    > --
    > 2.25.1

    --
    viresh

    \
     
     \ /
      Last update: 2024-04-29 12:49    [W:6.865 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site