cpufreq: use light-weight cpufreq_cpu_get_raw() in __cpufreq_add_dev()
[deliverable/linux.git] / drivers / cpufreq / cpufreq.c
CommitLineData
1da177e4
LT
1/*
2 * linux/drivers/cpufreq/cpufreq.c
3 *
4 * Copyright (C) 2001 Russell King
5 * (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
bb176f7d 6 * (C) 2013 Viresh Kumar <viresh.kumar@linaro.org>
1da177e4 7 *
c32b6b8e 8 * Oct 2005 - Ashok Raj <ashok.raj@intel.com>
32ee8c3e 9 * Added handling for CPU hotplug
8ff69732
DJ
10 * Feb 2006 - Jacob Shin <jacob.shin@amd.com>
11 * Fix handling for CPU hotplug -- affected CPUs
c32b6b8e 12 *
1da177e4
LT
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
1da177e4
LT
16 */
17
db701151
VK
18#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19
5ff0a268 20#include <linux/cpu.h>
1da177e4
LT
21#include <linux/cpufreq.h>
22#include <linux/delay.h>
1da177e4 23#include <linux/device.h>
5ff0a268
VK
24#include <linux/init.h>
25#include <linux/kernel_stat.h>
26#include <linux/module.h>
3fc54d37 27#include <linux/mutex.h>
5ff0a268 28#include <linux/slab.h>
2f0aea93 29#include <linux/suspend.h>
90de2a4a 30#include <linux/syscore_ops.h>
5ff0a268 31#include <linux/tick.h>
6f4f2723
TR
32#include <trace/events/power.h>
33
1da177e4 34/**
cd878479 35 * The "cpufreq driver" - the arch- or hardware-dependent low
1da177e4
LT
36 * level driver of CPUFreq support, and its spinlock. This lock
37 * also protects the cpufreq_cpu_data array.
38 */
1c3d85dd 39static struct cpufreq_driver *cpufreq_driver;
7a6aedfa 40static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
8414809c 41static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data_fallback);
bb176f7d 42static DEFINE_RWLOCK(cpufreq_driver_lock);
6f1e4efd 43DEFINE_MUTEX(cpufreq_governor_lock);
c88a1f8b 44static LIST_HEAD(cpufreq_policy_list);
bb176f7d 45
084f3493 46/* This one keeps track of the previously set governor of a removed CPU */
e77b89f1 47static DEFINE_PER_CPU(char[CPUFREQ_NAME_LEN], cpufreq_cpu_governor);
1da177e4 48
2f0aea93
VK
49/* Flag to suspend/resume CPUFreq governors */
50static bool cpufreq_suspended;
1da177e4 51
9c0ebcf7
VK
52static inline bool has_target(void)
53{
54 return cpufreq_driver->target_index || cpufreq_driver->target;
55}
56
6eed9404
VK
57/*
58 * rwsem to guarantee that cpufreq driver module doesn't unload during critical
59 * sections
60 */
61static DECLARE_RWSEM(cpufreq_rwsem);
62
1da177e4 63/* internal prototypes */
29464f28
DJ
64static int __cpufreq_governor(struct cpufreq_policy *policy,
65 unsigned int event);
d92d50a4 66static unsigned int __cpufreq_get(struct cpufreq_policy *policy);
65f27f38 67static void handle_update(struct work_struct *work);
1da177e4
LT
68
69/**
32ee8c3e
DJ
70 * Two notifier lists: the "policy" list is involved in the
71 * validation process for a new CPU frequency policy; the
1da177e4
LT
72 * "transition" list for kernel code that needs to handle
73 * changes to devices when the CPU clock speed changes.
74 * The mutex locks both lists.
75 */
e041c683 76static BLOCKING_NOTIFIER_HEAD(cpufreq_policy_notifier_list);
b4dfdbb3 77static struct srcu_notifier_head cpufreq_transition_notifier_list;
1da177e4 78
74212ca4 79static bool init_cpufreq_transition_notifier_list_called;
b4dfdbb3
AS
80static int __init init_cpufreq_transition_notifier_list(void)
81{
82 srcu_init_notifier_head(&cpufreq_transition_notifier_list);
74212ca4 83 init_cpufreq_transition_notifier_list_called = true;
b4dfdbb3
AS
84 return 0;
85}
b3438f82 86pure_initcall(init_cpufreq_transition_notifier_list);
1da177e4 87
a7b422cd 88static int off __read_mostly;
da584455 89static int cpufreq_disabled(void)
a7b422cd
KRW
90{
91 return off;
92}
93void disable_cpufreq(void)
94{
95 off = 1;
96}
1da177e4 97static LIST_HEAD(cpufreq_governor_list);
29464f28 98static DEFINE_MUTEX(cpufreq_governor_mutex);
1da177e4 99
4d5dcc42
VK
100bool have_governor_per_policy(void)
101{
0b981e70 102 return !!(cpufreq_driver->flags & CPUFREQ_HAVE_GOVERNOR_PER_POLICY);
4d5dcc42 103}
3f869d6d 104EXPORT_SYMBOL_GPL(have_governor_per_policy);
4d5dcc42 105
944e9a03
VK
106struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy)
107{
108 if (have_governor_per_policy())
109 return &policy->kobj;
110 else
111 return cpufreq_global_kobject;
112}
113EXPORT_SYMBOL_GPL(get_governor_parent_kobj);
114
72a4ce34
VK
115static inline u64 get_cpu_idle_time_jiffy(unsigned int cpu, u64 *wall)
116{
117 u64 idle_time;
118 u64 cur_wall_time;
119 u64 busy_time;
120
121 cur_wall_time = jiffies64_to_cputime64(get_jiffies_64());
122
123 busy_time = kcpustat_cpu(cpu).cpustat[CPUTIME_USER];
124 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SYSTEM];
125 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_IRQ];
126 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SOFTIRQ];
127 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_STEAL];
128 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_NICE];
129
130 idle_time = cur_wall_time - busy_time;
131 if (wall)
132 *wall = cputime_to_usecs(cur_wall_time);
133
134 return cputime_to_usecs(idle_time);
135}
136
137u64 get_cpu_idle_time(unsigned int cpu, u64 *wall, int io_busy)
138{
139 u64 idle_time = get_cpu_idle_time_us(cpu, io_busy ? wall : NULL);
140
141 if (idle_time == -1ULL)
142 return get_cpu_idle_time_jiffy(cpu, wall);
143 else if (!io_busy)
144 idle_time += get_cpu_iowait_time_us(cpu, wall);
145
146 return idle_time;
147}
148EXPORT_SYMBOL_GPL(get_cpu_idle_time);
149
70e9e778
VK
150/*
151 * This is a generic cpufreq init() routine which can be used by cpufreq
152 * drivers of SMP systems. It will do following:
153 * - validate & show freq table passed
154 * - set policies transition latency
155 * - policy->cpus with all possible CPUs
156 */
157int cpufreq_generic_init(struct cpufreq_policy *policy,
158 struct cpufreq_frequency_table *table,
159 unsigned int transition_latency)
160{
161 int ret;
162
163 ret = cpufreq_table_validate_and_show(policy, table);
164 if (ret) {
165 pr_err("%s: invalid frequency table: %d\n", __func__, ret);
166 return ret;
167 }
168
169 policy->cpuinfo.transition_latency = transition_latency;
170
171 /*
172 * The driver only supports the SMP configuartion where all processors
173 * share the clock and voltage and clock.
174 */
175 cpumask_setall(policy->cpus);
176
177 return 0;
178}
179EXPORT_SYMBOL_GPL(cpufreq_generic_init);
180
652ed95d
VK
181unsigned int cpufreq_generic_get(unsigned int cpu)
182{
183 struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu);
184
185 if (!policy || IS_ERR(policy->clk)) {
e837f9b5
JP
186 pr_err("%s: No %s associated to cpu: %d\n",
187 __func__, policy ? "clk" : "policy", cpu);
652ed95d
VK
188 return 0;
189 }
190
191 return clk_get_rate(policy->clk) / 1000;
192}
193EXPORT_SYMBOL_GPL(cpufreq_generic_get);
194
e0b3165b
VK
195/* Only for cpufreq core internal use */
196struct cpufreq_policy *cpufreq_cpu_get_raw(unsigned int cpu)
197{
198 return per_cpu(cpufreq_cpu_data, cpu);
199}
200
6eed9404 201struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
1da177e4 202{
6eed9404 203 struct cpufreq_policy *policy = NULL;
1da177e4
LT
204 unsigned long flags;
205
6eed9404
VK
206 if (cpufreq_disabled() || (cpu >= nr_cpu_ids))
207 return NULL;
208
209 if (!down_read_trylock(&cpufreq_rwsem))
210 return NULL;
1da177e4
LT
211
212 /* get the cpufreq driver */
1c3d85dd 213 read_lock_irqsave(&cpufreq_driver_lock, flags);
1da177e4 214
6eed9404
VK
215 if (cpufreq_driver) {
216 /* get the CPU */
217 policy = per_cpu(cpufreq_cpu_data, cpu);
218 if (policy)
219 kobject_get(&policy->kobj);
220 }
1da177e4 221
6eed9404 222 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
1da177e4 223
3a3e9e06 224 if (!policy)
6eed9404 225 up_read(&cpufreq_rwsem);
1da177e4 226
3a3e9e06 227 return policy;
a9144436 228}
1da177e4
LT
229EXPORT_SYMBOL_GPL(cpufreq_cpu_get);
230
3a3e9e06 231void cpufreq_cpu_put(struct cpufreq_policy *policy)
1da177e4 232{
d5aaffa9
DB
233 if (cpufreq_disabled())
234 return;
235
6eed9404
VK
236 kobject_put(&policy->kobj);
237 up_read(&cpufreq_rwsem);
1da177e4
LT
238}
239EXPORT_SYMBOL_GPL(cpufreq_cpu_put);
240
1da177e4
LT
241/*********************************************************************
242 * EXTERNALLY AFFECTING FREQUENCY CHANGES *
243 *********************************************************************/
244
245/**
246 * adjust_jiffies - adjust the system "loops_per_jiffy"
247 *
248 * This function alters the system "loops_per_jiffy" for the clock
249 * speed change. Note that loops_per_jiffy cannot be updated on SMP
32ee8c3e 250 * systems as each CPU might be scaled differently. So, use the arch
1da177e4
LT
251 * per-CPU loops_per_jiffy value wherever possible.
252 */
253#ifndef CONFIG_SMP
254static unsigned long l_p_j_ref;
bb176f7d 255static unsigned int l_p_j_ref_freq;
1da177e4 256
858119e1 257static void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
1da177e4
LT
258{
259 if (ci->flags & CPUFREQ_CONST_LOOPS)
260 return;
261
262 if (!l_p_j_ref_freq) {
263 l_p_j_ref = loops_per_jiffy;
264 l_p_j_ref_freq = ci->old;
e837f9b5
JP
265 pr_debug("saving %lu as reference value for loops_per_jiffy; freq is %u kHz\n",
266 l_p_j_ref, l_p_j_ref_freq);
1da177e4 267 }
0b443ead 268 if (val == CPUFREQ_POSTCHANGE && ci->old != ci->new) {
e08f5f5b
GS
269 loops_per_jiffy = cpufreq_scale(l_p_j_ref, l_p_j_ref_freq,
270 ci->new);
e837f9b5
JP
271 pr_debug("scaling loops_per_jiffy to %lu for frequency %u kHz\n",
272 loops_per_jiffy, ci->new);
1da177e4
LT
273 }
274}
275#else
e08f5f5b
GS
276static inline void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
277{
278 return;
279}
1da177e4
LT
280#endif
281
0956df9c 282static void __cpufreq_notify_transition(struct cpufreq_policy *policy,
b43a7ffb 283 struct cpufreq_freqs *freqs, unsigned int state)
1da177e4
LT
284{
285 BUG_ON(irqs_disabled());
286
d5aaffa9
DB
287 if (cpufreq_disabled())
288 return;
289
1c3d85dd 290 freqs->flags = cpufreq_driver->flags;
2d06d8c4 291 pr_debug("notification %u of frequency transition to %u kHz\n",
e837f9b5 292 state, freqs->new);
1da177e4 293
1da177e4 294 switch (state) {
e4472cb3 295
1da177e4 296 case CPUFREQ_PRECHANGE:
32ee8c3e 297 /* detect if the driver reported a value as "old frequency"
e4472cb3
DJ
298 * which is not equal to what the cpufreq core thinks is
299 * "old frequency".
1da177e4 300 */
1c3d85dd 301 if (!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
e4472cb3
DJ
302 if ((policy) && (policy->cpu == freqs->cpu) &&
303 (policy->cur) && (policy->cur != freqs->old)) {
e837f9b5
JP
304 pr_debug("Warning: CPU frequency is %u, cpufreq assumed %u kHz\n",
305 freqs->old, policy->cur);
e4472cb3 306 freqs->old = policy->cur;
1da177e4
LT
307 }
308 }
b4dfdbb3 309 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
e041c683 310 CPUFREQ_PRECHANGE, freqs);
1da177e4
LT
311 adjust_jiffies(CPUFREQ_PRECHANGE, freqs);
312 break;
e4472cb3 313
1da177e4
LT
314 case CPUFREQ_POSTCHANGE:
315 adjust_jiffies(CPUFREQ_POSTCHANGE, freqs);
e837f9b5
JP
316 pr_debug("FREQ: %lu - CPU: %lu\n",
317 (unsigned long)freqs->new, (unsigned long)freqs->cpu);
25e41933 318 trace_cpu_frequency(freqs->new, freqs->cpu);
b4dfdbb3 319 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
e041c683 320 CPUFREQ_POSTCHANGE, freqs);
e4472cb3
DJ
321 if (likely(policy) && likely(policy->cpu == freqs->cpu))
322 policy->cur = freqs->new;
1da177e4
LT
323 break;
324 }
1da177e4 325}
bb176f7d 326
b43a7ffb
VK
327/**
328 * cpufreq_notify_transition - call notifier chain and adjust_jiffies
329 * on frequency transition.
330 *
331 * This function calls the transition notifiers and the "adjust_jiffies"
332 * function. It is called twice on all CPU frequency changes that have
333 * external effects.
334 */
236a9800 335static void cpufreq_notify_transition(struct cpufreq_policy *policy,
b43a7ffb
VK
336 struct cpufreq_freqs *freqs, unsigned int state)
337{
338 for_each_cpu(freqs->cpu, policy->cpus)
339 __cpufreq_notify_transition(policy, freqs, state);
340}
1da177e4 341
f7ba3b41 342/* Do post notifications when there are chances that transition has failed */
236a9800 343static void cpufreq_notify_post_transition(struct cpufreq_policy *policy,
f7ba3b41
VK
344 struct cpufreq_freqs *freqs, int transition_failed)
345{
346 cpufreq_notify_transition(policy, freqs, CPUFREQ_POSTCHANGE);
347 if (!transition_failed)
348 return;
349
350 swap(freqs->old, freqs->new);
351 cpufreq_notify_transition(policy, freqs, CPUFREQ_PRECHANGE);
352 cpufreq_notify_transition(policy, freqs, CPUFREQ_POSTCHANGE);
353}
f7ba3b41 354
12478cf0
SB
355void cpufreq_freq_transition_begin(struct cpufreq_policy *policy,
356 struct cpufreq_freqs *freqs)
357{
ca654dc3
SB
358
359 /*
360 * Catch double invocations of _begin() which lead to self-deadlock.
361 * ASYNC_NOTIFICATION drivers are left out because the cpufreq core
362 * doesn't invoke _begin() on their behalf, and hence the chances of
363 * double invocations are very low. Moreover, there are scenarios
364 * where these checks can emit false-positive warnings in these
365 * drivers; so we avoid that by skipping them altogether.
366 */
367 WARN_ON(!(cpufreq_driver->flags & CPUFREQ_ASYNC_NOTIFICATION)
368 && current == policy->transition_task);
369
12478cf0
SB
370wait:
371 wait_event(policy->transition_wait, !policy->transition_ongoing);
372
373 spin_lock(&policy->transition_lock);
374
375 if (unlikely(policy->transition_ongoing)) {
376 spin_unlock(&policy->transition_lock);
377 goto wait;
378 }
379
380 policy->transition_ongoing = true;
ca654dc3 381 policy->transition_task = current;
12478cf0
SB
382
383 spin_unlock(&policy->transition_lock);
384
385 cpufreq_notify_transition(policy, freqs, CPUFREQ_PRECHANGE);
386}
387EXPORT_SYMBOL_GPL(cpufreq_freq_transition_begin);
388
389void cpufreq_freq_transition_end(struct cpufreq_policy *policy,
390 struct cpufreq_freqs *freqs, int transition_failed)
391{
392 if (unlikely(WARN_ON(!policy->transition_ongoing)))
393 return;
394
395 cpufreq_notify_post_transition(policy, freqs, transition_failed);
396
397 policy->transition_ongoing = false;
ca654dc3 398 policy->transition_task = NULL;
12478cf0
SB
399
400 wake_up(&policy->transition_wait);
401}
402EXPORT_SYMBOL_GPL(cpufreq_freq_transition_end);
403
1da177e4 404
1da177e4
LT
405/*********************************************************************
406 * SYSFS INTERFACE *
407 *********************************************************************/
8a5c74a1 408static ssize_t show_boost(struct kobject *kobj,
6f19efc0
LM
409 struct attribute *attr, char *buf)
410{
411 return sprintf(buf, "%d\n", cpufreq_driver->boost_enabled);
412}
413
414static ssize_t store_boost(struct kobject *kobj, struct attribute *attr,
415 const char *buf, size_t count)
416{
417 int ret, enable;
418
419 ret = sscanf(buf, "%d", &enable);
420 if (ret != 1 || enable < 0 || enable > 1)
421 return -EINVAL;
422
423 if (cpufreq_boost_trigger_state(enable)) {
e837f9b5
JP
424 pr_err("%s: Cannot %s BOOST!\n",
425 __func__, enable ? "enable" : "disable");
6f19efc0
LM
426 return -EINVAL;
427 }
428
e837f9b5
JP
429 pr_debug("%s: cpufreq BOOST %s\n",
430 __func__, enable ? "enabled" : "disabled");
6f19efc0
LM
431
432 return count;
433}
434define_one_global_rw(boost);
1da177e4 435
42f91fa1 436static struct cpufreq_governor *find_governor(const char *str_governor)
3bcb09a3
JF
437{
438 struct cpufreq_governor *t;
439
440 list_for_each_entry(t, &cpufreq_governor_list, governor_list)
7c4f4539 441 if (!strncasecmp(str_governor, t->name, CPUFREQ_NAME_LEN))
3bcb09a3
JF
442 return t;
443
444 return NULL;
445}
446
1da177e4
LT
447/**
448 * cpufreq_parse_governor - parse a governor string
449 */
905d77cd 450static int cpufreq_parse_governor(char *str_governor, unsigned int *policy,
1da177e4
LT
451 struct cpufreq_governor **governor)
452{
3bcb09a3 453 int err = -EINVAL;
1c3d85dd
RW
454
455 if (!cpufreq_driver)
3bcb09a3
JF
456 goto out;
457
1c3d85dd 458 if (cpufreq_driver->setpolicy) {
7c4f4539 459 if (!strncasecmp(str_governor, "performance", CPUFREQ_NAME_LEN)) {
1da177e4 460 *policy = CPUFREQ_POLICY_PERFORMANCE;
3bcb09a3 461 err = 0;
7c4f4539 462 } else if (!strncasecmp(str_governor, "powersave",
e08f5f5b 463 CPUFREQ_NAME_LEN)) {
1da177e4 464 *policy = CPUFREQ_POLICY_POWERSAVE;
3bcb09a3 465 err = 0;
1da177e4 466 }
2e1cc3a5 467 } else {
1da177e4 468 struct cpufreq_governor *t;
3bcb09a3 469
3fc54d37 470 mutex_lock(&cpufreq_governor_mutex);
3bcb09a3 471
42f91fa1 472 t = find_governor(str_governor);
3bcb09a3 473
ea714970 474 if (t == NULL) {
1a8e1463 475 int ret;
ea714970 476
1a8e1463
KC
477 mutex_unlock(&cpufreq_governor_mutex);
478 ret = request_module("cpufreq_%s", str_governor);
479 mutex_lock(&cpufreq_governor_mutex);
ea714970 480
1a8e1463 481 if (ret == 0)
42f91fa1 482 t = find_governor(str_governor);
ea714970
JF
483 }
484
3bcb09a3
JF
485 if (t != NULL) {
486 *governor = t;
487 err = 0;
1da177e4 488 }
3bcb09a3 489
3fc54d37 490 mutex_unlock(&cpufreq_governor_mutex);
1da177e4 491 }
29464f28 492out:
3bcb09a3 493 return err;
1da177e4 494}
1da177e4 495
1da177e4 496/**
e08f5f5b
GS
497 * cpufreq_per_cpu_attr_read() / show_##file_name() -
498 * print out cpufreq information
1da177e4
LT
499 *
500 * Write out information from cpufreq_driver->policy[cpu]; object must be
501 * "unsigned int".
502 */
503
32ee8c3e
DJ
504#define show_one(file_name, object) \
505static ssize_t show_##file_name \
905d77cd 506(struct cpufreq_policy *policy, char *buf) \
32ee8c3e 507{ \
29464f28 508 return sprintf(buf, "%u\n", policy->object); \
1da177e4
LT
509}
510
511show_one(cpuinfo_min_freq, cpuinfo.min_freq);
512show_one(cpuinfo_max_freq, cpuinfo.max_freq);
ed129784 513show_one(cpuinfo_transition_latency, cpuinfo.transition_latency);
1da177e4
LT
514show_one(scaling_min_freq, min);
515show_one(scaling_max_freq, max);
c034b02e 516
09347b29 517static ssize_t show_scaling_cur_freq(struct cpufreq_policy *policy, char *buf)
c034b02e
DB
518{
519 ssize_t ret;
520
521 if (cpufreq_driver && cpufreq_driver->setpolicy && cpufreq_driver->get)
522 ret = sprintf(buf, "%u\n", cpufreq_driver->get(policy->cpu));
523 else
524 ret = sprintf(buf, "%u\n", policy->cur);
525 return ret;
526}
1da177e4 527
037ce839 528static int cpufreq_set_policy(struct cpufreq_policy *policy,
3a3e9e06 529 struct cpufreq_policy *new_policy);
7970e08b 530
1da177e4
LT
531/**
532 * cpufreq_per_cpu_attr_write() / store_##file_name() - sysfs write access
533 */
534#define store_one(file_name, object) \
535static ssize_t store_##file_name \
905d77cd 536(struct cpufreq_policy *policy, const char *buf, size_t count) \
1da177e4 537{ \
619c144c 538 int ret, temp; \
1da177e4
LT
539 struct cpufreq_policy new_policy; \
540 \
541 ret = cpufreq_get_policy(&new_policy, policy->cpu); \
542 if (ret) \
543 return -EINVAL; \
544 \
29464f28 545 ret = sscanf(buf, "%u", &new_policy.object); \
1da177e4
LT
546 if (ret != 1) \
547 return -EINVAL; \
548 \
619c144c 549 temp = new_policy.object; \
037ce839 550 ret = cpufreq_set_policy(policy, &new_policy); \
619c144c
VH
551 if (!ret) \
552 policy->user_policy.object = temp; \
1da177e4
LT
553 \
554 return ret ? ret : count; \
555}
556
29464f28
DJ
557store_one(scaling_min_freq, min);
558store_one(scaling_max_freq, max);
1da177e4
LT
559
560/**
561 * show_cpuinfo_cur_freq - current CPU frequency as detected by hardware
562 */
905d77cd
DJ
563static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy,
564 char *buf)
1da177e4 565{
d92d50a4 566 unsigned int cur_freq = __cpufreq_get(policy);
1da177e4
LT
567 if (!cur_freq)
568 return sprintf(buf, "<unknown>");
569 return sprintf(buf, "%u\n", cur_freq);
570}
571
1da177e4
LT
572/**
573 * show_scaling_governor - show the current policy for the specified CPU
574 */
905d77cd 575static ssize_t show_scaling_governor(struct cpufreq_policy *policy, char *buf)
1da177e4 576{
29464f28 577 if (policy->policy == CPUFREQ_POLICY_POWERSAVE)
1da177e4
LT
578 return sprintf(buf, "powersave\n");
579 else if (policy->policy == CPUFREQ_POLICY_PERFORMANCE)
580 return sprintf(buf, "performance\n");
581 else if (policy->governor)
4b972f0b 582 return scnprintf(buf, CPUFREQ_NAME_PLEN, "%s\n",
29464f28 583 policy->governor->name);
1da177e4
LT
584 return -EINVAL;
585}
586
1da177e4
LT
587/**
588 * store_scaling_governor - store policy for the specified CPU
589 */
905d77cd
DJ
590static ssize_t store_scaling_governor(struct cpufreq_policy *policy,
591 const char *buf, size_t count)
1da177e4 592{
5136fa56 593 int ret;
1da177e4
LT
594 char str_governor[16];
595 struct cpufreq_policy new_policy;
596
597 ret = cpufreq_get_policy(&new_policy, policy->cpu);
598 if (ret)
599 return ret;
600
29464f28 601 ret = sscanf(buf, "%15s", str_governor);
1da177e4
LT
602 if (ret != 1)
603 return -EINVAL;
604
e08f5f5b
GS
605 if (cpufreq_parse_governor(str_governor, &new_policy.policy,
606 &new_policy.governor))
1da177e4
LT
607 return -EINVAL;
608
037ce839 609 ret = cpufreq_set_policy(policy, &new_policy);
7970e08b
TR
610
611 policy->user_policy.policy = policy->policy;
612 policy->user_policy.governor = policy->governor;
7970e08b 613
e08f5f5b
GS
614 if (ret)
615 return ret;
616 else
617 return count;
1da177e4
LT
618}
619
620/**
621 * show_scaling_driver - show the cpufreq driver currently loaded
622 */
905d77cd 623static ssize_t show_scaling_driver(struct cpufreq_policy *policy, char *buf)
1da177e4 624{
1c3d85dd 625 return scnprintf(buf, CPUFREQ_NAME_PLEN, "%s\n", cpufreq_driver->name);
1da177e4
LT
626}
627
628/**
629 * show_scaling_available_governors - show the available CPUfreq governors
630 */
905d77cd
DJ
631static ssize_t show_scaling_available_governors(struct cpufreq_policy *policy,
632 char *buf)
1da177e4
LT
633{
634 ssize_t i = 0;
635 struct cpufreq_governor *t;
636
9c0ebcf7 637 if (!has_target()) {
1da177e4
LT
638 i += sprintf(buf, "performance powersave");
639 goto out;
640 }
641
642 list_for_each_entry(t, &cpufreq_governor_list, governor_list) {
29464f28
DJ
643 if (i >= (ssize_t) ((PAGE_SIZE / sizeof(char))
644 - (CPUFREQ_NAME_LEN + 2)))
1da177e4 645 goto out;
4b972f0b 646 i += scnprintf(&buf[i], CPUFREQ_NAME_PLEN, "%s ", t->name);
1da177e4 647 }
7d5e350f 648out:
1da177e4
LT
649 i += sprintf(&buf[i], "\n");
650 return i;
651}
e8628dd0 652
f4fd3797 653ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf)
1da177e4
LT
654{
655 ssize_t i = 0;
656 unsigned int cpu;
657
835481d9 658 for_each_cpu(cpu, mask) {
1da177e4
LT
659 if (i)
660 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " ");
661 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu);
662 if (i >= (PAGE_SIZE - 5))
29464f28 663 break;
1da177e4
LT
664 }
665 i += sprintf(&buf[i], "\n");
666 return i;
667}
f4fd3797 668EXPORT_SYMBOL_GPL(cpufreq_show_cpus);
1da177e4 669
e8628dd0
DW
670/**
671 * show_related_cpus - show the CPUs affected by each transition even if
672 * hw coordination is in use
673 */
674static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf)
675{
f4fd3797 676 return cpufreq_show_cpus(policy->related_cpus, buf);
e8628dd0
DW
677}
678
679/**
680 * show_affected_cpus - show the CPUs affected by each transition
681 */
682static ssize_t show_affected_cpus(struct cpufreq_policy *policy, char *buf)
683{
f4fd3797 684 return cpufreq_show_cpus(policy->cpus, buf);
e8628dd0
DW
685}
686
9e76988e 687static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy,
905d77cd 688 const char *buf, size_t count)
9e76988e
VP
689{
690 unsigned int freq = 0;
691 unsigned int ret;
692
879000f9 693 if (!policy->governor || !policy->governor->store_setspeed)
9e76988e
VP
694 return -EINVAL;
695
696 ret = sscanf(buf, "%u", &freq);
697 if (ret != 1)
698 return -EINVAL;
699
700 policy->governor->store_setspeed(policy, freq);
701
702 return count;
703}
704
705static ssize_t show_scaling_setspeed(struct cpufreq_policy *policy, char *buf)
706{
879000f9 707 if (!policy->governor || !policy->governor->show_setspeed)
9e76988e
VP
708 return sprintf(buf, "<unsupported>\n");
709
710 return policy->governor->show_setspeed(policy, buf);
711}
1da177e4 712
e2f74f35 713/**
8bf1ac72 714 * show_bios_limit - show the current cpufreq HW/BIOS limitation
e2f74f35
TR
715 */
716static ssize_t show_bios_limit(struct cpufreq_policy *policy, char *buf)
717{
718 unsigned int limit;
719 int ret;
1c3d85dd
RW
720 if (cpufreq_driver->bios_limit) {
721 ret = cpufreq_driver->bios_limit(policy->cpu, &limit);
e2f74f35
TR
722 if (!ret)
723 return sprintf(buf, "%u\n", limit);
724 }
725 return sprintf(buf, "%u\n", policy->cpuinfo.max_freq);
726}
727
6dad2a29
BP
728cpufreq_freq_attr_ro_perm(cpuinfo_cur_freq, 0400);
729cpufreq_freq_attr_ro(cpuinfo_min_freq);
730cpufreq_freq_attr_ro(cpuinfo_max_freq);
731cpufreq_freq_attr_ro(cpuinfo_transition_latency);
732cpufreq_freq_attr_ro(scaling_available_governors);
733cpufreq_freq_attr_ro(scaling_driver);
734cpufreq_freq_attr_ro(scaling_cur_freq);
735cpufreq_freq_attr_ro(bios_limit);
736cpufreq_freq_attr_ro(related_cpus);
737cpufreq_freq_attr_ro(affected_cpus);
738cpufreq_freq_attr_rw(scaling_min_freq);
739cpufreq_freq_attr_rw(scaling_max_freq);
740cpufreq_freq_attr_rw(scaling_governor);
741cpufreq_freq_attr_rw(scaling_setspeed);
1da177e4 742
905d77cd 743static struct attribute *default_attrs[] = {
1da177e4
LT
744 &cpuinfo_min_freq.attr,
745 &cpuinfo_max_freq.attr,
ed129784 746 &cpuinfo_transition_latency.attr,
1da177e4
LT
747 &scaling_min_freq.attr,
748 &scaling_max_freq.attr,
749 &affected_cpus.attr,
e8628dd0 750 &related_cpus.attr,
1da177e4
LT
751 &scaling_governor.attr,
752 &scaling_driver.attr,
753 &scaling_available_governors.attr,
9e76988e 754 &scaling_setspeed.attr,
1da177e4
LT
755 NULL
756};
757
29464f28
DJ
758#define to_policy(k) container_of(k, struct cpufreq_policy, kobj)
759#define to_attr(a) container_of(a, struct freq_attr, attr)
1da177e4 760
29464f28 761static ssize_t show(struct kobject *kobj, struct attribute *attr, char *buf)
1da177e4 762{
905d77cd
DJ
763 struct cpufreq_policy *policy = to_policy(kobj);
764 struct freq_attr *fattr = to_attr(attr);
1b750e3b 765 ssize_t ret;
6eed9404
VK
766
767 if (!down_read_trylock(&cpufreq_rwsem))
1b750e3b 768 return -EINVAL;
5a01f2e8 769
ad7722da 770 down_read(&policy->rwsem);
5a01f2e8 771
e08f5f5b
GS
772 if (fattr->show)
773 ret = fattr->show(policy, buf);
774 else
775 ret = -EIO;
776
ad7722da 777 up_read(&policy->rwsem);
6eed9404 778 up_read(&cpufreq_rwsem);
1b750e3b 779
1da177e4
LT
780 return ret;
781}
782
905d77cd
DJ
783static ssize_t store(struct kobject *kobj, struct attribute *attr,
784 const char *buf, size_t count)
1da177e4 785{
905d77cd
DJ
786 struct cpufreq_policy *policy = to_policy(kobj);
787 struct freq_attr *fattr = to_attr(attr);
a07530b4 788 ssize_t ret = -EINVAL;
6eed9404 789
4f750c93
SB
790 get_online_cpus();
791
792 if (!cpu_online(policy->cpu))
793 goto unlock;
794
6eed9404 795 if (!down_read_trylock(&cpufreq_rwsem))
4f750c93 796 goto unlock;
5a01f2e8 797
ad7722da 798 down_write(&policy->rwsem);
5a01f2e8 799
e08f5f5b
GS
800 if (fattr->store)
801 ret = fattr->store(policy, buf, count);
802 else
803 ret = -EIO;
804
ad7722da 805 up_write(&policy->rwsem);
6eed9404 806
6eed9404 807 up_read(&cpufreq_rwsem);
4f750c93
SB
808unlock:
809 put_online_cpus();
810
1da177e4
LT
811 return ret;
812}
813
905d77cd 814static void cpufreq_sysfs_release(struct kobject *kobj)
1da177e4 815{
905d77cd 816 struct cpufreq_policy *policy = to_policy(kobj);
2d06d8c4 817 pr_debug("last reference is dropped\n");
1da177e4
LT
818 complete(&policy->kobj_unregister);
819}
820
52cf25d0 821static const struct sysfs_ops sysfs_ops = {
1da177e4
LT
822 .show = show,
823 .store = store,
824};
825
826static struct kobj_type ktype_cpufreq = {
827 .sysfs_ops = &sysfs_ops,
828 .default_attrs = default_attrs,
829 .release = cpufreq_sysfs_release,
830};
831
2361be23
VK
832struct kobject *cpufreq_global_kobject;
833EXPORT_SYMBOL(cpufreq_global_kobject);
834
835static int cpufreq_global_kobject_usage;
836
837int cpufreq_get_global_kobject(void)
838{
839 if (!cpufreq_global_kobject_usage++)
840 return kobject_add(cpufreq_global_kobject,
841 &cpu_subsys.dev_root->kobj, "%s", "cpufreq");
842
843 return 0;
844}
845EXPORT_SYMBOL(cpufreq_get_global_kobject);
846
847void cpufreq_put_global_kobject(void)
848{
849 if (!--cpufreq_global_kobject_usage)
850 kobject_del(cpufreq_global_kobject);
851}
852EXPORT_SYMBOL(cpufreq_put_global_kobject);
853
854int cpufreq_sysfs_create_file(const struct attribute *attr)
855{
856 int ret = cpufreq_get_global_kobject();
857
858 if (!ret) {
859 ret = sysfs_create_file(cpufreq_global_kobject, attr);
860 if (ret)
861 cpufreq_put_global_kobject();
862 }
863
864 return ret;
865}
866EXPORT_SYMBOL(cpufreq_sysfs_create_file);
867
868void cpufreq_sysfs_remove_file(const struct attribute *attr)
869{
870 sysfs_remove_file(cpufreq_global_kobject, attr);
871 cpufreq_put_global_kobject();
872}
873EXPORT_SYMBOL(cpufreq_sysfs_remove_file);
874
19d6f7ec 875/* symlink affected CPUs */
308b60e7 876static int cpufreq_add_dev_symlink(struct cpufreq_policy *policy)
19d6f7ec
DJ
877{
878 unsigned int j;
879 int ret = 0;
880
881 for_each_cpu(j, policy->cpus) {
8a25a2fd 882 struct device *cpu_dev;
19d6f7ec 883
308b60e7 884 if (j == policy->cpu)
19d6f7ec 885 continue;
19d6f7ec 886
e8fdde10 887 pr_debug("Adding link for CPU: %u\n", j);
8a25a2fd
KS
888 cpu_dev = get_cpu_device(j);
889 ret = sysfs_create_link(&cpu_dev->kobj, &policy->kobj,
19d6f7ec 890 "cpufreq");
71c3461e
RW
891 if (ret)
892 break;
19d6f7ec
DJ
893 }
894 return ret;
895}
896
308b60e7 897static int cpufreq_add_dev_interface(struct cpufreq_policy *policy,
8a25a2fd 898 struct device *dev)
909a694e
DJ
899{
900 struct freq_attr **drv_attr;
909a694e 901 int ret = 0;
909a694e 902
909a694e 903 /* set up files for this cpu device */
1c3d85dd 904 drv_attr = cpufreq_driver->attr;
f13f1184 905 while (drv_attr && *drv_attr) {
909a694e
DJ
906 ret = sysfs_create_file(&policy->kobj, &((*drv_attr)->attr));
907 if (ret)
6d4e81ed 908 return ret;
909a694e
DJ
909 drv_attr++;
910 }
1c3d85dd 911 if (cpufreq_driver->get) {
909a694e
DJ
912 ret = sysfs_create_file(&policy->kobj, &cpuinfo_cur_freq.attr);
913 if (ret)
6d4e81ed 914 return ret;
909a694e 915 }
c034b02e
DB
916
917 ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr);
918 if (ret)
6d4e81ed 919 return ret;
c034b02e 920
1c3d85dd 921 if (cpufreq_driver->bios_limit) {
e2f74f35
TR
922 ret = sysfs_create_file(&policy->kobj, &bios_limit.attr);
923 if (ret)
6d4e81ed 924 return ret;
e2f74f35 925 }
909a694e 926
6d4e81ed 927 return cpufreq_add_dev_symlink(policy);
e18f1682
SB
928}
929
930static void cpufreq_init_policy(struct cpufreq_policy *policy)
931{
6e2c89d1 932 struct cpufreq_governor *gov = NULL;
e18f1682
SB
933 struct cpufreq_policy new_policy;
934 int ret = 0;
935
d5b73cd8 936 memcpy(&new_policy, policy, sizeof(*policy));
a27a9ab7 937
6e2c89d1 938 /* Update governor of new_policy to the governor used before hotplug */
42f91fa1 939 gov = find_governor(per_cpu(cpufreq_cpu_governor, policy->cpu));
6e2c89d1 940 if (gov)
941 pr_debug("Restoring governor %s for cpu %d\n",
942 policy->governor->name, policy->cpu);
943 else
944 gov = CPUFREQ_DEFAULT_GOVERNOR;
945
946 new_policy.governor = gov;
947
a27a9ab7
JB
948 /* Use the default policy if its valid. */
949 if (cpufreq_driver->setpolicy)
6e2c89d1 950 cpufreq_parse_governor(gov->name, &new_policy.policy, NULL);
ecf7e461
DJ
951
952 /* set default policy */
037ce839 953 ret = cpufreq_set_policy(policy, &new_policy);
ecf7e461 954 if (ret) {
2d06d8c4 955 pr_debug("setting policy failed\n");
1c3d85dd
RW
956 if (cpufreq_driver->exit)
957 cpufreq_driver->exit(policy);
ecf7e461 958 }
909a694e
DJ
959}
960
d8d3b471 961static int cpufreq_add_policy_cpu(struct cpufreq_policy *policy,
42f921a6 962 unsigned int cpu, struct device *dev)
fcf80582 963{
9c0ebcf7 964 int ret = 0;
fcf80582
VK
965 unsigned long flags;
966
9c0ebcf7 967 if (has_target()) {
3de9bdeb
VK
968 ret = __cpufreq_governor(policy, CPUFREQ_GOV_STOP);
969 if (ret) {
970 pr_err("%s: Failed to stop governor\n", __func__);
971 return ret;
972 }
973 }
fcf80582 974
ad7722da 975 down_write(&policy->rwsem);
2eaa3e2d 976
0d1857a1 977 write_lock_irqsave(&cpufreq_driver_lock, flags);
2eaa3e2d 978
fcf80582
VK
979 cpumask_set_cpu(cpu, policy->cpus);
980 per_cpu(cpufreq_cpu_data, cpu) = policy;
0d1857a1 981 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
fcf80582 982
ad7722da 983 up_write(&policy->rwsem);
2eaa3e2d 984
9c0ebcf7 985 if (has_target()) {
e5c87b76
SK
986 ret = __cpufreq_governor(policy, CPUFREQ_GOV_START);
987 if (!ret)
988 ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
989
990 if (ret) {
3de9bdeb
VK
991 pr_err("%s: Failed to start governor\n", __func__);
992 return ret;
993 }
820c6ca2 994 }
fcf80582 995
42f921a6 996 return sysfs_create_link(&dev->kobj, &policy->kobj, "cpufreq");
fcf80582 997}
1da177e4 998
8414809c
SB
999static struct cpufreq_policy *cpufreq_policy_restore(unsigned int cpu)
1000{
1001 struct cpufreq_policy *policy;
1002 unsigned long flags;
1003
44871c9c 1004 read_lock_irqsave(&cpufreq_driver_lock, flags);
8414809c
SB
1005
1006 policy = per_cpu(cpufreq_cpu_data_fallback, cpu);
1007
44871c9c 1008 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
8414809c 1009
09712f55
GU
1010 if (policy)
1011 policy->governor = NULL;
6e2c89d1 1012
8414809c
SB
1013 return policy;
1014}
1015
e9698cc5
SB
1016static struct cpufreq_policy *cpufreq_policy_alloc(void)
1017{
1018 struct cpufreq_policy *policy;
1019
1020 policy = kzalloc(sizeof(*policy), GFP_KERNEL);
1021 if (!policy)
1022 return NULL;
1023
1024 if (!alloc_cpumask_var(&policy->cpus, GFP_KERNEL))
1025 goto err_free_policy;
1026
1027 if (!zalloc_cpumask_var(&policy->related_cpus, GFP_KERNEL))
1028 goto err_free_cpumask;
1029
c88a1f8b 1030 INIT_LIST_HEAD(&policy->policy_list);
ad7722da 1031 init_rwsem(&policy->rwsem);
12478cf0
SB
1032 spin_lock_init(&policy->transition_lock);
1033 init_waitqueue_head(&policy->transition_wait);
ad7722da 1034
e9698cc5
SB
1035 return policy;
1036
1037err_free_cpumask:
1038 free_cpumask_var(policy->cpus);
1039err_free_policy:
1040 kfree(policy);
1041
1042 return NULL;
1043}
1044
42f921a6
VK
1045static void cpufreq_policy_put_kobj(struct cpufreq_policy *policy)
1046{
1047 struct kobject *kobj;
1048 struct completion *cmp;
1049
fcd7af91
VK
1050 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1051 CPUFREQ_REMOVE_POLICY, policy);
1052
42f921a6
VK
1053 down_read(&policy->rwsem);
1054 kobj = &policy->kobj;
1055 cmp = &policy->kobj_unregister;
1056 up_read(&policy->rwsem);
1057 kobject_put(kobj);
1058
1059 /*
1060 * We need to make sure that the underlying kobj is
1061 * actually not referenced anymore by anybody before we
1062 * proceed with unloading.
1063 */
1064 pr_debug("waiting for dropping of refcount\n");
1065 wait_for_completion(cmp);
1066 pr_debug("wait complete\n");
1067}
1068
e9698cc5
SB
1069static void cpufreq_policy_free(struct cpufreq_policy *policy)
1070{
1071 free_cpumask_var(policy->related_cpus);
1072 free_cpumask_var(policy->cpus);
1073 kfree(policy);
1074}
1075
1bfb425b
VK
1076static int update_policy_cpu(struct cpufreq_policy *policy, unsigned int cpu,
1077 struct device *cpu_dev)
0d66b91e 1078{
1bfb425b
VK
1079 int ret;
1080
99ec899e 1081 if (WARN_ON(cpu == policy->cpu))
1bfb425b
VK
1082 return 0;
1083
1084 /* Move kobject to the new policy->cpu */
1085 ret = kobject_move(&policy->kobj, &cpu_dev->kobj);
1086 if (ret) {
1087 pr_err("%s: Failed to move kobj: %d\n", __func__, ret);
1088 return ret;
1089 }
cb38ed5c 1090
ad7722da 1091 down_write(&policy->rwsem);
8efd5765 1092
0d66b91e
SB
1093 policy->last_cpu = policy->cpu;
1094 policy->cpu = cpu;
1095
ad7722da 1096 up_write(&policy->rwsem);
8efd5765 1097
0d66b91e
SB
1098 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1099 CPUFREQ_UPDATE_POLICY_CPU, policy);
1bfb425b
VK
1100
1101 return 0;
0d66b91e
SB
1102}
1103
96bbbe4a 1104static int __cpufreq_add_dev(struct device *dev, struct subsys_interface *sif)
1da177e4 1105{
fcf80582 1106 unsigned int j, cpu = dev->id;
65922465 1107 int ret = -ENOMEM;
7f0c020a 1108 struct cpufreq_policy *policy;
1da177e4 1109 unsigned long flags;
96bbbe4a 1110 bool recover_policy = cpufreq_suspended;
1da177e4 1111
c32b6b8e
AR
1112 if (cpu_is_offline(cpu))
1113 return 0;
1114
2d06d8c4 1115 pr_debug("adding CPU %u\n", cpu);
1da177e4 1116
1da177e4
LT
1117 /* check whether a different CPU already registered this
1118 * CPU because it is in the same boat. */
d7a9771c
VK
1119 policy = cpufreq_cpu_get_raw(cpu);
1120 if (unlikely(policy))
1da177e4 1121 return 0;
fcf80582 1122
6eed9404
VK
1123 if (!down_read_trylock(&cpufreq_rwsem))
1124 return 0;
1125
fcf80582 1126 /* Check if this cpu was hot-unplugged earlier and has siblings */
0d1857a1 1127 read_lock_irqsave(&cpufreq_driver_lock, flags);
7f0c020a
VK
1128 list_for_each_entry(policy, &cpufreq_policy_list, policy_list) {
1129 if (cpumask_test_cpu(cpu, policy->related_cpus)) {
0d1857a1 1130 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
7f0c020a 1131 ret = cpufreq_add_policy_cpu(policy, cpu, dev);
6eed9404
VK
1132 up_read(&cpufreq_rwsem);
1133 return ret;
2eaa3e2d 1134 }
fcf80582 1135 }
0d1857a1 1136 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
1da177e4 1137
72368d12
RW
1138 /*
1139 * Restore the saved policy when doing light-weight init and fall back
1140 * to the full init if that fails.
1141 */
96bbbe4a 1142 policy = recover_policy ? cpufreq_policy_restore(cpu) : NULL;
72368d12 1143 if (!policy) {
96bbbe4a 1144 recover_policy = false;
8414809c 1145 policy = cpufreq_policy_alloc();
72368d12
RW
1146 if (!policy)
1147 goto nomem_out;
1148 }
0d66b91e
SB
1149
1150 /*
1151 * In the resume path, since we restore a saved policy, the assignment
1152 * to policy->cpu is like an update of the existing policy, rather than
1153 * the creation of a brand new one. So we need to perform this update
1154 * by invoking update_policy_cpu().
1155 */
1bfb425b
VK
1156 if (recover_policy && cpu != policy->cpu)
1157 WARN_ON(update_policy_cpu(policy, cpu, dev));
1158 else
0d66b91e
SB
1159 policy->cpu = cpu;
1160
835481d9 1161 cpumask_copy(policy->cpus, cpumask_of(cpu));
1da177e4 1162
1da177e4 1163 init_completion(&policy->kobj_unregister);
65f27f38 1164 INIT_WORK(&policy->update, handle_update);
1da177e4
LT
1165
1166 /* call driver. From then on the cpufreq must be able
1167 * to accept all calls to ->verify and ->setpolicy for this CPU
1168 */
1c3d85dd 1169 ret = cpufreq_driver->init(policy);
1da177e4 1170 if (ret) {
2d06d8c4 1171 pr_debug("initialization failed\n");
2eaa3e2d 1172 goto err_set_policy_cpu;
1da177e4 1173 }
643ae6e8 1174
6d4e81ed
TV
1175 down_write(&policy->rwsem);
1176
5a7e56a5
VK
1177 /* related cpus should atleast have policy->cpus */
1178 cpumask_or(policy->related_cpus, policy->related_cpus, policy->cpus);
1179
1180 /*
1181 * affected cpus must always be the one, which are online. We aren't
1182 * managing offline cpus here.
1183 */
1184 cpumask_and(policy->cpus, policy->cpus, cpu_online_mask);
1185
96bbbe4a 1186 if (!recover_policy) {
5a7e56a5
VK
1187 policy->user_policy.min = policy->min;
1188 policy->user_policy.max = policy->max;
6d4e81ed
TV
1189
1190 /* prepare interface data */
1191 ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq,
1192 &dev->kobj, "cpufreq");
1193 if (ret) {
1194 pr_err("%s: failed to init policy->kobj: %d\n",
1195 __func__, ret);
1196 goto err_init_policy_kobj;
1197 }
5a7e56a5
VK
1198 }
1199
652ed95d
VK
1200 write_lock_irqsave(&cpufreq_driver_lock, flags);
1201 for_each_cpu(j, policy->cpus)
1202 per_cpu(cpufreq_cpu_data, j) = policy;
1203 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
1204
2ed99e39 1205 if (cpufreq_driver->get && !cpufreq_driver->setpolicy) {
da60ce9f
VK
1206 policy->cur = cpufreq_driver->get(policy->cpu);
1207 if (!policy->cur) {
1208 pr_err("%s: ->get() failed\n", __func__);
1209 goto err_get_freq;
1210 }
1211 }
1212
d3916691
VK
1213 /*
1214 * Sometimes boot loaders set CPU frequency to a value outside of
1215 * frequency table present with cpufreq core. In such cases CPU might be
1216 * unstable if it has to run on that frequency for long duration of time
1217 * and so its better to set it to a frequency which is specified in
1218 * freq-table. This also makes cpufreq stats inconsistent as
1219 * cpufreq-stats would fail to register because current frequency of CPU
1220 * isn't found in freq-table.
1221 *
1222 * Because we don't want this change to effect boot process badly, we go
1223 * for the next freq which is >= policy->cur ('cur' must be set by now,
1224 * otherwise we will end up setting freq to lowest of the table as 'cur'
1225 * is initialized to zero).
1226 *
1227 * We are passing target-freq as "policy->cur - 1" otherwise
1228 * __cpufreq_driver_target() would simply fail, as policy->cur will be
1229 * equal to target-freq.
1230 */
1231 if ((cpufreq_driver->flags & CPUFREQ_NEED_INITIAL_FREQ_CHECK)
1232 && has_target()) {
1233 /* Are we running at unknown frequency ? */
1234 ret = cpufreq_frequency_table_get_index(policy, policy->cur);
1235 if (ret == -EINVAL) {
1236 /* Warn user and fix it */
1237 pr_warn("%s: CPU%d: Running at unlisted freq: %u KHz\n",
1238 __func__, policy->cpu, policy->cur);
1239 ret = __cpufreq_driver_target(policy, policy->cur - 1,
1240 CPUFREQ_RELATION_L);
1241
1242 /*
1243 * Reaching here after boot in a few seconds may not
1244 * mean that system will remain stable at "unknown"
1245 * frequency for longer duration. Hence, a BUG_ON().
1246 */
1247 BUG_ON(ret);
1248 pr_warn("%s: CPU%d: Unlisted initial frequency changed to: %u KHz\n",
1249 __func__, policy->cpu, policy->cur);
1250 }
1251 }
1252
a1531acd
TR
1253 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1254 CPUFREQ_START, policy);
1255
96bbbe4a 1256 if (!recover_policy) {
308b60e7 1257 ret = cpufreq_add_dev_interface(policy, dev);
a82fab29
SB
1258 if (ret)
1259 goto err_out_unregister;
fcd7af91
VK
1260 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1261 CPUFREQ_CREATE_POLICY, policy);
a82fab29 1262 }
8ff69732 1263
9515f4d6
VK
1264 write_lock_irqsave(&cpufreq_driver_lock, flags);
1265 list_add(&policy->policy_list, &cpufreq_policy_list);
1266 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
1267
e18f1682
SB
1268 cpufreq_init_policy(policy);
1269
96bbbe4a 1270 if (!recover_policy) {
08fd8c1c
VK
1271 policy->user_policy.policy = policy->policy;
1272 policy->user_policy.governor = policy->governor;
1273 }
4e97b631 1274 up_write(&policy->rwsem);
08fd8c1c 1275
038c5b3e 1276 kobject_uevent(&policy->kobj, KOBJ_ADD);
7c45cf31 1277
6eed9404
VK
1278 up_read(&cpufreq_rwsem);
1279
7c45cf31
VK
1280 /* Callback for handling stuff after policy is ready */
1281 if (cpufreq_driver->ready)
1282 cpufreq_driver->ready(policy);
1283
2d06d8c4 1284 pr_debug("initialization complete\n");
87c32271 1285
1da177e4
LT
1286 return 0;
1287
1da177e4 1288err_out_unregister:
652ed95d 1289err_get_freq:
0d1857a1 1290 write_lock_irqsave(&cpufreq_driver_lock, flags);
474deff7 1291 for_each_cpu(j, policy->cpus)
7a6aedfa 1292 per_cpu(cpufreq_cpu_data, j) = NULL;
0d1857a1 1293 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
1da177e4 1294
6d4e81ed
TV
1295 if (!recover_policy) {
1296 kobject_put(&policy->kobj);
1297 wait_for_completion(&policy->kobj_unregister);
1298 }
1299err_init_policy_kobj:
7106e02b
PB
1300 up_write(&policy->rwsem);
1301
da60ce9f
VK
1302 if (cpufreq_driver->exit)
1303 cpufreq_driver->exit(policy);
2eaa3e2d 1304err_set_policy_cpu:
96bbbe4a 1305 if (recover_policy) {
72368d12
RW
1306 /* Do not leave stale fallback data behind. */
1307 per_cpu(cpufreq_cpu_data_fallback, cpu) = NULL;
42f921a6 1308 cpufreq_policy_put_kobj(policy);
72368d12 1309 }
e9698cc5 1310 cpufreq_policy_free(policy);
42f921a6 1311
1da177e4 1312nomem_out:
6eed9404
VK
1313 up_read(&cpufreq_rwsem);
1314
1da177e4
LT
1315 return ret;
1316}
1317
a82fab29
SB
1318/**
1319 * cpufreq_add_dev - add a CPU device
1320 *
1321 * Adds the cpufreq interface for a CPU device.
1322 *
1323 * The Oracle says: try running cpufreq registration/unregistration concurrently
1324 * with with cpu hotplugging and all hell will break loose. Tried to clean this
1325 * mess up, but more thorough testing is needed. - Mathieu
1326 */
1327static int cpufreq_add_dev(struct device *dev, struct subsys_interface *sif)
1328{
96bbbe4a 1329 return __cpufreq_add_dev(dev, sif);
a82fab29
SB
1330}
1331
cedb70af 1332static int __cpufreq_remove_dev_prepare(struct device *dev,
96bbbe4a 1333 struct subsys_interface *sif)
1da177e4 1334{
f9ba680d 1335 unsigned int cpu = dev->id, cpus;
1bfb425b 1336 int ret;
1da177e4 1337 unsigned long flags;
3a3e9e06 1338 struct cpufreq_policy *policy;
1da177e4 1339
b8eed8af 1340 pr_debug("%s: unregistering CPU %u\n", __func__, cpu);
1da177e4 1341
0d1857a1 1342 write_lock_irqsave(&cpufreq_driver_lock, flags);
2eaa3e2d 1343
3a3e9e06 1344 policy = per_cpu(cpufreq_cpu_data, cpu);
2eaa3e2d 1345
8414809c 1346 /* Save the policy somewhere when doing a light-weight tear-down */
96bbbe4a 1347 if (cpufreq_suspended)
3a3e9e06 1348 per_cpu(cpufreq_cpu_data_fallback, cpu) = policy;
8414809c 1349
0d1857a1 1350 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
1da177e4 1351
3a3e9e06 1352 if (!policy) {
b8eed8af 1353 pr_debug("%s: No cpu_data found\n", __func__);
1da177e4
LT
1354 return -EINVAL;
1355 }
1da177e4 1356
9c0ebcf7 1357 if (has_target()) {
3de9bdeb
VK
1358 ret = __cpufreq_governor(policy, CPUFREQ_GOV_STOP);
1359 if (ret) {
1360 pr_err("%s: Failed to stop governor\n", __func__);
1361 return ret;
1362 }
1da177e4 1363
fa69e33f 1364 strncpy(per_cpu(cpufreq_cpu_governor, cpu),
3a3e9e06 1365 policy->governor->name, CPUFREQ_NAME_LEN);
db5f2995 1366 }
1da177e4 1367
ad7722da 1368 down_read(&policy->rwsem);
3a3e9e06 1369 cpus = cpumask_weight(policy->cpus);
ad7722da 1370 up_read(&policy->rwsem);
084f3493 1371
61173f25 1372 if (cpu != policy->cpu) {
6964d91d 1373 sysfs_remove_link(&dev->kobj, "cpufreq");
73bf0fc2 1374 } else if (cpus > 1) {
1bfb425b
VK
1375 /* Nominate new CPU */
1376 int new_cpu = cpumask_any_but(policy->cpus, cpu);
1377 struct device *cpu_dev = get_cpu_device(new_cpu);
a82fab29 1378
1bfb425b
VK
1379 sysfs_remove_link(&cpu_dev->kobj, "cpufreq");
1380 ret = update_policy_cpu(policy, new_cpu, cpu_dev);
1381 if (ret) {
1382 if (sysfs_create_link(&cpu_dev->kobj, &policy->kobj,
1383 "cpufreq"))
1384 pr_err("%s: Failed to restore kobj link to cpu:%d\n",
1385 __func__, cpu_dev->id);
1386 return ret;
1da177e4 1387 }
1bfb425b
VK
1388
1389 if (!cpufreq_suspended)
1390 pr_debug("%s: policy Kobject moved to cpu: %d from: %d\n",
1391 __func__, new_cpu, cpu);
789ca243 1392 } else if (cpufreq_driver->stop_cpu) {
367dc4aa 1393 cpufreq_driver->stop_cpu(policy);
1da177e4 1394 }
1da177e4 1395
cedb70af
SB
1396 return 0;
1397}
1398
1399static int __cpufreq_remove_dev_finish(struct device *dev,
96bbbe4a 1400 struct subsys_interface *sif)
cedb70af
SB
1401{
1402 unsigned int cpu = dev->id, cpus;
1403 int ret;
1404 unsigned long flags;
1405 struct cpufreq_policy *policy;
cedb70af
SB
1406
1407 read_lock_irqsave(&cpufreq_driver_lock, flags);
1408 policy = per_cpu(cpufreq_cpu_data, cpu);
1409 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
1410
1411 if (!policy) {
1412 pr_debug("%s: No cpu_data found\n", __func__);
1413 return -EINVAL;
1414 }
1415
ad7722da 1416 down_write(&policy->rwsem);
cedb70af 1417 cpus = cpumask_weight(policy->cpus);
9c8f1ee4
VK
1418
1419 if (cpus > 1)
1420 cpumask_clear_cpu(cpu, policy->cpus);
ad7722da 1421 up_write(&policy->rwsem);
cedb70af 1422
b8eed8af
VK
1423 /* If cpu is last user of policy, free policy */
1424 if (cpus == 1) {
9c0ebcf7 1425 if (has_target()) {
3de9bdeb
VK
1426 ret = __cpufreq_governor(policy,
1427 CPUFREQ_GOV_POLICY_EXIT);
1428 if (ret) {
1429 pr_err("%s: Failed to exit governor\n",
e837f9b5 1430 __func__);
3de9bdeb
VK
1431 return ret;
1432 }
edab2fbc 1433 }
2a998599 1434
96bbbe4a 1435 if (!cpufreq_suspended)
42f921a6 1436 cpufreq_policy_put_kobj(policy);
7d26e2d5 1437
8414809c
SB
1438 /*
1439 * Perform the ->exit() even during light-weight tear-down,
1440 * since this is a core component, and is essential for the
1441 * subsequent light-weight ->init() to succeed.
b8eed8af 1442 */
1c3d85dd 1443 if (cpufreq_driver->exit)
3a3e9e06 1444 cpufreq_driver->exit(policy);
27ecddc2 1445
9515f4d6
VK
1446 /* Remove policy from list of active policies */
1447 write_lock_irqsave(&cpufreq_driver_lock, flags);
1448 list_del(&policy->policy_list);
1449 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
1450
96bbbe4a 1451 if (!cpufreq_suspended)
3a3e9e06 1452 cpufreq_policy_free(policy);
e5c87b76
SK
1453 } else if (has_target()) {
1454 ret = __cpufreq_governor(policy, CPUFREQ_GOV_START);
1455 if (!ret)
1456 ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
1457
1458 if (ret) {
1459 pr_err("%s: Failed to start governor\n", __func__);
1460 return ret;
2a998599 1461 }
27ecddc2 1462 }
1da177e4 1463
474deff7 1464 per_cpu(cpufreq_cpu_data, cpu) = NULL;
1da177e4
LT
1465 return 0;
1466}
1467
cedb70af 1468/**
27a862e9 1469 * cpufreq_remove_dev - remove a CPU device
cedb70af
SB
1470 *
1471 * Removes the cpufreq interface for a CPU device.
cedb70af 1472 */
8a25a2fd 1473static int cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
5a01f2e8 1474{
8a25a2fd 1475 unsigned int cpu = dev->id;
27a862e9 1476 int ret;
ec28297a
VP
1477
1478 if (cpu_is_offline(cpu))
1479 return 0;
1480
96bbbe4a 1481 ret = __cpufreq_remove_dev_prepare(dev, sif);
27a862e9
VK
1482
1483 if (!ret)
96bbbe4a 1484 ret = __cpufreq_remove_dev_finish(dev, sif);
27a862e9
VK
1485
1486 return ret;
5a01f2e8
VP
1487}
1488
65f27f38 1489static void handle_update(struct work_struct *work)
1da177e4 1490{
65f27f38
DH
1491 struct cpufreq_policy *policy =
1492 container_of(work, struct cpufreq_policy, update);
1493 unsigned int cpu = policy->cpu;
2d06d8c4 1494 pr_debug("handle_update for cpu %u called\n", cpu);
1da177e4
LT
1495 cpufreq_update_policy(cpu);
1496}
1497
1498/**
bb176f7d
VK
1499 * cpufreq_out_of_sync - If actual and saved CPU frequency differs, we're
1500 * in deep trouble.
a1e1dc41 1501 * @policy: policy managing CPUs
1da177e4
LT
1502 * @new_freq: CPU frequency the CPU actually runs at
1503 *
29464f28
DJ
1504 * We adjust to current frequency first, and need to clean up later.
1505 * So either call to cpufreq_update_policy() or schedule handle_update()).
1da177e4 1506 */
a1e1dc41 1507static void cpufreq_out_of_sync(struct cpufreq_policy *policy,
e08f5f5b 1508 unsigned int new_freq)
1da177e4
LT
1509{
1510 struct cpufreq_freqs freqs;
b43a7ffb 1511
e837f9b5 1512 pr_debug("Warning: CPU frequency out of sync: cpufreq and timing core thinks of %u, is %u kHz\n",
a1e1dc41 1513 policy->cur, new_freq);
1da177e4 1514
a1e1dc41 1515 freqs.old = policy->cur;
1da177e4 1516 freqs.new = new_freq;
b43a7ffb 1517
8fec051e
VK
1518 cpufreq_freq_transition_begin(policy, &freqs);
1519 cpufreq_freq_transition_end(policy, &freqs, 0);
1da177e4
LT
1520}
1521
32ee8c3e 1522/**
4ab70df4 1523 * cpufreq_quick_get - get the CPU frequency (in kHz) from policy->cur
95235ca2
VP
1524 * @cpu: CPU number
1525 *
1526 * This is the last known freq, without actually getting it from the driver.
1527 * Return value will be same as what is shown in scaling_cur_freq in sysfs.
1528 */
1529unsigned int cpufreq_quick_get(unsigned int cpu)
1530{
9e21ba8b 1531 struct cpufreq_policy *policy;
e08f5f5b 1532 unsigned int ret_freq = 0;
95235ca2 1533
1c3d85dd
RW
1534 if (cpufreq_driver && cpufreq_driver->setpolicy && cpufreq_driver->get)
1535 return cpufreq_driver->get(cpu);
9e21ba8b
DB
1536
1537 policy = cpufreq_cpu_get(cpu);
95235ca2 1538 if (policy) {
e08f5f5b 1539 ret_freq = policy->cur;
95235ca2
VP
1540 cpufreq_cpu_put(policy);
1541 }
1542
4d34a67d 1543 return ret_freq;
95235ca2
VP
1544}
1545EXPORT_SYMBOL(cpufreq_quick_get);
1546
3d737108
JB
1547/**
1548 * cpufreq_quick_get_max - get the max reported CPU frequency for this CPU
1549 * @cpu: CPU number
1550 *
1551 * Just return the max possible frequency for a given CPU.
1552 */
1553unsigned int cpufreq_quick_get_max(unsigned int cpu)
1554{
1555 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
1556 unsigned int ret_freq = 0;
1557
1558 if (policy) {
1559 ret_freq = policy->max;
1560 cpufreq_cpu_put(policy);
1561 }
1562
1563 return ret_freq;
1564}
1565EXPORT_SYMBOL(cpufreq_quick_get_max);
1566
d92d50a4 1567static unsigned int __cpufreq_get(struct cpufreq_policy *policy)
1da177e4 1568{
e08f5f5b 1569 unsigned int ret_freq = 0;
5800043b 1570
1c3d85dd 1571 if (!cpufreq_driver->get)
4d34a67d 1572 return ret_freq;
1da177e4 1573
d92d50a4 1574 ret_freq = cpufreq_driver->get(policy->cpu);
1da177e4 1575
e08f5f5b 1576 if (ret_freq && policy->cur &&
1c3d85dd 1577 !(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
e08f5f5b
GS
1578 /* verify no discrepancy between actual and
1579 saved value exists */
1580 if (unlikely(ret_freq != policy->cur)) {
a1e1dc41 1581 cpufreq_out_of_sync(policy, ret_freq);
1da177e4
LT
1582 schedule_work(&policy->update);
1583 }
1584 }
1585
4d34a67d 1586 return ret_freq;
5a01f2e8 1587}
1da177e4 1588
5a01f2e8
VP
1589/**
1590 * cpufreq_get - get the current CPU frequency (in kHz)
1591 * @cpu: CPU number
1592 *
1593 * Get the CPU current (static) CPU frequency
1594 */
1595unsigned int cpufreq_get(unsigned int cpu)
1596{
999976e0 1597 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
5a01f2e8 1598 unsigned int ret_freq = 0;
5a01f2e8 1599
999976e0
AP
1600 if (policy) {
1601 down_read(&policy->rwsem);
d92d50a4 1602 ret_freq = __cpufreq_get(policy);
999976e0 1603 up_read(&policy->rwsem);
5a01f2e8 1604
999976e0
AP
1605 cpufreq_cpu_put(policy);
1606 }
6eed9404 1607
4d34a67d 1608 return ret_freq;
1da177e4
LT
1609}
1610EXPORT_SYMBOL(cpufreq_get);
1611
8a25a2fd
KS
1612static struct subsys_interface cpufreq_interface = {
1613 .name = "cpufreq",
1614 .subsys = &cpu_subsys,
1615 .add_dev = cpufreq_add_dev,
1616 .remove_dev = cpufreq_remove_dev,
e00e56df
RW
1617};
1618
e28867ea
VK
1619/*
1620 * In case platform wants some specific frequency to be configured
1621 * during suspend..
1622 */
1623int cpufreq_generic_suspend(struct cpufreq_policy *policy)
1624{
1625 int ret;
1626
1627 if (!policy->suspend_freq) {
1628 pr_err("%s: suspend_freq can't be zero\n", __func__);
1629 return -EINVAL;
1630 }
1631
1632 pr_debug("%s: Setting suspend-freq: %u\n", __func__,
1633 policy->suspend_freq);
1634
1635 ret = __cpufreq_driver_target(policy, policy->suspend_freq,
1636 CPUFREQ_RELATION_H);
1637 if (ret)
1638 pr_err("%s: unable to set suspend-freq: %u. err: %d\n",
1639 __func__, policy->suspend_freq, ret);
1640
1641 return ret;
1642}
1643EXPORT_SYMBOL(cpufreq_generic_suspend);
1644
42d4dc3f 1645/**
2f0aea93 1646 * cpufreq_suspend() - Suspend CPUFreq governors
e00e56df 1647 *
2f0aea93
VK
1648 * Called during system wide Suspend/Hibernate cycles for suspending governors
1649 * as some platforms can't change frequency after this point in suspend cycle.
1650 * Because some of the devices (like: i2c, regulators, etc) they use for
1651 * changing frequency are suspended quickly after this point.
42d4dc3f 1652 */
2f0aea93 1653void cpufreq_suspend(void)
42d4dc3f 1654{
3a3e9e06 1655 struct cpufreq_policy *policy;
42d4dc3f 1656
2f0aea93
VK
1657 if (!cpufreq_driver)
1658 return;
42d4dc3f 1659
2f0aea93 1660 if (!has_target())
b1b12bab 1661 goto suspend;
42d4dc3f 1662
2f0aea93
VK
1663 pr_debug("%s: Suspending Governors\n", __func__);
1664
1665 list_for_each_entry(policy, &cpufreq_policy_list, policy_list) {
1666 if (__cpufreq_governor(policy, CPUFREQ_GOV_STOP))
1667 pr_err("%s: Failed to stop governor for policy: %p\n",
1668 __func__, policy);
1669 else if (cpufreq_driver->suspend
1670 && cpufreq_driver->suspend(policy))
1671 pr_err("%s: Failed to suspend driver: %p\n", __func__,
1672 policy);
42d4dc3f 1673 }
b1b12bab
VK
1674
1675suspend:
1676 cpufreq_suspended = true;
42d4dc3f
BH
1677}
1678
1da177e4 1679/**
2f0aea93 1680 * cpufreq_resume() - Resume CPUFreq governors
1da177e4 1681 *
2f0aea93
VK
1682 * Called during system wide Suspend/Hibernate cycle for resuming governors that
1683 * are suspended with cpufreq_suspend().
1da177e4 1684 */
2f0aea93 1685void cpufreq_resume(void)
1da177e4 1686{
3a3e9e06 1687 struct cpufreq_policy *policy;
1da177e4 1688
2f0aea93
VK
1689 if (!cpufreq_driver)
1690 return;
1da177e4 1691
8e30444e
LT
1692 cpufreq_suspended = false;
1693
2f0aea93 1694 if (!has_target())
e00e56df 1695 return;
1da177e4 1696
2f0aea93 1697 pr_debug("%s: Resuming Governors\n", __func__);
1da177e4 1698
2f0aea93 1699 list_for_each_entry(policy, &cpufreq_policy_list, policy_list) {
0c5aa405
VK
1700 if (cpufreq_driver->resume && cpufreq_driver->resume(policy))
1701 pr_err("%s: Failed to resume driver: %p\n", __func__,
1702 policy);
1703 else if (__cpufreq_governor(policy, CPUFREQ_GOV_START)
2f0aea93
VK
1704 || __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS))
1705 pr_err("%s: Failed to start governor for policy: %p\n",
1706 __func__, policy);
1da177e4 1707
2f0aea93
VK
1708 /*
1709 * schedule call cpufreq_update_policy() for boot CPU, i.e. last
1710 * policy in list. It will verify that the current freq is in
1711 * sync with what we believe it to be.
1712 */
1713 if (list_is_last(&policy->policy_list, &cpufreq_policy_list))
1714 schedule_work(&policy->update);
1715 }
1716}
1da177e4 1717
9d95046e
BP
1718/**
1719 * cpufreq_get_current_driver - return current driver's name
1720 *
1721 * Return the name string of the currently loaded cpufreq driver
1722 * or NULL, if none.
1723 */
1724const char *cpufreq_get_current_driver(void)
1725{
1c3d85dd
RW
1726 if (cpufreq_driver)
1727 return cpufreq_driver->name;
1728
1729 return NULL;
9d95046e
BP
1730}
1731EXPORT_SYMBOL_GPL(cpufreq_get_current_driver);
1da177e4 1732
51315cdf
TP
1733/**
1734 * cpufreq_get_driver_data - return current driver data
1735 *
1736 * Return the private data of the currently loaded cpufreq
1737 * driver, or NULL if no cpufreq driver is loaded.
1738 */
1739void *cpufreq_get_driver_data(void)
1740{
1741 if (cpufreq_driver)
1742 return cpufreq_driver->driver_data;
1743
1744 return NULL;
1745}
1746EXPORT_SYMBOL_GPL(cpufreq_get_driver_data);
1747
1da177e4
LT
1748/*********************************************************************
1749 * NOTIFIER LISTS INTERFACE *
1750 *********************************************************************/
1751
1752/**
1753 * cpufreq_register_notifier - register a driver with cpufreq
1754 * @nb: notifier function to register
1755 * @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER
1756 *
32ee8c3e 1757 * Add a driver to one of two lists: either a list of drivers that
1da177e4
LT
1758 * are notified about clock rate changes (once before and once after
1759 * the transition), or a list of drivers that are notified about
1760 * changes in cpufreq policy.
1761 *
1762 * This function may sleep, and has the same return conditions as
e041c683 1763 * blocking_notifier_chain_register.
1da177e4
LT
1764 */
1765int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list)
1766{
1767 int ret;
1768
d5aaffa9
DB
1769 if (cpufreq_disabled())
1770 return -EINVAL;
1771
74212ca4
CEB
1772 WARN_ON(!init_cpufreq_transition_notifier_list_called);
1773
1da177e4
LT
1774 switch (list) {
1775 case CPUFREQ_TRANSITION_NOTIFIER:
b4dfdbb3 1776 ret = srcu_notifier_chain_register(
e041c683 1777 &cpufreq_transition_notifier_list, nb);
1da177e4
LT
1778 break;
1779 case CPUFREQ_POLICY_NOTIFIER:
e041c683
AS
1780 ret = blocking_notifier_chain_register(
1781 &cpufreq_policy_notifier_list, nb);
1da177e4
LT
1782 break;
1783 default:
1784 ret = -EINVAL;
1785 }
1da177e4
LT
1786
1787 return ret;
1788}
1789EXPORT_SYMBOL(cpufreq_register_notifier);
1790
1da177e4
LT
1791/**
1792 * cpufreq_unregister_notifier - unregister a driver with cpufreq
1793 * @nb: notifier block to be unregistered
bb176f7d 1794 * @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER
1da177e4
LT
1795 *
1796 * Remove a driver from the CPU frequency notifier list.
1797 *
1798 * This function may sleep, and has the same return conditions as
e041c683 1799 * blocking_notifier_chain_unregister.
1da177e4
LT
1800 */
1801int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list)
1802{
1803 int ret;
1804
d5aaffa9
DB
1805 if (cpufreq_disabled())
1806 return -EINVAL;
1807
1da177e4
LT
1808 switch (list) {
1809 case CPUFREQ_TRANSITION_NOTIFIER:
b4dfdbb3 1810 ret = srcu_notifier_chain_unregister(
e041c683 1811 &cpufreq_transition_notifier_list, nb);
1da177e4
LT
1812 break;
1813 case CPUFREQ_POLICY_NOTIFIER:
e041c683
AS
1814 ret = blocking_notifier_chain_unregister(
1815 &cpufreq_policy_notifier_list, nb);
1da177e4
LT
1816 break;
1817 default:
1818 ret = -EINVAL;
1819 }
1da177e4
LT
1820
1821 return ret;
1822}
1823EXPORT_SYMBOL(cpufreq_unregister_notifier);
1824
1825
1826/*********************************************************************
1827 * GOVERNORS *
1828 *********************************************************************/
1829
1c03a2d0
VK
1830/* Must set freqs->new to intermediate frequency */
1831static int __target_intermediate(struct cpufreq_policy *policy,
1832 struct cpufreq_freqs *freqs, int index)
1833{
1834 int ret;
1835
1836 freqs->new = cpufreq_driver->get_intermediate(policy, index);
1837
1838 /* We don't need to switch to intermediate freq */
1839 if (!freqs->new)
1840 return 0;
1841
1842 pr_debug("%s: cpu: %d, switching to intermediate freq: oldfreq: %u, intermediate freq: %u\n",
1843 __func__, policy->cpu, freqs->old, freqs->new);
1844
1845 cpufreq_freq_transition_begin(policy, freqs);
1846 ret = cpufreq_driver->target_intermediate(policy, index);
1847 cpufreq_freq_transition_end(policy, freqs, ret);
1848
1849 if (ret)
1850 pr_err("%s: Failed to change to intermediate frequency: %d\n",
1851 __func__, ret);
1852
1853 return ret;
1854}
1855
8d65775d
VK
1856static int __target_index(struct cpufreq_policy *policy,
1857 struct cpufreq_frequency_table *freq_table, int index)
1858{
1c03a2d0
VK
1859 struct cpufreq_freqs freqs = {.old = policy->cur, .flags = 0};
1860 unsigned int intermediate_freq = 0;
8d65775d
VK
1861 int retval = -EINVAL;
1862 bool notify;
1863
1864 notify = !(cpufreq_driver->flags & CPUFREQ_ASYNC_NOTIFICATION);
8d65775d 1865 if (notify) {
1c03a2d0
VK
1866 /* Handle switching to intermediate frequency */
1867 if (cpufreq_driver->get_intermediate) {
1868 retval = __target_intermediate(policy, &freqs, index);
1869 if (retval)
1870 return retval;
1871
1872 intermediate_freq = freqs.new;
1873 /* Set old freq to intermediate */
1874 if (intermediate_freq)
1875 freqs.old = freqs.new;
1876 }
8d65775d 1877
1c03a2d0 1878 freqs.new = freq_table[index].frequency;
8d65775d
VK
1879 pr_debug("%s: cpu: %d, oldfreq: %u, new freq: %u\n",
1880 __func__, policy->cpu, freqs.old, freqs.new);
1881
1882 cpufreq_freq_transition_begin(policy, &freqs);
1883 }
1884
1885 retval = cpufreq_driver->target_index(policy, index);
1886 if (retval)
1887 pr_err("%s: Failed to change cpu frequency: %d\n", __func__,
1888 retval);
1889
1c03a2d0 1890 if (notify) {
8d65775d
VK
1891 cpufreq_freq_transition_end(policy, &freqs, retval);
1892
1c03a2d0
VK
1893 /*
1894 * Failed after setting to intermediate freq? Driver should have
1895 * reverted back to initial frequency and so should we. Check
1896 * here for intermediate_freq instead of get_intermediate, in
1897 * case we have't switched to intermediate freq at all.
1898 */
1899 if (unlikely(retval && intermediate_freq)) {
1900 freqs.old = intermediate_freq;
1901 freqs.new = policy->restore_freq;
1902 cpufreq_freq_transition_begin(policy, &freqs);
1903 cpufreq_freq_transition_end(policy, &freqs, 0);
1904 }
1905 }
1906
8d65775d
VK
1907 return retval;
1908}
1909
1da177e4
LT
1910int __cpufreq_driver_target(struct cpufreq_policy *policy,
1911 unsigned int target_freq,
1912 unsigned int relation)
1913{
7249924e 1914 unsigned int old_target_freq = target_freq;
8d65775d 1915 int retval = -EINVAL;
c32b6b8e 1916
a7b422cd
KRW
1917 if (cpufreq_disabled())
1918 return -ENODEV;
1919
7249924e
VK
1920 /* Make sure that target_freq is within supported range */
1921 if (target_freq > policy->max)
1922 target_freq = policy->max;
1923 if (target_freq < policy->min)
1924 target_freq = policy->min;
1925
1926 pr_debug("target for CPU %u: %u kHz, relation %u, requested %u kHz\n",
e837f9b5 1927 policy->cpu, target_freq, relation, old_target_freq);
5a1c0228 1928
9c0ebcf7
VK
1929 /*
1930 * This might look like a redundant call as we are checking it again
1931 * after finding index. But it is left intentionally for cases where
1932 * exactly same freq is called again and so we can save on few function
1933 * calls.
1934 */
5a1c0228
VK
1935 if (target_freq == policy->cur)
1936 return 0;
1937
1c03a2d0
VK
1938 /* Save last value to restore later on errors */
1939 policy->restore_freq = policy->cur;
1940
1c3d85dd
RW
1941 if (cpufreq_driver->target)
1942 retval = cpufreq_driver->target(policy, target_freq, relation);
9c0ebcf7
VK
1943 else if (cpufreq_driver->target_index) {
1944 struct cpufreq_frequency_table *freq_table;
1945 int index;
90d45d17 1946
9c0ebcf7
VK
1947 freq_table = cpufreq_frequency_get_table(policy->cpu);
1948 if (unlikely(!freq_table)) {
1949 pr_err("%s: Unable to find freq_table\n", __func__);
1950 goto out;
1951 }
1952
1953 retval = cpufreq_frequency_table_target(policy, freq_table,
1954 target_freq, relation, &index);
1955 if (unlikely(retval)) {
1956 pr_err("%s: Unable to find matching freq\n", __func__);
1957 goto out;
1958 }
1959
d4019f0a 1960 if (freq_table[index].frequency == policy->cur) {
9c0ebcf7 1961 retval = 0;
d4019f0a
VK
1962 goto out;
1963 }
1964
8d65775d 1965 retval = __target_index(policy, freq_table, index);
9c0ebcf7
VK
1966 }
1967
1968out:
1da177e4
LT
1969 return retval;
1970}
1971EXPORT_SYMBOL_GPL(__cpufreq_driver_target);
1972
1da177e4
LT
1973int cpufreq_driver_target(struct cpufreq_policy *policy,
1974 unsigned int target_freq,
1975 unsigned int relation)
1976{
f1829e4a 1977 int ret = -EINVAL;
1da177e4 1978
ad7722da 1979 down_write(&policy->rwsem);
1da177e4
LT
1980
1981 ret = __cpufreq_driver_target(policy, target_freq, relation);
1982
ad7722da 1983 up_write(&policy->rwsem);
1da177e4 1984
1da177e4
LT
1985 return ret;
1986}
1987EXPORT_SYMBOL_GPL(cpufreq_driver_target);
1988
e08f5f5b
GS
1989static int __cpufreq_governor(struct cpufreq_policy *policy,
1990 unsigned int event)
1da177e4 1991{
cc993cab 1992 int ret;
6afde10c
TR
1993
1994 /* Only must be defined when default governor is known to have latency
1995 restrictions, like e.g. conservative or ondemand.
1996 That this is the case is already ensured in Kconfig
1997 */
1998#ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
1999 struct cpufreq_governor *gov = &cpufreq_gov_performance;
2000#else
2001 struct cpufreq_governor *gov = NULL;
2002#endif
1c256245 2003
2f0aea93
VK
2004 /* Don't start any governor operations if we are entering suspend */
2005 if (cpufreq_suspended)
2006 return 0;
cb57720b
EZ
2007 /*
2008 * Governor might not be initiated here if ACPI _PPC changed
2009 * notification happened, so check it.
2010 */
2011 if (!policy->governor)
2012 return -EINVAL;
2f0aea93 2013
1c256245
TR
2014 if (policy->governor->max_transition_latency &&
2015 policy->cpuinfo.transition_latency >
2016 policy->governor->max_transition_latency) {
6afde10c
TR
2017 if (!gov)
2018 return -EINVAL;
2019 else {
e837f9b5
JP
2020 pr_warn("%s governor failed, too long transition latency of HW, fallback to %s governor\n",
2021 policy->governor->name, gov->name);
6afde10c
TR
2022 policy->governor = gov;
2023 }
1c256245 2024 }
1da177e4 2025
fe492f3f
VK
2026 if (event == CPUFREQ_GOV_POLICY_INIT)
2027 if (!try_module_get(policy->governor->owner))
2028 return -EINVAL;
1da177e4 2029
2d06d8c4 2030 pr_debug("__cpufreq_governor for CPU %u, event %u\n",
e837f9b5 2031 policy->cpu, event);
95731ebb
XC
2032
2033 mutex_lock(&cpufreq_governor_lock);
56d07db2 2034 if ((policy->governor_enabled && event == CPUFREQ_GOV_START)
f73d3933
VK
2035 || (!policy->governor_enabled
2036 && (event == CPUFREQ_GOV_LIMITS || event == CPUFREQ_GOV_STOP))) {
95731ebb
XC
2037 mutex_unlock(&cpufreq_governor_lock);
2038 return -EBUSY;
2039 }
2040
2041 if (event == CPUFREQ_GOV_STOP)
2042 policy->governor_enabled = false;
2043 else if (event == CPUFREQ_GOV_START)
2044 policy->governor_enabled = true;
2045
2046 mutex_unlock(&cpufreq_governor_lock);
2047
1da177e4
LT
2048 ret = policy->governor->governor(policy, event);
2049
4d5dcc42
VK
2050 if (!ret) {
2051 if (event == CPUFREQ_GOV_POLICY_INIT)
2052 policy->governor->initialized++;
2053 else if (event == CPUFREQ_GOV_POLICY_EXIT)
2054 policy->governor->initialized--;
95731ebb
XC
2055 } else {
2056 /* Restore original values */
2057 mutex_lock(&cpufreq_governor_lock);
2058 if (event == CPUFREQ_GOV_STOP)
2059 policy->governor_enabled = true;
2060 else if (event == CPUFREQ_GOV_START)
2061 policy->governor_enabled = false;
2062 mutex_unlock(&cpufreq_governor_lock);
4d5dcc42 2063 }
b394058f 2064
fe492f3f
VK
2065 if (((event == CPUFREQ_GOV_POLICY_INIT) && ret) ||
2066 ((event == CPUFREQ_GOV_POLICY_EXIT) && !ret))
1da177e4
LT
2067 module_put(policy->governor->owner);
2068
2069 return ret;
2070}
2071
1da177e4
LT
2072int cpufreq_register_governor(struct cpufreq_governor *governor)
2073{
3bcb09a3 2074 int err;
1da177e4
LT
2075
2076 if (!governor)
2077 return -EINVAL;
2078
a7b422cd
KRW
2079 if (cpufreq_disabled())
2080 return -ENODEV;
2081
3fc54d37 2082 mutex_lock(&cpufreq_governor_mutex);
32ee8c3e 2083
b394058f 2084 governor->initialized = 0;
3bcb09a3 2085 err = -EBUSY;
42f91fa1 2086 if (!find_governor(governor->name)) {
3bcb09a3
JF
2087 err = 0;
2088 list_add(&governor->governor_list, &cpufreq_governor_list);
1da177e4 2089 }
1da177e4 2090
32ee8c3e 2091 mutex_unlock(&cpufreq_governor_mutex);
3bcb09a3 2092 return err;
1da177e4
LT
2093}
2094EXPORT_SYMBOL_GPL(cpufreq_register_governor);
2095
1da177e4
LT
2096void cpufreq_unregister_governor(struct cpufreq_governor *governor)
2097{
90e41bac 2098 int cpu;
90e41bac 2099
1da177e4
LT
2100 if (!governor)
2101 return;
2102
a7b422cd
KRW
2103 if (cpufreq_disabled())
2104 return;
2105
90e41bac
PB
2106 for_each_present_cpu(cpu) {
2107 if (cpu_online(cpu))
2108 continue;
2109 if (!strcmp(per_cpu(cpufreq_cpu_governor, cpu), governor->name))
2110 strcpy(per_cpu(cpufreq_cpu_governor, cpu), "\0");
2111 }
90e41bac 2112
3fc54d37 2113 mutex_lock(&cpufreq_governor_mutex);
1da177e4 2114 list_del(&governor->governor_list);
3fc54d37 2115 mutex_unlock(&cpufreq_governor_mutex);
1da177e4
LT
2116 return;
2117}
2118EXPORT_SYMBOL_GPL(cpufreq_unregister_governor);
2119
2120
1da177e4
LT
2121/*********************************************************************
2122 * POLICY INTERFACE *
2123 *********************************************************************/
2124
2125/**
2126 * cpufreq_get_policy - get the current cpufreq_policy
29464f28
DJ
2127 * @policy: struct cpufreq_policy into which the current cpufreq_policy
2128 * is written
1da177e4
LT
2129 *
2130 * Reads the current cpufreq policy.
2131 */
2132int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu)
2133{
2134 struct cpufreq_policy *cpu_policy;
2135 if (!policy)
2136 return -EINVAL;
2137
2138 cpu_policy = cpufreq_cpu_get(cpu);
2139 if (!cpu_policy)
2140 return -EINVAL;
2141
d5b73cd8 2142 memcpy(policy, cpu_policy, sizeof(*policy));
1da177e4
LT
2143
2144 cpufreq_cpu_put(cpu_policy);
1da177e4
LT
2145 return 0;
2146}
2147EXPORT_SYMBOL(cpufreq_get_policy);
2148
153d7f3f 2149/*
037ce839
VK
2150 * policy : current policy.
2151 * new_policy: policy to be set.
153d7f3f 2152 */
037ce839 2153static int cpufreq_set_policy(struct cpufreq_policy *policy,
3a3e9e06 2154 struct cpufreq_policy *new_policy)
1da177e4 2155{
d9a789c7
RW
2156 struct cpufreq_governor *old_gov;
2157 int ret;
1da177e4 2158
e837f9b5
JP
2159 pr_debug("setting new policy for CPU %u: %u - %u kHz\n",
2160 new_policy->cpu, new_policy->min, new_policy->max);
1da177e4 2161
d5b73cd8 2162 memcpy(&new_policy->cpuinfo, &policy->cpuinfo, sizeof(policy->cpuinfo));
1da177e4 2163
d9a789c7
RW
2164 if (new_policy->min > policy->max || new_policy->max < policy->min)
2165 return -EINVAL;
9c9a43ed 2166
1da177e4 2167 /* verify the cpu speed can be set within this limit */
3a3e9e06 2168 ret = cpufreq_driver->verify(new_policy);
1da177e4 2169 if (ret)
d9a789c7 2170 return ret;
1da177e4 2171
1da177e4 2172 /* adjust if necessary - all reasons */
e041c683 2173 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
3a3e9e06 2174 CPUFREQ_ADJUST, new_policy);
1da177e4
LT
2175
2176 /* adjust if necessary - hardware incompatibility*/
e041c683 2177 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
3a3e9e06 2178 CPUFREQ_INCOMPATIBLE, new_policy);
1da177e4 2179
bb176f7d
VK
2180 /*
2181 * verify the cpu speed can be set within this limit, which might be
2182 * different to the first one
2183 */
3a3e9e06 2184 ret = cpufreq_driver->verify(new_policy);
e041c683 2185 if (ret)
d9a789c7 2186 return ret;
1da177e4
LT
2187
2188 /* notification of the new policy */
e041c683 2189 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
3a3e9e06 2190 CPUFREQ_NOTIFY, new_policy);
1da177e4 2191
3a3e9e06
VK
2192 policy->min = new_policy->min;
2193 policy->max = new_policy->max;
1da177e4 2194
2d06d8c4 2195 pr_debug("new min and max freqs are %u - %u kHz\n",
e837f9b5 2196 policy->min, policy->max);
1da177e4 2197
1c3d85dd 2198 if (cpufreq_driver->setpolicy) {
3a3e9e06 2199 policy->policy = new_policy->policy;
2d06d8c4 2200 pr_debug("setting range\n");
d9a789c7
RW
2201 return cpufreq_driver->setpolicy(new_policy);
2202 }
1da177e4 2203
d9a789c7
RW
2204 if (new_policy->governor == policy->governor)
2205 goto out;
7bd353a9 2206
d9a789c7
RW
2207 pr_debug("governor switch\n");
2208
2209 /* save old, working values */
2210 old_gov = policy->governor;
2211 /* end old governor */
2212 if (old_gov) {
2213 __cpufreq_governor(policy, CPUFREQ_GOV_STOP);
2214 up_write(&policy->rwsem);
e5c87b76 2215 __cpufreq_governor(policy, CPUFREQ_GOV_POLICY_EXIT);
d9a789c7 2216 down_write(&policy->rwsem);
1da177e4
LT
2217 }
2218
d9a789c7
RW
2219 /* start new governor */
2220 policy->governor = new_policy->governor;
2221 if (!__cpufreq_governor(policy, CPUFREQ_GOV_POLICY_INIT)) {
2222 if (!__cpufreq_governor(policy, CPUFREQ_GOV_START))
2223 goto out;
2224
2225 up_write(&policy->rwsem);
2226 __cpufreq_governor(policy, CPUFREQ_GOV_POLICY_EXIT);
2227 down_write(&policy->rwsem);
2228 }
2229
2230 /* new governor failed, so re-start old one */
2231 pr_debug("starting governor %s failed\n", policy->governor->name);
2232 if (old_gov) {
2233 policy->governor = old_gov;
2234 __cpufreq_governor(policy, CPUFREQ_GOV_POLICY_INIT);
2235 __cpufreq_governor(policy, CPUFREQ_GOV_START);
2236 }
2237
2238 return -EINVAL;
2239
2240 out:
2241 pr_debug("governor: change or update limits\n");
2242 return __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
1da177e4
LT
2243}
2244
1da177e4
LT
2245/**
2246 * cpufreq_update_policy - re-evaluate an existing cpufreq policy
2247 * @cpu: CPU which shall be re-evaluated
2248 *
25985edc 2249 * Useful for policy notifiers which have different necessities
1da177e4
LT
2250 * at different times.
2251 */
2252int cpufreq_update_policy(unsigned int cpu)
2253{
3a3e9e06
VK
2254 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
2255 struct cpufreq_policy new_policy;
f1829e4a 2256 int ret;
1da177e4 2257
fefa8ff8
AP
2258 if (!policy)
2259 return -ENODEV;
1da177e4 2260
ad7722da 2261 down_write(&policy->rwsem);
1da177e4 2262
2d06d8c4 2263 pr_debug("updating policy for CPU %u\n", cpu);
d5b73cd8 2264 memcpy(&new_policy, policy, sizeof(*policy));
3a3e9e06
VK
2265 new_policy.min = policy->user_policy.min;
2266 new_policy.max = policy->user_policy.max;
2267 new_policy.policy = policy->user_policy.policy;
2268 new_policy.governor = policy->user_policy.governor;
1da177e4 2269
bb176f7d
VK
2270 /*
2271 * BIOS might change freq behind our back
2272 * -> ask driver for current freq and notify governors about a change
2273 */
2ed99e39 2274 if (cpufreq_driver->get && !cpufreq_driver->setpolicy) {
3a3e9e06 2275 new_policy.cur = cpufreq_driver->get(cpu);
bd0fa9bb
VK
2276 if (WARN_ON(!new_policy.cur)) {
2277 ret = -EIO;
fefa8ff8 2278 goto unlock;
bd0fa9bb
VK
2279 }
2280
3a3e9e06 2281 if (!policy->cur) {
e837f9b5 2282 pr_debug("Driver did not initialize current freq\n");
3a3e9e06 2283 policy->cur = new_policy.cur;
a85f7bd3 2284 } else {
9c0ebcf7 2285 if (policy->cur != new_policy.cur && has_target())
a1e1dc41 2286 cpufreq_out_of_sync(policy, new_policy.cur);
a85f7bd3 2287 }
0961dd0d
TR
2288 }
2289
037ce839 2290 ret = cpufreq_set_policy(policy, &new_policy);
1da177e4 2291
fefa8ff8 2292unlock:
ad7722da 2293 up_write(&policy->rwsem);
5a01f2e8 2294
3a3e9e06 2295 cpufreq_cpu_put(policy);
1da177e4
LT
2296 return ret;
2297}
2298EXPORT_SYMBOL(cpufreq_update_policy);
2299
2760984f 2300static int cpufreq_cpu_callback(struct notifier_block *nfb,
c32b6b8e
AR
2301 unsigned long action, void *hcpu)
2302{
2303 unsigned int cpu = (unsigned long)hcpu;
8a25a2fd 2304 struct device *dev;
c32b6b8e 2305
8a25a2fd
KS
2306 dev = get_cpu_device(cpu);
2307 if (dev) {
5302c3fb 2308 switch (action & ~CPU_TASKS_FROZEN) {
c32b6b8e 2309 case CPU_ONLINE:
96bbbe4a 2310 __cpufreq_add_dev(dev, NULL);
c32b6b8e 2311 break;
5302c3fb 2312
c32b6b8e 2313 case CPU_DOWN_PREPARE:
96bbbe4a 2314 __cpufreq_remove_dev_prepare(dev, NULL);
1aee40ac
SB
2315 break;
2316
2317 case CPU_POST_DEAD:
96bbbe4a 2318 __cpufreq_remove_dev_finish(dev, NULL);
c32b6b8e 2319 break;
5302c3fb 2320
5a01f2e8 2321 case CPU_DOWN_FAILED:
96bbbe4a 2322 __cpufreq_add_dev(dev, NULL);
c32b6b8e
AR
2323 break;
2324 }
2325 }
2326 return NOTIFY_OK;
2327}
2328
9c36f746 2329static struct notifier_block __refdata cpufreq_cpu_notifier = {
bb176f7d 2330 .notifier_call = cpufreq_cpu_callback,
c32b6b8e 2331};
1da177e4 2332
6f19efc0
LM
2333/*********************************************************************
2334 * BOOST *
2335 *********************************************************************/
2336static int cpufreq_boost_set_sw(int state)
2337{
2338 struct cpufreq_frequency_table *freq_table;
2339 struct cpufreq_policy *policy;
2340 int ret = -EINVAL;
2341
2342 list_for_each_entry(policy, &cpufreq_policy_list, policy_list) {
2343 freq_table = cpufreq_frequency_get_table(policy->cpu);
2344 if (freq_table) {
2345 ret = cpufreq_frequency_table_cpuinfo(policy,
2346 freq_table);
2347 if (ret) {
2348 pr_err("%s: Policy frequency update failed\n",
2349 __func__);
2350 break;
2351 }
2352 policy->user_policy.max = policy->max;
2353 __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS);
2354 }
2355 }
2356
2357 return ret;
2358}
2359
2360int cpufreq_boost_trigger_state(int state)
2361{
2362 unsigned long flags;
2363 int ret = 0;
2364
2365 if (cpufreq_driver->boost_enabled == state)
2366 return 0;
2367
2368 write_lock_irqsave(&cpufreq_driver_lock, flags);
2369 cpufreq_driver->boost_enabled = state;
2370 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2371
2372 ret = cpufreq_driver->set_boost(state);
2373 if (ret) {
2374 write_lock_irqsave(&cpufreq_driver_lock, flags);
2375 cpufreq_driver->boost_enabled = !state;
2376 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2377
e837f9b5
JP
2378 pr_err("%s: Cannot %s BOOST\n",
2379 __func__, state ? "enable" : "disable");
6f19efc0
LM
2380 }
2381
2382 return ret;
2383}
2384
2385int cpufreq_boost_supported(void)
2386{
2387 if (likely(cpufreq_driver))
2388 return cpufreq_driver->boost_supported;
2389
2390 return 0;
2391}
2392EXPORT_SYMBOL_GPL(cpufreq_boost_supported);
2393
2394int cpufreq_boost_enabled(void)
2395{
2396 return cpufreq_driver->boost_enabled;
2397}
2398EXPORT_SYMBOL_GPL(cpufreq_boost_enabled);
2399
1da177e4
LT
2400/*********************************************************************
2401 * REGISTER / UNREGISTER CPUFREQ DRIVER *
2402 *********************************************************************/
2403
2404/**
2405 * cpufreq_register_driver - register a CPU Frequency driver
2406 * @driver_data: A struct cpufreq_driver containing the values#
2407 * submitted by the CPU Frequency driver.
2408 *
bb176f7d 2409 * Registers a CPU Frequency driver to this core code. This code
1da177e4 2410 * returns zero on success, -EBUSY when another driver got here first
32ee8c3e 2411 * (and isn't unregistered in the meantime).
1da177e4
LT
2412 *
2413 */
221dee28 2414int cpufreq_register_driver(struct cpufreq_driver *driver_data)
1da177e4
LT
2415{
2416 unsigned long flags;
2417 int ret;
2418
a7b422cd
KRW
2419 if (cpufreq_disabled())
2420 return -ENODEV;
2421
1da177e4 2422 if (!driver_data || !driver_data->verify || !driver_data->init ||
9c0ebcf7 2423 !(driver_data->setpolicy || driver_data->target_index ||
9832235f
RW
2424 driver_data->target) ||
2425 (driver_data->setpolicy && (driver_data->target_index ||
1c03a2d0
VK
2426 driver_data->target)) ||
2427 (!!driver_data->get_intermediate != !!driver_data->target_intermediate))
1da177e4
LT
2428 return -EINVAL;
2429
2d06d8c4 2430 pr_debug("trying to register driver %s\n", driver_data->name);
1da177e4 2431
0d1857a1 2432 write_lock_irqsave(&cpufreq_driver_lock, flags);
1c3d85dd 2433 if (cpufreq_driver) {
0d1857a1 2434 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
4dea5806 2435 return -EEXIST;
1da177e4 2436 }
1c3d85dd 2437 cpufreq_driver = driver_data;
0d1857a1 2438 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
1da177e4 2439
bc68b7df
VK
2440 if (driver_data->setpolicy)
2441 driver_data->flags |= CPUFREQ_CONST_LOOPS;
2442
6f19efc0
LM
2443 if (cpufreq_boost_supported()) {
2444 /*
2445 * Check if driver provides function to enable boost -
2446 * if not, use cpufreq_boost_set_sw as default
2447 */
2448 if (!cpufreq_driver->set_boost)
2449 cpufreq_driver->set_boost = cpufreq_boost_set_sw;
2450
2451 ret = cpufreq_sysfs_create_file(&boost.attr);
2452 if (ret) {
2453 pr_err("%s: cannot register global BOOST sysfs file\n",
e837f9b5 2454 __func__);
6f19efc0
LM
2455 goto err_null_driver;
2456 }
2457 }
2458
8a25a2fd 2459 ret = subsys_interface_register(&cpufreq_interface);
8f5bc2ab 2460 if (ret)
6f19efc0 2461 goto err_boost_unreg;
1da177e4 2462
1c3d85dd 2463 if (!(cpufreq_driver->flags & CPUFREQ_STICKY)) {
1da177e4
LT
2464 int i;
2465 ret = -ENODEV;
2466
2467 /* check for at least one working CPU */
7a6aedfa
MT
2468 for (i = 0; i < nr_cpu_ids; i++)
2469 if (cpu_possible(i) && per_cpu(cpufreq_cpu_data, i)) {
1da177e4 2470 ret = 0;
7a6aedfa
MT
2471 break;
2472 }
1da177e4
LT
2473
2474 /* if all ->init() calls failed, unregister */
2475 if (ret) {
2d06d8c4 2476 pr_debug("no CPU initialized for driver %s\n",
e837f9b5 2477 driver_data->name);
8a25a2fd 2478 goto err_if_unreg;
1da177e4
LT
2479 }
2480 }
2481
8f5bc2ab 2482 register_hotcpu_notifier(&cpufreq_cpu_notifier);
2d06d8c4 2483 pr_debug("driver %s up and running\n", driver_data->name);
1da177e4 2484
8f5bc2ab 2485 return 0;
8a25a2fd
KS
2486err_if_unreg:
2487 subsys_interface_unregister(&cpufreq_interface);
6f19efc0
LM
2488err_boost_unreg:
2489 if (cpufreq_boost_supported())
2490 cpufreq_sysfs_remove_file(&boost.attr);
8f5bc2ab 2491err_null_driver:
0d1857a1 2492 write_lock_irqsave(&cpufreq_driver_lock, flags);
1c3d85dd 2493 cpufreq_driver = NULL;
0d1857a1 2494 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
4d34a67d 2495 return ret;
1da177e4
LT
2496}
2497EXPORT_SYMBOL_GPL(cpufreq_register_driver);
2498
1da177e4
LT
2499/**
2500 * cpufreq_unregister_driver - unregister the current CPUFreq driver
2501 *
bb176f7d 2502 * Unregister the current CPUFreq driver. Only call this if you have
1da177e4
LT
2503 * the right to do so, i.e. if you have succeeded in initialising before!
2504 * Returns zero if successful, and -EINVAL if the cpufreq_driver is
2505 * currently not initialised.
2506 */
221dee28 2507int cpufreq_unregister_driver(struct cpufreq_driver *driver)
1da177e4
LT
2508{
2509 unsigned long flags;
2510
1c3d85dd 2511 if (!cpufreq_driver || (driver != cpufreq_driver))
1da177e4 2512 return -EINVAL;
1da177e4 2513
2d06d8c4 2514 pr_debug("unregistering driver %s\n", driver->name);
1da177e4 2515
8a25a2fd 2516 subsys_interface_unregister(&cpufreq_interface);
6f19efc0
LM
2517 if (cpufreq_boost_supported())
2518 cpufreq_sysfs_remove_file(&boost.attr);
2519
65edc68c 2520 unregister_hotcpu_notifier(&cpufreq_cpu_notifier);
1da177e4 2521
6eed9404 2522 down_write(&cpufreq_rwsem);
0d1857a1 2523 write_lock_irqsave(&cpufreq_driver_lock, flags);
6eed9404 2524
1c3d85dd 2525 cpufreq_driver = NULL;
6eed9404 2526
0d1857a1 2527 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
6eed9404 2528 up_write(&cpufreq_rwsem);
1da177e4
LT
2529
2530 return 0;
2531}
2532EXPORT_SYMBOL_GPL(cpufreq_unregister_driver);
5a01f2e8 2533
90de2a4a
DA
2534/*
2535 * Stop cpufreq at shutdown to make sure it isn't holding any locks
2536 * or mutexes when secondary CPUs are halted.
2537 */
2538static struct syscore_ops cpufreq_syscore_ops = {
2539 .shutdown = cpufreq_suspend,
2540};
2541
5a01f2e8
VP
2542static int __init cpufreq_core_init(void)
2543{
a7b422cd
KRW
2544 if (cpufreq_disabled())
2545 return -ENODEV;
2546
2361be23 2547 cpufreq_global_kobject = kobject_create();
8aa84ad8
TR
2548 BUG_ON(!cpufreq_global_kobject);
2549
90de2a4a
DA
2550 register_syscore_ops(&cpufreq_syscore_ops);
2551
5a01f2e8
VP
2552 return 0;
2553}
5a01f2e8 2554core_initcall(cpufreq_core_init);
This page took 0.844612 seconds and 5 git commands to generate.