2  *  linux/drivers/cpufreq/cpufreq.c
 
   4  *  Copyright (C) 2001 Russell King
 
   5  *            (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
 
   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
 
  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.
 
  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>
 
  32 #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_CORE, \
 
  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.
 
  40 static struct cpufreq_driver *cpufreq_driver;
 
  41 static struct cpufreq_policy *cpufreq_cpu_data[NR_CPUS];
 
  42 #ifdef CONFIG_HOTPLUG_CPU
 
  43 /* This one keeps track of the previously set governor of a removed CPU */
 
  44 static struct cpufreq_governor *cpufreq_cpu_governor[NR_CPUS];
 
  46 static DEFINE_SPINLOCK(cpufreq_driver_lock);
 
  49  * cpu_policy_rwsem is a per CPU reader-writer semaphore designed to cure
 
  50  * all cpufreq/hotplug/workqueue/etc related lock issues.
 
  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.
 
  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.
 
  65 static DEFINE_PER_CPU(int, policy_cpu);
 
  66 static DEFINE_PER_CPU(struct rw_semaphore, cpu_policy_rwsem);
 
  68 #define lock_policy_rwsem(mode, cpu)                                    \
 
  69 int lock_policy_rwsem_##mode                                            \
 
  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));      \
 
  83 lock_policy_rwsem(read, cpu);
 
  84 EXPORT_SYMBOL_GPL(lock_policy_rwsem_read);
 
  86 lock_policy_rwsem(write, cpu);
 
  87 EXPORT_SYMBOL_GPL(lock_policy_rwsem_write);
 
  89 void unlock_policy_rwsem_read(int cpu)
 
  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));
 
  95 EXPORT_SYMBOL_GPL(unlock_policy_rwsem_read);
 
  97 void unlock_policy_rwsem_write(int cpu)
 
  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));
 
 103 EXPORT_SYMBOL_GPL(unlock_policy_rwsem_write);
 
 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);
 
 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.
 
 118 static BLOCKING_NOTIFIER_HEAD(cpufreq_policy_notifier_list);
 
 119 static struct srcu_notifier_head cpufreq_transition_notifier_list;
 
 121 static bool init_cpufreq_transition_notifier_list_called;
 
 122 static int __init init_cpufreq_transition_notifier_list(void)
 
 124         srcu_init_notifier_head(&cpufreq_transition_notifier_list);
 
 125         init_cpufreq_transition_notifier_list_called = true;
 
 128 pure_initcall(init_cpufreq_transition_notifier_list);
 
 130 static LIST_HEAD(cpufreq_governor_list);
 
 131 static DEFINE_MUTEX (cpufreq_governor_mutex);
 
 133 struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
 
 135         struct cpufreq_policy *data;
 
 141         /* get the cpufreq driver */
 
 142         spin_lock_irqsave(&cpufreq_driver_lock, flags);
 
 147         if (!try_module_get(cpufreq_driver->owner))
 
 152         data = cpufreq_cpu_data[cpu];
 
 155                 goto err_out_put_module;
 
 157         if (!kobject_get(&data->kobj))
 
 158                 goto err_out_put_module;
 
 160         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
 164         module_put(cpufreq_driver->owner);
 
 166         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
 170 EXPORT_SYMBOL_GPL(cpufreq_cpu_get);
 
 173 void cpufreq_cpu_put(struct cpufreq_policy *data)
 
 175         kobject_put(&data->kobj);
 
 176         module_put(cpufreq_driver->owner);
 
 178 EXPORT_SYMBOL_GPL(cpufreq_cpu_put);
 
 181 /*********************************************************************
 
 182  *                     UNIFIED DEBUG HELPERS                         *
 
 183  *********************************************************************/
 
 184 #ifdef CONFIG_CPU_FREQ_DEBUG
 
 186 /* what part(s) of the CPUfreq subsystem are debugged? */
 
 187 static unsigned int debug;
 
 189 /* is the debug output ratelimit'ed using printk_ratelimit? User can
 
 190  * set or modify this value.
 
 192 static unsigned int debug_ratelimit = 1;
 
 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
 
 198 static unsigned int disable_ratelimit = 1;
 
 199 static DEFINE_SPINLOCK(disable_ratelimit_lock);
 
 201 static void cpufreq_debug_enable_ratelimit(void)
 
 205         spin_lock_irqsave(&disable_ratelimit_lock, flags);
 
 206         if (disable_ratelimit)
 
 208         spin_unlock_irqrestore(&disable_ratelimit_lock, flags);
 
 211 static void cpufreq_debug_disable_ratelimit(void)
 
 215         spin_lock_irqsave(&disable_ratelimit_lock, flags);
 
 217         spin_unlock_irqrestore(&disable_ratelimit_lock, flags);
 
 220 void cpufreq_debug_printk(unsigned int type, const char *prefix,
 
 221                         const char *fmt, ...)
 
 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);
 
 236                 spin_unlock_irqrestore(&disable_ratelimit_lock, flags);
 
 238                 len = snprintf(s, 256, KERN_DEBUG "%s: ", prefix);
 
 241                 len += vsnprintf(&s[len], (256 - len), fmt, args);
 
 249 EXPORT_SYMBOL(cpufreq_debug_printk);
 
 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.");
 
 256 module_param(debug_ratelimit, uint, 0644);
 
 257 MODULE_PARM_DESC(debug_ratelimit, "CPUfreq debugging:"
 
 258                                         " set to 0 to disable ratelimiting.");
 
 260 #else /* !CONFIG_CPU_FREQ_DEBUG */
 
 262 static inline void cpufreq_debug_enable_ratelimit(void) { return; }
 
 263 static inline void cpufreq_debug_disable_ratelimit(void) { return; }
 
 265 #endif /* CONFIG_CPU_FREQ_DEBUG */
 
 268 /*********************************************************************
 
 269  *            EXTERNALLY AFFECTING FREQUENCY CHANGES                 *
 
 270  *********************************************************************/
 
 273  * adjust_jiffies - adjust the system "loops_per_jiffy"
 
 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.
 
 281 static unsigned long l_p_j_ref;
 
 282 static unsigned int  l_p_j_ref_freq;
 
 284 static void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
 
 286         if (ci->flags & CPUFREQ_CONST_LOOPS)
 
 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);
 
 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,
 
 300                 dprintk("scaling loops_per_jiffy to %lu "
 
 301                         "for frequency %u kHz\n", loops_per_jiffy, ci->new);
 
 305 static inline void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
 
 313  * cpufreq_notify_transition - call notifier chain and adjust_jiffies
 
 314  * on frequency transition.
 
 316  * This function calls the transition notifiers and the "adjust_jiffies"
 
 317  * function. It is called twice on all CPU frequency changes that have
 
 320 void cpufreq_notify_transition(struct cpufreq_freqs *freqs, unsigned int state)
 
 322         struct cpufreq_policy *policy;
 
 324         BUG_ON(irqs_disabled());
 
 326         freqs->flags = cpufreq_driver->flags;
 
 327         dprintk("notification %u of frequency transition to %u kHz\n",
 
 330         policy = cpufreq_cpu_data[freqs->cpu];
 
 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
 
 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;
 
 347                 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
 
 348                                 CPUFREQ_PRECHANGE, freqs);
 
 349                 adjust_jiffies(CPUFREQ_PRECHANGE, freqs);
 
 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;
 
 361 EXPORT_SYMBOL_GPL(cpufreq_notify_transition);
 
 365 /*********************************************************************
 
 367  *********************************************************************/
 
 369 static struct cpufreq_governor *__find_governor(const char *str_governor)
 
 371         struct cpufreq_governor *t;
 
 373         list_for_each_entry(t, &cpufreq_governor_list, governor_list)
 
 374                 if (!strnicmp(str_governor,t->name,CPUFREQ_NAME_LEN))
 
 381  * cpufreq_parse_governor - parse a governor string
 
 383 static int cpufreq_parse_governor(char *str_governor, unsigned int *policy,
 
 384                                 struct cpufreq_governor **governor)
 
 391         if (cpufreq_driver->setpolicy) {
 
 392                 if (!strnicmp(str_governor, "performance", CPUFREQ_NAME_LEN)) {
 
 393                         *policy = CPUFREQ_POLICY_PERFORMANCE;
 
 395                 } else if (!strnicmp(str_governor, "powersave",
 
 397                         *policy = CPUFREQ_POLICY_POWERSAVE;
 
 400         } else if (cpufreq_driver->target) {
 
 401                 struct cpufreq_governor *t;
 
 403                 mutex_lock(&cpufreq_governor_mutex);
 
 405                 t = __find_governor(str_governor);
 
 408                         char *name = kasprintf(GFP_KERNEL, "cpufreq_%s",
 
 414                                 mutex_unlock(&cpufreq_governor_mutex);
 
 415                                 ret = request_module(name);
 
 416                                 mutex_lock(&cpufreq_governor_mutex);
 
 419                                         t = __find_governor(str_governor);
 
 430                 mutex_unlock(&cpufreq_governor_mutex);
 
 437 /* drivers/base/cpu.c */
 
 438 extern struct sysdev_class cpu_sysdev_class;
 
 442  * cpufreq_per_cpu_attr_read() / show_##file_name() -
 
 443  * print out cpufreq information
 
 445  * Write out information from cpufreq_driver->policy[cpu]; object must be
 
 449 #define show_one(file_name, object)                     \
 
 450 static ssize_t show_##file_name                         \
 
 451 (struct cpufreq_policy *policy, char *buf)              \
 
 453         return sprintf (buf, "%u\n", policy->object);   \
 
 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);
 
 462 static int __cpufreq_set_policy(struct cpufreq_policy *data,
 
 463                                 struct cpufreq_policy *policy);
 
 466  * cpufreq_per_cpu_attr_write() / store_##file_name() - sysfs write access
 
 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)          \
 
 472         unsigned int ret = -EINVAL;                                     \
 
 473         struct cpufreq_policy new_policy;                               \
 
 475         ret = cpufreq_get_policy(&new_policy, policy->cpu);             \
 
 479         ret = sscanf (buf, "%u", &new_policy.object);                   \
 
 483         ret = __cpufreq_set_policy(policy, &new_policy);                \
 
 484         policy->user_policy.object = policy->object;                    \
 
 486         return ret ? ret : count;                                       \
 
 489 store_one(scaling_min_freq,min);
 
 490 store_one(scaling_max_freq,max);
 
 493  * show_cpuinfo_cur_freq - current CPU frequency as detected by hardware
 
 495 static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy,
 
 498         unsigned int cur_freq = __cpufreq_get(policy->cpu);
 
 500                 return sprintf(buf, "<unknown>");
 
 501         return sprintf(buf, "%u\n", cur_freq);
 
 506  * show_scaling_governor - show the current policy for the specified CPU
 
 508 static ssize_t show_scaling_governor(struct cpufreq_policy *policy, char *buf)
 
 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);
 
 521  * store_scaling_governor - store policy for the specified CPU
 
 523 static ssize_t store_scaling_governor(struct cpufreq_policy *policy,
 
 524                                         const char *buf, size_t count)
 
 526         unsigned int ret = -EINVAL;
 
 527         char    str_governor[16];
 
 528         struct cpufreq_policy new_policy;
 
 530         ret = cpufreq_get_policy(&new_policy, policy->cpu);
 
 534         ret = sscanf (buf, "%15s", str_governor);
 
 538         if (cpufreq_parse_governor(str_governor, &new_policy.policy,
 
 539                                                 &new_policy.governor))
 
 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);
 
 546         policy->user_policy.policy = policy->policy;
 
 547         policy->user_policy.governor = policy->governor;
 
 556  * show_scaling_driver - show the cpufreq driver currently loaded
 
 558 static ssize_t show_scaling_driver(struct cpufreq_policy *policy, char *buf)
 
 560         return scnprintf(buf, CPUFREQ_NAME_LEN, "%s\n", cpufreq_driver->name);
 
 564  * show_scaling_available_governors - show the available CPUfreq governors
 
 566 static ssize_t show_scaling_available_governors(struct cpufreq_policy *policy,
 
 570         struct cpufreq_governor *t;
 
 572         if (!cpufreq_driver->target) {
 
 573                 i += sprintf(buf, "performance powersave");
 
 577         list_for_each_entry(t, &cpufreq_governor_list, governor_list) {
 
 578                 if (i >= (ssize_t) ((PAGE_SIZE / sizeof(char)) - (CPUFREQ_NAME_LEN + 2)))
 
 580                 i += scnprintf(&buf[i], CPUFREQ_NAME_LEN, "%s ", t->name);
 
 583         i += sprintf(&buf[i], "\n");
 
 587 static ssize_t show_cpus(cpumask_t mask, char *buf)
 
 592         for_each_cpu_mask(cpu, mask) {
 
 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))
 
 599         i += sprintf(&buf[i], "\n");
 
 604  * show_related_cpus - show the CPUs affected by each transition even if
 
 605  * hw coordination is in use
 
 607 static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf)
 
 609         if (cpus_empty(policy->related_cpus))
 
 610                 return show_cpus(policy->cpus, buf);
 
 611         return show_cpus(policy->related_cpus, buf);
 
 615  * show_affected_cpus - show the CPUs affected by each transition
 
 617 static ssize_t show_affected_cpus(struct cpufreq_policy *policy, char *buf)
 
 619         return show_cpus(policy->cpus, buf);
 
 622 static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy,
 
 623                                         const char *buf, size_t count)
 
 625         unsigned int freq = 0;
 
 628         if (!policy->governor->store_setspeed)
 
 631         ret = sscanf(buf, "%u", &freq);
 
 635         policy->governor->store_setspeed(policy, freq);
 
 640 static ssize_t show_scaling_setspeed(struct cpufreq_policy *policy, char *buf)
 
 642         if (!policy->governor->show_setspeed)
 
 643                 return sprintf(buf, "<unsupported>\n");
 
 645         return policy->governor->show_setspeed(policy, buf);
 
 648 #define define_one_ro(_name) \
 
 649 static struct freq_attr _name = \
 
 650 __ATTR(_name, 0444, show_##_name, NULL)
 
 652 #define define_one_ro0400(_name) \
 
 653 static struct freq_attr _name = \
 
 654 __ATTR(_name, 0400, show_##_name, NULL)
 
 656 #define define_one_rw(_name) \
 
 657 static struct freq_attr _name = \
 
 658 __ATTR(_name, 0644, show_##_name, store_##_name)
 
 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);
 
 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,
 
 680         &scaling_governor.attr,
 
 681         &scaling_driver.attr,
 
 682         &scaling_available_governors.attr,
 
 683         &scaling_setspeed.attr,
 
 687 #define to_policy(k) container_of(k,struct cpufreq_policy,kobj)
 
 688 #define to_attr(a) container_of(a,struct freq_attr,attr)
 
 690 static ssize_t show(struct kobject *kobj, struct attribute *attr ,char *buf)
 
 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);
 
 699         if (lock_policy_rwsem_read(policy->cpu) < 0)
 
 703                 ret = fattr->show(policy, buf);
 
 707         unlock_policy_rwsem_read(policy->cpu);
 
 709         cpufreq_cpu_put(policy);
 
 714 static ssize_t store(struct kobject *kobj, struct attribute *attr,
 
 715                      const char *buf, size_t count)
 
 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);
 
 724         if (lock_policy_rwsem_write(policy->cpu) < 0)
 
 728                 ret = fattr->store(policy, buf, count);
 
 732         unlock_policy_rwsem_write(policy->cpu);
 
 734         cpufreq_cpu_put(policy);
 
 739 static void cpufreq_sysfs_release(struct kobject *kobj)
 
 741         struct cpufreq_policy *policy = to_policy(kobj);
 
 742         dprintk("last reference is dropped\n");
 
 743         complete(&policy->kobj_unregister);
 
 746 static struct sysfs_ops sysfs_ops = {
 
 751 static struct kobj_type ktype_cpufreq = {
 
 752         .sysfs_ops      = &sysfs_ops,
 
 753         .default_attrs  = default_attrs,
 
 754         .release        = cpufreq_sysfs_release,
 
 759  * cpufreq_add_dev - add a CPU device
 
 761  * Adds the cpufreq interface for a CPU device.
 
 763 static int cpufreq_add_dev(struct sys_device *sys_dev)
 
 765         unsigned int cpu = sys_dev->id;
 
 767         struct cpufreq_policy new_policy;
 
 768         struct cpufreq_policy *policy;
 
 769         struct freq_attr **drv_attr;
 
 770         struct sys_device *cpu_sys_dev;
 
 774         struct cpufreq_policy *managed_policy;
 
 777         if (cpu_is_offline(cpu))
 
 780         cpufreq_debug_disable_ratelimit();
 
 781         dprintk("adding CPU %u\n", cpu);
 
 784         /* check whether a different CPU already registered this
 
 785          * CPU because it is in the same boat. */
 
 786         policy = cpufreq_cpu_get(cpu);
 
 787         if (unlikely(policy)) {
 
 788                 cpufreq_cpu_put(policy);
 
 789                 cpufreq_debug_enable_ratelimit();
 
 794         if (!try_module_get(cpufreq_driver->owner)) {
 
 799         policy = kzalloc(sizeof(struct cpufreq_policy), GFP_KERNEL);
 
 806         policy->cpus = cpumask_of_cpu(cpu);
 
 808         /* Initially set CPU itself as the policy_cpu */
 
 809         per_cpu(policy_cpu, cpu) = cpu;
 
 810         lock_policy_rwsem_write(cpu);
 
 812         init_completion(&policy->kobj_unregister);
 
 813         INIT_WORK(&policy->update, handle_update);
 
 815         /* Set governor before ->init, so that driver could check it */
 
 816         policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
 
 817         /* call driver. From then on the cpufreq must be able
 
 818          * to accept all calls to ->verify and ->setpolicy for this CPU
 
 820         ret = cpufreq_driver->init(policy);
 
 822                 dprintk("initialization failed\n");
 
 825         policy->user_policy.min = policy->cpuinfo.min_freq;
 
 826         policy->user_policy.max = policy->cpuinfo.max_freq;
 
 830 #ifdef CONFIG_HOTPLUG_CPU
 
 831         if (cpufreq_cpu_governor[cpu]){
 
 832                 policy->governor = cpufreq_cpu_governor[cpu];
 
 833                 dprintk("Restoring governor %s for cpu %d\n",
 
 834                        policy->governor->name, cpu);
 
 838         for_each_cpu_mask(j, policy->cpus) {
 
 842                 /* check for existing affected CPUs.  They may not be aware
 
 843                  * of it due to CPU Hotplug.
 
 845                 managed_policy = cpufreq_cpu_get(j);            // FIXME: Where is this released?  What about error paths?
 
 846                 if (unlikely(managed_policy)) {
 
 848                         /* Set proper policy_cpu */
 
 849                         unlock_policy_rwsem_write(cpu);
 
 850                         per_cpu(policy_cpu, cpu) = managed_policy->cpu;
 
 852                         if (lock_policy_rwsem_write(cpu) < 0)
 
 853                                 goto err_out_driver_exit;
 
 855                         spin_lock_irqsave(&cpufreq_driver_lock, flags);
 
 856                         managed_policy->cpus = policy->cpus;
 
 857                         cpufreq_cpu_data[cpu] = managed_policy;
 
 858                         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
 860                         dprintk("CPU already managed, adding link\n");
 
 861                         ret = sysfs_create_link(&sys_dev->kobj,
 
 862                                                 &managed_policy->kobj,
 
 865                                 goto err_out_driver_exit;
 
 867                         cpufreq_debug_enable_ratelimit();
 
 869                         goto err_out_driver_exit; /* call driver->exit() */
 
 873         memcpy(&new_policy, policy, sizeof(struct cpufreq_policy));
 
 875         /* prepare interface data */
 
 876         ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq, &sys_dev->kobj,
 
 879                 goto err_out_driver_exit;
 
 881         /* set up files for this cpu device */
 
 882         drv_attr = cpufreq_driver->attr;
 
 883         while ((drv_attr) && (*drv_attr)) {
 
 884                 ret = sysfs_create_file(&policy->kobj, &((*drv_attr)->attr));
 
 886                         goto err_out_driver_exit;
 
 889         if (cpufreq_driver->get) {
 
 890                 ret = sysfs_create_file(&policy->kobj, &cpuinfo_cur_freq.attr);
 
 892                         goto err_out_driver_exit;
 
 894         if (cpufreq_driver->target) {
 
 895                 ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr);
 
 897                         goto err_out_driver_exit;
 
 900         spin_lock_irqsave(&cpufreq_driver_lock, flags);
 
 901         for_each_cpu_mask(j, policy->cpus) {
 
 902                 cpufreq_cpu_data[j] = policy;
 
 903                 per_cpu(policy_cpu, j) = policy->cpu;
 
 905         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
 907         /* symlink affected CPUs */
 
 908         for_each_cpu_mask(j, policy->cpus) {
 
 914                 dprintk("CPU %u already managed, adding link\n", j);
 
 915                 cpufreq_cpu_get(cpu);
 
 916                 cpu_sys_dev = get_cpu_sysdev(j);
 
 917                 ret = sysfs_create_link(&cpu_sys_dev->kobj, &policy->kobj,
 
 920                         goto err_out_unregister;
 
 923         policy->governor = NULL; /* to assure that the starting sequence is
 
 924                                   * run in cpufreq_set_policy */
 
 926         /* set default policy */
 
 927         ret = __cpufreq_set_policy(policy, &new_policy);
 
 928         policy->user_policy.policy = policy->policy;
 
 929         policy->user_policy.governor = policy->governor;
 
 931         unlock_policy_rwsem_write(cpu);
 
 934                 dprintk("setting policy failed\n");
 
 935                 goto err_out_unregister;
 
 938         kobject_uevent(&policy->kobj, KOBJ_ADD);
 
 939         module_put(cpufreq_driver->owner);
 
 940         dprintk("initialization complete\n");
 
 941         cpufreq_debug_enable_ratelimit();
 
 947         spin_lock_irqsave(&cpufreq_driver_lock, flags);
 
 948         for_each_cpu_mask(j, policy->cpus)
 
 949                 cpufreq_cpu_data[j] = NULL;
 
 950         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
 952         kobject_put(&policy->kobj);
 
 953         wait_for_completion(&policy->kobj_unregister);
 
 956         if (cpufreq_driver->exit)
 
 957                 cpufreq_driver->exit(policy);
 
 960         unlock_policy_rwsem_write(cpu);
 
 964         module_put(cpufreq_driver->owner);
 
 966         cpufreq_debug_enable_ratelimit();
 
 972  * __cpufreq_remove_dev - remove a CPU device
 
 974  * Removes the cpufreq interface for a CPU device.
 
 975  * Caller should already have policy_rwsem in write mode for this CPU.
 
 976  * This routine frees the rwsem before returning.
 
 978 static int __cpufreq_remove_dev(struct sys_device *sys_dev)
 
 980         unsigned int cpu = sys_dev->id;
 
 982         struct cpufreq_policy *data;
 
 984         struct sys_device *cpu_sys_dev;
 
 988         cpufreq_debug_disable_ratelimit();
 
 989         dprintk("unregistering CPU %u\n", cpu);
 
 991         spin_lock_irqsave(&cpufreq_driver_lock, flags);
 
 992         data = cpufreq_cpu_data[cpu];
 
 995                 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
 996                 cpufreq_debug_enable_ratelimit();
 
 997                 unlock_policy_rwsem_write(cpu);
 
1000         cpufreq_cpu_data[cpu] = NULL;
 
1004         /* if this isn't the CPU which is the parent of the kobj, we
 
1005          * only need to unlink, put and exit
 
1007         if (unlikely(cpu != data->cpu)) {
 
1008                 dprintk("removing link\n");
 
1009                 cpu_clear(cpu, data->cpus);
 
1010                 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
1011                 sysfs_remove_link(&sys_dev->kobj, "cpufreq");
 
1012                 cpufreq_cpu_put(data);
 
1013                 cpufreq_debug_enable_ratelimit();
 
1014                 unlock_policy_rwsem_write(cpu);
 
1021 #ifdef CONFIG_HOTPLUG_CPU
 
1022         cpufreq_cpu_governor[cpu] = data->governor;
 
1025         /* if we have other CPUs still registered, we need to unlink them,
 
1026          * or else wait_for_completion below will lock up. Clean the
 
1027          * cpufreq_cpu_data[] while holding the lock, and remove the sysfs
 
1030         if (unlikely(cpus_weight(data->cpus) > 1)) {
 
1031                 for_each_cpu_mask(j, data->cpus) {
 
1034                         cpufreq_cpu_data[j] = NULL;
 
1038         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
1040         if (unlikely(cpus_weight(data->cpus) > 1)) {
 
1041                 for_each_cpu_mask(j, data->cpus) {
 
1044                         dprintk("removing link for cpu %u\n", j);
 
1045 #ifdef CONFIG_HOTPLUG_CPU
 
1046                         cpufreq_cpu_governor[j] = data->governor;
 
1048                         cpu_sys_dev = get_cpu_sysdev(j);
 
1049                         sysfs_remove_link(&cpu_sys_dev->kobj, "cpufreq");
 
1050                         cpufreq_cpu_put(data);
 
1054         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
1057         if (cpufreq_driver->target)
 
1058                 __cpufreq_governor(data, CPUFREQ_GOV_STOP);
 
1060         unlock_policy_rwsem_write(cpu);
 
1062         kobject_put(&data->kobj);
 
1064         /* we need to make sure that the underlying kobj is actually
 
1065          * not referenced anymore by anybody before we proceed with
 
1068         dprintk("waiting for dropping of refcount\n");
 
1069         wait_for_completion(&data->kobj_unregister);
 
1070         dprintk("wait complete\n");
 
1072         if (cpufreq_driver->exit)
 
1073                 cpufreq_driver->exit(data);
 
1077         cpufreq_debug_enable_ratelimit();
 
1082 static int cpufreq_remove_dev(struct sys_device *sys_dev)
 
1084         unsigned int cpu = sys_dev->id;
 
1087         if (cpu_is_offline(cpu))
 
1090         if (unlikely(lock_policy_rwsem_write(cpu)))
 
1093         retval = __cpufreq_remove_dev(sys_dev);
 
1098 static void handle_update(struct work_struct *work)
 
1100         struct cpufreq_policy *policy =
 
1101                 container_of(work, struct cpufreq_policy, update);
 
1102         unsigned int cpu = policy->cpu;
 
1103         dprintk("handle_update for cpu %u called\n", cpu);
 
1104         cpufreq_update_policy(cpu);
 
1108  *      cpufreq_out_of_sync - If actual and saved CPU frequency differs, we're in deep trouble.
 
1110  *      @old_freq: CPU frequency the kernel thinks the CPU runs at
 
1111  *      @new_freq: CPU frequency the CPU actually runs at
 
1113  *      We adjust to current frequency first, and need to clean up later. So either call
 
1114  *      to cpufreq_update_policy() or schedule handle_update()).
 
1116 static void cpufreq_out_of_sync(unsigned int cpu, unsigned int old_freq,
 
1117                                 unsigned int new_freq)
 
1119         struct cpufreq_freqs freqs;
 
1121         dprintk("Warning: CPU frequency out of sync: cpufreq and timing "
 
1122                "core thinks of %u, is %u kHz.\n", old_freq, new_freq);
 
1125         freqs.old = old_freq;
 
1126         freqs.new = new_freq;
 
1127         cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
 
1128         cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
 
1133  * cpufreq_quick_get - get the CPU frequency (in kHz) from policy->cur
 
1136  * This is the last known freq, without actually getting it from the driver.
 
1137  * Return value will be same as what is shown in scaling_cur_freq in sysfs.
 
1139 unsigned int cpufreq_quick_get(unsigned int cpu)
 
1141         struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
 
1142         unsigned int ret_freq = 0;
 
1145                 ret_freq = policy->cur;
 
1146                 cpufreq_cpu_put(policy);
 
1151 EXPORT_SYMBOL(cpufreq_quick_get);
 
1154 static unsigned int __cpufreq_get(unsigned int cpu)
 
1156         struct cpufreq_policy *policy = cpufreq_cpu_data[cpu];
 
1157         unsigned int ret_freq = 0;
 
1159         if (!cpufreq_driver->get)
 
1162         ret_freq = cpufreq_driver->get(cpu);
 
1164         if (ret_freq && policy->cur &&
 
1165                 !(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
 
1166                 /* verify no discrepancy between actual and
 
1167                                         saved value exists */
 
1168                 if (unlikely(ret_freq != policy->cur)) {
 
1169                         cpufreq_out_of_sync(cpu, policy->cur, ret_freq);
 
1170                         schedule_work(&policy->update);
 
1178  * cpufreq_get - get the current CPU frequency (in kHz)
 
1181  * Get the CPU current (static) CPU frequency
 
1183 unsigned int cpufreq_get(unsigned int cpu)
 
1185         unsigned int ret_freq = 0;
 
1186         struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
 
1191         if (unlikely(lock_policy_rwsem_read(cpu)))
 
1194         ret_freq = __cpufreq_get(cpu);
 
1196         unlock_policy_rwsem_read(cpu);
 
1199         cpufreq_cpu_put(policy);
 
1203 EXPORT_SYMBOL(cpufreq_get);
 
1207  *      cpufreq_suspend - let the low level driver prepare for suspend
 
1210 static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)
 
1212         int cpu = sysdev->id;
 
1214         unsigned int cur_freq = 0;
 
1215         struct cpufreq_policy *cpu_policy;
 
1217         dprintk("suspending cpu %u\n", cpu);
 
1219         if (!cpu_online(cpu))
 
1222         /* we may be lax here as interrupts are off. Nonetheless
 
1223          * we need to grab the correct cpu policy, as to check
 
1224          * whether we really run on this CPU.
 
1227         cpu_policy = cpufreq_cpu_get(cpu);
 
1231         /* only handle each CPU group once */
 
1232         if (unlikely(cpu_policy->cpu != cpu))
 
1235         if (cpufreq_driver->suspend) {
 
1236                 ret = cpufreq_driver->suspend(cpu_policy, pmsg);
 
1238                         printk(KERN_ERR "cpufreq: suspend failed in ->suspend "
 
1239                                         "step on CPU %u\n", cpu_policy->cpu);
 
1244         if (cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)
 
1247         if (cpufreq_driver->get)
 
1248                 cur_freq = cpufreq_driver->get(cpu_policy->cpu);
 
1250         if (!cur_freq || !cpu_policy->cur) {
 
1251                 printk(KERN_ERR "cpufreq: suspend failed to assert current "
 
1252                        "frequency is what timing core thinks it is.\n");
 
1256         if (unlikely(cur_freq != cpu_policy->cur)) {
 
1257                 struct cpufreq_freqs freqs;
 
1259                 if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN))
 
1260                         dprintk("Warning: CPU frequency is %u, "
 
1261                                "cpufreq assumed %u kHz.\n",
 
1262                                cur_freq, cpu_policy->cur);
 
1265                 freqs.old = cpu_policy->cur;
 
1266                 freqs.new = cur_freq;
 
1268                 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
 
1269                                     CPUFREQ_SUSPENDCHANGE, &freqs);
 
1270                 adjust_jiffies(CPUFREQ_SUSPENDCHANGE, &freqs);
 
1272                 cpu_policy->cur = cur_freq;
 
1276         cpufreq_cpu_put(cpu_policy);
 
1281  *      cpufreq_resume -  restore proper CPU frequency handling after resume
 
1283  *      1.) resume CPUfreq hardware support (cpufreq_driver->resume())
 
1284  *      2.) if ->target and !CPUFREQ_CONST_LOOPS: verify we're in sync
 
1285  *      3.) schedule call cpufreq_update_policy() ASAP as interrupts are
 
1288 static int cpufreq_resume(struct sys_device *sysdev)
 
1290         int cpu = sysdev->id;
 
1292         struct cpufreq_policy *cpu_policy;
 
1294         dprintk("resuming cpu %u\n", cpu);
 
1296         if (!cpu_online(cpu))
 
1299         /* we may be lax here as interrupts are off. Nonetheless
 
1300          * we need to grab the correct cpu policy, as to check
 
1301          * whether we really run on this CPU.
 
1304         cpu_policy = cpufreq_cpu_get(cpu);
 
1308         /* only handle each CPU group once */
 
1309         if (unlikely(cpu_policy->cpu != cpu))
 
1312         if (cpufreq_driver->resume) {
 
1313                 ret = cpufreq_driver->resume(cpu_policy);
 
1315                         printk(KERN_ERR "cpufreq: resume failed in ->resume "
 
1316                                         "step on CPU %u\n", cpu_policy->cpu);
 
1321         if (!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
 
1322                 unsigned int cur_freq = 0;
 
1324                 if (cpufreq_driver->get)
 
1325                         cur_freq = cpufreq_driver->get(cpu_policy->cpu);
 
1327                 if (!cur_freq || !cpu_policy->cur) {
 
1328                         printk(KERN_ERR "cpufreq: resume failed to assert "
 
1329                                         "current frequency is what timing core "
 
1334                 if (unlikely(cur_freq != cpu_policy->cur)) {
 
1335                         struct cpufreq_freqs freqs;
 
1337                         if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN))
 
1338                                 dprintk("Warning: CPU frequency "
 
1339                                        "is %u, cpufreq assumed %u kHz.\n",
 
1340                                        cur_freq, cpu_policy->cur);
 
1343                         freqs.old = cpu_policy->cur;
 
1344                         freqs.new = cur_freq;
 
1346                         srcu_notifier_call_chain(
 
1347                                         &cpufreq_transition_notifier_list,
 
1348                                         CPUFREQ_RESUMECHANGE, &freqs);
 
1349                         adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs);
 
1351                         cpu_policy->cur = cur_freq;
 
1356         schedule_work(&cpu_policy->update);
 
1358         cpufreq_cpu_put(cpu_policy);
 
1362 static struct sysdev_driver cpufreq_sysdev_driver = {
 
1363         .add            = cpufreq_add_dev,
 
1364         .remove         = cpufreq_remove_dev,
 
1365         .suspend        = cpufreq_suspend,
 
1366         .resume         = cpufreq_resume,
 
1370 /*********************************************************************
 
1371  *                     NOTIFIER LISTS INTERFACE                      *
 
1372  *********************************************************************/
 
1375  *      cpufreq_register_notifier - register a driver with cpufreq
 
1376  *      @nb: notifier function to register
 
1377  *      @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER
 
1379  *      Add a driver to one of two lists: either a list of drivers that
 
1380  *      are notified about clock rate changes (once before and once after
 
1381  *      the transition), or a list of drivers that are notified about
 
1382  *      changes in cpufreq policy.
 
1384  *      This function may sleep, and has the same return conditions as
 
1385  *      blocking_notifier_chain_register.
 
1387 int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list)
 
1391         WARN_ON(!init_cpufreq_transition_notifier_list_called);
 
1394         case CPUFREQ_TRANSITION_NOTIFIER:
 
1395                 ret = srcu_notifier_chain_register(
 
1396                                 &cpufreq_transition_notifier_list, nb);
 
1398         case CPUFREQ_POLICY_NOTIFIER:
 
1399                 ret = blocking_notifier_chain_register(
 
1400                                 &cpufreq_policy_notifier_list, nb);
 
1408 EXPORT_SYMBOL(cpufreq_register_notifier);
 
1412  *      cpufreq_unregister_notifier - unregister a driver with cpufreq
 
1413  *      @nb: notifier block to be unregistered
 
1414  *      @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER
 
1416  *      Remove a driver from the CPU frequency notifier list.
 
1418  *      This function may sleep, and has the same return conditions as
 
1419  *      blocking_notifier_chain_unregister.
 
1421 int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list)
 
1426         case CPUFREQ_TRANSITION_NOTIFIER:
 
1427                 ret = srcu_notifier_chain_unregister(
 
1428                                 &cpufreq_transition_notifier_list, nb);
 
1430         case CPUFREQ_POLICY_NOTIFIER:
 
1431                 ret = blocking_notifier_chain_unregister(
 
1432                                 &cpufreq_policy_notifier_list, nb);
 
1440 EXPORT_SYMBOL(cpufreq_unregister_notifier);
 
1443 /*********************************************************************
 
1445  *********************************************************************/
 
1448 int __cpufreq_driver_target(struct cpufreq_policy *policy,
 
1449                             unsigned int target_freq,
 
1450                             unsigned int relation)
 
1452         int retval = -EINVAL;
 
1454         dprintk("target for CPU %u: %u kHz, relation %u\n", policy->cpu,
 
1455                 target_freq, relation);
 
1456         if (cpu_online(policy->cpu) && cpufreq_driver->target)
 
1457                 retval = cpufreq_driver->target(policy, target_freq, relation);
 
1461 EXPORT_SYMBOL_GPL(__cpufreq_driver_target);
 
1463 int cpufreq_driver_target(struct cpufreq_policy *policy,
 
1464                           unsigned int target_freq,
 
1465                           unsigned int relation)
 
1469         policy = cpufreq_cpu_get(policy->cpu);
 
1473         if (unlikely(lock_policy_rwsem_write(policy->cpu)))
 
1476         ret = __cpufreq_driver_target(policy, target_freq, relation);
 
1478         unlock_policy_rwsem_write(policy->cpu);
 
1480         cpufreq_cpu_put(policy);
 
1483 EXPORT_SYMBOL_GPL(cpufreq_driver_target);
 
1485 int __cpufreq_driver_getavg(struct cpufreq_policy *policy)
 
1489         policy = cpufreq_cpu_get(policy->cpu);
 
1493         if (cpu_online(policy->cpu) && cpufreq_driver->getavg)
 
1494                 ret = cpufreq_driver->getavg(policy->cpu);
 
1496         cpufreq_cpu_put(policy);
 
1499 EXPORT_SYMBOL_GPL(__cpufreq_driver_getavg);
 
1502  * when "event" is CPUFREQ_GOV_LIMITS
 
1505 static int __cpufreq_governor(struct cpufreq_policy *policy,
 
1510         /* Only must be defined when default governor is known to have latency
 
1511            restrictions, like e.g. conservative or ondemand.
 
1512            That this is the case is already ensured in Kconfig
 
1514 #ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE
 
1515         struct cpufreq_governor *gov = &cpufreq_gov_performance;
 
1517         struct cpufreq_governor *gov = NULL;
 
1520         if (policy->governor->max_transition_latency &&
 
1521             policy->cpuinfo.transition_latency >
 
1522             policy->governor->max_transition_latency) {
 
1526                         printk(KERN_WARNING "%s governor failed, too long"
 
1527                                " transition latency of HW, fallback"
 
1528                                " to %s governor\n",
 
1529                                policy->governor->name,
 
1531                         policy->governor = gov;
 
1535         if (!try_module_get(policy->governor->owner))
 
1538         dprintk("__cpufreq_governor for CPU %u, event %u\n",
 
1539                                                 policy->cpu, event);
 
1540         ret = policy->governor->governor(policy, event);
 
1542         /* we keep one module reference alive for
 
1543                         each CPU governed by this CPU */
 
1544         if ((event != CPUFREQ_GOV_START) || ret)
 
1545                 module_put(policy->governor->owner);
 
1546         if ((event == CPUFREQ_GOV_STOP) && !ret)
 
1547                 module_put(policy->governor->owner);
 
1553 int cpufreq_register_governor(struct cpufreq_governor *governor)
 
1560         mutex_lock(&cpufreq_governor_mutex);
 
1563         if (__find_governor(governor->name) == NULL) {
 
1565                 list_add(&governor->governor_list, &cpufreq_governor_list);
 
1568         mutex_unlock(&cpufreq_governor_mutex);
 
1571 EXPORT_SYMBOL_GPL(cpufreq_register_governor);
 
1574 void cpufreq_unregister_governor(struct cpufreq_governor *governor)
 
1579         mutex_lock(&cpufreq_governor_mutex);
 
1580         list_del(&governor->governor_list);
 
1581         mutex_unlock(&cpufreq_governor_mutex);
 
1584 EXPORT_SYMBOL_GPL(cpufreq_unregister_governor);
 
1588 /*********************************************************************
 
1589  *                          POLICY INTERFACE                         *
 
1590  *********************************************************************/
 
1593  * cpufreq_get_policy - get the current cpufreq_policy
 
1594  * @policy: struct cpufreq_policy into which the current cpufreq_policy is written
 
1596  * Reads the current cpufreq policy.
 
1598 int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu)
 
1600         struct cpufreq_policy *cpu_policy;
 
1604         cpu_policy = cpufreq_cpu_get(cpu);
 
1608         memcpy(policy, cpu_policy, sizeof(struct cpufreq_policy));
 
1610         cpufreq_cpu_put(cpu_policy);
 
1613 EXPORT_SYMBOL(cpufreq_get_policy);
 
1617  * data   : current policy.
 
1618  * policy : policy to be set.
 
1620 static int __cpufreq_set_policy(struct cpufreq_policy *data,
 
1621                                 struct cpufreq_policy *policy)
 
1625         cpufreq_debug_disable_ratelimit();
 
1626         dprintk("setting new policy for CPU %u: %u - %u kHz\n", policy->cpu,
 
1627                 policy->min, policy->max);
 
1629         memcpy(&policy->cpuinfo, &data->cpuinfo,
 
1630                                 sizeof(struct cpufreq_cpuinfo));
 
1632         if (policy->min > data->max || policy->max < data->min) {
 
1637         /* verify the cpu speed can be set within this limit */
 
1638         ret = cpufreq_driver->verify(policy);
 
1642         /* adjust if necessary - all reasons */
 
1643         blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
 
1644                         CPUFREQ_ADJUST, policy);
 
1646         /* adjust if necessary - hardware incompatibility*/
 
1647         blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
 
1648                         CPUFREQ_INCOMPATIBLE, policy);
 
1650         /* verify the cpu speed can be set within this limit,
 
1651            which might be different to the first one */
 
1652         ret = cpufreq_driver->verify(policy);
 
1656         /* notification of the new policy */
 
1657         blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
 
1658                         CPUFREQ_NOTIFY, policy);
 
1660         data->min = policy->min;
 
1661         data->max = policy->max;
 
1663         dprintk("new min and max freqs are %u - %u kHz\n",
 
1664                                         data->min, data->max);
 
1666         if (cpufreq_driver->setpolicy) {
 
1667                 data->policy = policy->policy;
 
1668                 dprintk("setting range\n");
 
1669                 ret = cpufreq_driver->setpolicy(policy);
 
1671                 if (policy->governor != data->governor) {
 
1672                         /* save old, working values */
 
1673                         struct cpufreq_governor *old_gov = data->governor;
 
1675                         dprintk("governor switch\n");
 
1677                         /* end old governor */
 
1679                                 __cpufreq_governor(data, CPUFREQ_GOV_STOP);
 
1681                         /* start new governor */
 
1682                         data->governor = policy->governor;
 
1683                         if (__cpufreq_governor(data, CPUFREQ_GOV_START)) {
 
1684                                 /* new governor failed, so re-start old one */
 
1685                                 dprintk("starting governor %s failed\n",
 
1686                                                         data->governor->name);
 
1688                                         data->governor = old_gov;
 
1689                                         __cpufreq_governor(data,
 
1695                         /* might be a policy change, too, so fall through */
 
1697                 dprintk("governor: change or update limits\n");
 
1698                 __cpufreq_governor(data, CPUFREQ_GOV_LIMITS);
 
1702         cpufreq_debug_enable_ratelimit();
 
1707  *      cpufreq_update_policy - re-evaluate an existing cpufreq policy
 
1708  *      @cpu: CPU which shall be re-evaluated
 
1710  *      Usefull for policy notifiers which have different necessities
 
1711  *      at different times.
 
1713 int cpufreq_update_policy(unsigned int cpu)
 
1715         struct cpufreq_policy *data = cpufreq_cpu_get(cpu);
 
1716         struct cpufreq_policy policy;
 
1722         if (unlikely(lock_policy_rwsem_write(cpu)))
 
1725         dprintk("updating policy for CPU %u\n", cpu);
 
1726         memcpy(&policy, data, sizeof(struct cpufreq_policy));
 
1727         policy.min = data->user_policy.min;
 
1728         policy.max = data->user_policy.max;
 
1729         policy.policy = data->user_policy.policy;
 
1730         policy.governor = data->user_policy.governor;
 
1732         /* BIOS might change freq behind our back
 
1733           -> ask driver for current freq and notify governors about a change */
 
1734         if (cpufreq_driver->get) {
 
1735                 policy.cur = cpufreq_driver->get(cpu);
 
1737                         dprintk("Driver did not initialize current freq");
 
1738                         data->cur = policy.cur;
 
1740                         if (data->cur != policy.cur)
 
1741                                 cpufreq_out_of_sync(cpu, data->cur,
 
1746         ret = __cpufreq_set_policy(data, &policy);
 
1748         unlock_policy_rwsem_write(cpu);
 
1750         cpufreq_cpu_put(data);
 
1753 EXPORT_SYMBOL(cpufreq_update_policy);
 
1755 static int __cpuinit cpufreq_cpu_callback(struct notifier_block *nfb,
 
1756                                         unsigned long action, void *hcpu)
 
1758         unsigned int cpu = (unsigned long)hcpu;
 
1759         struct sys_device *sys_dev;
 
1761         sys_dev = get_cpu_sysdev(cpu);
 
1765                 case CPU_ONLINE_FROZEN:
 
1766                         cpufreq_add_dev(sys_dev);
 
1768                 case CPU_DOWN_PREPARE:
 
1769                 case CPU_DOWN_PREPARE_FROZEN:
 
1770                         if (unlikely(lock_policy_rwsem_write(cpu)))
 
1773                         __cpufreq_remove_dev(sys_dev);
 
1775                 case CPU_DOWN_FAILED:
 
1776                 case CPU_DOWN_FAILED_FROZEN:
 
1777                         cpufreq_add_dev(sys_dev);
 
1784 static struct notifier_block __refdata cpufreq_cpu_notifier =
 
1786     .notifier_call = cpufreq_cpu_callback,
 
1789 /*********************************************************************
 
1790  *               REGISTER / UNREGISTER CPUFREQ DRIVER                *
 
1791  *********************************************************************/
 
1794  * cpufreq_register_driver - register a CPU Frequency driver
 
1795  * @driver_data: A struct cpufreq_driver containing the values#
 
1796  * submitted by the CPU Frequency driver.
 
1798  *   Registers a CPU Frequency driver to this core code. This code
 
1799  * returns zero on success, -EBUSY when another driver got here first
 
1800  * (and isn't unregistered in the meantime).
 
1803 int cpufreq_register_driver(struct cpufreq_driver *driver_data)
 
1805         unsigned long flags;
 
1808         if (!driver_data || !driver_data->verify || !driver_data->init ||
 
1809             ((!driver_data->setpolicy) && (!driver_data->target)))
 
1812         dprintk("trying to register driver %s\n", driver_data->name);
 
1814         if (driver_data->setpolicy)
 
1815                 driver_data->flags |= CPUFREQ_CONST_LOOPS;
 
1817         spin_lock_irqsave(&cpufreq_driver_lock, flags);
 
1818         if (cpufreq_driver) {
 
1819                 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
1822         cpufreq_driver = driver_data;
 
1823         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
1825         ret = sysdev_driver_register(&cpu_sysdev_class,&cpufreq_sysdev_driver);
 
1827         if ((!ret) && !(cpufreq_driver->flags & CPUFREQ_STICKY)) {
 
1831                 /* check for at least one working CPU */
 
1832                 for (i=0; i<NR_CPUS; i++)
 
1833                         if (cpufreq_cpu_data[i])
 
1836                 /* if all ->init() calls failed, unregister */
 
1838                         dprintk("no CPU initialized for driver %s\n",
 
1840                         sysdev_driver_unregister(&cpu_sysdev_class,
 
1841                                                 &cpufreq_sysdev_driver);
 
1843                         spin_lock_irqsave(&cpufreq_driver_lock, flags);
 
1844                         cpufreq_driver = NULL;
 
1845                         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
1850                 register_hotcpu_notifier(&cpufreq_cpu_notifier);
 
1851                 dprintk("driver %s up and running\n", driver_data->name);
 
1852                 cpufreq_debug_enable_ratelimit();
 
1857 EXPORT_SYMBOL_GPL(cpufreq_register_driver);
 
1861  * cpufreq_unregister_driver - unregister the current CPUFreq driver
 
1863  *    Unregister the current CPUFreq driver. Only call this if you have
 
1864  * the right to do so, i.e. if you have succeeded in initialising before!
 
1865  * Returns zero if successful, and -EINVAL if the cpufreq_driver is
 
1866  * currently not initialised.
 
1868 int cpufreq_unregister_driver(struct cpufreq_driver *driver)
 
1870         unsigned long flags;
 
1872         cpufreq_debug_disable_ratelimit();
 
1874         if (!cpufreq_driver || (driver != cpufreq_driver)) {
 
1875                 cpufreq_debug_enable_ratelimit();
 
1879         dprintk("unregistering driver %s\n", driver->name);
 
1881         sysdev_driver_unregister(&cpu_sysdev_class, &cpufreq_sysdev_driver);
 
1882         unregister_hotcpu_notifier(&cpufreq_cpu_notifier);
 
1884         spin_lock_irqsave(&cpufreq_driver_lock, flags);
 
1885         cpufreq_driver = NULL;
 
1886         spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
 
1890 EXPORT_SYMBOL_GPL(cpufreq_unregister_driver);
 
1892 static int __init cpufreq_core_init(void)
 
1896         for_each_possible_cpu(cpu) {
 
1897                 per_cpu(policy_cpu, cpu) = -1;
 
1898                 init_rwsem(&per_cpu(cpu_policy_rwsem, cpu));
 
1903 core_initcall(cpufreq_core_init);