Merge commit 'v2.6.29-rc1' into x86/urgent
[pandora-kernel.git] / drivers / cpufreq / cpufreq.c
1 /*
2  *  linux/drivers/cpufreq/cpufreq.c
3  *
4  *  Copyright (C) 2001 Russell King
5  *            (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
6  *
7  *  Oct 2005 - Ashok Raj <ashok.raj@intel.com>
8  *      Added handling for CPU hotplug
9  *  Feb 2006 - Jacob Shin <jacob.shin@amd.com>
10  *      Fix handling for CPU hotplug -- affected CPUs
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License version 2 as
14  * published by the Free Software Foundation.
15  *
16  */
17
18 #include <linux/kernel.h>
19 #include <linux/module.h>
20 #include <linux/init.h>
21 #include <linux/notifier.h>
22 #include <linux/cpufreq.h>
23 #include <linux/delay.h>
24 #include <linux/interrupt.h>
25 #include <linux/spinlock.h>
26 #include <linux/device.h>
27 #include <linux/slab.h>
28 #include <linux/cpu.h>
29 #include <linux/completion.h>
30 #include <linux/mutex.h>
31
32 #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_CORE, \
33                                                 "cpufreq-core", msg)
34
35 /**
36  * The "cpufreq driver" - the arch- or hardware-dependent low
37  * level driver of CPUFreq support, and its spinlock. This lock
38  * also protects the cpufreq_cpu_data array.
39  */
40 static struct cpufreq_driver *cpufreq_driver;
41 static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
42 #ifdef CONFIG_HOTPLUG_CPU
43 /* This one keeps track of the previously set governor of a removed CPU */
44 static DEFINE_PER_CPU(struct cpufreq_governor *, cpufreq_cpu_governor);
45 #endif
46 static DEFINE_SPINLOCK(cpufreq_driver_lock);
47
48 /*
49  * cpu_policy_rwsem is a per CPU reader-writer semaphore designed to cure
50  * all cpufreq/hotplug/workqueue/etc related lock issues.
51  *
52  * The rules for this semaphore:
53  * - Any routine that wants to read from the policy structure will
54  *   do a down_read on this semaphore.
55  * - Any routine that will write to the policy structure and/or may take away
56  *   the policy altogether (eg. CPU hotplug), will hold this lock in write
57  *   mode before doing so.
58  *
59  * Additional rules:
60  * - All holders of the lock should check to make sure that the CPU they
61  *   are concerned with are online after they get the lock.
62  * - Governor routines that can be called in cpufreq hotplug path should not
63  *   take this sem as top level hotplug notifier handler takes this.
64  */
65 static DEFINE_PER_CPU(int, policy_cpu);
66 static DEFINE_PER_CPU(struct rw_semaphore, cpu_policy_rwsem);
67
68 #define lock_policy_rwsem(mode, cpu)                                    \
69 int lock_policy_rwsem_##mode                                            \
70 (int cpu)                                                               \
71 {                                                                       \
72         int policy_cpu = per_cpu(policy_cpu, cpu);                      \
73         BUG_ON(policy_cpu == -1);                                       \
74         down_##mode(&per_cpu(cpu_policy_rwsem, policy_cpu));            \
75         if (unlikely(!cpu_online(cpu))) {                               \
76                 up_##mode(&per_cpu(cpu_policy_rwsem, policy_cpu));      \
77                 return -1;                                              \
78         }                                                               \
79                                                                         \
80         return 0;                                                       \
81 }
82
83 lock_policy_rwsem(read, cpu);
84 EXPORT_SYMBOL_GPL(lock_policy_rwsem_read);
85
86 lock_policy_rwsem(write, cpu);
87 EXPORT_SYMBOL_GPL(lock_policy_rwsem_write);
88
89 void unlock_policy_rwsem_read(int cpu)
90 {
91         int policy_cpu = per_cpu(policy_cpu, cpu);
92         BUG_ON(policy_cpu == -1);
93         up_read(&per_cpu(cpu_policy_rwsem, policy_cpu));
94 }
95 EXPORT_SYMBOL_GPL(unlock_policy_rwsem_read);
96
97 void unlock_policy_rwsem_write(int cpu)
98 {
99         int policy_cpu = per_cpu(policy_cpu, cpu);
100         BUG_ON(policy_cpu == -1);
101         up_write(&per_cpu(cpu_policy_rwsem, policy_cpu));
102 }
103 EXPORT_SYMBOL_GPL(unlock_policy_rwsem_write);
104
105
106 /* internal prototypes */
107 static int __cpufreq_governor(struct cpufreq_policy *policy, unsigned int event);
108 static unsigned int __cpufreq_get(unsigned int cpu);
109 static void handle_update(struct work_struct *work);
110
111 /**
112  * Two notifier lists: the "policy" list is involved in the
113  * validation process for a new CPU frequency policy; the
114  * "transition" list for kernel code that needs to handle
115  * changes to devices when the CPU clock speed changes.
116  * The mutex locks both lists.
117  */
118 static BLOCKING_NOTIFIER_HEAD(cpufreq_policy_notifier_list);
119 static struct srcu_notifier_head cpufreq_transition_notifier_list;
120
121 static bool init_cpufreq_transition_notifier_list_called;
122 static int __init init_cpufreq_transition_notifier_list(void)
123 {
124         srcu_init_notifier_head(&cpufreq_transition_notifier_list);
125         init_cpufreq_transition_notifier_list_called = true;
126         return 0;
127 }
128 pure_initcall(init_cpufreq_transition_notifier_list);
129
130 static LIST_HEAD(cpufreq_governor_list);
131 static DEFINE_MUTEX (cpufreq_governor_mutex);
132
133 struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
134 {
135         struct cpufreq_policy *data;
136         unsigned long flags;
137
138         if (cpu >= nr_cpu_ids)
139                 goto err_out;
140
141         /* get the cpufreq driver */
142         spin_lock_irqsave(&cpufreq_driver_lock, flags);
143
144         if (!cpufreq_driver)
145                 goto err_out_unlock;
146
147         if (!try_module_get(cpufreq_driver->owner))
148                 goto err_out_unlock;
149
150
151         /* get the CPU */
152         data = per_cpu(cpufreq_cpu_data, cpu);
153
154         if (!data)
155                 goto err_out_put_module;
156
157         if (!kobject_get(&data->kobj))
158                 goto err_out_put_module;
159
160         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
161         return data;
162
163 err_out_put_module:
164         module_put(cpufreq_driver->owner);
165 err_out_unlock:
166         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
167 err_out:
168         return NULL;
169 }
170 EXPORT_SYMBOL_GPL(cpufreq_cpu_get);
171
172
173 void cpufreq_cpu_put(struct cpufreq_policy *data)
174 {
175         kobject_put(&data->kobj);
176         module_put(cpufreq_driver->owner);
177 }
178 EXPORT_SYMBOL_GPL(cpufreq_cpu_put);
179
180
181 /*********************************************************************
182  *                     UNIFIED DEBUG HELPERS                         *
183  *********************************************************************/
184 #ifdef CONFIG_CPU_FREQ_DEBUG
185
186 /* what part(s) of the CPUfreq subsystem are debugged? */
187 static unsigned int debug;
188
189 /* is the debug output ratelimit'ed using printk_ratelimit? User can
190  * set or modify this value.
191  */
192 static unsigned int debug_ratelimit = 1;
193
194 /* is the printk_ratelimit'ing enabled? It's enabled after a successful
195  * loading of a cpufreq driver, temporarily disabled when a new policy
196  * is set, and disabled upon cpufreq driver removal
197  */
198 static unsigned int disable_ratelimit = 1;
199 static DEFINE_SPINLOCK(disable_ratelimit_lock);
200
201 static void cpufreq_debug_enable_ratelimit(void)
202 {
203         unsigned long flags;
204
205         spin_lock_irqsave(&disable_ratelimit_lock, flags);
206         if (disable_ratelimit)
207                 disable_ratelimit--;
208         spin_unlock_irqrestore(&disable_ratelimit_lock, flags);
209 }
210
211 static void cpufreq_debug_disable_ratelimit(void)
212 {
213         unsigned long flags;
214
215         spin_lock_irqsave(&disable_ratelimit_lock, flags);
216         disable_ratelimit++;
217         spin_unlock_irqrestore(&disable_ratelimit_lock, flags);
218 }
219
220 void cpufreq_debug_printk(unsigned int type, const char *prefix,
221                         const char *fmt, ...)
222 {
223         char s[256];
224         va_list args;
225         unsigned int len;
226         unsigned long flags;
227
228         WARN_ON(!prefix);
229         if (type & debug) {
230                 spin_lock_irqsave(&disable_ratelimit_lock, flags);
231                 if (!disable_ratelimit && debug_ratelimit
232                                         && !printk_ratelimit()) {
233                         spin_unlock_irqrestore(&disable_ratelimit_lock, flags);
234                         return;
235                 }
236                 spin_unlock_irqrestore(&disable_ratelimit_lock, flags);
237
238                 len = snprintf(s, 256, KERN_DEBUG "%s: ", prefix);
239
240                 va_start(args, fmt);
241                 len += vsnprintf(&s[len], (256 - len), fmt, args);
242                 va_end(args);
243
244                 printk(s);
245
246                 WARN_ON(len < 5);
247         }
248 }
249 EXPORT_SYMBOL(cpufreq_debug_printk);
250
251
252 module_param(debug, uint, 0644);
253 MODULE_PARM_DESC(debug, "CPUfreq debugging: add 1 to debug core,"
254                         " 2 to debug drivers, and 4 to debug governors.");
255
256 module_param(debug_ratelimit, uint, 0644);
257 MODULE_PARM_DESC(debug_ratelimit, "CPUfreq debugging:"
258                                         " set to 0 to disable ratelimiting.");
259
260 #else /* !CONFIG_CPU_FREQ_DEBUG */
261
262 static inline void cpufreq_debug_enable_ratelimit(void) { return; }
263 static inline void cpufreq_debug_disable_ratelimit(void) { return; }
264
265 #endif /* CONFIG_CPU_FREQ_DEBUG */
266
267
268 /*********************************************************************
269  *            EXTERNALLY AFFECTING FREQUENCY CHANGES                 *
270  *********************************************************************/
271
272 /**
273  * adjust_jiffies - adjust the system "loops_per_jiffy"
274  *
275  * This function alters the system "loops_per_jiffy" for the clock
276  * speed change. Note that loops_per_jiffy cannot be updated on SMP
277  * systems as each CPU might be scaled differently. So, use the arch
278  * per-CPU loops_per_jiffy value wherever possible.
279  */
280 #ifndef CONFIG_SMP
281 static unsigned long l_p_j_ref;
282 static unsigned int  l_p_j_ref_freq;
283
284 static void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
285 {
286         if (ci->flags & CPUFREQ_CONST_LOOPS)
287                 return;
288
289         if (!l_p_j_ref_freq) {
290                 l_p_j_ref = loops_per_jiffy;
291                 l_p_j_ref_freq = ci->old;
292                 dprintk("saving %lu as reference value for loops_per_jiffy; "
293                         "freq is %u kHz\n", l_p_j_ref, l_p_j_ref_freq);
294         }
295         if ((val == CPUFREQ_PRECHANGE  && ci->old < ci->new) ||
296             (val == CPUFREQ_POSTCHANGE && ci->old > ci->new) ||
297             (val == CPUFREQ_RESUMECHANGE || val == CPUFREQ_SUSPENDCHANGE)) {
298                 loops_per_jiffy = cpufreq_scale(l_p_j_ref, l_p_j_ref_freq,
299                                                                 ci->new);
300                 dprintk("scaling loops_per_jiffy to %lu "
301                         "for frequency %u kHz\n", loops_per_jiffy, ci->new);
302         }
303 }
304 #else
305 static inline void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
306 {
307         return;
308 }
309 #endif
310
311
312 /**
313  * cpufreq_notify_transition - call notifier chain and adjust_jiffies
314  * on frequency transition.
315  *
316  * This function calls the transition notifiers and the "adjust_jiffies"
317  * function. It is called twice on all CPU frequency changes that have
318  * external effects.
319  */
320 void cpufreq_notify_transition(struct cpufreq_freqs *freqs, unsigned int state)
321 {
322         struct cpufreq_policy *policy;
323
324         BUG_ON(irqs_disabled());
325
326         freqs->flags = cpufreq_driver->flags;
327         dprintk("notification %u of frequency transition to %u kHz\n",
328                 state, freqs->new);
329
330         policy = per_cpu(cpufreq_cpu_data, freqs->cpu);
331         switch (state) {
332
333         case CPUFREQ_PRECHANGE:
334                 /* detect if the driver reported a value as "old frequency"
335                  * which is not equal to what the cpufreq core thinks is
336                  * "old frequency".
337                  */
338                 if (!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
339                         if ((policy) && (policy->cpu == freqs->cpu) &&
340                             (policy->cur) && (policy->cur != freqs->old)) {
341                                 dprintk("Warning: CPU frequency is"
342                                         " %u, cpufreq assumed %u kHz.\n",
343                                         freqs->old, policy->cur);
344                                 freqs->old = policy->cur;
345                         }
346                 }
347                 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
348                                 CPUFREQ_PRECHANGE, freqs);
349                 adjust_jiffies(CPUFREQ_PRECHANGE, freqs);
350                 break;
351
352         case CPUFREQ_POSTCHANGE:
353                 adjust_jiffies(CPUFREQ_POSTCHANGE, freqs);
354                 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
355                                 CPUFREQ_POSTCHANGE, freqs);
356                 if (likely(policy) && likely(policy->cpu == freqs->cpu))
357                         policy->cur = freqs->new;
358                 break;
359         }
360 }
361 EXPORT_SYMBOL_GPL(cpufreq_notify_transition);
362
363
364
365 /*********************************************************************
366  *                          SYSFS INTERFACE                          *
367  *********************************************************************/
368
369 static struct cpufreq_governor *__find_governor(const char *str_governor)
370 {
371         struct cpufreq_governor *t;
372
373         list_for_each_entry(t, &cpufreq_governor_list, governor_list)
374                 if (!strnicmp(str_governor,t->name,CPUFREQ_NAME_LEN))
375                         return t;
376
377         return NULL;
378 }
379
380 /**
381  * cpufreq_parse_governor - parse a governor string
382  */
383 static int cpufreq_parse_governor(char *str_governor, unsigned int *policy,
384                                 struct cpufreq_governor **governor)
385 {
386         int err = -EINVAL;
387
388         if (!cpufreq_driver)
389                 goto out;
390
391         if (cpufreq_driver->setpolicy) {
392                 if (!strnicmp(str_governor, "performance", CPUFREQ_NAME_LEN)) {
393                         *policy = CPUFREQ_POLICY_PERFORMANCE;
394                         err = 0;
395                 } else if (!strnicmp(str_governor, "powersave",
396                                                 CPUFREQ_NAME_LEN)) {
397                         *policy = CPUFREQ_POLICY_POWERSAVE;
398                         err = 0;
399                 }
400         } else if (cpufreq_driver->target) {
401                 struct cpufreq_governor *t;
402
403                 mutex_lock(&cpufreq_governor_mutex);
404
405                 t = __find_governor(str_governor);
406
407                 if (t == NULL) {
408                         char *name = kasprintf(GFP_KERNEL, "cpufreq_%s",
409                                                                 str_governor);
410
411                         if (name) {
412                                 int ret;
413
414                                 mutex_unlock(&cpufreq_governor_mutex);
415                                 ret = request_module("%s", name);
416                                 mutex_lock(&cpufreq_governor_mutex);
417
418                                 if (ret == 0)
419                                         t = __find_governor(str_governor);
420                         }
421
422                         kfree(name);
423                 }
424
425                 if (t != NULL) {
426                         *governor = t;
427                         err = 0;
428                 }
429
430                 mutex_unlock(&cpufreq_governor_mutex);
431         }
432   out:
433         return err;
434 }
435
436
437 /* drivers/base/cpu.c */
438 extern struct sysdev_class cpu_sysdev_class;
439
440
441 /**
442  * cpufreq_per_cpu_attr_read() / show_##file_name() -
443  * print out cpufreq information
444  *
445  * Write out information from cpufreq_driver->policy[cpu]; object must be
446  * "unsigned int".
447  */
448
449 #define show_one(file_name, object)                     \
450 static ssize_t show_##file_name                         \
451 (struct cpufreq_policy *policy, char *buf)              \
452 {                                                       \
453         return sprintf (buf, "%u\n", policy->object);   \
454 }
455
456 show_one(cpuinfo_min_freq, cpuinfo.min_freq);
457 show_one(cpuinfo_max_freq, cpuinfo.max_freq);
458 show_one(scaling_min_freq, min);
459 show_one(scaling_max_freq, max);
460 show_one(scaling_cur_freq, cur);
461
462 static int __cpufreq_set_policy(struct cpufreq_policy *data,
463                                 struct cpufreq_policy *policy);
464
465 /**
466  * cpufreq_per_cpu_attr_write() / store_##file_name() - sysfs write access
467  */
468 #define store_one(file_name, object)                    \
469 static ssize_t store_##file_name                                        \
470 (struct cpufreq_policy *policy, const char *buf, size_t count)          \
471 {                                                                       \
472         unsigned int ret = -EINVAL;                                     \
473         struct cpufreq_policy new_policy;                               \
474                                                                         \
475         ret = cpufreq_get_policy(&new_policy, policy->cpu);             \
476         if (ret)                                                        \
477                 return -EINVAL;                                         \
478                                                                         \
479         ret = sscanf (buf, "%u", &new_policy.object);                   \
480         if (ret != 1)                                                   \
481                 return -EINVAL;                                         \
482                                                                         \
483         ret = __cpufreq_set_policy(policy, &new_policy);                \
484         policy->user_policy.object = policy->object;                    \
485                                                                         \
486         return ret ? ret : count;                                       \
487 }
488
489 store_one(scaling_min_freq,min);
490 store_one(scaling_max_freq,max);
491
492 /**
493  * show_cpuinfo_cur_freq - current CPU frequency as detected by hardware
494  */
495 static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy,
496                                         char *buf)
497 {
498         unsigned int cur_freq = __cpufreq_get(policy->cpu);
499         if (!cur_freq)
500                 return sprintf(buf, "<unknown>");
501         return sprintf(buf, "%u\n", cur_freq);
502 }
503
504
505 /**
506  * show_scaling_governor - show the current policy for the specified CPU
507  */
508 static ssize_t show_scaling_governor(struct cpufreq_policy *policy, char *buf)
509 {
510         if(policy->policy == CPUFREQ_POLICY_POWERSAVE)
511                 return sprintf(buf, "powersave\n");
512         else if (policy->policy == CPUFREQ_POLICY_PERFORMANCE)
513                 return sprintf(buf, "performance\n");
514         else if (policy->governor)
515                 return scnprintf(buf, CPUFREQ_NAME_LEN, "%s\n", policy->governor->name);
516         return -EINVAL;
517 }
518
519
520 /**
521  * store_scaling_governor - store policy for the specified CPU
522  */
523 static ssize_t store_scaling_governor(struct cpufreq_policy *policy,
524                                         const char *buf, size_t count)
525 {
526         unsigned int ret = -EINVAL;
527         char    str_governor[16];
528         struct cpufreq_policy new_policy;
529
530         ret = cpufreq_get_policy(&new_policy, policy->cpu);
531         if (ret)
532                 return ret;
533
534         ret = sscanf (buf, "%15s", str_governor);
535         if (ret != 1)
536                 return -EINVAL;
537
538         if (cpufreq_parse_governor(str_governor, &new_policy.policy,
539                                                 &new_policy.governor))
540                 return -EINVAL;
541
542         /* Do not use cpufreq_set_policy here or the user_policy.max
543            will be wrongly overridden */
544         ret = __cpufreq_set_policy(policy, &new_policy);
545
546         policy->user_policy.policy = policy->policy;
547         policy->user_policy.governor = policy->governor;
548
549         if (ret)
550                 return ret;
551         else
552                 return count;
553 }
554
555 /**
556  * show_scaling_driver - show the cpufreq driver currently loaded
557  */
558 static ssize_t show_scaling_driver(struct cpufreq_policy *policy, char *buf)
559 {
560         return scnprintf(buf, CPUFREQ_NAME_LEN, "%s\n", cpufreq_driver->name);
561 }
562
563 /**
564  * show_scaling_available_governors - show the available CPUfreq governors
565  */
566 static ssize_t show_scaling_available_governors(struct cpufreq_policy *policy,
567                                                 char *buf)
568 {
569         ssize_t i = 0;
570         struct cpufreq_governor *t;
571
572         if (!cpufreq_driver->target) {
573                 i += sprintf(buf, "performance powersave");
574                 goto out;
575         }
576
577         list_for_each_entry(t, &cpufreq_governor_list, governor_list) {
578                 if (i >= (ssize_t) ((PAGE_SIZE / sizeof(char)) - (CPUFREQ_NAME_LEN + 2)))
579                         goto out;
580                 i += scnprintf(&buf[i], CPUFREQ_NAME_LEN, "%s ", t->name);
581         }
582 out:
583         i += sprintf(&buf[i], "\n");
584         return i;
585 }
586
587 static ssize_t show_cpus(const struct cpumask *mask, char *buf)
588 {
589         ssize_t i = 0;
590         unsigned int cpu;
591
592         for_each_cpu(cpu, mask) {
593                 if (i)
594                         i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " ");
595                 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu);
596                 if (i >= (PAGE_SIZE - 5))
597                     break;
598         }
599         i += sprintf(&buf[i], "\n");
600         return i;
601 }
602
603 /**
604  * show_related_cpus - show the CPUs affected by each transition even if
605  * hw coordination is in use
606  */
607 static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf)
608 {
609         if (cpumask_empty(policy->related_cpus))
610                 return show_cpus(policy->cpus, buf);
611         return show_cpus(policy->related_cpus, buf);
612 }
613
614 /**
615  * show_affected_cpus - show the CPUs affected by each transition
616  */
617 static ssize_t show_affected_cpus(struct cpufreq_policy *policy, char *buf)
618 {
619         return show_cpus(policy->cpus, buf);
620 }
621
622 static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy,
623                                         const char *buf, size_t count)
624 {
625         unsigned int freq = 0;
626         unsigned int ret;
627
628         if (!policy->governor || !policy->governor->store_setspeed)
629                 return -EINVAL;
630
631         ret = sscanf(buf, "%u", &freq);
632         if (ret != 1)
633                 return -EINVAL;
634
635         policy->governor->store_setspeed(policy, freq);
636
637         return count;
638 }
639
640 static ssize_t show_scaling_setspeed(struct cpufreq_policy *policy, char *buf)
641 {
642         if (!policy->governor || !policy->governor->show_setspeed)
643                 return sprintf(buf, "<unsupported>\n");
644
645         return policy->governor->show_setspeed(policy, buf);
646 }
647
648 #define define_one_ro(_name) \
649 static struct freq_attr _name = \
650 __ATTR(_name, 0444, show_##_name, NULL)
651
652 #define define_one_ro0400(_name) \
653 static struct freq_attr _name = \
654 __ATTR(_name, 0400, show_##_name, NULL)
655
656 #define define_one_rw(_name) \
657 static struct freq_attr _name = \
658 __ATTR(_name, 0644, show_##_name, store_##_name)
659
660 define_one_ro0400(cpuinfo_cur_freq);
661 define_one_ro(cpuinfo_min_freq);
662 define_one_ro(cpuinfo_max_freq);
663 define_one_ro(scaling_available_governors);
664 define_one_ro(scaling_driver);
665 define_one_ro(scaling_cur_freq);
666 define_one_ro(related_cpus);
667 define_one_ro(affected_cpus);
668 define_one_rw(scaling_min_freq);
669 define_one_rw(scaling_max_freq);
670 define_one_rw(scaling_governor);
671 define_one_rw(scaling_setspeed);
672
673 static struct attribute *default_attrs[] = {
674         &cpuinfo_min_freq.attr,
675         &cpuinfo_max_freq.attr,
676         &scaling_min_freq.attr,
677         &scaling_max_freq.attr,
678         &affected_cpus.attr,
679         &related_cpus.attr,
680         &scaling_governor.attr,
681         &scaling_driver.attr,
682         &scaling_available_governors.attr,
683         &scaling_setspeed.attr,
684         NULL
685 };
686
687 #define to_policy(k) container_of(k,struct cpufreq_policy,kobj)
688 #define to_attr(a) container_of(a,struct freq_attr,attr)
689
690 static ssize_t show(struct kobject *kobj, struct attribute *attr ,char *buf)
691 {
692         struct cpufreq_policy *policy = to_policy(kobj);
693         struct freq_attr *fattr = to_attr(attr);
694         ssize_t ret = -EINVAL;
695         policy = cpufreq_cpu_get(policy->cpu);
696         if (!policy)
697                 goto no_policy;
698
699         if (lock_policy_rwsem_read(policy->cpu) < 0)
700                 goto fail;
701
702         if (fattr->show)
703                 ret = fattr->show(policy, buf);
704         else
705                 ret = -EIO;
706
707         unlock_policy_rwsem_read(policy->cpu);
708 fail:
709         cpufreq_cpu_put(policy);
710 no_policy:
711         return ret;
712 }
713
714 static ssize_t store(struct kobject *kobj, struct attribute *attr,
715                      const char *buf, size_t count)
716 {
717         struct cpufreq_policy *policy = to_policy(kobj);
718         struct freq_attr *fattr = to_attr(attr);
719         ssize_t ret = -EINVAL;
720         policy = cpufreq_cpu_get(policy->cpu);
721         if (!policy)
722                 goto no_policy;
723
724         if (lock_policy_rwsem_write(policy->cpu) < 0)
725                 goto fail;
726
727         if (fattr->store)
728                 ret = fattr->store(policy, buf, count);
729         else
730                 ret = -EIO;
731
732         unlock_policy_rwsem_write(policy->cpu);
733 fail:
734         cpufreq_cpu_put(policy);
735 no_policy:
736         return ret;
737 }
738
739 static void cpufreq_sysfs_release(struct kobject *kobj)
740 {
741         struct cpufreq_policy *policy = to_policy(kobj);
742         dprintk("last reference is dropped\n");
743         complete(&policy->kobj_unregister);
744 }
745
746 static struct sysfs_ops sysfs_ops = {
747         .show   = show,
748         .store  = store,
749 };
750
751 static struct kobj_type ktype_cpufreq = {
752         .sysfs_ops      = &sysfs_ops,
753         .default_attrs  = default_attrs,
754         .release        = cpufreq_sysfs_release,
755 };
756
757 static struct kobj_type ktype_empty_cpufreq = {
758         .sysfs_ops      = &sysfs_ops,
759         .release        = cpufreq_sysfs_release,
760 };
761
762
763 /**
764  * cpufreq_add_dev - add a CPU device
765  *
766  * Adds the cpufreq interface for a CPU device.
767  */
768 static int cpufreq_add_dev(struct sys_device *sys_dev)
769 {
770         unsigned int cpu = sys_dev->id;
771         int ret = 0;
772         struct cpufreq_policy new_policy;
773         struct cpufreq_policy *policy;
774         struct freq_attr **drv_attr;
775         struct sys_device *cpu_sys_dev;
776         unsigned long flags;
777         unsigned int j;
778 #ifdef CONFIG_SMP
779         struct cpufreq_policy *managed_policy;
780 #endif
781
782         if (cpu_is_offline(cpu))
783                 return 0;
784
785         cpufreq_debug_disable_ratelimit();
786         dprintk("adding CPU %u\n", cpu);
787
788 #ifdef CONFIG_SMP
789         /* check whether a different CPU already registered this
790          * CPU because it is in the same boat. */
791         policy = cpufreq_cpu_get(cpu);
792         if (unlikely(policy)) {
793                 cpufreq_cpu_put(policy);
794                 cpufreq_debug_enable_ratelimit();
795                 return 0;
796         }
797 #endif
798
799         if (!try_module_get(cpufreq_driver->owner)) {
800                 ret = -EINVAL;
801                 goto module_out;
802         }
803
804         policy = kzalloc(sizeof(struct cpufreq_policy), GFP_KERNEL);
805         if (!policy) {
806                 ret = -ENOMEM;
807                 goto nomem_out;
808         }
809         if (!alloc_cpumask_var(&policy->cpus, GFP_KERNEL)) {
810                 kfree(policy);
811                 ret = -ENOMEM;
812                 goto nomem_out;
813         }
814         if (!alloc_cpumask_var(&policy->related_cpus, GFP_KERNEL)) {
815                 free_cpumask_var(policy->cpus);
816                 kfree(policy);
817                 ret = -ENOMEM;
818                 goto nomem_out;
819         }
820
821         policy->cpu = cpu;
822         cpumask_copy(policy->cpus, cpumask_of(cpu));
823
824         /* Initially set CPU itself as the policy_cpu */
825         per_cpu(policy_cpu, cpu) = cpu;
826         lock_policy_rwsem_write(cpu);
827
828         init_completion(&policy->kobj_unregister);
829         INIT_WORK(&policy->update, handle_update);
830
831         /* Set governor before ->init, so that driver could check it */
832         policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
833         /* call driver. From then on the cpufreq must be able
834          * to accept all calls to ->verify and ->setpolicy for this CPU
835          */
836         ret = cpufreq_driver->init(policy);
837         if (ret) {
838                 dprintk("initialization failed\n");
839                 goto err_out;
840         }
841         policy->user_policy.min = policy->min;
842         policy->user_policy.max = policy->max;
843
844         blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
845                                      CPUFREQ_START, policy);
846
847 #ifdef CONFIG_SMP
848
849 #ifdef CONFIG_HOTPLUG_CPU
850         if (per_cpu(cpufreq_cpu_governor, cpu)) {
851                 policy->governor = per_cpu(cpufreq_cpu_governor, cpu);
852                 dprintk("Restoring governor %s for cpu %d\n",
853                        policy->governor->name, cpu);
854         }
855 #endif
856
857         for_each_cpu(j, policy->cpus) {
858                 if (cpu == j)
859                         continue;
860
861                 /* check for existing affected CPUs.  They may not be aware
862                  * of it due to CPU Hotplug.
863                  */
864                 managed_policy = cpufreq_cpu_get(j);            // FIXME: Where is this released?  What about error paths?
865                 if (unlikely(managed_policy)) {
866
867                         /* Set proper policy_cpu */
868                         unlock_policy_rwsem_write(cpu);
869                         per_cpu(policy_cpu, cpu) = managed_policy->cpu;
870
871                         if (lock_policy_rwsem_write(cpu) < 0)
872                                 goto err_out_driver_exit;
873
874                         spin_lock_irqsave(&cpufreq_driver_lock, flags);
875                         cpumask_copy(managed_policy->cpus, policy->cpus);
876                         per_cpu(cpufreq_cpu_data, cpu) = managed_policy;
877                         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
878
879                         dprintk("CPU already managed, adding link\n");
880                         ret = sysfs_create_link(&sys_dev->kobj,
881                                                 &managed_policy->kobj,
882                                                 "cpufreq");
883                         if (ret)
884                                 goto err_out_driver_exit;
885
886                         cpufreq_debug_enable_ratelimit();
887                         ret = 0;
888                         goto err_out_driver_exit; /* call driver->exit() */
889                 }
890         }
891 #endif
892         memcpy(&new_policy, policy, sizeof(struct cpufreq_policy));
893
894         /* prepare interface data */
895         if (!cpufreq_driver->hide_interface) {
896                 ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq,
897                                            &sys_dev->kobj, "cpufreq");
898                 if (ret)
899                         goto err_out_driver_exit;
900
901                 /* set up files for this cpu device */
902                 drv_attr = cpufreq_driver->attr;
903                 while ((drv_attr) && (*drv_attr)) {
904                         ret = sysfs_create_file(&policy->kobj,
905                                                 &((*drv_attr)->attr));
906                         if (ret)
907                                 goto err_out_driver_exit;
908                         drv_attr++;
909                 }
910                 if (cpufreq_driver->get) {
911                         ret = sysfs_create_file(&policy->kobj,
912                                                 &cpuinfo_cur_freq.attr);
913                         if (ret)
914                                 goto err_out_driver_exit;
915                 }
916                 if (cpufreq_driver->target) {
917                         ret = sysfs_create_file(&policy->kobj,
918                                                 &scaling_cur_freq.attr);
919                         if (ret)
920                                 goto err_out_driver_exit;
921                 }
922         } else {
923                 ret = kobject_init_and_add(&policy->kobj, &ktype_empty_cpufreq,
924                                            &sys_dev->kobj, "cpufreq");
925                 if (ret)
926                         goto err_out_driver_exit;
927         }
928
929         spin_lock_irqsave(&cpufreq_driver_lock, flags);
930         for_each_cpu(j, policy->cpus) {
931                 per_cpu(cpufreq_cpu_data, j) = policy;
932                 per_cpu(policy_cpu, j) = policy->cpu;
933         }
934         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
935
936         /* symlink affected CPUs */
937         for_each_cpu(j, policy->cpus) {
938                 if (j == cpu)
939                         continue;
940                 if (!cpu_online(j))
941                         continue;
942
943                 dprintk("CPU %u already managed, adding link\n", j);
944                 cpufreq_cpu_get(cpu);
945                 cpu_sys_dev = get_cpu_sysdev(j);
946                 ret = sysfs_create_link(&cpu_sys_dev->kobj, &policy->kobj,
947                                         "cpufreq");
948                 if (ret)
949                         goto err_out_unregister;
950         }
951
952         policy->governor = NULL; /* to assure that the starting sequence is
953                                   * run in cpufreq_set_policy */
954
955         /* set default policy */
956         ret = __cpufreq_set_policy(policy, &new_policy);
957         policy->user_policy.policy = policy->policy;
958         policy->user_policy.governor = policy->governor;
959
960         if (ret) {
961                 dprintk("setting policy failed\n");
962                 goto err_out_unregister;
963         }
964
965         unlock_policy_rwsem_write(cpu);
966
967         kobject_uevent(&policy->kobj, KOBJ_ADD);
968         module_put(cpufreq_driver->owner);
969         dprintk("initialization complete\n");
970         cpufreq_debug_enable_ratelimit();
971
972         return 0;
973
974
975 err_out_unregister:
976         spin_lock_irqsave(&cpufreq_driver_lock, flags);
977         for_each_cpu(j, policy->cpus)
978                 per_cpu(cpufreq_cpu_data, j) = NULL;
979         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
980
981         kobject_put(&policy->kobj);
982         wait_for_completion(&policy->kobj_unregister);
983
984 err_out_driver_exit:
985         if (cpufreq_driver->exit)
986                 cpufreq_driver->exit(policy);
987
988 err_out:
989         unlock_policy_rwsem_write(cpu);
990         kfree(policy);
991
992 nomem_out:
993         module_put(cpufreq_driver->owner);
994 module_out:
995         cpufreq_debug_enable_ratelimit();
996         return ret;
997 }
998
999
1000 /**
1001  * __cpufreq_remove_dev - remove a CPU device
1002  *
1003  * Removes the cpufreq interface for a CPU device.
1004  * Caller should already have policy_rwsem in write mode for this CPU.
1005  * This routine frees the rwsem before returning.
1006  */
1007 static int __cpufreq_remove_dev(struct sys_device *sys_dev)
1008 {
1009         unsigned int cpu = sys_dev->id;
1010         unsigned long flags;
1011         struct cpufreq_policy *data;
1012 #ifdef CONFIG_SMP
1013         struct sys_device *cpu_sys_dev;
1014         unsigned int j;
1015 #endif
1016
1017         cpufreq_debug_disable_ratelimit();
1018         dprintk("unregistering CPU %u\n", cpu);
1019
1020         spin_lock_irqsave(&cpufreq_driver_lock, flags);
1021         data = per_cpu(cpufreq_cpu_data, cpu);
1022
1023         if (!data) {
1024                 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1025                 cpufreq_debug_enable_ratelimit();
1026                 unlock_policy_rwsem_write(cpu);
1027                 return -EINVAL;
1028         }
1029         per_cpu(cpufreq_cpu_data, cpu) = NULL;
1030
1031
1032 #ifdef CONFIG_SMP
1033         /* if this isn't the CPU which is the parent of the kobj, we
1034          * only need to unlink, put and exit
1035          */
1036         if (unlikely(cpu != data->cpu)) {
1037                 dprintk("removing link\n");
1038                 cpumask_clear_cpu(cpu, data->cpus);
1039                 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1040                 sysfs_remove_link(&sys_dev->kobj, "cpufreq");
1041                 cpufreq_cpu_put(data);
1042                 cpufreq_debug_enable_ratelimit();
1043                 unlock_policy_rwsem_write(cpu);
1044                 return 0;
1045         }
1046 #endif
1047
1048 #ifdef CONFIG_SMP
1049
1050 #ifdef CONFIG_HOTPLUG_CPU
1051         per_cpu(cpufreq_cpu_governor, cpu) = data->governor;
1052 #endif
1053
1054         /* if we have other CPUs still registered, we need to unlink them,
1055          * or else wait_for_completion below will lock up. Clean the
1056          * per_cpu(cpufreq_cpu_data) while holding the lock, and remove
1057          * the sysfs links afterwards.
1058          */
1059         if (unlikely(cpumask_weight(data->cpus) > 1)) {
1060                 for_each_cpu(j, data->cpus) {
1061                         if (j == cpu)
1062                                 continue;
1063                         per_cpu(cpufreq_cpu_data, j) = NULL;
1064                 }
1065         }
1066
1067         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1068
1069         if (unlikely(cpumask_weight(data->cpus) > 1)) {
1070                 for_each_cpu(j, data->cpus) {
1071                         if (j == cpu)
1072                                 continue;
1073                         dprintk("removing link for cpu %u\n", j);
1074 #ifdef CONFIG_HOTPLUG_CPU
1075                         per_cpu(cpufreq_cpu_governor, j) = data->governor;
1076 #endif
1077                         cpu_sys_dev = get_cpu_sysdev(j);
1078                         sysfs_remove_link(&cpu_sys_dev->kobj, "cpufreq");
1079                         cpufreq_cpu_put(data);
1080                 }
1081         }
1082 #else
1083         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1084 #endif
1085
1086         if (cpufreq_driver->target)
1087                 __cpufreq_governor(data, CPUFREQ_GOV_STOP);
1088
1089         unlock_policy_rwsem_write(cpu);
1090
1091         kobject_put(&data->kobj);
1092
1093         /* we need to make sure that the underlying kobj is actually
1094          * not referenced anymore by anybody before we proceed with
1095          * unloading.
1096          */
1097         dprintk("waiting for dropping of refcount\n");
1098         wait_for_completion(&data->kobj_unregister);
1099         dprintk("wait complete\n");
1100
1101         if (cpufreq_driver->exit)
1102                 cpufreq_driver->exit(data);
1103
1104         free_cpumask_var(data->related_cpus);
1105         free_cpumask_var(data->cpus);
1106         kfree(data);
1107         per_cpu(cpufreq_cpu_data, cpu) = NULL;
1108
1109         cpufreq_debug_enable_ratelimit();
1110         return 0;
1111 }
1112
1113
1114 static int cpufreq_remove_dev(struct sys_device *sys_dev)
1115 {
1116         unsigned int cpu = sys_dev->id;
1117         int retval;
1118
1119         if (cpu_is_offline(cpu))
1120                 return 0;
1121
1122         if (unlikely(lock_policy_rwsem_write(cpu)))
1123                 BUG();
1124
1125         retval = __cpufreq_remove_dev(sys_dev);
1126         return retval;
1127 }
1128
1129
1130 static void handle_update(struct work_struct *work)
1131 {
1132         struct cpufreq_policy *policy =
1133                 container_of(work, struct cpufreq_policy, update);
1134         unsigned int cpu = policy->cpu;
1135         dprintk("handle_update for cpu %u called\n", cpu);
1136         cpufreq_update_policy(cpu);
1137 }
1138
1139 /**
1140  *      cpufreq_out_of_sync - If actual and saved CPU frequency differs, we're in deep trouble.
1141  *      @cpu: cpu number
1142  *      @old_freq: CPU frequency the kernel thinks the CPU runs at
1143  *      @new_freq: CPU frequency the CPU actually runs at
1144  *
1145  *      We adjust to current frequency first, and need to clean up later. So either call
1146  *      to cpufreq_update_policy() or schedule handle_update()).
1147  */
1148 static void cpufreq_out_of_sync(unsigned int cpu, unsigned int old_freq,
1149                                 unsigned int new_freq)
1150 {
1151         struct cpufreq_freqs freqs;
1152
1153         dprintk("Warning: CPU frequency out of sync: cpufreq and timing "
1154                "core thinks of %u, is %u kHz.\n", old_freq, new_freq);
1155
1156         freqs.cpu = cpu;
1157         freqs.old = old_freq;
1158         freqs.new = new_freq;
1159         cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
1160         cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
1161 }
1162
1163
1164 /**
1165  * cpufreq_quick_get - get the CPU frequency (in kHz) from policy->cur
1166  * @cpu: CPU number
1167  *
1168  * This is the last known freq, without actually getting it from the driver.
1169  * Return value will be same as what is shown in scaling_cur_freq in sysfs.
1170  */
1171 unsigned int cpufreq_quick_get(unsigned int cpu)
1172 {
1173         struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
1174         unsigned int ret_freq = 0;
1175
1176         if (policy) {
1177                 ret_freq = policy->cur;
1178                 cpufreq_cpu_put(policy);
1179         }
1180
1181         return ret_freq;
1182 }
1183 EXPORT_SYMBOL(cpufreq_quick_get);
1184
1185
1186 static unsigned int __cpufreq_get(unsigned int cpu)
1187 {
1188         struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu);
1189         unsigned int ret_freq = 0;
1190
1191         if (!cpufreq_driver->get)
1192                 return ret_freq;
1193
1194         ret_freq = cpufreq_driver->get(cpu);
1195
1196         if (ret_freq && policy->cur &&
1197                 !(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
1198                 /* verify no discrepancy between actual and
1199                                         saved value exists */
1200                 if (unlikely(ret_freq != policy->cur)) {
1201                         cpufreq_out_of_sync(cpu, policy->cur, ret_freq);
1202                         schedule_work(&policy->update);
1203                 }
1204         }
1205
1206         return ret_freq;
1207 }
1208
1209 /**
1210  * cpufreq_get - get the current CPU frequency (in kHz)
1211  * @cpu: CPU number
1212  *
1213  * Get the CPU current (static) CPU frequency
1214  */
1215 unsigned int cpufreq_get(unsigned int cpu)
1216 {
1217         unsigned int ret_freq = 0;
1218         struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
1219
1220         if (!policy)
1221                 goto out;
1222
1223         if (unlikely(lock_policy_rwsem_read(cpu)))
1224                 goto out_policy;
1225
1226         ret_freq = __cpufreq_get(cpu);
1227
1228         unlock_policy_rwsem_read(cpu);
1229
1230 out_policy:
1231         cpufreq_cpu_put(policy);
1232 out:
1233         return ret_freq;
1234 }
1235 EXPORT_SYMBOL(cpufreq_get);
1236
1237
1238 /**
1239  *      cpufreq_suspend - let the low level driver prepare for suspend
1240  */
1241
1242 static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)
1243 {
1244         int cpu = sysdev->id;
1245         int ret = 0;
1246         unsigned int cur_freq = 0;
1247         struct cpufreq_policy *cpu_policy;
1248
1249         dprintk("suspending cpu %u\n", cpu);
1250
1251         if (!cpu_online(cpu))
1252                 return 0;
1253
1254         /* we may be lax here as interrupts are off. Nonetheless
1255          * we need to grab the correct cpu policy, as to check
1256          * whether we really run on this CPU.
1257          */
1258
1259         cpu_policy = cpufreq_cpu_get(cpu);
1260         if (!cpu_policy)
1261                 return -EINVAL;
1262
1263         /* only handle each CPU group once */
1264         if (unlikely(cpu_policy->cpu != cpu))
1265                 goto out;
1266
1267         if (cpufreq_driver->suspend) {
1268                 ret = cpufreq_driver->suspend(cpu_policy, pmsg);
1269                 if (ret) {
1270                         printk(KERN_ERR "cpufreq: suspend failed in ->suspend "
1271                                         "step on CPU %u\n", cpu_policy->cpu);
1272                         goto out;
1273                 }
1274         }
1275
1276         if (cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)
1277                 goto out;
1278
1279         if (cpufreq_driver->get)
1280                 cur_freq = cpufreq_driver->get(cpu_policy->cpu);
1281
1282         if (!cur_freq || !cpu_policy->cur) {
1283                 printk(KERN_ERR "cpufreq: suspend failed to assert current "
1284                        "frequency is what timing core thinks it is.\n");
1285                 goto out;
1286         }
1287
1288         if (unlikely(cur_freq != cpu_policy->cur)) {
1289                 struct cpufreq_freqs freqs;
1290
1291                 if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN))
1292                         dprintk("Warning: CPU frequency is %u, "
1293                                "cpufreq assumed %u kHz.\n",
1294                                cur_freq, cpu_policy->cur);
1295
1296                 freqs.cpu = cpu;
1297                 freqs.old = cpu_policy->cur;
1298                 freqs.new = cur_freq;
1299
1300                 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
1301                                     CPUFREQ_SUSPENDCHANGE, &freqs);
1302                 adjust_jiffies(CPUFREQ_SUSPENDCHANGE, &freqs);
1303
1304                 cpu_policy->cur = cur_freq;
1305         }
1306
1307 out:
1308         cpufreq_cpu_put(cpu_policy);
1309         return ret;
1310 }
1311
1312 /**
1313  *      cpufreq_resume -  restore proper CPU frequency handling after resume
1314  *
1315  *      1.) resume CPUfreq hardware support (cpufreq_driver->resume())
1316  *      2.) if ->target and !CPUFREQ_CONST_LOOPS: verify we're in sync
1317  *      3.) schedule call cpufreq_update_policy() ASAP as interrupts are
1318  *          restored.
1319  */
1320 static int cpufreq_resume(struct sys_device *sysdev)
1321 {
1322         int cpu = sysdev->id;
1323         int ret = 0;
1324         struct cpufreq_policy *cpu_policy;
1325
1326         dprintk("resuming cpu %u\n", cpu);
1327
1328         if (!cpu_online(cpu))
1329                 return 0;
1330
1331         /* we may be lax here as interrupts are off. Nonetheless
1332          * we need to grab the correct cpu policy, as to check
1333          * whether we really run on this CPU.
1334          */
1335
1336         cpu_policy = cpufreq_cpu_get(cpu);
1337         if (!cpu_policy)
1338                 return -EINVAL;
1339
1340         /* only handle each CPU group once */
1341         if (unlikely(cpu_policy->cpu != cpu))
1342                 goto fail;
1343
1344         if (cpufreq_driver->resume) {
1345                 ret = cpufreq_driver->resume(cpu_policy);
1346                 if (ret) {
1347                         printk(KERN_ERR "cpufreq: resume failed in ->resume "
1348                                         "step on CPU %u\n", cpu_policy->cpu);
1349                         goto fail;
1350                 }
1351         }
1352
1353         if (!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
1354                 unsigned int cur_freq = 0;
1355
1356                 if (cpufreq_driver->get)
1357                         cur_freq = cpufreq_driver->get(cpu_policy->cpu);
1358
1359                 if (!cur_freq || !cpu_policy->cur) {
1360                         printk(KERN_ERR "cpufreq: resume failed to assert "
1361                                         "current frequency is what timing core "
1362                                         "thinks it is.\n");
1363                         goto out;
1364                 }
1365
1366                 if (unlikely(cur_freq != cpu_policy->cur)) {
1367                         struct cpufreq_freqs freqs;
1368
1369                         if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN))
1370                                 dprintk("Warning: CPU frequency "
1371                                        "is %u, cpufreq assumed %u kHz.\n",
1372                                        cur_freq, cpu_policy->cur);
1373
1374                         freqs.cpu = cpu;
1375                         freqs.old = cpu_policy->cur;
1376                         freqs.new = cur_freq;
1377
1378                         srcu_notifier_call_chain(
1379                                         &cpufreq_transition_notifier_list,
1380                                         CPUFREQ_RESUMECHANGE, &freqs);
1381                         adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs);
1382
1383                         cpu_policy->cur = cur_freq;
1384                 }
1385         }
1386
1387 out:
1388         schedule_work(&cpu_policy->update);
1389 fail:
1390         cpufreq_cpu_put(cpu_policy);
1391         return ret;
1392 }
1393
1394 static struct sysdev_driver cpufreq_sysdev_driver = {
1395         .add            = cpufreq_add_dev,
1396         .remove         = cpufreq_remove_dev,
1397         .suspend        = cpufreq_suspend,
1398         .resume         = cpufreq_resume,
1399 };
1400
1401
1402 /*********************************************************************
1403  *                     NOTIFIER LISTS INTERFACE                      *
1404  *********************************************************************/
1405
1406 /**
1407  *      cpufreq_register_notifier - register a driver with cpufreq
1408  *      @nb: notifier function to register
1409  *      @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER
1410  *
1411  *      Add a driver to one of two lists: either a list of drivers that
1412  *      are notified about clock rate changes (once before and once after
1413  *      the transition), or a list of drivers that are notified about
1414  *      changes in cpufreq policy.
1415  *
1416  *      This function may sleep, and has the same return conditions as
1417  *      blocking_notifier_chain_register.
1418  */
1419 int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list)
1420 {
1421         int ret;
1422
1423         WARN_ON(!init_cpufreq_transition_notifier_list_called);
1424
1425         switch (list) {
1426         case CPUFREQ_TRANSITION_NOTIFIER:
1427                 ret = srcu_notifier_chain_register(
1428                                 &cpufreq_transition_notifier_list, nb);
1429                 break;
1430         case CPUFREQ_POLICY_NOTIFIER:
1431                 ret = blocking_notifier_chain_register(
1432                                 &cpufreq_policy_notifier_list, nb);
1433                 break;
1434         default:
1435                 ret = -EINVAL;
1436         }
1437
1438         return ret;
1439 }
1440 EXPORT_SYMBOL(cpufreq_register_notifier);
1441
1442
1443 /**
1444  *      cpufreq_unregister_notifier - unregister a driver with cpufreq
1445  *      @nb: notifier block to be unregistered
1446  *      @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER
1447  *
1448  *      Remove a driver from the CPU frequency notifier list.
1449  *
1450  *      This function may sleep, and has the same return conditions as
1451  *      blocking_notifier_chain_unregister.
1452  */
1453 int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list)
1454 {
1455         int ret;
1456
1457         switch (list) {
1458         case CPUFREQ_TRANSITION_NOTIFIER:
1459                 ret = srcu_notifier_chain_unregister(
1460                                 &cpufreq_transition_notifier_list, nb);
1461                 break;
1462         case CPUFREQ_POLICY_NOTIFIER:
1463                 ret = blocking_notifier_chain_unregister(
1464                                 &cpufreq_policy_notifier_list, nb);
1465                 break;
1466         default:
1467                 ret = -EINVAL;
1468         }
1469
1470         return ret;
1471 }
1472 EXPORT_SYMBOL(cpufreq_unregister_notifier);
1473
1474
1475 /*********************************************************************
1476  *                              GOVERNORS                            *
1477  *********************************************************************/
1478
1479
1480 int __cpufreq_driver_target(struct cpufreq_policy *policy,
1481                             unsigned int target_freq,
1482                             unsigned int relation)
1483 {
1484         int retval = -EINVAL;
1485
1486         dprintk("target for CPU %u: %u kHz, relation %u\n", policy->cpu,
1487                 target_freq, relation);
1488         if (cpu_online(policy->cpu) && cpufreq_driver->target)
1489                 retval = cpufreq_driver->target(policy, target_freq, relation);
1490
1491         return retval;
1492 }
1493 EXPORT_SYMBOL_GPL(__cpufreq_driver_target);
1494
1495 int cpufreq_driver_target(struct cpufreq_policy *policy,
1496                           unsigned int target_freq,
1497                           unsigned int relation)
1498 {
1499         int ret = -EINVAL;
1500
1501         policy = cpufreq_cpu_get(policy->cpu);
1502         if (!policy)
1503                 goto no_policy;
1504
1505         if (unlikely(lock_policy_rwsem_write(policy->cpu)))
1506                 goto fail;
1507
1508         ret = __cpufreq_driver_target(policy, target_freq, relation);
1509
1510         unlock_policy_rwsem_write(policy->cpu);
1511
1512 fail:
1513         cpufreq_cpu_put(policy);
1514 no_policy:
1515         return ret;
1516 }
1517 EXPORT_SYMBOL_GPL(cpufreq_driver_target);
1518
1519 int __cpufreq_driver_getavg(struct cpufreq_policy *policy, unsigned int cpu)
1520 {
1521         int ret = 0;
1522
1523         policy = cpufreq_cpu_get(policy->cpu);
1524         if (!policy)
1525                 return -EINVAL;
1526
1527         if (cpu_online(cpu) && cpufreq_driver->getavg)
1528                 ret = cpufreq_driver->getavg(policy, cpu);
1529
1530         cpufreq_cpu_put(policy);
1531         return ret;
1532 }
1533 EXPORT_SYMBOL_GPL(__cpufreq_driver_getavg);
1534
1535 /*
1536  * when "event" is CPUFREQ_GOV_LIMITS
1537  */
1538
1539 static int __cpufreq_governor(struct cpufreq_policy *policy,
1540                                         unsigned int event)
1541 {
1542         int ret;
1543
1544         /* Only must be defined when default governor is known to have latency
1545            restrictions, like e.g. conservative or ondemand.
1546            That this is the case is already ensured in Kconfig
1547         */
1548 #ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
1549         struct cpufreq_governor *gov = &cpufreq_gov_performance;
1550 #else
1551         struct cpufreq_governor *gov = NULL;
1552 #endif
1553
1554         if (policy->governor->max_transition_latency &&
1555             policy->cpuinfo.transition_latency >
1556             policy->governor->max_transition_latency) {
1557                 if (!gov)
1558                         return -EINVAL;
1559                 else {
1560                         printk(KERN_WARNING "%s governor failed, too long"
1561                                " transition latency of HW, fallback"
1562                                " to %s governor\n",
1563                                policy->governor->name,
1564                                gov->name);
1565                         policy->governor = gov;
1566                 }
1567         }
1568
1569         if (!try_module_get(policy->governor->owner))
1570                 return -EINVAL;
1571
1572         dprintk("__cpufreq_governor for CPU %u, event %u\n",
1573                                                 policy->cpu, event);
1574         ret = policy->governor->governor(policy, event);
1575
1576         /* we keep one module reference alive for
1577                         each CPU governed by this CPU */
1578         if ((event != CPUFREQ_GOV_START) || ret)
1579                 module_put(policy->governor->owner);
1580         if ((event == CPUFREQ_GOV_STOP) && !ret)
1581                 module_put(policy->governor->owner);
1582
1583         return ret;
1584 }
1585
1586
1587 int cpufreq_register_governor(struct cpufreq_governor *governor)
1588 {
1589         int err;
1590
1591         if (!governor)
1592                 return -EINVAL;
1593
1594         mutex_lock(&cpufreq_governor_mutex);
1595
1596         err = -EBUSY;
1597         if (__find_governor(governor->name) == NULL) {
1598                 err = 0;
1599                 list_add(&governor->governor_list, &cpufreq_governor_list);
1600         }
1601
1602         mutex_unlock(&cpufreq_governor_mutex);
1603         return err;
1604 }
1605 EXPORT_SYMBOL_GPL(cpufreq_register_governor);
1606
1607
1608 void cpufreq_unregister_governor(struct cpufreq_governor *governor)
1609 {
1610         if (!governor)
1611                 return;
1612
1613         mutex_lock(&cpufreq_governor_mutex);
1614         list_del(&governor->governor_list);
1615         mutex_unlock(&cpufreq_governor_mutex);
1616         return;
1617 }
1618 EXPORT_SYMBOL_GPL(cpufreq_unregister_governor);
1619
1620
1621
1622 /*********************************************************************
1623  *                          POLICY INTERFACE                         *
1624  *********************************************************************/
1625
1626 /**
1627  * cpufreq_get_policy - get the current cpufreq_policy
1628  * @policy: struct cpufreq_policy into which the current cpufreq_policy is written
1629  *
1630  * Reads the current cpufreq policy.
1631  */
1632 int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu)
1633 {
1634         struct cpufreq_policy *cpu_policy;
1635         if (!policy)
1636                 return -EINVAL;
1637
1638         cpu_policy = cpufreq_cpu_get(cpu);
1639         if (!cpu_policy)
1640                 return -EINVAL;
1641
1642         memcpy(policy, cpu_policy, sizeof(struct cpufreq_policy));
1643
1644         cpufreq_cpu_put(cpu_policy);
1645         return 0;
1646 }
1647 EXPORT_SYMBOL(cpufreq_get_policy);
1648
1649
1650 /*
1651  * data   : current policy.
1652  * policy : policy to be set.
1653  */
1654 static int __cpufreq_set_policy(struct cpufreq_policy *data,
1655                                 struct cpufreq_policy *policy)
1656 {
1657         int ret = 0;
1658
1659         cpufreq_debug_disable_ratelimit();
1660         dprintk("setting new policy for CPU %u: %u - %u kHz\n", policy->cpu,
1661                 policy->min, policy->max);
1662
1663         memcpy(&policy->cpuinfo, &data->cpuinfo,
1664                                 sizeof(struct cpufreq_cpuinfo));
1665
1666         if (policy->min > data->max || policy->max < data->min) {
1667                 ret = -EINVAL;
1668                 goto error_out;
1669         }
1670
1671         /* verify the cpu speed can be set within this limit */
1672         ret = cpufreq_driver->verify(policy);
1673         if (ret)
1674                 goto error_out;
1675
1676         /* adjust if necessary - all reasons */
1677         blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1678                         CPUFREQ_ADJUST, policy);
1679
1680         /* adjust if necessary - hardware incompatibility*/
1681         blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1682                         CPUFREQ_INCOMPATIBLE, policy);
1683
1684         /* verify the cpu speed can be set within this limit,
1685            which might be different to the first one */
1686         ret = cpufreq_driver->verify(policy);
1687         if (ret)
1688                 goto error_out;
1689
1690         /* notification of the new policy */
1691         blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1692                         CPUFREQ_NOTIFY, policy);
1693
1694         data->min = policy->min;
1695         data->max = policy->max;
1696
1697         dprintk("new min and max freqs are %u - %u kHz\n",
1698                                         data->min, data->max);
1699
1700         if (cpufreq_driver->setpolicy) {
1701                 data->policy = policy->policy;
1702                 dprintk("setting range\n");
1703                 ret = cpufreq_driver->setpolicy(policy);
1704         } else {
1705                 if (policy->governor != data->governor) {
1706                         /* save old, working values */
1707                         struct cpufreq_governor *old_gov = data->governor;
1708
1709                         dprintk("governor switch\n");
1710
1711                         /* end old governor */
1712                         if (data->governor)
1713                                 __cpufreq_governor(data, CPUFREQ_GOV_STOP);
1714
1715                         /* start new governor */
1716                         data->governor = policy->governor;
1717                         if (__cpufreq_governor(data, CPUFREQ_GOV_START)) {
1718                                 /* new governor failed, so re-start old one */
1719                                 dprintk("starting governor %s failed\n",
1720                                                         data->governor->name);
1721                                 if (old_gov) {
1722                                         data->governor = old_gov;
1723                                         __cpufreq_governor(data,
1724                                                            CPUFREQ_GOV_START);
1725                                 }
1726                                 ret = -EINVAL;
1727                                 goto error_out;
1728                         }
1729                         /* might be a policy change, too, so fall through */
1730                 }
1731                 dprintk("governor: change or update limits\n");
1732                 __cpufreq_governor(data, CPUFREQ_GOV_LIMITS);
1733         }
1734
1735 error_out:
1736         cpufreq_debug_enable_ratelimit();
1737         return ret;
1738 }
1739
1740 /**
1741  *      cpufreq_update_policy - re-evaluate an existing cpufreq policy
1742  *      @cpu: CPU which shall be re-evaluated
1743  *
1744  *      Usefull for policy notifiers which have different necessities
1745  *      at different times.
1746  */
1747 int cpufreq_update_policy(unsigned int cpu)
1748 {
1749         struct cpufreq_policy *data = cpufreq_cpu_get(cpu);
1750         struct cpufreq_policy policy;
1751         int ret;
1752
1753         if (!data) {
1754                 ret = -ENODEV;
1755                 goto no_policy;
1756         }
1757
1758         if (unlikely(lock_policy_rwsem_write(cpu))) {
1759                 ret = -EINVAL;
1760                 goto fail;
1761         }
1762
1763         dprintk("updating policy for CPU %u\n", cpu);
1764         memcpy(&policy, data, sizeof(struct cpufreq_policy));
1765         policy.min = data->user_policy.min;
1766         policy.max = data->user_policy.max;
1767         policy.policy = data->user_policy.policy;
1768         policy.governor = data->user_policy.governor;
1769
1770         /* BIOS might change freq behind our back
1771           -> ask driver for current freq and notify governors about a change */
1772         if (cpufreq_driver->get) {
1773                 policy.cur = cpufreq_driver->get(cpu);
1774                 if (!data->cur) {
1775                         dprintk("Driver did not initialize current freq");
1776                         data->cur = policy.cur;
1777                 } else {
1778                         if (data->cur != policy.cur)
1779                                 cpufreq_out_of_sync(cpu, data->cur,
1780                                                                 policy.cur);
1781                 }
1782         }
1783
1784         ret = __cpufreq_set_policy(data, &policy);
1785
1786         unlock_policy_rwsem_write(cpu);
1787
1788 fail:
1789         cpufreq_cpu_put(data);
1790 no_policy:
1791         return ret;
1792 }
1793 EXPORT_SYMBOL(cpufreq_update_policy);
1794
1795 static int __cpuinit cpufreq_cpu_callback(struct notifier_block *nfb,
1796                                         unsigned long action, void *hcpu)
1797 {
1798         unsigned int cpu = (unsigned long)hcpu;
1799         struct sys_device *sys_dev;
1800
1801         sys_dev = get_cpu_sysdev(cpu);
1802         if (sys_dev) {
1803                 switch (action) {
1804                 case CPU_ONLINE:
1805                 case CPU_ONLINE_FROZEN:
1806                         cpufreq_add_dev(sys_dev);
1807                         break;
1808                 case CPU_DOWN_PREPARE:
1809                 case CPU_DOWN_PREPARE_FROZEN:
1810                         if (unlikely(lock_policy_rwsem_write(cpu)))
1811                                 BUG();
1812
1813                         __cpufreq_remove_dev(sys_dev);
1814                         break;
1815                 case CPU_DOWN_FAILED:
1816                 case CPU_DOWN_FAILED_FROZEN:
1817                         cpufreq_add_dev(sys_dev);
1818                         break;
1819                 }
1820         }
1821         return NOTIFY_OK;
1822 }
1823
1824 static struct notifier_block __refdata cpufreq_cpu_notifier =
1825 {
1826     .notifier_call = cpufreq_cpu_callback,
1827 };
1828
1829 /*********************************************************************
1830  *               REGISTER / UNREGISTER CPUFREQ DRIVER                *
1831  *********************************************************************/
1832
1833 /**
1834  * cpufreq_register_driver - register a CPU Frequency driver
1835  * @driver_data: A struct cpufreq_driver containing the values#
1836  * submitted by the CPU Frequency driver.
1837  *
1838  *   Registers a CPU Frequency driver to this core code. This code
1839  * returns zero on success, -EBUSY when another driver got here first
1840  * (and isn't unregistered in the meantime).
1841  *
1842  */
1843 int cpufreq_register_driver(struct cpufreq_driver *driver_data)
1844 {
1845         unsigned long flags;
1846         int ret;
1847
1848         if (!driver_data || !driver_data->verify || !driver_data->init ||
1849             ((!driver_data->setpolicy) && (!driver_data->target)))
1850                 return -EINVAL;
1851
1852         dprintk("trying to register driver %s\n", driver_data->name);
1853
1854         if (driver_data->setpolicy)
1855                 driver_data->flags |= CPUFREQ_CONST_LOOPS;
1856
1857         spin_lock_irqsave(&cpufreq_driver_lock, flags);
1858         if (cpufreq_driver) {
1859                 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1860                 return -EBUSY;
1861         }
1862         cpufreq_driver = driver_data;
1863         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1864
1865         ret = sysdev_driver_register(&cpu_sysdev_class,
1866                                         &cpufreq_sysdev_driver);
1867
1868         if ((!ret) && !(cpufreq_driver->flags & CPUFREQ_STICKY)) {
1869                 int i;
1870                 ret = -ENODEV;
1871
1872                 /* check for at least one working CPU */
1873                 for (i = 0; i < nr_cpu_ids; i++)
1874                         if (cpu_possible(i) && per_cpu(cpufreq_cpu_data, i)) {
1875                                 ret = 0;
1876                                 break;
1877                         }
1878
1879                 /* if all ->init() calls failed, unregister */
1880                 if (ret) {
1881                         dprintk("no CPU initialized for driver %s\n",
1882                                                         driver_data->name);
1883                         sysdev_driver_unregister(&cpu_sysdev_class,
1884                                                 &cpufreq_sysdev_driver);
1885
1886                         spin_lock_irqsave(&cpufreq_driver_lock, flags);
1887                         cpufreq_driver = NULL;
1888                         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1889                 }
1890         }
1891
1892         if (!ret) {
1893                 register_hotcpu_notifier(&cpufreq_cpu_notifier);
1894                 dprintk("driver %s up and running\n", driver_data->name);
1895                 cpufreq_debug_enable_ratelimit();
1896         }
1897
1898         return ret;
1899 }
1900 EXPORT_SYMBOL_GPL(cpufreq_register_driver);
1901
1902
1903 /**
1904  * cpufreq_unregister_driver - unregister the current CPUFreq driver
1905  *
1906  *    Unregister the current CPUFreq driver. Only call this if you have
1907  * the right to do so, i.e. if you have succeeded in initialising before!
1908  * Returns zero if successful, and -EINVAL if the cpufreq_driver is
1909  * currently not initialised.
1910  */
1911 int cpufreq_unregister_driver(struct cpufreq_driver *driver)
1912 {
1913         unsigned long flags;
1914
1915         cpufreq_debug_disable_ratelimit();
1916
1917         if (!cpufreq_driver || (driver != cpufreq_driver)) {
1918                 cpufreq_debug_enable_ratelimit();
1919                 return -EINVAL;
1920         }
1921
1922         dprintk("unregistering driver %s\n", driver->name);
1923
1924         sysdev_driver_unregister(&cpu_sysdev_class, &cpufreq_sysdev_driver);
1925         unregister_hotcpu_notifier(&cpufreq_cpu_notifier);
1926
1927         spin_lock_irqsave(&cpufreq_driver_lock, flags);
1928         cpufreq_driver = NULL;
1929         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1930
1931         return 0;
1932 }
1933 EXPORT_SYMBOL_GPL(cpufreq_unregister_driver);
1934
1935 static int __init cpufreq_core_init(void)
1936 {
1937         int cpu;
1938
1939         for_each_possible_cpu(cpu) {
1940                 per_cpu(policy_cpu, cpu) = -1;
1941                 init_rwsem(&per_cpu(cpu_policy_rwsem, cpu));
1942         }
1943         return 0;
1944 }
1945
1946 core_initcall(cpufreq_core_init);