lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 234/879] cpufreq: Avoid unnecessary frequency updates due to mismatch
    Date
    From: Viresh Kumar <viresh.kumar@linaro.org>

    [ Upstream commit f55ae08c89873e140c7cac2a7fa161d31a0d60cf ]

    For some platforms, the frequency returned by hardware may be slightly
    different from what is provided in the frequency table. For example,
    hardware may return 499 MHz instead of 500 MHz. In such cases it is
    better to avoid getting into unnecessary frequency updates, as we may
    end up switching policy->cur between the two and sending unnecessary
    pre/post update notifications, etc.

    This patch has chosen allows the hardware frequency and table frequency
    to deviate by 1 MHz for now, we may want to increase it a bit later on
    if someone still complains.

    Reported-by: Rex-BC Chen <rex-bc.chen@mediatek.com>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Tested-by: Jia-wei Chang <jia-wei.chang@mediatek.com>
    Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/cpufreq/cpufreq.c | 11 +++++++++++
    1 file changed, 11 insertions(+)

    diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
    index 80f535cc8a75..fbaa8e6c7d23 100644
    --- a/drivers/cpufreq/cpufreq.c
    +++ b/drivers/cpufreq/cpufreq.c
    @@ -28,6 +28,7 @@
    #include <linux/suspend.h>
    #include <linux/syscore_ops.h>
    #include <linux/tick.h>
    +#include <linux/units.h>
    #include <trace/events/power.h>

    static LIST_HEAD(cpufreq_policy_list);
    @@ -1707,6 +1708,16 @@ static unsigned int cpufreq_verify_current_freq(struct cpufreq_policy *policy, b
    return new_freq;

    if (policy->cur != new_freq) {
    + /*
    + * For some platforms, the frequency returned by hardware may be
    + * slightly different from what is provided in the frequency
    + * table, for example hardware may return 499 MHz instead of 500
    + * MHz. In such cases it is better to avoid getting into
    + * unnecessary frequency updates.
    + */
    + if (abs(policy->cur - new_freq) < HZ_PER_MHZ)
    + return policy->cur;
    +
    cpufreq_out_of_sync(policy, new_freq);
    if (update)
    schedule_work(&policy->update);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 00:33    [W:3.913 / U:0.416 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site