hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/cpufreq/scpi-cpufreq.c
....@@ -1,8 +1,6 @@
11 /*
22 * System Control and Power Interface (SCPI) based CPUFreq Interface driver
33 *
4
- * It provides necessary ops to arm_big_little cpufreq driver.
5
- *
64 * Copyright (C) 2015 ARM Ltd.
75 * Sudeep Holla <sudeep.holla@arm.com>
86 *
....@@ -22,8 +20,6 @@
2220 #include <linux/cpu.h>
2321 #include <linux/cpufreq.h>
2422 #include <linux/cpumask.h>
25
-#include <linux/cpu_cooling.h>
26
-#include <linux/energy_model.h>
2723 #include <linux/export.h>
2824 #include <linux/module.h>
2925 #include <linux/of_platform.h>
....@@ -35,7 +31,6 @@
3531 struct scpi_data {
3632 struct clk *clk;
3733 struct device *cpu_dev;
38
- struct thermal_cooling_device *cdev;
3934 };
4035
4136 static struct scpi_ops *scpi_ops;
....@@ -52,9 +47,8 @@
5247 static int
5348 scpi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
5449 {
55
- unsigned long freq = policy->freq_table[index].frequency;
50
+ u64 rate = policy->freq_table[index].frequency * 1000;
5651 struct scpi_data *priv = policy->driver_data;
57
- u64 rate = freq * 1000;
5852 int ret;
5953
6054 ret = clk_set_rate(priv->clk, rate);
....@@ -64,9 +58,6 @@
6458
6559 if (clk_get_rate(priv->clk) != rate)
6660 return -EIO;
67
-
68
- arch_set_freq_scale(policy->related_cpus, freq,
69
- policy->cpuinfo.max_freq);
7061
7162 return 0;
7263 }
....@@ -99,12 +90,11 @@
9990
10091 static int scpi_cpufreq_init(struct cpufreq_policy *policy)
10192 {
102
- int ret, nr_opp;
93
+ int ret;
10394 unsigned int latency;
10495 struct device *cpu_dev;
10596 struct scpi_data *priv;
10697 struct cpufreq_frequency_table *freq_table;
107
- struct em_data_callback em_cb = EM_DATA_CB(of_dev_pm_opp_get_cpu_power);
10898
10999 cpu_dev = get_cpu_device(policy->cpu);
110100 if (!cpu_dev) {
....@@ -137,7 +127,6 @@
137127 ret = -EPROBE_DEFER;
138128 goto out_free_opp;
139129 }
140
- nr_opp = ret;
141130
142131 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
143132 if (!priv) {
....@@ -174,7 +163,7 @@
174163
175164 policy->fast_switch_possible = false;
176165
177
- em_register_perf_domain(policy->cpus, nr_opp, &em_cb);
166
+ dev_pm_opp_of_register_em(cpu_dev, policy->cpus);
178167
179168 return 0;
180169
....@@ -183,7 +172,7 @@
183172 out_free_priv:
184173 kfree(priv);
185174 out_free_opp:
186
- dev_pm_opp_cpumask_remove_table(policy->cpus);
175
+ dev_pm_opp_remove_all_dynamic(cpu_dev);
187176
188177 return ret;
189178 }
....@@ -192,32 +181,24 @@
192181 {
193182 struct scpi_data *priv = policy->driver_data;
194183
195
- cpufreq_cooling_unregister(priv->cdev);
196184 clk_put(priv->clk);
197185 dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table);
186
+ dev_pm_opp_remove_all_dynamic(priv->cpu_dev);
198187 kfree(priv);
199
- dev_pm_opp_cpumask_remove_table(policy->related_cpus);
200188
201189 return 0;
202
-}
203
-
204
-static void scpi_cpufreq_ready(struct cpufreq_policy *policy)
205
-{
206
- struct scpi_data *priv = policy->driver_data;
207
-
208
- priv->cdev = of_cpufreq_cooling_register(policy);
209190 }
210191
211192 static struct cpufreq_driver scpi_cpufreq_driver = {
212193 .name = "scpi-cpufreq",
213194 .flags = CPUFREQ_STICKY | CPUFREQ_HAVE_GOVERNOR_PER_POLICY |
214
- CPUFREQ_NEED_INITIAL_FREQ_CHECK,
195
+ CPUFREQ_NEED_INITIAL_FREQ_CHECK |
196
+ CPUFREQ_IS_COOLING_DEV,
215197 .verify = cpufreq_generic_frequency_table_verify,
216198 .attr = cpufreq_generic_attr,
217199 .get = scpi_cpufreq_get_rate,
218200 .init = scpi_cpufreq_init,
219201 .exit = scpi_cpufreq_exit,
220
- .ready = scpi_cpufreq_ready,
221202 .target_index = scpi_cpufreq_set_target,
222203 };
223204