1 /* 2 * linux/drivers/cpufreq/cpufreq.c 3 * 4 * Copyright (C) 2001 Russell King 5 * (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de> 6 * (C) 2013 Viresh Kumar <viresh.kumar@linaro.org> 7 * 8 * Oct 2005 - Ashok Raj <ashok.raj@intel.com> 9 * Added handling for CPU hotplug 10 * Feb 2006 - Jacob Shin <jacob.shin@amd.com> 11 * Fix handling for CPU hotplug -- affected CPUs 12 * 13 * This program is free software; you can redistribute it and/or modify 14 * it under the terms of the GNU General Public License version 2 as 15 * published by the Free Software Foundation. 16 */ 17 18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 19 20 #include <linux/cpu.h> 21 #include <linux/cpufreq.h> 22 #include <linux/delay.h> 23 #include <linux/device.h> 24 #include <linux/init.h> 25 #include <linux/kernel_stat.h> 26 #include <linux/module.h> 27 #include <linux/mutex.h> 28 #include <linux/slab.h> 29 #include <linux/syscore_ops.h> 30 #include <linux/tick.h> 31 #include <trace/events/power.h> 32 33 /** 34 * The "cpufreq driver" - the arch- or hardware-dependent low 35 * level driver of CPUFreq support, and its spinlock. This lock 36 * also protects the cpufreq_cpu_data array. 37 */ 38 static struct cpufreq_driver *cpufreq_driver; 39 static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data); 40 static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data_fallback); 41 static DEFINE_RWLOCK(cpufreq_driver_lock); 42 static DEFINE_MUTEX(cpufreq_governor_lock); 43 static LIST_HEAD(cpufreq_policy_list); 44 45 #ifdef CONFIG_HOTPLUG_CPU 46 /* This one keeps track of the previously set governor of a removed CPU */ 47 static DEFINE_PER_CPU(char[CPUFREQ_NAME_LEN], cpufreq_cpu_governor); 48 #endif 49 50 static inline bool has_target(void) 51 { 52 return cpufreq_driver->target_index || cpufreq_driver->target; 53 } 54 55 /* 56 * rwsem to guarantee that cpufreq driver module doesn't unload during critical 57 * sections 58 */ 59 static DECLARE_RWSEM(cpufreq_rwsem); 60 61 /* internal prototypes */ 62 static int __cpufreq_governor(struct cpufreq_policy *policy, 63 unsigned int event); 64 static unsigned int __cpufreq_get(unsigned int cpu); 65 static void handle_update(struct work_struct *work); 66 67 /** 68 * Two notifier lists: the "policy" list is involved in the 69 * validation process for a new CPU frequency policy; the 70 * "transition" list for kernel code that needs to handle 71 * changes to devices when the CPU clock speed changes. 72 * The mutex locks both lists. 73 */ 74 static BLOCKING_NOTIFIER_HEAD(cpufreq_policy_notifier_list); 75 static struct srcu_notifier_head cpufreq_transition_notifier_list; 76 77 static bool init_cpufreq_transition_notifier_list_called; 78 static int __init init_cpufreq_transition_notifier_list(void) 79 { 80 srcu_init_notifier_head(&cpufreq_transition_notifier_list); 81 init_cpufreq_transition_notifier_list_called = true; 82 return 0; 83 } 84 pure_initcall(init_cpufreq_transition_notifier_list); 85 86 static int off __read_mostly; 87 static int cpufreq_disabled(void) 88 { 89 return off; 90 } 91 void disable_cpufreq(void) 92 { 93 off = 1; 94 } 95 static LIST_HEAD(cpufreq_governor_list); 96 static DEFINE_MUTEX(cpufreq_governor_mutex); 97 98 bool have_governor_per_policy(void) 99 { 100 return !!(cpufreq_driver->flags & CPUFREQ_HAVE_GOVERNOR_PER_POLICY); 101 } 102 EXPORT_SYMBOL_GPL(have_governor_per_policy); 103 104 struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy) 105 { 106 if (have_governor_per_policy()) 107 return &policy->kobj; 108 else 109 return cpufreq_global_kobject; 110 } 111 EXPORT_SYMBOL_GPL(get_governor_parent_kobj); 112 113 static inline u64 get_cpu_idle_time_jiffy(unsigned int cpu, u64 *wall) 114 { 115 u64 idle_time; 116 u64 cur_wall_time; 117 u64 busy_time; 118 119 cur_wall_time = jiffies64_to_cputime64(get_jiffies_64()); 120 121 busy_time = kcpustat_cpu(cpu).cpustat[CPUTIME_USER]; 122 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SYSTEM]; 123 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_IRQ]; 124 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SOFTIRQ]; 125 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_STEAL]; 126 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_NICE]; 127 128 idle_time = cur_wall_time - busy_time; 129 if (wall) 130 *wall = cputime_to_usecs(cur_wall_time); 131 132 return cputime_to_usecs(idle_time); 133 } 134 135 u64 get_cpu_idle_time(unsigned int cpu, u64 *wall, int io_busy) 136 { 137 u64 idle_time = get_cpu_idle_time_us(cpu, io_busy ? wall : NULL); 138 139 if (idle_time == -1ULL) 140 return get_cpu_idle_time_jiffy(cpu, wall); 141 else if (!io_busy) 142 idle_time += get_cpu_iowait_time_us(cpu, wall); 143 144 return idle_time; 145 } 146 EXPORT_SYMBOL_GPL(get_cpu_idle_time); 147 148 /* 149 * This is a generic cpufreq init() routine which can be used by cpufreq 150 * drivers of SMP systems. It will do following: 151 * - validate & show freq table passed 152 * - set policies transition latency 153 * - policy->cpus with all possible CPUs 154 */ 155 int cpufreq_generic_init(struct cpufreq_policy *policy, 156 struct cpufreq_frequency_table *table, 157 unsigned int transition_latency) 158 { 159 int ret; 160 161 ret = cpufreq_table_validate_and_show(policy, table); 162 if (ret) { 163 pr_err("%s: invalid frequency table: %d\n", __func__, ret); 164 return ret; 165 } 166 167 policy->cpuinfo.transition_latency = transition_latency; 168 169 /* 170 * The driver only supports the SMP configuartion where all processors 171 * share the clock and voltage and clock. 172 */ 173 cpumask_setall(policy->cpus); 174 175 return 0; 176 } 177 EXPORT_SYMBOL_GPL(cpufreq_generic_init); 178 179 struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu) 180 { 181 struct cpufreq_policy *policy = NULL; 182 unsigned long flags; 183 184 if (cpufreq_disabled() || (cpu >= nr_cpu_ids)) 185 return NULL; 186 187 if (!down_read_trylock(&cpufreq_rwsem)) 188 return NULL; 189 190 /* get the cpufreq driver */ 191 read_lock_irqsave(&cpufreq_driver_lock, flags); 192 193 if (cpufreq_driver) { 194 /* get the CPU */ 195 policy = per_cpu(cpufreq_cpu_data, cpu); 196 if (policy) 197 kobject_get(&policy->kobj); 198 } 199 200 read_unlock_irqrestore(&cpufreq_driver_lock, flags); 201 202 if (!policy) 203 up_read(&cpufreq_rwsem); 204 205 return policy; 206 } 207 EXPORT_SYMBOL_GPL(cpufreq_cpu_get); 208 209 void cpufreq_cpu_put(struct cpufreq_policy *policy) 210 { 211 if (cpufreq_disabled()) 212 return; 213 214 kobject_put(&policy->kobj); 215 up_read(&cpufreq_rwsem); 216 } 217 EXPORT_SYMBOL_GPL(cpufreq_cpu_put); 218 219 /********************************************************************* 220 * EXTERNALLY AFFECTING FREQUENCY CHANGES * 221 *********************************************************************/ 222 223 /** 224 * adjust_jiffies - adjust the system "loops_per_jiffy" 225 * 226 * This function alters the system "loops_per_jiffy" for the clock 227 * speed change. Note that loops_per_jiffy cannot be updated on SMP 228 * systems as each CPU might be scaled differently. So, use the arch 229 * per-CPU loops_per_jiffy value wherever possible. 230 */ 231 #ifndef CONFIG_SMP 232 static unsigned long l_p_j_ref; 233 static unsigned int l_p_j_ref_freq; 234 235 static void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci) 236 { 237 if (ci->flags & CPUFREQ_CONST_LOOPS) 238 return; 239 240 if (!l_p_j_ref_freq) { 241 l_p_j_ref = loops_per_jiffy; 242 l_p_j_ref_freq = ci->old; 243 pr_debug("saving %lu as reference value for loops_per_jiffy; " 244 "freq is %u kHz\n", l_p_j_ref, l_p_j_ref_freq); 245 } 246 if ((val == CPUFREQ_POSTCHANGE && ci->old != ci->new) || 247 (val == CPUFREQ_RESUMECHANGE || val == CPUFREQ_SUSPENDCHANGE)) { 248 loops_per_jiffy = cpufreq_scale(l_p_j_ref, l_p_j_ref_freq, 249 ci->new); 250 pr_debug("scaling loops_per_jiffy to %lu " 251 "for frequency %u kHz\n", loops_per_jiffy, ci->new); 252 } 253 } 254 #else 255 static inline void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci) 256 { 257 return; 258 } 259 #endif 260 261 static void __cpufreq_notify_transition(struct cpufreq_policy *policy, 262 struct cpufreq_freqs *freqs, unsigned int state) 263 { 264 BUG_ON(irqs_disabled()); 265 266 if (cpufreq_disabled()) 267 return; 268 269 freqs->flags = cpufreq_driver->flags; 270 pr_debug("notification %u of frequency transition to %u kHz\n", 271 state, freqs->new); 272 273 switch (state) { 274 275 case CPUFREQ_PRECHANGE: 276 /* detect if the driver reported a value as "old frequency" 277 * which is not equal to what the cpufreq core thinks is 278 * "old frequency". 279 */ 280 if (!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) { 281 if ((policy) && (policy->cpu == freqs->cpu) && 282 (policy->cur) && (policy->cur != freqs->old)) { 283 pr_debug("Warning: CPU frequency is" 284 " %u, cpufreq assumed %u kHz.\n", 285 freqs->old, policy->cur); 286 freqs->old = policy->cur; 287 } 288 } 289 srcu_notifier_call_chain(&cpufreq_transition_notifier_list, 290 CPUFREQ_PRECHANGE, freqs); 291 adjust_jiffies(CPUFREQ_PRECHANGE, freqs); 292 break; 293 294 case CPUFREQ_POSTCHANGE: 295 adjust_jiffies(CPUFREQ_POSTCHANGE, freqs); 296 pr_debug("FREQ: %lu - CPU: %lu", (unsigned long)freqs->new, 297 (unsigned long)freqs->cpu); 298 trace_cpu_frequency(freqs->new, freqs->cpu); 299 srcu_notifier_call_chain(&cpufreq_transition_notifier_list, 300 CPUFREQ_POSTCHANGE, freqs); 301 if (likely(policy) && likely(policy->cpu == freqs->cpu)) 302 policy->cur = freqs->new; 303 break; 304 } 305 } 306 307 /** 308 * cpufreq_notify_transition - call notifier chain and adjust_jiffies 309 * on frequency transition. 310 * 311 * This function calls the transition notifiers and the "adjust_jiffies" 312 * function. It is called twice on all CPU frequency changes that have 313 * external effects. 314 */ 315 void cpufreq_notify_transition(struct cpufreq_policy *policy, 316 struct cpufreq_freqs *freqs, unsigned int state) 317 { 318 for_each_cpu(freqs->cpu, policy->cpus) 319 __cpufreq_notify_transition(policy, freqs, state); 320 } 321 EXPORT_SYMBOL_GPL(cpufreq_notify_transition); 322 323 324 /********************************************************************* 325 * SYSFS INTERFACE * 326 *********************************************************************/ 327 328 static struct cpufreq_governor *__find_governor(const char *str_governor) 329 { 330 struct cpufreq_governor *t; 331 332 list_for_each_entry(t, &cpufreq_governor_list, governor_list) 333 if (!strnicmp(str_governor, t->name, CPUFREQ_NAME_LEN)) 334 return t; 335 336 return NULL; 337 } 338 339 /** 340 * cpufreq_parse_governor - parse a governor string 341 */ 342 static int cpufreq_parse_governor(char *str_governor, unsigned int *policy, 343 struct cpufreq_governor **governor) 344 { 345 int err = -EINVAL; 346 347 if (!cpufreq_driver) 348 goto out; 349 350 if (cpufreq_driver->setpolicy) { 351 if (!strnicmp(str_governor, "performance", CPUFREQ_NAME_LEN)) { 352 *policy = CPUFREQ_POLICY_PERFORMANCE; 353 err = 0; 354 } else if (!strnicmp(str_governor, "powersave", 355 CPUFREQ_NAME_LEN)) { 356 *policy = CPUFREQ_POLICY_POWERSAVE; 357 err = 0; 358 } 359 } else if (has_target()) { 360 struct cpufreq_governor *t; 361 362 mutex_lock(&cpufreq_governor_mutex); 363 364 t = __find_governor(str_governor); 365 366 if (t == NULL) { 367 int ret; 368 369 mutex_unlock(&cpufreq_governor_mutex); 370 ret = request_module("cpufreq_%s", str_governor); 371 mutex_lock(&cpufreq_governor_mutex); 372 373 if (ret == 0) 374 t = __find_governor(str_governor); 375 } 376 377 if (t != NULL) { 378 *governor = t; 379 err = 0; 380 } 381 382 mutex_unlock(&cpufreq_governor_mutex); 383 } 384 out: 385 return err; 386 } 387 388 /** 389 * cpufreq_per_cpu_attr_read() / show_##file_name() - 390 * print out cpufreq information 391 * 392 * Write out information from cpufreq_driver->policy[cpu]; object must be 393 * "unsigned int". 394 */ 395 396 #define show_one(file_name, object) \ 397 static ssize_t show_##file_name \ 398 (struct cpufreq_policy *policy, char *buf) \ 399 { \ 400 return sprintf(buf, "%u\n", policy->object); \ 401 } 402 403 show_one(cpuinfo_min_freq, cpuinfo.min_freq); 404 show_one(cpuinfo_max_freq, cpuinfo.max_freq); 405 show_one(cpuinfo_transition_latency, cpuinfo.transition_latency); 406 show_one(scaling_min_freq, min); 407 show_one(scaling_max_freq, max); 408 show_one(scaling_cur_freq, cur); 409 410 static int cpufreq_set_policy(struct cpufreq_policy *policy, 411 struct cpufreq_policy *new_policy); 412 413 /** 414 * cpufreq_per_cpu_attr_write() / store_##file_name() - sysfs write access 415 */ 416 #define store_one(file_name, object) \ 417 static ssize_t store_##file_name \ 418 (struct cpufreq_policy *policy, const char *buf, size_t count) \ 419 { \ 420 int ret; \ 421 struct cpufreq_policy new_policy; \ 422 \ 423 ret = cpufreq_get_policy(&new_policy, policy->cpu); \ 424 if (ret) \ 425 return -EINVAL; \ 426 \ 427 ret = sscanf(buf, "%u", &new_policy.object); \ 428 if (ret != 1) \ 429 return -EINVAL; \ 430 \ 431 ret = cpufreq_set_policy(policy, &new_policy); \ 432 policy->user_policy.object = policy->object; \ 433 \ 434 return ret ? ret : count; \ 435 } 436 437 store_one(scaling_min_freq, min); 438 store_one(scaling_max_freq, max); 439 440 /** 441 * show_cpuinfo_cur_freq - current CPU frequency as detected by hardware 442 */ 443 static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy, 444 char *buf) 445 { 446 unsigned int cur_freq = __cpufreq_get(policy->cpu); 447 if (!cur_freq) 448 return sprintf(buf, "<unknown>"); 449 return sprintf(buf, "%u\n", cur_freq); 450 } 451 452 /** 453 * show_scaling_governor - show the current policy for the specified CPU 454 */ 455 static ssize_t show_scaling_governor(struct cpufreq_policy *policy, char *buf) 456 { 457 if (policy->policy == CPUFREQ_POLICY_POWERSAVE) 458 return sprintf(buf, "powersave\n"); 459 else if (policy->policy == CPUFREQ_POLICY_PERFORMANCE) 460 return sprintf(buf, "performance\n"); 461 else if (policy->governor) 462 return scnprintf(buf, CPUFREQ_NAME_PLEN, "%s\n", 463 policy->governor->name); 464 return -EINVAL; 465 } 466 467 /** 468 * store_scaling_governor - store policy for the specified CPU 469 */ 470 static ssize_t store_scaling_governor(struct cpufreq_policy *policy, 471 const char *buf, size_t count) 472 { 473 int ret; 474 char str_governor[16]; 475 struct cpufreq_policy new_policy; 476 477 ret = cpufreq_get_policy(&new_policy, policy->cpu); 478 if (ret) 479 return ret; 480 481 ret = sscanf(buf, "%15s", str_governor); 482 if (ret != 1) 483 return -EINVAL; 484 485 if (cpufreq_parse_governor(str_governor, &new_policy.policy, 486 &new_policy.governor)) 487 return -EINVAL; 488 489 ret = cpufreq_set_policy(policy, &new_policy); 490 491 policy->user_policy.policy = policy->policy; 492 policy->user_policy.governor = policy->governor; 493 494 if (ret) 495 return ret; 496 else 497 return count; 498 } 499 500 /** 501 * show_scaling_driver - show the cpufreq driver currently loaded 502 */ 503 static ssize_t show_scaling_driver(struct cpufreq_policy *policy, char *buf) 504 { 505 return scnprintf(buf, CPUFREQ_NAME_PLEN, "%s\n", cpufreq_driver->name); 506 } 507 508 /** 509 * show_scaling_available_governors - show the available CPUfreq governors 510 */ 511 static ssize_t show_scaling_available_governors(struct cpufreq_policy *policy, 512 char *buf) 513 { 514 ssize_t i = 0; 515 struct cpufreq_governor *t; 516 517 if (!has_target()) { 518 i += sprintf(buf, "performance powersave"); 519 goto out; 520 } 521 522 list_for_each_entry(t, &cpufreq_governor_list, governor_list) { 523 if (i >= (ssize_t) ((PAGE_SIZE / sizeof(char)) 524 - (CPUFREQ_NAME_LEN + 2))) 525 goto out; 526 i += scnprintf(&buf[i], CPUFREQ_NAME_PLEN, "%s ", t->name); 527 } 528 out: 529 i += sprintf(&buf[i], "\n"); 530 return i; 531 } 532 533 ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf) 534 { 535 ssize_t i = 0; 536 unsigned int cpu; 537 538 for_each_cpu(cpu, mask) { 539 if (i) 540 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " "); 541 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu); 542 if (i >= (PAGE_SIZE - 5)) 543 break; 544 } 545 i += sprintf(&buf[i], "\n"); 546 return i; 547 } 548 EXPORT_SYMBOL_GPL(cpufreq_show_cpus); 549 550 /** 551 * show_related_cpus - show the CPUs affected by each transition even if 552 * hw coordination is in use 553 */ 554 static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf) 555 { 556 return cpufreq_show_cpus(policy->related_cpus, buf); 557 } 558 559 /** 560 * show_affected_cpus - show the CPUs affected by each transition 561 */ 562 static ssize_t show_affected_cpus(struct cpufreq_policy *policy, char *buf) 563 { 564 return cpufreq_show_cpus(policy->cpus, buf); 565 } 566 567 static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy, 568 const char *buf, size_t count) 569 { 570 unsigned int freq = 0; 571 unsigned int ret; 572 573 if (!policy->governor || !policy->governor->store_setspeed) 574 return -EINVAL; 575 576 ret = sscanf(buf, "%u", &freq); 577 if (ret != 1) 578 return -EINVAL; 579 580 policy->governor->store_setspeed(policy, freq); 581 582 return count; 583 } 584 585 static ssize_t show_scaling_setspeed(struct cpufreq_policy *policy, char *buf) 586 { 587 if (!policy->governor || !policy->governor->show_setspeed) 588 return sprintf(buf, "<unsupported>\n"); 589 590 return policy->governor->show_setspeed(policy, buf); 591 } 592 593 /** 594 * show_bios_limit - show the current cpufreq HW/BIOS limitation 595 */ 596 static ssize_t show_bios_limit(struct cpufreq_policy *policy, char *buf) 597 { 598 unsigned int limit; 599 int ret; 600 if (cpufreq_driver->bios_limit) { 601 ret = cpufreq_driver->bios_limit(policy->cpu, &limit); 602 if (!ret) 603 return sprintf(buf, "%u\n", limit); 604 } 605 return sprintf(buf, "%u\n", policy->cpuinfo.max_freq); 606 } 607 608 cpufreq_freq_attr_ro_perm(cpuinfo_cur_freq, 0400); 609 cpufreq_freq_attr_ro(cpuinfo_min_freq); 610 cpufreq_freq_attr_ro(cpuinfo_max_freq); 611 cpufreq_freq_attr_ro(cpuinfo_transition_latency); 612 cpufreq_freq_attr_ro(scaling_available_governors); 613 cpufreq_freq_attr_ro(scaling_driver); 614 cpufreq_freq_attr_ro(scaling_cur_freq); 615 cpufreq_freq_attr_ro(bios_limit); 616 cpufreq_freq_attr_ro(related_cpus); 617 cpufreq_freq_attr_ro(affected_cpus); 618 cpufreq_freq_attr_rw(scaling_min_freq); 619 cpufreq_freq_attr_rw(scaling_max_freq); 620 cpufreq_freq_attr_rw(scaling_governor); 621 cpufreq_freq_attr_rw(scaling_setspeed); 622 623 static struct attribute *default_attrs[] = { 624 &cpuinfo_min_freq.attr, 625 &cpuinfo_max_freq.attr, 626 &cpuinfo_transition_latency.attr, 627 &scaling_min_freq.attr, 628 &scaling_max_freq.attr, 629 &affected_cpus.attr, 630 &related_cpus.attr, 631 &scaling_governor.attr, 632 &scaling_driver.attr, 633 &scaling_available_governors.attr, 634 &scaling_setspeed.attr, 635 NULL 636 }; 637 638 #define to_policy(k) container_of(k, struct cpufreq_policy, kobj) 639 #define to_attr(a) container_of(a, struct freq_attr, attr) 640 641 static ssize_t show(struct kobject *kobj, struct attribute *attr, char *buf) 642 { 643 struct cpufreq_policy *policy = to_policy(kobj); 644 struct freq_attr *fattr = to_attr(attr); 645 ssize_t ret; 646 647 if (!down_read_trylock(&cpufreq_rwsem)) 648 return -EINVAL; 649 650 down_read(&policy->rwsem); 651 652 if (fattr->show) 653 ret = fattr->show(policy, buf); 654 else 655 ret = -EIO; 656 657 up_read(&policy->rwsem); 658 up_read(&cpufreq_rwsem); 659 660 return ret; 661 } 662 663 static ssize_t store(struct kobject *kobj, struct attribute *attr, 664 const char *buf, size_t count) 665 { 666 struct cpufreq_policy *policy = to_policy(kobj); 667 struct freq_attr *fattr = to_attr(attr); 668 ssize_t ret = -EINVAL; 669 670 get_online_cpus(); 671 672 if (!cpu_online(policy->cpu)) 673 goto unlock; 674 675 if (!down_read_trylock(&cpufreq_rwsem)) 676 goto unlock; 677 678 down_write(&policy->rwsem); 679 680 if (fattr->store) 681 ret = fattr->store(policy, buf, count); 682 else 683 ret = -EIO; 684 685 up_write(&policy->rwsem); 686 687 up_read(&cpufreq_rwsem); 688 unlock: 689 put_online_cpus(); 690 691 return ret; 692 } 693 694 static void cpufreq_sysfs_release(struct kobject *kobj) 695 { 696 struct cpufreq_policy *policy = to_policy(kobj); 697 pr_debug("last reference is dropped\n"); 698 complete(&policy->kobj_unregister); 699 } 700 701 static const struct sysfs_ops sysfs_ops = { 702 .show = show, 703 .store = store, 704 }; 705 706 static struct kobj_type ktype_cpufreq = { 707 .sysfs_ops = &sysfs_ops, 708 .default_attrs = default_attrs, 709 .release = cpufreq_sysfs_release, 710 }; 711 712 struct kobject *cpufreq_global_kobject; 713 EXPORT_SYMBOL(cpufreq_global_kobject); 714 715 static int cpufreq_global_kobject_usage; 716 717 int cpufreq_get_global_kobject(void) 718 { 719 if (!cpufreq_global_kobject_usage++) 720 return kobject_add(cpufreq_global_kobject, 721 &cpu_subsys.dev_root->kobj, "%s", "cpufreq"); 722 723 return 0; 724 } 725 EXPORT_SYMBOL(cpufreq_get_global_kobject); 726 727 void cpufreq_put_global_kobject(void) 728 { 729 if (!--cpufreq_global_kobject_usage) 730 kobject_del(cpufreq_global_kobject); 731 } 732 EXPORT_SYMBOL(cpufreq_put_global_kobject); 733 734 int cpufreq_sysfs_create_file(const struct attribute *attr) 735 { 736 int ret = cpufreq_get_global_kobject(); 737 738 if (!ret) { 739 ret = sysfs_create_file(cpufreq_global_kobject, attr); 740 if (ret) 741 cpufreq_put_global_kobject(); 742 } 743 744 return ret; 745 } 746 EXPORT_SYMBOL(cpufreq_sysfs_create_file); 747 748 void cpufreq_sysfs_remove_file(const struct attribute *attr) 749 { 750 sysfs_remove_file(cpufreq_global_kobject, attr); 751 cpufreq_put_global_kobject(); 752 } 753 EXPORT_SYMBOL(cpufreq_sysfs_remove_file); 754 755 /* symlink affected CPUs */ 756 static int cpufreq_add_dev_symlink(struct cpufreq_policy *policy) 757 { 758 unsigned int j; 759 int ret = 0; 760 761 for_each_cpu(j, policy->cpus) { 762 struct device *cpu_dev; 763 764 if (j == policy->cpu) 765 continue; 766 767 pr_debug("Adding link for CPU: %u\n", j); 768 cpu_dev = get_cpu_device(j); 769 ret = sysfs_create_link(&cpu_dev->kobj, &policy->kobj, 770 "cpufreq"); 771 if (ret) 772 break; 773 } 774 return ret; 775 } 776 777 static int cpufreq_add_dev_interface(struct cpufreq_policy *policy, 778 struct device *dev) 779 { 780 struct freq_attr **drv_attr; 781 int ret = 0; 782 783 /* prepare interface data */ 784 ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq, 785 &dev->kobj, "cpufreq"); 786 if (ret) 787 return ret; 788 789 /* set up files for this cpu device */ 790 drv_attr = cpufreq_driver->attr; 791 while ((drv_attr) && (*drv_attr)) { 792 ret = sysfs_create_file(&policy->kobj, &((*drv_attr)->attr)); 793 if (ret) 794 goto err_out_kobj_put; 795 drv_attr++; 796 } 797 if (cpufreq_driver->get) { 798 ret = sysfs_create_file(&policy->kobj, &cpuinfo_cur_freq.attr); 799 if (ret) 800 goto err_out_kobj_put; 801 } 802 if (has_target()) { 803 ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr); 804 if (ret) 805 goto err_out_kobj_put; 806 } 807 if (cpufreq_driver->bios_limit) { 808 ret = sysfs_create_file(&policy->kobj, &bios_limit.attr); 809 if (ret) 810 goto err_out_kobj_put; 811 } 812 813 ret = cpufreq_add_dev_symlink(policy); 814 if (ret) 815 goto err_out_kobj_put; 816 817 return ret; 818 819 err_out_kobj_put: 820 kobject_put(&policy->kobj); 821 wait_for_completion(&policy->kobj_unregister); 822 return ret; 823 } 824 825 static void cpufreq_init_policy(struct cpufreq_policy *policy) 826 { 827 struct cpufreq_policy new_policy; 828 int ret = 0; 829 830 memcpy(&new_policy, policy, sizeof(*policy)); 831 832 /* Use the default policy if its valid. */ 833 if (cpufreq_driver->setpolicy) 834 cpufreq_parse_governor(policy->governor->name, 835 &new_policy.policy, NULL); 836 837 /* assure that the starting sequence is run in cpufreq_set_policy */ 838 policy->governor = NULL; 839 840 /* set default policy */ 841 ret = cpufreq_set_policy(policy, &new_policy); 842 if (ret) { 843 pr_debug("setting policy failed\n"); 844 if (cpufreq_driver->exit) 845 cpufreq_driver->exit(policy); 846 } 847 } 848 849 #ifdef CONFIG_HOTPLUG_CPU 850 static int cpufreq_add_policy_cpu(struct cpufreq_policy *policy, 851 unsigned int cpu, struct device *dev) 852 { 853 int ret = 0; 854 unsigned long flags; 855 856 if (has_target()) { 857 ret = __cpufreq_governor(policy, CPUFREQ_GOV_STOP); 858 if (ret) { 859 pr_err("%s: Failed to stop governor\n", __func__); 860 return ret; 861 } 862 } 863 864 down_write(&policy->rwsem); 865 866 write_lock_irqsave(&cpufreq_driver_lock, flags); 867 868 cpumask_set_cpu(cpu, policy->cpus); 869 per_cpu(cpufreq_cpu_data, cpu) = policy; 870 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 871 872 up_write(&policy->rwsem); 873 874 if (has_target()) { 875 if ((ret = __cpufreq_governor(policy, CPUFREQ_GOV_START)) || 876 (ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS))) { 877 pr_err("%s: Failed to start governor\n", __func__); 878 return ret; 879 } 880 } 881 882 return sysfs_create_link(&dev->kobj, &policy->kobj, "cpufreq"); 883 } 884 #endif 885 886 static struct cpufreq_policy *cpufreq_policy_restore(unsigned int cpu) 887 { 888 struct cpufreq_policy *policy; 889 unsigned long flags; 890 891 read_lock_irqsave(&cpufreq_driver_lock, flags); 892 893 policy = per_cpu(cpufreq_cpu_data_fallback, cpu); 894 895 read_unlock_irqrestore(&cpufreq_driver_lock, flags); 896 897 return policy; 898 } 899 900 static struct cpufreq_policy *cpufreq_policy_alloc(void) 901 { 902 struct cpufreq_policy *policy; 903 904 policy = kzalloc(sizeof(*policy), GFP_KERNEL); 905 if (!policy) 906 return NULL; 907 908 if (!alloc_cpumask_var(&policy->cpus, GFP_KERNEL)) 909 goto err_free_policy; 910 911 if (!zalloc_cpumask_var(&policy->related_cpus, GFP_KERNEL)) 912 goto err_free_cpumask; 913 914 INIT_LIST_HEAD(&policy->policy_list); 915 init_rwsem(&policy->rwsem); 916 917 return policy; 918 919 err_free_cpumask: 920 free_cpumask_var(policy->cpus); 921 err_free_policy: 922 kfree(policy); 923 924 return NULL; 925 } 926 927 static void cpufreq_policy_put_kobj(struct cpufreq_policy *policy) 928 { 929 struct kobject *kobj; 930 struct completion *cmp; 931 932 down_read(&policy->rwsem); 933 kobj = &policy->kobj; 934 cmp = &policy->kobj_unregister; 935 up_read(&policy->rwsem); 936 kobject_put(kobj); 937 938 /* 939 * We need to make sure that the underlying kobj is 940 * actually not referenced anymore by anybody before we 941 * proceed with unloading. 942 */ 943 pr_debug("waiting for dropping of refcount\n"); 944 wait_for_completion(cmp); 945 pr_debug("wait complete\n"); 946 } 947 948 static void cpufreq_policy_free(struct cpufreq_policy *policy) 949 { 950 free_cpumask_var(policy->related_cpus); 951 free_cpumask_var(policy->cpus); 952 kfree(policy); 953 } 954 955 static void update_policy_cpu(struct cpufreq_policy *policy, unsigned int cpu) 956 { 957 if (WARN_ON(cpu == policy->cpu)) 958 return; 959 960 down_write(&policy->rwsem); 961 962 policy->last_cpu = policy->cpu; 963 policy->cpu = cpu; 964 965 up_write(&policy->rwsem); 966 967 cpufreq_frequency_table_update_policy_cpu(policy); 968 blocking_notifier_call_chain(&cpufreq_policy_notifier_list, 969 CPUFREQ_UPDATE_POLICY_CPU, policy); 970 } 971 972 static int __cpufreq_add_dev(struct device *dev, struct subsys_interface *sif, 973 bool frozen) 974 { 975 unsigned int j, cpu = dev->id; 976 int ret = -ENOMEM; 977 struct cpufreq_policy *policy; 978 unsigned long flags; 979 #ifdef CONFIG_HOTPLUG_CPU 980 struct cpufreq_policy *tpolicy; 981 struct cpufreq_governor *gov; 982 #endif 983 984 if (cpu_is_offline(cpu)) 985 return 0; 986 987 pr_debug("adding CPU %u\n", cpu); 988 989 #ifdef CONFIG_SMP 990 /* check whether a different CPU already registered this 991 * CPU because it is in the same boat. */ 992 policy = cpufreq_cpu_get(cpu); 993 if (unlikely(policy)) { 994 cpufreq_cpu_put(policy); 995 return 0; 996 } 997 #endif 998 999 if (!down_read_trylock(&cpufreq_rwsem)) 1000 return 0; 1001 1002 #ifdef CONFIG_HOTPLUG_CPU 1003 /* Check if this cpu was hot-unplugged earlier and has siblings */ 1004 read_lock_irqsave(&cpufreq_driver_lock, flags); 1005 list_for_each_entry(tpolicy, &cpufreq_policy_list, policy_list) { 1006 if (cpumask_test_cpu(cpu, tpolicy->related_cpus)) { 1007 read_unlock_irqrestore(&cpufreq_driver_lock, flags); 1008 ret = cpufreq_add_policy_cpu(tpolicy, cpu, dev); 1009 up_read(&cpufreq_rwsem); 1010 return ret; 1011 } 1012 } 1013 read_unlock_irqrestore(&cpufreq_driver_lock, flags); 1014 #endif 1015 1016 /* 1017 * Restore the saved policy when doing light-weight init and fall back 1018 * to the full init if that fails. 1019 */ 1020 policy = frozen ? cpufreq_policy_restore(cpu) : NULL; 1021 if (!policy) { 1022 frozen = false; 1023 policy = cpufreq_policy_alloc(); 1024 if (!policy) 1025 goto nomem_out; 1026 } 1027 1028 /* 1029 * In the resume path, since we restore a saved policy, the assignment 1030 * to policy->cpu is like an update of the existing policy, rather than 1031 * the creation of a brand new one. So we need to perform this update 1032 * by invoking update_policy_cpu(). 1033 */ 1034 if (frozen && cpu != policy->cpu) 1035 update_policy_cpu(policy, cpu); 1036 else 1037 policy->cpu = cpu; 1038 1039 policy->governor = CPUFREQ_DEFAULT_GOVERNOR; 1040 cpumask_copy(policy->cpus, cpumask_of(cpu)); 1041 1042 init_completion(&policy->kobj_unregister); 1043 INIT_WORK(&policy->update, handle_update); 1044 1045 /* call driver. From then on the cpufreq must be able 1046 * to accept all calls to ->verify and ->setpolicy for this CPU 1047 */ 1048 ret = cpufreq_driver->init(policy); 1049 if (ret) { 1050 pr_debug("initialization failed\n"); 1051 goto err_set_policy_cpu; 1052 } 1053 1054 if (cpufreq_driver->get) { 1055 policy->cur = cpufreq_driver->get(policy->cpu); 1056 if (!policy->cur) { 1057 pr_err("%s: ->get() failed\n", __func__); 1058 goto err_get_freq; 1059 } 1060 } 1061 1062 /* related cpus should atleast have policy->cpus */ 1063 cpumask_or(policy->related_cpus, policy->related_cpus, policy->cpus); 1064 1065 /* 1066 * affected cpus must always be the one, which are online. We aren't 1067 * managing offline cpus here. 1068 */ 1069 cpumask_and(policy->cpus, policy->cpus, cpu_online_mask); 1070 1071 if (!frozen) { 1072 policy->user_policy.min = policy->min; 1073 policy->user_policy.max = policy->max; 1074 } 1075 1076 blocking_notifier_call_chain(&cpufreq_policy_notifier_list, 1077 CPUFREQ_START, policy); 1078 1079 #ifdef CONFIG_HOTPLUG_CPU 1080 gov = __find_governor(per_cpu(cpufreq_cpu_governor, cpu)); 1081 if (gov) { 1082 policy->governor = gov; 1083 pr_debug("Restoring governor %s for cpu %d\n", 1084 policy->governor->name, cpu); 1085 } 1086 #endif 1087 1088 write_lock_irqsave(&cpufreq_driver_lock, flags); 1089 for_each_cpu(j, policy->cpus) 1090 per_cpu(cpufreq_cpu_data, j) = policy; 1091 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 1092 1093 if (!frozen) { 1094 ret = cpufreq_add_dev_interface(policy, dev); 1095 if (ret) 1096 goto err_out_unregister; 1097 } 1098 1099 write_lock_irqsave(&cpufreq_driver_lock, flags); 1100 list_add(&policy->policy_list, &cpufreq_policy_list); 1101 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 1102 1103 cpufreq_init_policy(policy); 1104 1105 if (!frozen) { 1106 policy->user_policy.policy = policy->policy; 1107 policy->user_policy.governor = policy->governor; 1108 } 1109 1110 kobject_uevent(&policy->kobj, KOBJ_ADD); 1111 up_read(&cpufreq_rwsem); 1112 1113 pr_debug("initialization complete\n"); 1114 1115 return 0; 1116 1117 err_out_unregister: 1118 write_lock_irqsave(&cpufreq_driver_lock, flags); 1119 for_each_cpu(j, policy->cpus) 1120 per_cpu(cpufreq_cpu_data, j) = NULL; 1121 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 1122 1123 err_get_freq: 1124 if (cpufreq_driver->exit) 1125 cpufreq_driver->exit(policy); 1126 err_set_policy_cpu: 1127 if (frozen) { 1128 /* Do not leave stale fallback data behind. */ 1129 per_cpu(cpufreq_cpu_data_fallback, cpu) = NULL; 1130 cpufreq_policy_put_kobj(policy); 1131 } 1132 cpufreq_policy_free(policy); 1133 1134 nomem_out: 1135 up_read(&cpufreq_rwsem); 1136 1137 return ret; 1138 } 1139 1140 /** 1141 * cpufreq_add_dev - add a CPU device 1142 * 1143 * Adds the cpufreq interface for a CPU device. 1144 * 1145 * The Oracle says: try running cpufreq registration/unregistration concurrently 1146 * with with cpu hotplugging and all hell will break loose. Tried to clean this 1147 * mess up, but more thorough testing is needed. - Mathieu 1148 */ 1149 static int cpufreq_add_dev(struct device *dev, struct subsys_interface *sif) 1150 { 1151 return __cpufreq_add_dev(dev, sif, false); 1152 } 1153 1154 static int cpufreq_nominate_new_policy_cpu(struct cpufreq_policy *policy, 1155 unsigned int old_cpu) 1156 { 1157 struct device *cpu_dev; 1158 int ret; 1159 1160 /* first sibling now owns the new sysfs dir */ 1161 cpu_dev = get_cpu_device(cpumask_any_but(policy->cpus, old_cpu)); 1162 1163 sysfs_remove_link(&cpu_dev->kobj, "cpufreq"); 1164 ret = kobject_move(&policy->kobj, &cpu_dev->kobj); 1165 if (ret) { 1166 pr_err("%s: Failed to move kobj: %d", __func__, ret); 1167 1168 down_write(&policy->rwsem); 1169 cpumask_set_cpu(old_cpu, policy->cpus); 1170 up_write(&policy->rwsem); 1171 1172 ret = sysfs_create_link(&cpu_dev->kobj, &policy->kobj, 1173 "cpufreq"); 1174 1175 return -EINVAL; 1176 } 1177 1178 return cpu_dev->id; 1179 } 1180 1181 static int __cpufreq_remove_dev_prepare(struct device *dev, 1182 struct subsys_interface *sif, 1183 bool frozen) 1184 { 1185 unsigned int cpu = dev->id, cpus; 1186 int new_cpu, ret; 1187 unsigned long flags; 1188 struct cpufreq_policy *policy; 1189 1190 pr_debug("%s: unregistering CPU %u\n", __func__, cpu); 1191 1192 write_lock_irqsave(&cpufreq_driver_lock, flags); 1193 1194 policy = per_cpu(cpufreq_cpu_data, cpu); 1195 1196 /* Save the policy somewhere when doing a light-weight tear-down */ 1197 if (frozen) 1198 per_cpu(cpufreq_cpu_data_fallback, cpu) = policy; 1199 1200 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 1201 1202 if (!policy) { 1203 pr_debug("%s: No cpu_data found\n", __func__); 1204 return -EINVAL; 1205 } 1206 1207 if (has_target()) { 1208 ret = __cpufreq_governor(policy, CPUFREQ_GOV_STOP); 1209 if (ret) { 1210 pr_err("%s: Failed to stop governor\n", __func__); 1211 return ret; 1212 } 1213 } 1214 1215 #ifdef CONFIG_HOTPLUG_CPU 1216 if (!cpufreq_driver->setpolicy) 1217 strncpy(per_cpu(cpufreq_cpu_governor, cpu), 1218 policy->governor->name, CPUFREQ_NAME_LEN); 1219 #endif 1220 1221 down_read(&policy->rwsem); 1222 cpus = cpumask_weight(policy->cpus); 1223 up_read(&policy->rwsem); 1224 1225 if (cpu != policy->cpu) { 1226 if (!frozen) 1227 sysfs_remove_link(&dev->kobj, "cpufreq"); 1228 } else if (cpus > 1) { 1229 new_cpu = cpufreq_nominate_new_policy_cpu(policy, cpu); 1230 if (new_cpu >= 0) { 1231 update_policy_cpu(policy, new_cpu); 1232 1233 if (!frozen) { 1234 pr_debug("%s: policy Kobject moved to cpu: %d from: %d\n", 1235 __func__, new_cpu, cpu); 1236 } 1237 } 1238 } 1239 1240 return 0; 1241 } 1242 1243 static int __cpufreq_remove_dev_finish(struct device *dev, 1244 struct subsys_interface *sif, 1245 bool frozen) 1246 { 1247 unsigned int cpu = dev->id, cpus; 1248 int ret; 1249 unsigned long flags; 1250 struct cpufreq_policy *policy; 1251 1252 read_lock_irqsave(&cpufreq_driver_lock, flags); 1253 policy = per_cpu(cpufreq_cpu_data, cpu); 1254 read_unlock_irqrestore(&cpufreq_driver_lock, flags); 1255 1256 if (!policy) { 1257 pr_debug("%s: No cpu_data found\n", __func__); 1258 return -EINVAL; 1259 } 1260 1261 down_write(&policy->rwsem); 1262 cpus = cpumask_weight(policy->cpus); 1263 1264 if (cpus > 1) 1265 cpumask_clear_cpu(cpu, policy->cpus); 1266 up_write(&policy->rwsem); 1267 1268 /* If cpu is last user of policy, free policy */ 1269 if (cpus == 1) { 1270 if (has_target()) { 1271 ret = __cpufreq_governor(policy, 1272 CPUFREQ_GOV_POLICY_EXIT); 1273 if (ret) { 1274 pr_err("%s: Failed to exit governor\n", 1275 __func__); 1276 return ret; 1277 } 1278 } 1279 1280 if (!frozen) 1281 cpufreq_policy_put_kobj(policy); 1282 1283 /* 1284 * Perform the ->exit() even during light-weight tear-down, 1285 * since this is a core component, and is essential for the 1286 * subsequent light-weight ->init() to succeed. 1287 */ 1288 if (cpufreq_driver->exit) 1289 cpufreq_driver->exit(policy); 1290 1291 /* Remove policy from list of active policies */ 1292 write_lock_irqsave(&cpufreq_driver_lock, flags); 1293 list_del(&policy->policy_list); 1294 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 1295 1296 if (!frozen) 1297 cpufreq_policy_free(policy); 1298 } else { 1299 if (has_target()) { 1300 if ((ret = __cpufreq_governor(policy, CPUFREQ_GOV_START)) || 1301 (ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS))) { 1302 pr_err("%s: Failed to start governor\n", 1303 __func__); 1304 return ret; 1305 } 1306 } 1307 } 1308 1309 per_cpu(cpufreq_cpu_data, cpu) = NULL; 1310 return 0; 1311 } 1312 1313 /** 1314 * cpufreq_remove_dev - remove a CPU device 1315 * 1316 * Removes the cpufreq interface for a CPU device. 1317 */ 1318 static int cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif) 1319 { 1320 unsigned int cpu = dev->id; 1321 int ret; 1322 1323 if (cpu_is_offline(cpu)) 1324 return 0; 1325 1326 ret = __cpufreq_remove_dev_prepare(dev, sif, false); 1327 1328 if (!ret) 1329 ret = __cpufreq_remove_dev_finish(dev, sif, false); 1330 1331 return ret; 1332 } 1333 1334 static void handle_update(struct work_struct *work) 1335 { 1336 struct cpufreq_policy *policy = 1337 container_of(work, struct cpufreq_policy, update); 1338 unsigned int cpu = policy->cpu; 1339 pr_debug("handle_update for cpu %u called\n", cpu); 1340 cpufreq_update_policy(cpu); 1341 } 1342 1343 /** 1344 * cpufreq_out_of_sync - If actual and saved CPU frequency differs, we're 1345 * in deep trouble. 1346 * @cpu: cpu number 1347 * @old_freq: CPU frequency the kernel thinks the CPU runs at 1348 * @new_freq: CPU frequency the CPU actually runs at 1349 * 1350 * We adjust to current frequency first, and need to clean up later. 1351 * So either call to cpufreq_update_policy() or schedule handle_update()). 1352 */ 1353 static void cpufreq_out_of_sync(unsigned int cpu, unsigned int old_freq, 1354 unsigned int new_freq) 1355 { 1356 struct cpufreq_policy *policy; 1357 struct cpufreq_freqs freqs; 1358 unsigned long flags; 1359 1360 pr_debug("Warning: CPU frequency out of sync: cpufreq and timing " 1361 "core thinks of %u, is %u kHz.\n", old_freq, new_freq); 1362 1363 freqs.old = old_freq; 1364 freqs.new = new_freq; 1365 1366 read_lock_irqsave(&cpufreq_driver_lock, flags); 1367 policy = per_cpu(cpufreq_cpu_data, cpu); 1368 read_unlock_irqrestore(&cpufreq_driver_lock, flags); 1369 1370 cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); 1371 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); 1372 } 1373 1374 /** 1375 * cpufreq_quick_get - get the CPU frequency (in kHz) from policy->cur 1376 * @cpu: CPU number 1377 * 1378 * This is the last known freq, without actually getting it from the driver. 1379 * Return value will be same as what is shown in scaling_cur_freq in sysfs. 1380 */ 1381 unsigned int cpufreq_quick_get(unsigned int cpu) 1382 { 1383 struct cpufreq_policy *policy; 1384 unsigned int ret_freq = 0; 1385 1386 if (cpufreq_driver && cpufreq_driver->setpolicy && cpufreq_driver->get) 1387 return cpufreq_driver->get(cpu); 1388 1389 policy = cpufreq_cpu_get(cpu); 1390 if (policy) { 1391 ret_freq = policy->cur; 1392 cpufreq_cpu_put(policy); 1393 } 1394 1395 return ret_freq; 1396 } 1397 EXPORT_SYMBOL(cpufreq_quick_get); 1398 1399 /** 1400 * cpufreq_quick_get_max - get the max reported CPU frequency for this CPU 1401 * @cpu: CPU number 1402 * 1403 * Just return the max possible frequency for a given CPU. 1404 */ 1405 unsigned int cpufreq_quick_get_max(unsigned int cpu) 1406 { 1407 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); 1408 unsigned int ret_freq = 0; 1409 1410 if (policy) { 1411 ret_freq = policy->max; 1412 cpufreq_cpu_put(policy); 1413 } 1414 1415 return ret_freq; 1416 } 1417 EXPORT_SYMBOL(cpufreq_quick_get_max); 1418 1419 static unsigned int __cpufreq_get(unsigned int cpu) 1420 { 1421 struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu); 1422 unsigned int ret_freq = 0; 1423 1424 if (!cpufreq_driver->get) 1425 return ret_freq; 1426 1427 ret_freq = cpufreq_driver->get(cpu); 1428 1429 if (ret_freq && policy->cur && 1430 !(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) { 1431 /* verify no discrepancy between actual and 1432 saved value exists */ 1433 if (unlikely(ret_freq != policy->cur)) { 1434 cpufreq_out_of_sync(cpu, policy->cur, ret_freq); 1435 schedule_work(&policy->update); 1436 } 1437 } 1438 1439 return ret_freq; 1440 } 1441 1442 /** 1443 * cpufreq_get - get the current CPU frequency (in kHz) 1444 * @cpu: CPU number 1445 * 1446 * Get the CPU current (static) CPU frequency 1447 */ 1448 unsigned int cpufreq_get(unsigned int cpu) 1449 { 1450 struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu); 1451 unsigned int ret_freq = 0; 1452 1453 if (cpufreq_disabled() || !cpufreq_driver) 1454 return -ENOENT; 1455 1456 BUG_ON(!policy); 1457 1458 if (!down_read_trylock(&cpufreq_rwsem)) 1459 return 0; 1460 1461 down_read(&policy->rwsem); 1462 1463 ret_freq = __cpufreq_get(cpu); 1464 1465 up_read(&policy->rwsem); 1466 up_read(&cpufreq_rwsem); 1467 1468 return ret_freq; 1469 } 1470 EXPORT_SYMBOL(cpufreq_get); 1471 1472 static struct subsys_interface cpufreq_interface = { 1473 .name = "cpufreq", 1474 .subsys = &cpu_subsys, 1475 .add_dev = cpufreq_add_dev, 1476 .remove_dev = cpufreq_remove_dev, 1477 }; 1478 1479 /** 1480 * cpufreq_bp_suspend - Prepare the boot CPU for system suspend. 1481 * 1482 * This function is only executed for the boot processor. The other CPUs 1483 * have been put offline by means of CPU hotplug. 1484 */ 1485 static int cpufreq_bp_suspend(void) 1486 { 1487 int ret = 0; 1488 1489 int cpu = smp_processor_id(); 1490 struct cpufreq_policy *policy; 1491 1492 pr_debug("suspending cpu %u\n", cpu); 1493 1494 /* If there's no policy for the boot CPU, we have nothing to do. */ 1495 policy = cpufreq_cpu_get(cpu); 1496 if (!policy) 1497 return 0; 1498 1499 if (cpufreq_driver->suspend) { 1500 ret = cpufreq_driver->suspend(policy); 1501 if (ret) 1502 printk(KERN_ERR "cpufreq: suspend failed in ->suspend " 1503 "step on CPU %u\n", policy->cpu); 1504 } 1505 1506 cpufreq_cpu_put(policy); 1507 return ret; 1508 } 1509 1510 /** 1511 * cpufreq_bp_resume - Restore proper frequency handling of the boot CPU. 1512 * 1513 * 1.) resume CPUfreq hardware support (cpufreq_driver->resume()) 1514 * 2.) schedule call cpufreq_update_policy() ASAP as interrupts are 1515 * restored. It will verify that the current freq is in sync with 1516 * what we believe it to be. This is a bit later than when it 1517 * should be, but nonethteless it's better than calling 1518 * cpufreq_driver->get() here which might re-enable interrupts... 1519 * 1520 * This function is only executed for the boot CPU. The other CPUs have not 1521 * been turned on yet. 1522 */ 1523 static void cpufreq_bp_resume(void) 1524 { 1525 int ret = 0; 1526 1527 int cpu = smp_processor_id(); 1528 struct cpufreq_policy *policy; 1529 1530 pr_debug("resuming cpu %u\n", cpu); 1531 1532 /* If there's no policy for the boot CPU, we have nothing to do. */ 1533 policy = cpufreq_cpu_get(cpu); 1534 if (!policy) 1535 return; 1536 1537 if (cpufreq_driver->resume) { 1538 ret = cpufreq_driver->resume(policy); 1539 if (ret) { 1540 printk(KERN_ERR "cpufreq: resume failed in ->resume " 1541 "step on CPU %u\n", policy->cpu); 1542 goto fail; 1543 } 1544 } 1545 1546 schedule_work(&policy->update); 1547 1548 fail: 1549 cpufreq_cpu_put(policy); 1550 } 1551 1552 static struct syscore_ops cpufreq_syscore_ops = { 1553 .suspend = cpufreq_bp_suspend, 1554 .resume = cpufreq_bp_resume, 1555 }; 1556 1557 /** 1558 * cpufreq_get_current_driver - return current driver's name 1559 * 1560 * Return the name string of the currently loaded cpufreq driver 1561 * or NULL, if none. 1562 */ 1563 const char *cpufreq_get_current_driver(void) 1564 { 1565 if (cpufreq_driver) 1566 return cpufreq_driver->name; 1567 1568 return NULL; 1569 } 1570 EXPORT_SYMBOL_GPL(cpufreq_get_current_driver); 1571 1572 /********************************************************************* 1573 * NOTIFIER LISTS INTERFACE * 1574 *********************************************************************/ 1575 1576 /** 1577 * cpufreq_register_notifier - register a driver with cpufreq 1578 * @nb: notifier function to register 1579 * @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER 1580 * 1581 * Add a driver to one of two lists: either a list of drivers that 1582 * are notified about clock rate changes (once before and once after 1583 * the transition), or a list of drivers that are notified about 1584 * changes in cpufreq policy. 1585 * 1586 * This function may sleep, and has the same return conditions as 1587 * blocking_notifier_chain_register. 1588 */ 1589 int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list) 1590 { 1591 int ret; 1592 1593 if (cpufreq_disabled()) 1594 return -EINVAL; 1595 1596 WARN_ON(!init_cpufreq_transition_notifier_list_called); 1597 1598 switch (list) { 1599 case CPUFREQ_TRANSITION_NOTIFIER: 1600 ret = srcu_notifier_chain_register( 1601 &cpufreq_transition_notifier_list, nb); 1602 break; 1603 case CPUFREQ_POLICY_NOTIFIER: 1604 ret = blocking_notifier_chain_register( 1605 &cpufreq_policy_notifier_list, nb); 1606 break; 1607 default: 1608 ret = -EINVAL; 1609 } 1610 1611 return ret; 1612 } 1613 EXPORT_SYMBOL(cpufreq_register_notifier); 1614 1615 /** 1616 * cpufreq_unregister_notifier - unregister a driver with cpufreq 1617 * @nb: notifier block to be unregistered 1618 * @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER 1619 * 1620 * Remove a driver from the CPU frequency notifier list. 1621 * 1622 * This function may sleep, and has the same return conditions as 1623 * blocking_notifier_chain_unregister. 1624 */ 1625 int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list) 1626 { 1627 int ret; 1628 1629 if (cpufreq_disabled()) 1630 return -EINVAL; 1631 1632 switch (list) { 1633 case CPUFREQ_TRANSITION_NOTIFIER: 1634 ret = srcu_notifier_chain_unregister( 1635 &cpufreq_transition_notifier_list, nb); 1636 break; 1637 case CPUFREQ_POLICY_NOTIFIER: 1638 ret = blocking_notifier_chain_unregister( 1639 &cpufreq_policy_notifier_list, nb); 1640 break; 1641 default: 1642 ret = -EINVAL; 1643 } 1644 1645 return ret; 1646 } 1647 EXPORT_SYMBOL(cpufreq_unregister_notifier); 1648 1649 1650 /********************************************************************* 1651 * GOVERNORS * 1652 *********************************************************************/ 1653 1654 int __cpufreq_driver_target(struct cpufreq_policy *policy, 1655 unsigned int target_freq, 1656 unsigned int relation) 1657 { 1658 int retval = -EINVAL; 1659 unsigned int old_target_freq = target_freq; 1660 1661 if (cpufreq_disabled()) 1662 return -ENODEV; 1663 1664 /* Make sure that target_freq is within supported range */ 1665 if (target_freq > policy->max) 1666 target_freq = policy->max; 1667 if (target_freq < policy->min) 1668 target_freq = policy->min; 1669 1670 pr_debug("target for CPU %u: %u kHz, relation %u, requested %u kHz\n", 1671 policy->cpu, target_freq, relation, old_target_freq); 1672 1673 /* 1674 * This might look like a redundant call as we are checking it again 1675 * after finding index. But it is left intentionally for cases where 1676 * exactly same freq is called again and so we can save on few function 1677 * calls. 1678 */ 1679 if (target_freq == policy->cur) 1680 return 0; 1681 1682 if (cpufreq_driver->target) 1683 retval = cpufreq_driver->target(policy, target_freq, relation); 1684 else if (cpufreq_driver->target_index) { 1685 struct cpufreq_frequency_table *freq_table; 1686 struct cpufreq_freqs freqs; 1687 bool notify; 1688 int index; 1689 1690 freq_table = cpufreq_frequency_get_table(policy->cpu); 1691 if (unlikely(!freq_table)) { 1692 pr_err("%s: Unable to find freq_table\n", __func__); 1693 goto out; 1694 } 1695 1696 retval = cpufreq_frequency_table_target(policy, freq_table, 1697 target_freq, relation, &index); 1698 if (unlikely(retval)) { 1699 pr_err("%s: Unable to find matching freq\n", __func__); 1700 goto out; 1701 } 1702 1703 if (freq_table[index].frequency == policy->cur) { 1704 retval = 0; 1705 goto out; 1706 } 1707 1708 notify = !(cpufreq_driver->flags & CPUFREQ_ASYNC_NOTIFICATION); 1709 1710 if (notify) { 1711 freqs.old = policy->cur; 1712 freqs.new = freq_table[index].frequency; 1713 freqs.flags = 0; 1714 1715 pr_debug("%s: cpu: %d, oldfreq: %u, new freq: %u\n", 1716 __func__, policy->cpu, freqs.old, 1717 freqs.new); 1718 1719 cpufreq_notify_transition(policy, &freqs, 1720 CPUFREQ_PRECHANGE); 1721 } 1722 1723 retval = cpufreq_driver->target_index(policy, index); 1724 if (retval) 1725 pr_err("%s: Failed to change cpu frequency: %d\n", 1726 __func__, retval); 1727 1728 if (notify) { 1729 /* 1730 * Notify with old freq in case we failed to change 1731 * frequency 1732 */ 1733 if (retval) 1734 freqs.new = freqs.old; 1735 1736 cpufreq_notify_transition(policy, &freqs, 1737 CPUFREQ_POSTCHANGE); 1738 } 1739 } 1740 1741 out: 1742 return retval; 1743 } 1744 EXPORT_SYMBOL_GPL(__cpufreq_driver_target); 1745 1746 int cpufreq_driver_target(struct cpufreq_policy *policy, 1747 unsigned int target_freq, 1748 unsigned int relation) 1749 { 1750 int ret = -EINVAL; 1751 1752 down_write(&policy->rwsem); 1753 1754 ret = __cpufreq_driver_target(policy, target_freq, relation); 1755 1756 up_write(&policy->rwsem); 1757 1758 return ret; 1759 } 1760 EXPORT_SYMBOL_GPL(cpufreq_driver_target); 1761 1762 /* 1763 * when "event" is CPUFREQ_GOV_LIMITS 1764 */ 1765 1766 static int __cpufreq_governor(struct cpufreq_policy *policy, 1767 unsigned int event) 1768 { 1769 int ret; 1770 1771 /* Only must be defined when default governor is known to have latency 1772 restrictions, like e.g. conservative or ondemand. 1773 That this is the case is already ensured in Kconfig 1774 */ 1775 #ifdef CONFIG_CPU_FREQ_GOV_PERFORMANCE 1776 struct cpufreq_governor *gov = &cpufreq_gov_performance; 1777 #else 1778 struct cpufreq_governor *gov = NULL; 1779 #endif 1780 1781 if (policy->governor->max_transition_latency && 1782 policy->cpuinfo.transition_latency > 1783 policy->governor->max_transition_latency) { 1784 if (!gov) 1785 return -EINVAL; 1786 else { 1787 printk(KERN_WARNING "%s governor failed, too long" 1788 " transition latency of HW, fallback" 1789 " to %s governor\n", 1790 policy->governor->name, 1791 gov->name); 1792 policy->governor = gov; 1793 } 1794 } 1795 1796 if (event == CPUFREQ_GOV_POLICY_INIT) 1797 if (!try_module_get(policy->governor->owner)) 1798 return -EINVAL; 1799 1800 pr_debug("__cpufreq_governor for CPU %u, event %u\n", 1801 policy->cpu, event); 1802 1803 mutex_lock(&cpufreq_governor_lock); 1804 if ((policy->governor_enabled && event == CPUFREQ_GOV_START) 1805 || (!policy->governor_enabled 1806 && (event == CPUFREQ_GOV_LIMITS || event == CPUFREQ_GOV_STOP))) { 1807 mutex_unlock(&cpufreq_governor_lock); 1808 return -EBUSY; 1809 } 1810 1811 if (event == CPUFREQ_GOV_STOP) 1812 policy->governor_enabled = false; 1813 else if (event == CPUFREQ_GOV_START) 1814 policy->governor_enabled = true; 1815 1816 mutex_unlock(&cpufreq_governor_lock); 1817 1818 ret = policy->governor->governor(policy, event); 1819 1820 if (!ret) { 1821 if (event == CPUFREQ_GOV_POLICY_INIT) 1822 policy->governor->initialized++; 1823 else if (event == CPUFREQ_GOV_POLICY_EXIT) 1824 policy->governor->initialized--; 1825 } else { 1826 /* Restore original values */ 1827 mutex_lock(&cpufreq_governor_lock); 1828 if (event == CPUFREQ_GOV_STOP) 1829 policy->governor_enabled = true; 1830 else if (event == CPUFREQ_GOV_START) 1831 policy->governor_enabled = false; 1832 mutex_unlock(&cpufreq_governor_lock); 1833 } 1834 1835 if (((event == CPUFREQ_GOV_POLICY_INIT) && ret) || 1836 ((event == CPUFREQ_GOV_POLICY_EXIT) && !ret)) 1837 module_put(policy->governor->owner); 1838 1839 return ret; 1840 } 1841 1842 int cpufreq_register_governor(struct cpufreq_governor *governor) 1843 { 1844 int err; 1845 1846 if (!governor) 1847 return -EINVAL; 1848 1849 if (cpufreq_disabled()) 1850 return -ENODEV; 1851 1852 mutex_lock(&cpufreq_governor_mutex); 1853 1854 governor->initialized = 0; 1855 err = -EBUSY; 1856 if (__find_governor(governor->name) == NULL) { 1857 err = 0; 1858 list_add(&governor->governor_list, &cpufreq_governor_list); 1859 } 1860 1861 mutex_unlock(&cpufreq_governor_mutex); 1862 return err; 1863 } 1864 EXPORT_SYMBOL_GPL(cpufreq_register_governor); 1865 1866 void cpufreq_unregister_governor(struct cpufreq_governor *governor) 1867 { 1868 #ifdef CONFIG_HOTPLUG_CPU 1869 int cpu; 1870 #endif 1871 1872 if (!governor) 1873 return; 1874 1875 if (cpufreq_disabled()) 1876 return; 1877 1878 #ifdef CONFIG_HOTPLUG_CPU 1879 for_each_present_cpu(cpu) { 1880 if (cpu_online(cpu)) 1881 continue; 1882 if (!strcmp(per_cpu(cpufreq_cpu_governor, cpu), governor->name)) 1883 strcpy(per_cpu(cpufreq_cpu_governor, cpu), "\0"); 1884 } 1885 #endif 1886 1887 mutex_lock(&cpufreq_governor_mutex); 1888 list_del(&governor->governor_list); 1889 mutex_unlock(&cpufreq_governor_mutex); 1890 return; 1891 } 1892 EXPORT_SYMBOL_GPL(cpufreq_unregister_governor); 1893 1894 1895 /********************************************************************* 1896 * POLICY INTERFACE * 1897 *********************************************************************/ 1898 1899 /** 1900 * cpufreq_get_policy - get the current cpufreq_policy 1901 * @policy: struct cpufreq_policy into which the current cpufreq_policy 1902 * is written 1903 * 1904 * Reads the current cpufreq policy. 1905 */ 1906 int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu) 1907 { 1908 struct cpufreq_policy *cpu_policy; 1909 if (!policy) 1910 return -EINVAL; 1911 1912 cpu_policy = cpufreq_cpu_get(cpu); 1913 if (!cpu_policy) 1914 return -EINVAL; 1915 1916 memcpy(policy, cpu_policy, sizeof(*policy)); 1917 1918 cpufreq_cpu_put(cpu_policy); 1919 return 0; 1920 } 1921 EXPORT_SYMBOL(cpufreq_get_policy); 1922 1923 /* 1924 * policy : current policy. 1925 * new_policy: policy to be set. 1926 */ 1927 static int cpufreq_set_policy(struct cpufreq_policy *policy, 1928 struct cpufreq_policy *new_policy) 1929 { 1930 int ret = 0, failed = 1; 1931 1932 pr_debug("setting new policy for CPU %u: %u - %u kHz\n", new_policy->cpu, 1933 new_policy->min, new_policy->max); 1934 1935 memcpy(&new_policy->cpuinfo, &policy->cpuinfo, sizeof(policy->cpuinfo)); 1936 1937 if (new_policy->min > policy->max || new_policy->max < policy->min) { 1938 ret = -EINVAL; 1939 goto error_out; 1940 } 1941 1942 /* verify the cpu speed can be set within this limit */ 1943 ret = cpufreq_driver->verify(new_policy); 1944 if (ret) 1945 goto error_out; 1946 1947 /* adjust if necessary - all reasons */ 1948 blocking_notifier_call_chain(&cpufreq_policy_notifier_list, 1949 CPUFREQ_ADJUST, new_policy); 1950 1951 /* adjust if necessary - hardware incompatibility*/ 1952 blocking_notifier_call_chain(&cpufreq_policy_notifier_list, 1953 CPUFREQ_INCOMPATIBLE, new_policy); 1954 1955 /* 1956 * verify the cpu speed can be set within this limit, which might be 1957 * different to the first one 1958 */ 1959 ret = cpufreq_driver->verify(new_policy); 1960 if (ret) 1961 goto error_out; 1962 1963 /* notification of the new policy */ 1964 blocking_notifier_call_chain(&cpufreq_policy_notifier_list, 1965 CPUFREQ_NOTIFY, new_policy); 1966 1967 policy->min = new_policy->min; 1968 policy->max = new_policy->max; 1969 1970 pr_debug("new min and max freqs are %u - %u kHz\n", 1971 policy->min, policy->max); 1972 1973 if (cpufreq_driver->setpolicy) { 1974 policy->policy = new_policy->policy; 1975 pr_debug("setting range\n"); 1976 ret = cpufreq_driver->setpolicy(new_policy); 1977 } else { 1978 if (new_policy->governor != policy->governor) { 1979 /* save old, working values */ 1980 struct cpufreq_governor *old_gov = policy->governor; 1981 1982 pr_debug("governor switch\n"); 1983 1984 /* end old governor */ 1985 if (policy->governor) { 1986 __cpufreq_governor(policy, CPUFREQ_GOV_STOP); 1987 up_write(&policy->rwsem); 1988 __cpufreq_governor(policy, 1989 CPUFREQ_GOV_POLICY_EXIT); 1990 down_write(&policy->rwsem); 1991 } 1992 1993 /* start new governor */ 1994 policy->governor = new_policy->governor; 1995 if (!__cpufreq_governor(policy, CPUFREQ_GOV_POLICY_INIT)) { 1996 if (!__cpufreq_governor(policy, CPUFREQ_GOV_START)) { 1997 failed = 0; 1998 } else { 1999 up_write(&policy->rwsem); 2000 __cpufreq_governor(policy, 2001 CPUFREQ_GOV_POLICY_EXIT); 2002 down_write(&policy->rwsem); 2003 } 2004 } 2005 2006 if (failed) { 2007 /* new governor failed, so re-start old one */ 2008 pr_debug("starting governor %s failed\n", 2009 policy->governor->name); 2010 if (old_gov) { 2011 policy->governor = old_gov; 2012 __cpufreq_governor(policy, 2013 CPUFREQ_GOV_POLICY_INIT); 2014 __cpufreq_governor(policy, 2015 CPUFREQ_GOV_START); 2016 } 2017 ret = -EINVAL; 2018 goto error_out; 2019 } 2020 /* might be a policy change, too, so fall through */ 2021 } 2022 pr_debug("governor: change or update limits\n"); 2023 ret = __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS); 2024 } 2025 2026 error_out: 2027 return ret; 2028 } 2029 2030 /** 2031 * cpufreq_update_policy - re-evaluate an existing cpufreq policy 2032 * @cpu: CPU which shall be re-evaluated 2033 * 2034 * Useful for policy notifiers which have different necessities 2035 * at different times. 2036 */ 2037 int cpufreq_update_policy(unsigned int cpu) 2038 { 2039 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); 2040 struct cpufreq_policy new_policy; 2041 int ret; 2042 2043 if (!policy) { 2044 ret = -ENODEV; 2045 goto no_policy; 2046 } 2047 2048 down_write(&policy->rwsem); 2049 2050 pr_debug("updating policy for CPU %u\n", cpu); 2051 memcpy(&new_policy, policy, sizeof(*policy)); 2052 new_policy.min = policy->user_policy.min; 2053 new_policy.max = policy->user_policy.max; 2054 new_policy.policy = policy->user_policy.policy; 2055 new_policy.governor = policy->user_policy.governor; 2056 2057 /* 2058 * BIOS might change freq behind our back 2059 * -> ask driver for current freq and notify governors about a change 2060 */ 2061 if (cpufreq_driver->get) { 2062 new_policy.cur = cpufreq_driver->get(cpu); 2063 if (!policy->cur) { 2064 pr_debug("Driver did not initialize current freq"); 2065 policy->cur = new_policy.cur; 2066 } else { 2067 if (policy->cur != new_policy.cur && has_target()) 2068 cpufreq_out_of_sync(cpu, policy->cur, 2069 new_policy.cur); 2070 } 2071 } 2072 2073 ret = cpufreq_set_policy(policy, &new_policy); 2074 2075 up_write(&policy->rwsem); 2076 2077 cpufreq_cpu_put(policy); 2078 no_policy: 2079 return ret; 2080 } 2081 EXPORT_SYMBOL(cpufreq_update_policy); 2082 2083 static int cpufreq_cpu_callback(struct notifier_block *nfb, 2084 unsigned long action, void *hcpu) 2085 { 2086 unsigned int cpu = (unsigned long)hcpu; 2087 struct device *dev; 2088 bool frozen = false; 2089 2090 dev = get_cpu_device(cpu); 2091 if (dev) { 2092 2093 if (action & CPU_TASKS_FROZEN) 2094 frozen = true; 2095 2096 switch (action & ~CPU_TASKS_FROZEN) { 2097 case CPU_ONLINE: 2098 __cpufreq_add_dev(dev, NULL, frozen); 2099 cpufreq_update_policy(cpu); 2100 break; 2101 2102 case CPU_DOWN_PREPARE: 2103 __cpufreq_remove_dev_prepare(dev, NULL, frozen); 2104 break; 2105 2106 case CPU_POST_DEAD: 2107 __cpufreq_remove_dev_finish(dev, NULL, frozen); 2108 break; 2109 2110 case CPU_DOWN_FAILED: 2111 __cpufreq_add_dev(dev, NULL, frozen); 2112 break; 2113 } 2114 } 2115 return NOTIFY_OK; 2116 } 2117 2118 static struct notifier_block __refdata cpufreq_cpu_notifier = { 2119 .notifier_call = cpufreq_cpu_callback, 2120 }; 2121 2122 /********************************************************************* 2123 * REGISTER / UNREGISTER CPUFREQ DRIVER * 2124 *********************************************************************/ 2125 2126 /** 2127 * cpufreq_register_driver - register a CPU Frequency driver 2128 * @driver_data: A struct cpufreq_driver containing the values# 2129 * submitted by the CPU Frequency driver. 2130 * 2131 * Registers a CPU Frequency driver to this core code. This code 2132 * returns zero on success, -EBUSY when another driver got here first 2133 * (and isn't unregistered in the meantime). 2134 * 2135 */ 2136 int cpufreq_register_driver(struct cpufreq_driver *driver_data) 2137 { 2138 unsigned long flags; 2139 int ret; 2140 2141 if (cpufreq_disabled()) 2142 return -ENODEV; 2143 2144 if (!driver_data || !driver_data->verify || !driver_data->init || 2145 !(driver_data->setpolicy || driver_data->target_index || 2146 driver_data->target)) 2147 return -EINVAL; 2148 2149 pr_debug("trying to register driver %s\n", driver_data->name); 2150 2151 if (driver_data->setpolicy) 2152 driver_data->flags |= CPUFREQ_CONST_LOOPS; 2153 2154 write_lock_irqsave(&cpufreq_driver_lock, flags); 2155 if (cpufreq_driver) { 2156 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 2157 return -EEXIST; 2158 } 2159 cpufreq_driver = driver_data; 2160 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 2161 2162 ret = subsys_interface_register(&cpufreq_interface); 2163 if (ret) 2164 goto err_null_driver; 2165 2166 if (!(cpufreq_driver->flags & CPUFREQ_STICKY)) { 2167 int i; 2168 ret = -ENODEV; 2169 2170 /* check for at least one working CPU */ 2171 for (i = 0; i < nr_cpu_ids; i++) 2172 if (cpu_possible(i) && per_cpu(cpufreq_cpu_data, i)) { 2173 ret = 0; 2174 break; 2175 } 2176 2177 /* if all ->init() calls failed, unregister */ 2178 if (ret) { 2179 pr_debug("no CPU initialized for driver %s\n", 2180 driver_data->name); 2181 goto err_if_unreg; 2182 } 2183 } 2184 2185 register_hotcpu_notifier(&cpufreq_cpu_notifier); 2186 pr_debug("driver %s up and running\n", driver_data->name); 2187 2188 return 0; 2189 err_if_unreg: 2190 subsys_interface_unregister(&cpufreq_interface); 2191 err_null_driver: 2192 write_lock_irqsave(&cpufreq_driver_lock, flags); 2193 cpufreq_driver = NULL; 2194 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 2195 return ret; 2196 } 2197 EXPORT_SYMBOL_GPL(cpufreq_register_driver); 2198 2199 /** 2200 * cpufreq_unregister_driver - unregister the current CPUFreq driver 2201 * 2202 * Unregister the current CPUFreq driver. Only call this if you have 2203 * the right to do so, i.e. if you have succeeded in initialising before! 2204 * Returns zero if successful, and -EINVAL if the cpufreq_driver is 2205 * currently not initialised. 2206 */ 2207 int cpufreq_unregister_driver(struct cpufreq_driver *driver) 2208 { 2209 unsigned long flags; 2210 2211 if (!cpufreq_driver || (driver != cpufreq_driver)) 2212 return -EINVAL; 2213 2214 pr_debug("unregistering driver %s\n", driver->name); 2215 2216 subsys_interface_unregister(&cpufreq_interface); 2217 unregister_hotcpu_notifier(&cpufreq_cpu_notifier); 2218 2219 down_write(&cpufreq_rwsem); 2220 write_lock_irqsave(&cpufreq_driver_lock, flags); 2221 2222 cpufreq_driver = NULL; 2223 2224 write_unlock_irqrestore(&cpufreq_driver_lock, flags); 2225 up_write(&cpufreq_rwsem); 2226 2227 return 0; 2228 } 2229 EXPORT_SYMBOL_GPL(cpufreq_unregister_driver); 2230 2231 static int __init cpufreq_core_init(void) 2232 { 2233 if (cpufreq_disabled()) 2234 return -ENODEV; 2235 2236 cpufreq_global_kobject = kobject_create(); 2237 BUG_ON(!cpufreq_global_kobject); 2238 register_syscore_ops(&cpufreq_syscore_ops); 2239 2240 return 0; 2241 } 2242 core_initcall(cpufreq_core_init); 2243