cpufreq: Reintroduce ready() callback
authorBjorn Andersson <bjorn.andersson@linaro.org>
Fri, 28 Jan 2022 03:25:53 +0000 (19:25 -0800)
committerViresh Kumar <viresh.kumar@linaro.org>
Wed, 9 Feb 2022 07:48:49 +0000 (13:18 +0530)
This effectively revert '4bf8e582119e ("cpufreq: Remove ready()
callback")', in order to reintroduce the ready callback.

This is needed in order to be able to leave the thermal pressure
interrupts in the Qualcomm CPUfreq driver disabled during
initialization, so that it doesn't fire while related_cpus are still 0.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
[ Viresh: Added the Chinese translation as well and updated commit msg ]
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Documentation/cpu-freq/cpu-drivers.rst
Documentation/translations/zh_CN/cpu-freq/cpu-drivers.rst
drivers/cpufreq/cpufreq.c
include/linux/cpufreq.h

index 3b32336a7803ebc59faab9b908b599dac93b52fc..d84ededb66f92a234395be70f8fcdec1412aaed7 100644 (file)
@@ -75,6 +75,9 @@ And optionally
  .resume - A pointer to a per-policy resume function which is called
  with interrupts disabled and _before_ the governor is started again.
 
+ .ready - A pointer to a per-policy ready function which is called after
+ the policy is fully initialized.
+
  .attr - A pointer to a NULL-terminated list of "struct freq_attr" which
  allow to export values to sysfs.
 
index 87a36044f828c9af0bf20a3e0ebb9a94ea638c25..2ca92042767be437a4d23689a75fd87e2c1b4477 100644 (file)
@@ -84,6 +84,8 @@ CPUfreq核心层注册一个cpufreq_driver结构体。
  .resume - 一个指向per-policy恢复函数的指针,该函数在关中断且在调节器再一次启动前被
  调用。
 
+ .ready - 一个指向per-policy准备函数的指针,该函数在策略完全初始化之后被调用。
+
  .attr - 一个指向NULL结尾的"struct freq_attr"列表的指针,该列表允许导出值到
  sysfs。
 
index b8d95536ee22e8530fedb72fb199c3ff8dcbf57b..80f535cc8a757fe8222ed9ff4eafc55de0d471e6 100644 (file)
@@ -1518,6 +1518,10 @@ static int cpufreq_online(unsigned int cpu)
 
        kobject_uevent(&policy->kobj, KOBJ_ADD);
 
+       /* Callback for handling stuff after policy is ready */
+       if (cpufreq_driver->ready)
+               cpufreq_driver->ready(policy);
+
        if (cpufreq_thermal_control_enabled(cpufreq_driver))
                policy->cdev = of_cpufreq_cooling_register(policy);
 
index 1ab29e61b078ed9a45b7ba76444906161163199e..3522a272b74dded0f3c1109aa276e4c3a5a0faa3 100644 (file)
@@ -382,6 +382,9 @@ struct cpufreq_driver {
        int             (*suspend)(struct cpufreq_policy *policy);
        int             (*resume)(struct cpufreq_policy *policy);
 
+       /* Will be called after the driver is fully initialized */
+       void            (*ready)(struct cpufreq_policy *policy);
+
        struct freq_attr **attr;
 
        /* platform specific boost support code */