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