mirror of
https://github.com/torvalds/linux.git
synced 2025-04-09 14:45:27 +00:00
ARM cpufreq updates for 6.15
- manage sysfs attributes and boost frequencies efficiently from cpufreq core to reduce boilerplate code from drivers (Viresh Kumar). - Minor cleanups to cpufreq drivers (Aaron Kling, Benjamin Schneider, Dhananjay Ugwekar, Imran Shaik, and zuoqian). - Migrate to using for_each_present_cpu (Jacky Bai). - cpufreq-qcom-hw DT binding fixes (Krzysztof Kozlowski). - Use str_enable_disable() helper (Lifeng Zheng). -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEx73Crsp7f6M6scA70rkcPK6BEhwFAmfXwv8ACgkQ0rkcPK6B Ehyx9xAAvPbByizNlClE4Hp8Dg5sv15fpN1klvQuhVbMLQsFeTHryE2+pw/kWZYz mmDQoFjUVOBjr8f4ixznlGaUjU2Of6pSS5JZi4G8hRP5aGvDXEielSK/P2AFLRvb e33J5/Efb4DEilQVbS1oQfg1kpVZ53bVhtz8CGY/Yk1Dfh/IoUzlM9CCMKUI2h+P c12DyGzNeaH9Ne4A4SKcAG//JzOWUc12OAxt4M0a71T4/Hn0qiRb/pz0xVGv8rfa 0CfSDyFs7fxt4BWHzqHa1q9a6Zvel7Mib0aWqKa9F5ptDzNkFphb6UN0WuaKeBmw LHmaxoq7Cn9xWlxK2sHHOGak6CksaBmSFNkrmulXxO9o0Bpt8nqaaXUp2BjqwLlG fcnwGGlYCp46mmTDX4NQXYAQpw4Iy7qMpKSlzbjPq/cXsYvlJ6O4+6OHHtVZtj+I exjs2HTDe+tS2DEkRSBRtxNYwndhKsnGeRndtSx7oTb9zJGDUPTqIBKH1VuGwHsY NBbR5y+b2cRz2LYI1SkurGIKLKEuYP9luR+sxCsqFl7R+yKoSnvPfQk0BXu31rgf l+9o/8qYzuZED79unhmqCsTsQCpH+7/s00J1ZOtdZbwNGT78+WuxcP8X2ClAJ8nH joJrU0XUBJhexwoDHp4nInpp1k8yjDDGwbRGJK4ZDbZAKCxJZ7k= =fyCe -----END PGP SIGNATURE----- Merge tag 'cpufreq-arm-updates-6.15' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm Merge ARM cpufreq updates for 6.15 from Viresh Kumar: "- manage sysfs attributes and boost frequencies efficiently from cpufreq core to reduce boilerplate code from drivers (Viresh Kumar). - Minor cleanups to cpufreq drivers (Aaron Kling, Benjamin Schneider, Dhananjay Ugwekar, Imran Shaik, and zuoqian). - Migrate to using for_each_present_cpu (Jacky Bai). - cpufreq-qcom-hw DT binding fixes (Krzysztof Kozlowski). - Use str_enable_disable() helper (Lifeng Zheng)." * tag 'cpufreq-arm-updates-6.15' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm: (59 commits) dt-bindings: cpufreq: cpufreq-qcom-hw: Narrow properties on SDX75, SA8775p and SM8650 dt-bindings: cpufreq: cpufreq-qcom-hw: Drop redundant minItems:1 dt-bindings: cpufreq: cpufreq-qcom-hw: Add missing constraint for interrupt-names dt-bindings: cpufreq: cpufreq-qcom-hw: Add QCS8300 compatible cpufreq: Init cpufreq only for present CPUs cpufreq: tegra186: Share policy per cluster cpufreq: tegra194: Allow building for Tegra234 cpufreq: enable 1200Mhz clock speed for armada-37xx cpufreq: Remove cpufreq_enable_boost_support() cpufreq: staticize policy_has_boost_freq() cpufreq: qcom: Set .set_boost directly cpufreq: dt: Set .set_boost directly cpufreq: scmi: Set .set_boost directly cpufreq: powernv: Set .set_boost directly cpufreq: loongson: Set .set_boost directly cpufreq: apple: Set .set_boost directly cpufreq: Restrict enabling boost on policies with no boost frequencies cpufreq: cppc: Set policy->boost_supported cpufreq: amd: Set policy->boost_supported cpufreq: acpi: Set policy->boost_supported ...
This commit is contained in:
commit
7a6589f1aa
@ -34,6 +34,7 @@ properties:
|
||||
- description: v2 of CPUFREQ HW (EPSS)
|
||||
items:
|
||||
- enum:
|
||||
- qcom,qcs8300-cpufreq-epss
|
||||
- qcom,qdu1000-cpufreq-epss
|
||||
- qcom,sa8255p-cpufreq-epss
|
||||
- qcom,sa8775p-cpufreq-epss
|
||||
@ -111,22 +112,20 @@ allOf:
|
||||
enum:
|
||||
- qcom,qcm2290-cpufreq-hw
|
||||
- qcom,sar2130p-cpufreq-epss
|
||||
- qcom,sdx75-cpufreq-epss
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
minItems: 1
|
||||
maxItems: 1
|
||||
|
||||
reg-names:
|
||||
minItems: 1
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
minItems: 1
|
||||
maxItems: 1
|
||||
|
||||
interrupt-names:
|
||||
minItems: 1
|
||||
maxItems: 1
|
||||
|
||||
- if:
|
||||
properties:
|
||||
@ -135,6 +134,7 @@ allOf:
|
||||
enum:
|
||||
- qcom,qdu1000-cpufreq-epss
|
||||
- qcom,sa8255p-cpufreq-epss
|
||||
- qcom,sa8775p-cpufreq-epss
|
||||
- qcom,sc7180-cpufreq-hw
|
||||
- qcom,sc8180x-cpufreq-hw
|
||||
- qcom,sc8280xp-cpufreq-epss
|
||||
@ -160,12 +160,14 @@ allOf:
|
||||
|
||||
interrupt-names:
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,qcs8300-cpufreq-epss
|
||||
- qcom,sc7280-cpufreq-epss
|
||||
- qcom,sm8250-cpufreq-epss
|
||||
- qcom,sm8350-cpufreq-epss
|
||||
@ -187,6 +189,7 @@ allOf:
|
||||
|
||||
interrupt-names:
|
||||
minItems: 3
|
||||
maxItems: 3
|
||||
|
||||
- if:
|
||||
properties:
|
||||
@ -211,7 +214,31 @@ allOf:
|
||||
|
||||
interrupt-names:
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,sm8650-cpufreq-epss
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
minItems: 4
|
||||
maxItems: 4
|
||||
|
||||
reg-names:
|
||||
minItems: 4
|
||||
maxItems: 4
|
||||
|
||||
interrupts:
|
||||
minItems: 4
|
||||
maxItems: 4
|
||||
|
||||
interrupt-names:
|
||||
minItems: 4
|
||||
maxItems: 4
|
||||
|
||||
examples:
|
||||
- |
|
||||
|
@ -254,7 +254,7 @@ config ARM_TEGRA186_CPUFREQ
|
||||
|
||||
config ARM_TEGRA194_CPUFREQ
|
||||
tristate "Tegra194 CPUFreq support"
|
||||
depends on ARCH_TEGRA_194_SOC || (64BIT && COMPILE_TEST)
|
||||
depends on ARCH_TEGRA_194_SOC || ARCH_TEGRA_234_SOC || (64BIT && COMPILE_TEST)
|
||||
depends on TEGRA_BPMP
|
||||
default y
|
||||
help
|
||||
|
@ -909,6 +909,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
||||
if (perf->states[0].core_frequency * 1000 != freq_table[0].frequency)
|
||||
pr_warn(FW_WARN "P-state 0 is not max freq\n");
|
||||
|
||||
if (acpi_cpufreq_driver.set_boost)
|
||||
policy->boost_supported = true;
|
||||
|
||||
return result;
|
||||
|
||||
err_unreg:
|
||||
@ -949,7 +952,6 @@ static int acpi_cpufreq_resume(struct cpufreq_policy *policy)
|
||||
}
|
||||
|
||||
static struct freq_attr *acpi_cpufreq_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
&freqdomain_cpus,
|
||||
#ifdef CONFIG_X86_ACPI_CPUFREQ_CPB
|
||||
&cpb,
|
||||
|
@ -997,7 +997,7 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
|
||||
if (ret)
|
||||
goto free_cpudata1;
|
||||
|
||||
policy->boost_enabled = READ_ONCE(cpudata->boost_supported);
|
||||
policy->boost_supported = READ_ONCE(cpudata->boost_supported);
|
||||
|
||||
/* It will be updated by governor */
|
||||
policy->cur = policy->cpuinfo.min_freq;
|
||||
@ -1475,7 +1475,7 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
|
||||
policy->cur = policy->cpuinfo.min_freq;
|
||||
|
||||
|
||||
policy->boost_enabled = READ_ONCE(cpudata->boost_supported);
|
||||
policy->boost_supported = READ_ONCE(cpudata->boost_supported);
|
||||
|
||||
/*
|
||||
* Set the policy to provide a valid fallback value in case
|
||||
|
@ -229,12 +229,6 @@ static int apple_soc_cpufreq_find_cluster(struct cpufreq_policy *policy,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct freq_attr *apple_soc_cpufreq_hw_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
NULL, /* Filled in below if boost is enabled */
|
||||
NULL,
|
||||
};
|
||||
|
||||
static int apple_soc_cpufreq_init(struct cpufreq_policy *policy)
|
||||
{
|
||||
int ret, i;
|
||||
@ -316,16 +310,6 @@ static int apple_soc_cpufreq_init(struct cpufreq_policy *policy)
|
||||
policy->fast_switch_possible = true;
|
||||
policy->suspend_freq = freq_table[0].frequency;
|
||||
|
||||
if (policy_has_boost_freq(policy)) {
|
||||
ret = cpufreq_enable_boost_support();
|
||||
if (ret) {
|
||||
dev_warn(cpu_dev, "failed to enable boost: %d\n", ret);
|
||||
} else {
|
||||
apple_soc_cpufreq_hw_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
|
||||
apple_soc_cpufreq_driver.boost_enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_free_cpufreq_table:
|
||||
@ -360,7 +344,7 @@ static struct cpufreq_driver apple_soc_cpufreq_driver = {
|
||||
.target_index = apple_soc_cpufreq_set_target,
|
||||
.fast_switch = apple_soc_cpufreq_fast_switch,
|
||||
.register_em = cpufreq_register_em_with_opp,
|
||||
.attr = apple_soc_cpufreq_hw_attr,
|
||||
.set_boost = cpufreq_boost_set_sw,
|
||||
.suspend = cpufreq_generic_suspend,
|
||||
};
|
||||
|
||||
|
@ -102,11 +102,7 @@ struct armada_37xx_dvfs {
|
||||
};
|
||||
|
||||
static struct armada_37xx_dvfs armada_37xx_dvfs[] = {
|
||||
/*
|
||||
* The cpufreq scaling for 1.2 GHz variant of the SOC is currently
|
||||
* unstable because we do not know how to configure it properly.
|
||||
*/
|
||||
/* {.cpu_freq_max = 1200*1000*1000, .divider = {1, 2, 4, 6} }, */
|
||||
{.cpu_freq_max = 1200*1000*1000, .divider = {1, 2, 4, 6} },
|
||||
{.cpu_freq_max = 1000*1000*1000, .divider = {1, 2, 4, 5} },
|
||||
{.cpu_freq_max = 800*1000*1000, .divider = {1, 2, 3, 4} },
|
||||
{.cpu_freq_max = 600*1000*1000, .divider = {2, 4, 5, 6} },
|
||||
|
@ -47,7 +47,7 @@ static void __init armada_8k_get_sharing_cpus(struct clk *cur_clk,
|
||||
{
|
||||
int cpu;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
struct device *cpu_dev;
|
||||
struct clk *clk;
|
||||
|
||||
|
@ -150,7 +150,6 @@ static struct cpufreq_driver bmips_cpufreq_driver = {
|
||||
.get = bmips_cpufreq_get,
|
||||
.init = bmips_cpufreq_init,
|
||||
.exit = bmips_cpufreq_exit,
|
||||
.attr = cpufreq_generic_attr,
|
||||
.name = BMIPS_CPUFREQ_PREFIX,
|
||||
};
|
||||
|
||||
|
@ -720,7 +720,6 @@ cpufreq_freq_attr_ro(brcm_avs_voltage);
|
||||
cpufreq_freq_attr_ro(brcm_avs_frequency);
|
||||
|
||||
static struct freq_attr *brcm_avs_cpufreq_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
&brcm_avs_pstate,
|
||||
&brcm_avs_mode,
|
||||
&brcm_avs_pmap,
|
||||
|
@ -34,8 +34,6 @@
|
||||
*/
|
||||
static LIST_HEAD(cpu_data_list);
|
||||
|
||||
static bool boost_supported;
|
||||
|
||||
static struct cpufreq_driver cppc_cpufreq_driver;
|
||||
|
||||
#ifdef CONFIG_ACPI_CPPC_CPUFREQ_FIE
|
||||
@ -653,7 +651,7 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
||||
* is supported.
|
||||
*/
|
||||
if (caps->highest_perf > caps->nominal_perf)
|
||||
boost_supported = true;
|
||||
policy->boost_supported = true;
|
||||
|
||||
/* Set policy->cur to max now. The governors will adjust later. */
|
||||
policy->cur = cppc_perf_to_khz(caps, caps->highest_perf);
|
||||
@ -791,11 +789,6 @@ static int cppc_cpufreq_set_boost(struct cpufreq_policy *policy, int state)
|
||||
struct cppc_perf_caps *caps = &cpu_data->perf_caps;
|
||||
int ret;
|
||||
|
||||
if (!boost_supported) {
|
||||
pr_err("BOOST not supported by CPU or firmware\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (state)
|
||||
policy->max = cppc_perf_to_khz(caps, caps->highest_perf);
|
||||
else
|
||||
|
@ -36,12 +36,6 @@ struct private_data {
|
||||
|
||||
static LIST_HEAD(priv_list);
|
||||
|
||||
static struct freq_attr *cpufreq_dt_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
NULL, /* Extra space for boost-attr if required */
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct private_data *cpufreq_dt_find_data(int cpu)
|
||||
{
|
||||
struct private_data *priv;
|
||||
@ -120,21 +114,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
|
||||
policy->cpuinfo.transition_latency = transition_latency;
|
||||
policy->dvfs_possible_from_any_cpu = true;
|
||||
|
||||
/* Support turbo/boost mode */
|
||||
if (policy_has_boost_freq(policy)) {
|
||||
/* This gets disabled by core on driver unregister */
|
||||
ret = cpufreq_enable_boost_support();
|
||||
if (ret)
|
||||
goto out_clk_put;
|
||||
cpufreq_dt_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_clk_put:
|
||||
clk_put(cpu_clk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cpufreq_online(struct cpufreq_policy *policy)
|
||||
@ -169,7 +149,7 @@ static struct cpufreq_driver dt_cpufreq_driver = {
|
||||
.offline = cpufreq_offline,
|
||||
.register_em = cpufreq_register_em_with_opp,
|
||||
.name = "cpufreq-dt",
|
||||
.attr = cpufreq_dt_attr,
|
||||
.set_boost = cpufreq_boost_set_sw,
|
||||
.suspend = cpufreq_generic_suspend,
|
||||
};
|
||||
|
||||
@ -303,7 +283,7 @@ static int dt_cpufreq_probe(struct platform_device *pdev)
|
||||
int ret, cpu;
|
||||
|
||||
/* Request resources early so we can return in case of -EPROBE_DEFER */
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
ret = dt_cpufreq_early_init(&pdev->dev, cpu);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
@ -88,6 +88,7 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy,
|
||||
struct cpufreq_governor *new_gov,
|
||||
unsigned int new_pol);
|
||||
static bool cpufreq_boost_supported(void);
|
||||
static int cpufreq_boost_trigger_state(int state);
|
||||
|
||||
/*
|
||||
* Two notifier lists: the "policy" list is involved in the
|
||||
@ -631,6 +632,9 @@ static ssize_t store_local_boost(struct cpufreq_policy *policy,
|
||||
if (!cpufreq_driver->boost_enabled)
|
||||
return -EINVAL;
|
||||
|
||||
if (!policy->boost_supported)
|
||||
return -EINVAL;
|
||||
|
||||
if (policy->boost_enabled == enable)
|
||||
return count;
|
||||
|
||||
@ -1059,6 +1063,21 @@ static int cpufreq_add_dev_interface(struct cpufreq_policy *policy)
|
||||
struct freq_attr **drv_attr;
|
||||
int ret = 0;
|
||||
|
||||
/* Attributes that need freq_table */
|
||||
if (policy->freq_table) {
|
||||
ret = sysfs_create_file(&policy->kobj,
|
||||
&cpufreq_freq_attr_scaling_available_freqs.attr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (cpufreq_boost_supported()) {
|
||||
ret = sysfs_create_file(&policy->kobj,
|
||||
&cpufreq_freq_attr_scaling_boost_freqs.attr);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
/* set up files for this cpu device */
|
||||
drv_attr = cpufreq_driver->attr;
|
||||
while (drv_attr && *drv_attr) {
|
||||
@ -1571,14 +1590,14 @@ static int cpufreq_online(unsigned int cpu)
|
||||
policy->cdev = of_cpufreq_cooling_register(policy);
|
||||
|
||||
/* Let the per-policy boost flag mirror the cpufreq_driver boost during init */
|
||||
if (cpufreq_driver->set_boost &&
|
||||
if (cpufreq_driver->set_boost && policy->boost_supported &&
|
||||
policy->boost_enabled != cpufreq_boost_enabled()) {
|
||||
policy->boost_enabled = cpufreq_boost_enabled();
|
||||
ret = cpufreq_driver->set_boost(policy, policy->boost_enabled);
|
||||
if (ret) {
|
||||
/* If the set_boost fails, the online operation is not affected */
|
||||
pr_info("%s: CPU%d: Cannot %s BOOST\n", __func__, policy->cpu,
|
||||
policy->boost_enabled ? "enable" : "disable");
|
||||
str_enable_disable(policy->boost_enabled));
|
||||
policy->boost_enabled = !policy->boost_enabled;
|
||||
}
|
||||
}
|
||||
@ -2772,7 +2791,7 @@ EXPORT_SYMBOL_GPL(cpufreq_update_limits);
|
||||
/*********************************************************************
|
||||
* BOOST *
|
||||
*********************************************************************/
|
||||
static int cpufreq_boost_set_sw(struct cpufreq_policy *policy, int state)
|
||||
int cpufreq_boost_set_sw(struct cpufreq_policy *policy, int state)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@ -2791,8 +2810,9 @@ static int cpufreq_boost_set_sw(struct cpufreq_policy *policy, int state)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cpufreq_boost_set_sw);
|
||||
|
||||
int cpufreq_boost_trigger_state(int state)
|
||||
static int cpufreq_boost_trigger_state(int state)
|
||||
{
|
||||
struct cpufreq_policy *policy;
|
||||
unsigned long flags;
|
||||
@ -2807,6 +2827,9 @@ int cpufreq_boost_trigger_state(int state)
|
||||
|
||||
cpus_read_lock();
|
||||
for_each_active_policy(policy) {
|
||||
if (!policy->boost_supported)
|
||||
continue;
|
||||
|
||||
policy->boost_enabled = state;
|
||||
ret = cpufreq_driver->set_boost(policy, state);
|
||||
if (ret) {
|
||||
@ -2854,21 +2877,6 @@ static void remove_boost_sysfs_file(void)
|
||||
sysfs_remove_file(cpufreq_global_kobject, &boost.attr);
|
||||
}
|
||||
|
||||
int cpufreq_enable_boost_support(void)
|
||||
{
|
||||
if (!cpufreq_driver)
|
||||
return -EINVAL;
|
||||
|
||||
if (cpufreq_boost_supported())
|
||||
return 0;
|
||||
|
||||
cpufreq_driver->set_boost = cpufreq_boost_set_sw;
|
||||
|
||||
/* This will get removed on driver unregister */
|
||||
return create_boost_sysfs_file();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cpufreq_enable_boost_support);
|
||||
|
||||
bool cpufreq_boost_enabled(void)
|
||||
{
|
||||
return cpufreq_driver->boost_enabled;
|
||||
|
@ -101,7 +101,6 @@ static struct cpufreq_driver davinci_driver = {
|
||||
.get = cpufreq_generic_get,
|
||||
.init = davinci_cpu_init,
|
||||
.name = "davinci",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int __init davinci_cpufreq_probe(struct platform_device *pdev)
|
||||
|
@ -376,7 +376,6 @@ static struct cpufreq_driver eps_driver = {
|
||||
.exit = eps_cpu_exit,
|
||||
.get = eps_get,
|
||||
.name = "e_powersaver",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
|
||||
|
@ -194,7 +194,6 @@ static struct cpufreq_driver elanfreq_driver = {
|
||||
.target_index = elanfreq_target,
|
||||
.init = elanfreq_cpu_init,
|
||||
.name = "elanfreq",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id elan_id[] = {
|
||||
|
@ -14,7 +14,7 @@
|
||||
* FREQUENCY TABLE HELPERS *
|
||||
*********************************************************************/
|
||||
|
||||
bool policy_has_boost_freq(struct cpufreq_policy *policy)
|
||||
static bool policy_has_boost_freq(struct cpufreq_policy *policy)
|
||||
{
|
||||
struct cpufreq_frequency_table *pos, *table = policy->freq_table;
|
||||
|
||||
@ -27,7 +27,6 @@ bool policy_has_boost_freq(struct cpufreq_policy *policy)
|
||||
|
||||
return false;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(policy_has_boost_freq);
|
||||
|
||||
int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
|
||||
struct cpufreq_frequency_table *table)
|
||||
@ -276,7 +275,6 @@ static ssize_t scaling_available_frequencies_show(struct cpufreq_policy *policy,
|
||||
return show_available_freqs(policy, buf, false);
|
||||
}
|
||||
cpufreq_attr_available_freq(scaling_available);
|
||||
EXPORT_SYMBOL_GPL(cpufreq_freq_attr_scaling_available_freqs);
|
||||
|
||||
/*
|
||||
* scaling_boost_frequencies_show - show available boost frequencies for
|
||||
@ -288,13 +286,6 @@ static ssize_t scaling_boost_frequencies_show(struct cpufreq_policy *policy,
|
||||
return show_available_freqs(policy, buf, true);
|
||||
}
|
||||
cpufreq_attr_available_freq(scaling_boost);
|
||||
EXPORT_SYMBOL_GPL(cpufreq_freq_attr_scaling_boost_freqs);
|
||||
|
||||
struct freq_attr *cpufreq_generic_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
NULL,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(cpufreq_generic_attr);
|
||||
|
||||
static int set_freq_table_sorted(struct cpufreq_policy *policy)
|
||||
{
|
||||
@ -367,6 +358,10 @@ int cpufreq_table_validate_and_sort(struct cpufreq_policy *policy)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Driver's may have set this field already */
|
||||
if (policy_has_boost_freq(policy))
|
||||
policy->boost_supported = true;
|
||||
|
||||
return set_freq_table_sorted(policy);
|
||||
}
|
||||
|
||||
|
@ -207,7 +207,6 @@ static struct cpufreq_driver imx6q_cpufreq_driver = {
|
||||
.init = imx6q_cpufreq_init,
|
||||
.register_em = cpufreq_register_em_with_opp,
|
||||
.name = "imx6q-cpufreq",
|
||||
.attr = cpufreq_generic_attr,
|
||||
.suspend = cpufreq_generic_suspend,
|
||||
};
|
||||
|
||||
|
@ -96,7 +96,6 @@ static struct cpufreq_driver kirkwood_cpufreq_driver = {
|
||||
.target_index = kirkwood_cpufreq_target,
|
||||
.init = kirkwood_cpufreq_cpu_init,
|
||||
.name = "kirkwood-cpufreq",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int kirkwood_cpufreq_probe(struct platform_device *pdev)
|
||||
|
@ -906,7 +906,6 @@ static struct cpufreq_driver longhaul_driver = {
|
||||
.get = longhaul_get,
|
||||
.init = longhaul_cpu_init,
|
||||
.name = "longhaul",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id longhaul_id[] = {
|
||||
|
@ -91,7 +91,6 @@ static struct cpufreq_driver loongson2_cpufreq_driver = {
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.target_index = loongson2_cpufreq_target,
|
||||
.get = cpufreq_generic_get,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct platform_device_id platform_device_ids[] = {
|
||||
|
@ -299,15 +299,6 @@ static int loongson3_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
||||
per_cpu(freq_data, i) = per_cpu(freq_data, cpu);
|
||||
}
|
||||
|
||||
if (policy_has_boost_freq(policy)) {
|
||||
ret = cpufreq_enable_boost_support();
|
||||
if (ret < 0) {
|
||||
pr_warn("cpufreq: Failed to enable boost: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
loongson3_cpufreq_driver.boost_enabled = true;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -337,8 +328,8 @@ static struct cpufreq_driver loongson3_cpufreq_driver = {
|
||||
.offline = loongson3_cpufreq_cpu_offline,
|
||||
.get = loongson3_cpufreq_get,
|
||||
.target_index = loongson3_cpufreq_target,
|
||||
.attr = cpufreq_generic_attr,
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.set_boost = cpufreq_boost_set_sw,
|
||||
.suspend = cpufreq_generic_suspend,
|
||||
};
|
||||
|
||||
|
@ -293,7 +293,6 @@ static struct cpufreq_driver cpufreq_mtk_hw_driver = {
|
||||
.register_em = mtk_cpufreq_register_em,
|
||||
.fast_switch = mtk_cpufreq_hw_fast_switch,
|
||||
.name = "mtk-cpufreq-hw",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int mtk_cpufreq_hw_driver_probe(struct platform_device *pdev)
|
||||
@ -304,7 +303,7 @@ static int mtk_cpufreq_hw_driver_probe(struct platform_device *pdev)
|
||||
struct regulator *cpu_reg;
|
||||
|
||||
/* Make sure that all CPU supplies are available before proceeding. */
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
cpu_dev = get_cpu_device(cpu);
|
||||
if (!cpu_dev)
|
||||
return dev_err_probe(&pdev->dev, -EPROBE_DEFER,
|
||||
|
@ -618,7 +618,6 @@ static struct cpufreq_driver mtk_cpufreq_driver = {
|
||||
.exit = mtk_cpufreq_exit,
|
||||
.register_em = cpufreq_register_em_with_opp,
|
||||
.name = "mtk-cpufreq",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int mtk_cpufreq_probe(struct platform_device *pdev)
|
||||
@ -632,7 +631,7 @@ static int mtk_cpufreq_probe(struct platform_device *pdev)
|
||||
return dev_err_probe(&pdev->dev, -ENODEV,
|
||||
"failed to get mtk cpufreq platform data\n");
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
info = mtk_cpu_dvfs_info_lookup(cpu);
|
||||
if (info)
|
||||
continue;
|
||||
|
@ -56,7 +56,7 @@ static int __init armada_xp_pmsu_cpufreq_init(void)
|
||||
* it), and registers the clock notifier that will take care
|
||||
* of doing the PMSU part of a frequency transition.
|
||||
*/
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
struct device *cpu_dev;
|
||||
struct clk *clk;
|
||||
int ret;
|
||||
|
@ -147,7 +147,6 @@ static struct cpufreq_driver omap_driver = {
|
||||
.exit = omap_cpu_exit,
|
||||
.register_em = cpufreq_register_em_with_opp,
|
||||
.name = "omap",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int omap_cpufreq_probe(struct platform_device *pdev)
|
||||
|
@ -227,7 +227,6 @@ static struct cpufreq_driver p4clockmod_driver = {
|
||||
.init = cpufreq_p4_cpu_init,
|
||||
.get = cpufreq_p4_get,
|
||||
.name = "p4-clockmod",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id cpufreq_p4_id[] = {
|
||||
|
@ -245,7 +245,6 @@ static struct cpufreq_driver pas_cpufreq_driver = {
|
||||
.exit = pas_cpufreq_cpu_exit,
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.target_index = pas_cpufreq_target,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -439,7 +439,6 @@ static struct cpufreq_driver pmac_cpufreq_driver = {
|
||||
.suspend = pmac_cpufreq_suspend,
|
||||
.resume = pmac_cpufreq_resume,
|
||||
.flags = CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING,
|
||||
.attr = cpufreq_generic_attr,
|
||||
.name = "powermac",
|
||||
};
|
||||
|
||||
|
@ -332,7 +332,6 @@ static struct cpufreq_driver g5_cpufreq_driver = {
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.target_index = g5_cpufreq_target,
|
||||
.get = g5_cpufreq_get_speed,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
|
||||
|
@ -253,7 +253,6 @@ static struct cpufreq_driver powernow_k6_driver = {
|
||||
.exit = powernow_k6_cpu_exit,
|
||||
.get = powernow_k6_get,
|
||||
.name = "powernow-k6",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id powernow_k6_ids[] = {
|
||||
|
@ -667,7 +667,6 @@ static struct cpufreq_driver powernow_driver = {
|
||||
.init = powernow_cpu_init,
|
||||
.exit = powernow_cpu_exit,
|
||||
.name = "powernow-k7",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int __init powernow_init(void)
|
||||
|
@ -1143,7 +1143,6 @@ static struct cpufreq_driver cpufreq_amd64_driver = {
|
||||
.exit = powernowk8_cpu_exit,
|
||||
.get = powernowk8_get,
|
||||
.name = "powernow-k8",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static void __request_acpi_cpufreq(void)
|
||||
|
@ -386,12 +386,8 @@ static ssize_t cpuinfo_nominal_freq_show(struct cpufreq_policy *policy,
|
||||
static struct freq_attr cpufreq_freq_attr_cpuinfo_nominal_freq =
|
||||
__ATTR_RO(cpuinfo_nominal_freq);
|
||||
|
||||
#define SCALING_BOOST_FREQS_ATTR_INDEX 2
|
||||
|
||||
static struct freq_attr *powernv_cpu_freq_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
&cpufreq_freq_attr_cpuinfo_nominal_freq,
|
||||
&cpufreq_freq_attr_scaling_boost_freqs,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@ -1128,9 +1124,7 @@ static int __init powernv_cpufreq_init(void)
|
||||
goto out;
|
||||
|
||||
if (powernv_pstate_info.wof_enabled)
|
||||
powernv_cpufreq_driver.boost_enabled = true;
|
||||
else
|
||||
powernv_cpu_freq_attr[SCALING_BOOST_FREQS_ATTR_INDEX] = NULL;
|
||||
powernv_cpufreq_driver.set_boost = cpufreq_boost_set_sw;
|
||||
|
||||
rc = cpufreq_register_driver(&powernv_cpufreq_driver);
|
||||
if (rc) {
|
||||
@ -1138,9 +1132,6 @@ static int __init powernv_cpufreq_init(void)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (powernv_pstate_info.wof_enabled)
|
||||
cpufreq_enable_boost_support();
|
||||
|
||||
register_reboot_notifier(&powernv_cpufreq_reboot_nb);
|
||||
opal_message_notifier_register(OPAL_MSG_OCC, &powernv_cpufreq_opal_nb);
|
||||
|
||||
|
@ -306,7 +306,7 @@ static void qcom_get_related_cpus(int index, struct cpumask *m)
|
||||
struct of_phandle_args args;
|
||||
int cpu, ret;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
cpu_np = of_cpu_device_node_get(cpu);
|
||||
if (!cpu_np)
|
||||
continue;
|
||||
@ -566,12 +566,6 @@ static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (policy_has_boost_freq(policy)) {
|
||||
ret = cpufreq_enable_boost_support();
|
||||
if (ret)
|
||||
dev_warn(cpu_dev, "failed to enable boost: %d\n", ret);
|
||||
}
|
||||
|
||||
return qcom_cpufreq_hw_lmh_init(policy, index);
|
||||
}
|
||||
|
||||
@ -595,12 +589,6 @@ static void qcom_cpufreq_ready(struct cpufreq_policy *policy)
|
||||
enable_irq(data->throttle_irq);
|
||||
}
|
||||
|
||||
static struct freq_attr *qcom_cpufreq_hw_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
&cpufreq_freq_attr_scaling_boost_freqs,
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct cpufreq_driver cpufreq_qcom_hw_driver = {
|
||||
.flags = CPUFREQ_NEED_INITIAL_FREQ_CHECK |
|
||||
CPUFREQ_HAVE_GOVERNOR_PER_POLICY |
|
||||
@ -615,8 +603,8 @@ static struct cpufreq_driver cpufreq_qcom_hw_driver = {
|
||||
.register_em = cpufreq_register_em_with_opp,
|
||||
.fast_switch = qcom_cpufreq_hw_fast_switch,
|
||||
.name = "qcom-cpufreq-hw",
|
||||
.attr = qcom_cpufreq_hw_attr,
|
||||
.ready = qcom_cpufreq_ready,
|
||||
.set_boost = cpufreq_boost_set_sw,
|
||||
};
|
||||
|
||||
static unsigned long qcom_cpufreq_hw_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
|
||||
|
@ -489,7 +489,7 @@ static int qcom_cpufreq_probe(struct platform_device *pdev)
|
||||
nvmem_cell_put(speedbin_nvmem);
|
||||
}
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
struct dev_pm_opp_config config = {
|
||||
.supported_hw = NULL,
|
||||
};
|
||||
@ -543,7 +543,7 @@ static int qcom_cpufreq_probe(struct platform_device *pdev)
|
||||
dev_err(cpu_dev, "Failed to register platform device\n");
|
||||
|
||||
free_opp:
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
dev_pm_domain_detach_list(drv->cpus[cpu].pd_list);
|
||||
dev_pm_opp_clear_config(drv->cpus[cpu].opp_token);
|
||||
}
|
||||
@ -557,7 +557,7 @@ static void qcom_cpufreq_remove(struct platform_device *pdev)
|
||||
|
||||
platform_device_unregister(cpufreq_dt_pdev);
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
dev_pm_domain_detach_list(drv->cpus[cpu].pd_list);
|
||||
dev_pm_opp_clear_config(drv->cpus[cpu].opp_token);
|
||||
}
|
||||
@ -568,7 +568,7 @@ static int qcom_cpufreq_suspend(struct device *dev)
|
||||
struct qcom_cpufreq_drv *drv = dev_get_drvdata(dev);
|
||||
unsigned int cpu;
|
||||
|
||||
for_each_possible_cpu(cpu)
|
||||
for_each_present_cpu(cpu)
|
||||
qcom_cpufreq_suspend_pd_devs(drv, cpu);
|
||||
|
||||
return 0;
|
||||
|
@ -254,7 +254,6 @@ static struct cpufreq_driver qoriq_cpufreq_driver = {
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.target_index = qoriq_cpufreq_target,
|
||||
.get = cpufreq_generic_get,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct of_device_id qoriq_cpufreq_blacklist[] = {
|
||||
|
@ -92,7 +92,6 @@ static struct cpufreq_driver sc520_freq_driver = {
|
||||
.target_index = sc520_freq_target,
|
||||
.init = sc520_freq_cpu_init,
|
||||
.name = "sc520_freq",
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id sc520_ids[] = {
|
||||
|
@ -104,7 +104,7 @@ scmi_get_sharing_cpus(struct device *cpu_dev, int domain,
|
||||
int cpu, tdomain;
|
||||
struct device *tcpu_dev;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
if (cpu == cpu_dev->id)
|
||||
continue;
|
||||
|
||||
@ -171,12 +171,6 @@ scmi_get_rate_limit(u32 domain, bool has_fast_switch)
|
||||
return rate_limit;
|
||||
}
|
||||
|
||||
static struct freq_attr *scmi_cpufreq_hw_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static int scmi_limit_notify_cb(struct notifier_block *nb, unsigned long event, void *data)
|
||||
{
|
||||
struct scmi_data *priv = container_of(nb, struct scmi_data, limit_notify_nb);
|
||||
@ -303,17 +297,6 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy)
|
||||
policy->transition_delay_us =
|
||||
scmi_get_rate_limit(domain, policy->fast_switch_possible);
|
||||
|
||||
if (policy_has_boost_freq(policy)) {
|
||||
ret = cpufreq_enable_boost_support();
|
||||
if (ret) {
|
||||
dev_warn(cpu_dev, "failed to enable boost: %d\n", ret);
|
||||
goto out_free_table;
|
||||
} else {
|
||||
scmi_cpufreq_hw_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
|
||||
scmi_cpufreq_driver.boost_enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
ret = freq_qos_add_request(&policy->constraints, &priv->limits_freq_req, FREQ_QOS_MAX,
|
||||
FREQ_QOS_MAX_DEFAULT_VALUE);
|
||||
if (ret < 0) {
|
||||
@ -395,13 +378,13 @@ static struct cpufreq_driver scmi_cpufreq_driver = {
|
||||
CPUFREQ_NEED_INITIAL_FREQ_CHECK |
|
||||
CPUFREQ_IS_COOLING_DEV,
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.attr = scmi_cpufreq_hw_attr,
|
||||
.target_index = scmi_cpufreq_set_target,
|
||||
.fast_switch = scmi_cpufreq_fast_switch,
|
||||
.get = scmi_cpufreq_get_rate,
|
||||
.init = scmi_cpufreq_init,
|
||||
.exit = scmi_cpufreq_exit,
|
||||
.register_em = scmi_cpufreq_register_em,
|
||||
.set_boost = cpufreq_boost_set_sw,
|
||||
};
|
||||
|
||||
static int scmi_cpufreq_probe(struct scmi_device *sdev)
|
||||
|
@ -39,8 +39,9 @@ static unsigned int scpi_cpufreq_get_rate(unsigned int cpu)
|
||||
static int
|
||||
scpi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
|
||||
{
|
||||
u64 rate = policy->freq_table[index].frequency * 1000;
|
||||
unsigned long freq_khz = policy->freq_table[index].frequency;
|
||||
struct scpi_data *priv = policy->driver_data;
|
||||
unsigned long rate = freq_khz * 1000;
|
||||
int ret;
|
||||
|
||||
ret = clk_set_rate(priv->clk, rate);
|
||||
@ -48,7 +49,7 @@ scpi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (clk_get_rate(priv->clk) != rate)
|
||||
if (clk_get_rate(priv->clk) / 1000 != freq_khz)
|
||||
return -EIO;
|
||||
|
||||
return 0;
|
||||
@ -64,7 +65,7 @@ scpi_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
|
||||
if (domain < 0)
|
||||
return domain;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
if (cpu == cpu_dev->id)
|
||||
continue;
|
||||
|
||||
@ -183,7 +184,6 @@ static struct cpufreq_driver scpi_cpufreq_driver = {
|
||||
CPUFREQ_NEED_INITIAL_FREQ_CHECK |
|
||||
CPUFREQ_IS_COOLING_DEV,
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.attr = cpufreq_generic_attr,
|
||||
.get = scpi_cpufreq_get_rate,
|
||||
.init = scpi_cpufreq_init,
|
||||
.exit = scpi_cpufreq_exit,
|
||||
|
@ -151,7 +151,6 @@ static struct cpufreq_driver sh_cpufreq_driver = {
|
||||
.verify = sh_cpufreq_verify,
|
||||
.init = sh_cpufreq_cpu_init,
|
||||
.exit = sh_cpufreq_cpu_exit,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int __init sh_cpufreq_module_init(void)
|
||||
|
@ -165,7 +165,6 @@ static struct cpufreq_driver spear_cpufreq_driver = {
|
||||
.target_index = spear_cpufreq_target,
|
||||
.get = cpufreq_generic_get,
|
||||
.init = spear_cpufreq_init,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int spear_cpufreq_probe(struct platform_device *pdev)
|
||||
|
@ -507,7 +507,6 @@ static struct cpufreq_driver centrino_driver = {
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.target_index = centrino_target,
|
||||
.get = get_cur_freq,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -315,7 +315,6 @@ static struct cpufreq_driver speedstep_driver = {
|
||||
.target_index = speedstep_target,
|
||||
.init = speedstep_cpu_init,
|
||||
.get = speedstep_get,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id ss_smi_ids[] = {
|
||||
|
@ -295,7 +295,6 @@ static struct cpufreq_driver speedstep_driver = {
|
||||
.init = speedstep_cpu_init,
|
||||
.get = speedstep_get,
|
||||
.resume = speedstep_resume,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id ss_smi_ids[] = {
|
||||
|
@ -262,7 +262,7 @@ static int sun50i_cpufreq_nvmem_probe(struct platform_device *pdev)
|
||||
snprintf(name, sizeof(name), "speed%d", speed);
|
||||
config.prop_name = name;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
struct device *cpu_dev = get_cpu_device(cpu);
|
||||
|
||||
if (!cpu_dev) {
|
||||
@ -288,7 +288,7 @@ static int sun50i_cpufreq_nvmem_probe(struct platform_device *pdev)
|
||||
pr_err("Failed to register platform device\n");
|
||||
|
||||
free_opp:
|
||||
for_each_possible_cpu(cpu)
|
||||
for_each_present_cpu(cpu)
|
||||
dev_pm_opp_clear_config(opp_tokens[cpu]);
|
||||
kfree(opp_tokens);
|
||||
|
||||
@ -302,7 +302,7 @@ static void sun50i_cpufreq_nvmem_remove(struct platform_device *pdev)
|
||||
|
||||
platform_device_unregister(cpufreq_dt_pdev);
|
||||
|
||||
for_each_possible_cpu(cpu)
|
||||
for_each_present_cpu(cpu)
|
||||
dev_pm_opp_clear_config(opp_tokens[cpu]);
|
||||
|
||||
kfree(opp_tokens);
|
||||
|
@ -73,11 +73,18 @@ static int tegra186_cpufreq_init(struct cpufreq_policy *policy)
|
||||
{
|
||||
struct tegra186_cpufreq_data *data = cpufreq_get_driver_data();
|
||||
unsigned int cluster = data->cpus[policy->cpu].bpmp_cluster_id;
|
||||
u32 cpu;
|
||||
|
||||
policy->freq_table = data->clusters[cluster].table;
|
||||
policy->cpuinfo.transition_latency = 300 * 1000;
|
||||
policy->driver_data = NULL;
|
||||
|
||||
/* set same policy for all cpus in a cluster */
|
||||
for (cpu = 0; cpu < ARRAY_SIZE(tegra186_cpus); cpu++) {
|
||||
if (data->cpus[cpu].bpmp_cluster_id == cluster)
|
||||
cpumask_set_cpu(cpu, policy->cpus);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -123,7 +130,6 @@ static struct cpufreq_driver tegra186_cpufreq_driver = {
|
||||
.verify = cpufreq_generic_frequency_table_verify,
|
||||
.target_index = tegra186_cpufreq_set_target,
|
||||
.init = tegra186_cpufreq_init,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static struct cpufreq_frequency_table *init_vhint_table(
|
||||
|
@ -589,7 +589,6 @@ static struct cpufreq_driver tegra194_cpufreq_driver = {
|
||||
.exit = tegra194_cpufreq_exit,
|
||||
.online = tegra194_cpufreq_online,
|
||||
.offline = tegra194_cpufreq_offline,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static struct tegra_cpufreq_ops tegra194_cpufreq_ops = {
|
||||
|
@ -471,7 +471,6 @@ static struct cpufreq_driver ve_spc_cpufreq_driver = {
|
||||
.init = ve_spc_cpufreq_init,
|
||||
.exit = ve_spc_cpufreq_exit,
|
||||
.register_em = cpufreq_register_em_with_opp,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BL_SWITCHER
|
||||
|
@ -138,7 +138,7 @@ static int virt_cpufreq_get_sharing_cpus(struct cpufreq_policy *policy)
|
||||
cur_perf_domain = readl_relaxed(base + policy->cpu *
|
||||
PER_CPU_OFFSET + REG_PERF_DOMAIN_OFFSET);
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_present_cpu(cpu) {
|
||||
cpu_dev = get_cpu_device(cpu);
|
||||
if (!cpu_dev)
|
||||
continue;
|
||||
@ -265,7 +265,6 @@ static struct cpufreq_driver cpufreq_virt_driver = {
|
||||
.verify = virt_cpufreq_verify_policy,
|
||||
.target = virt_cpufreq_target,
|
||||
.fast_switch = virt_cpufreq_fast_switch,
|
||||
.attr = cpufreq_generic_attr,
|
||||
};
|
||||
|
||||
static int virt_cpufreq_driver_probe(struct platform_device *pdev)
|
||||
|
@ -144,6 +144,9 @@ struct cpufreq_policy {
|
||||
/* Per policy boost enabled flag. */
|
||||
bool boost_enabled;
|
||||
|
||||
/* Per policy boost supported flag. */
|
||||
bool boost_supported;
|
||||
|
||||
/* Cached frequency lookup from cpufreq_driver_resolve_freq. */
|
||||
unsigned int cached_target_freq;
|
||||
unsigned int cached_resolved_idx;
|
||||
@ -781,10 +784,8 @@ int cpufreq_frequency_table_get_index(struct cpufreq_policy *policy,
|
||||
ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf);
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
int cpufreq_boost_trigger_state(int state);
|
||||
bool cpufreq_boost_enabled(void);
|
||||
int cpufreq_enable_boost_support(void);
|
||||
bool policy_has_boost_freq(struct cpufreq_policy *policy);
|
||||
int cpufreq_boost_set_sw(struct cpufreq_policy *policy, int state);
|
||||
|
||||
/* Find lowest freq at or above target in a table in ascending order */
|
||||
static inline int cpufreq_table_find_index_al(struct cpufreq_policy *policy,
|
||||
@ -1153,23 +1154,14 @@ static inline int of_perf_domain_get_sharing_cpumask(int pcpu, const char *list_
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static inline int cpufreq_boost_trigger_state(int state)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline bool cpufreq_boost_enabled(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int cpufreq_enable_boost_support(void)
|
||||
static inline int cpufreq_boost_set_sw(struct cpufreq_policy *policy, int state)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline bool policy_has_boost_freq(struct cpufreq_policy *policy)
|
||||
{
|
||||
return false;
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int
|
||||
@ -1201,7 +1193,6 @@ void arch_set_freq_scale(const struct cpumask *cpus,
|
||||
/* the following are really really optional */
|
||||
extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
|
||||
extern struct freq_attr cpufreq_freq_attr_scaling_boost_freqs;
|
||||
extern struct freq_attr *cpufreq_generic_attr[];
|
||||
int cpufreq_table_validate_and_sort(struct cpufreq_policy *policy);
|
||||
|
||||
unsigned int cpufreq_generic_get(unsigned int cpu);
|
||||
|
Loading…
x
Reference in New Issue
Block a user