1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16
17#include <linux/cpu.h>
18#include <linux/cpufreq.h>
19#include <linux/cpu_cooling.h>
20#include <linux/delay.h>
21#include <linux/device.h>
22#include <linux/init.h>
23#include <linux/kernel_stat.h>
24#include <linux/module.h>
25#include <linux/mutex.h>
26#include <linux/pm_qos.h>
27#include <linux/slab.h>
28#include <linux/suspend.h>
29#include <linux/syscore_ops.h>
30#include <linux/tick.h>
31#include <trace/events/power.h>
32
33static LIST_HEAD(cpufreq_policy_list);
34
35
36#define for_each_suitable_policy(__policy, __active) \
37 list_for_each_entry(__policy, &cpufreq_policy_list, policy_list) \
38 if ((__active) == !policy_is_inactive(__policy))
39
40#define for_each_active_policy(__policy) \
41 for_each_suitable_policy(__policy, true)
42#define for_each_inactive_policy(__policy) \
43 for_each_suitable_policy(__policy, false)
44
45
46static LIST_HEAD(cpufreq_governor_list);
47#define for_each_governor(__governor) \
48 list_for_each_entry(__governor, &cpufreq_governor_list, governor_list)
49
50static char default_governor[CPUFREQ_NAME_LEN];
51
52
53
54
55
56
57static struct cpufreq_driver *cpufreq_driver;
58static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
59static DEFINE_RWLOCK(cpufreq_driver_lock);
60
61static DEFINE_STATIC_KEY_FALSE(cpufreq_freq_invariance);
62bool cpufreq_supports_freq_invariance(void)
63{
64 return static_branch_likely(&cpufreq_freq_invariance);
65}
66
67
68static bool cpufreq_suspended;
69
70static inline bool has_target(void)
71{
72 return cpufreq_driver->target_index || cpufreq_driver->target;
73}
74
75
76static unsigned int __cpufreq_get(struct cpufreq_policy *policy);
77static int cpufreq_init_governor(struct cpufreq_policy *policy);
78static void cpufreq_exit_governor(struct cpufreq_policy *policy);
79static void cpufreq_governor_limits(struct cpufreq_policy *policy);
80static int cpufreq_set_policy(struct cpufreq_policy *policy,
81 struct cpufreq_governor *new_gov,
82 unsigned int new_pol);
83
84
85
86
87
88
89
90
91static BLOCKING_NOTIFIER_HEAD(cpufreq_policy_notifier_list);
92SRCU_NOTIFIER_HEAD_STATIC(cpufreq_transition_notifier_list);
93
94static int off __read_mostly;
95static int cpufreq_disabled(void)
96{
97 return off;
98}
99void disable_cpufreq(void)
100{
101 off = 1;
102}
103static DEFINE_MUTEX(cpufreq_governor_mutex);
104
105bool have_governor_per_policy(void)
106{
107 return !!(cpufreq_driver->flags & CPUFREQ_HAVE_GOVERNOR_PER_POLICY);
108}
109EXPORT_SYMBOL_GPL(have_governor_per_policy);
110
111static struct kobject *cpufreq_global_kobject;
112
113struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy)
114{
115 if (have_governor_per_policy())
116 return &policy->kobj;
117 else
118 return cpufreq_global_kobject;
119}
120EXPORT_SYMBOL_GPL(get_governor_parent_kobj);
121
122static inline u64 get_cpu_idle_time_jiffy(unsigned int cpu, u64 *wall)
123{
124 struct kernel_cpustat kcpustat;
125 u64 cur_wall_time;
126 u64 idle_time;
127 u64 busy_time;
128
129 cur_wall_time = jiffies64_to_nsecs(get_jiffies_64());
130
131 kcpustat_cpu_fetch(&kcpustat, cpu);
132
133 busy_time = kcpustat.cpustat[CPUTIME_USER];
134 busy_time += kcpustat.cpustat[CPUTIME_SYSTEM];
135 busy_time += kcpustat.cpustat[CPUTIME_IRQ];
136 busy_time += kcpustat.cpustat[CPUTIME_SOFTIRQ];
137 busy_time += kcpustat.cpustat[CPUTIME_STEAL];
138 busy_time += kcpustat.cpustat[CPUTIME_NICE];
139
140 idle_time = cur_wall_time - busy_time;
141 if (wall)
142 *wall = div_u64(cur_wall_time, NSEC_PER_USEC);
143
144 return div_u64(idle_time, NSEC_PER_USEC);
145}
146
147u64 get_cpu_idle_time(unsigned int cpu, u64 *wall, int io_busy)
148{
149 u64 idle_time = get_cpu_idle_time_us(cpu, io_busy ? wall : NULL);
150
151 if (idle_time == -1ULL)
152 return get_cpu_idle_time_jiffy(cpu, wall);
153 else if (!io_busy)
154 idle_time += get_cpu_iowait_time_us(cpu, wall);
155
156 return idle_time;
157}
158EXPORT_SYMBOL_GPL(get_cpu_idle_time);
159
160
161
162
163
164
165
166
167void cpufreq_generic_init(struct cpufreq_policy *policy,
168 struct cpufreq_frequency_table *table,
169 unsigned int transition_latency)
170{
171 policy->freq_table = table;
172 policy->cpuinfo.transition_latency = transition_latency;
173
174
175
176
177
178 cpumask_setall(policy->cpus);
179}
180EXPORT_SYMBOL_GPL(cpufreq_generic_init);
181
182struct cpufreq_policy *cpufreq_cpu_get_raw(unsigned int cpu)
183{
184 struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu);
185
186 return policy && cpumask_test_cpu(cpu, policy->cpus) ? policy : NULL;
187}
188EXPORT_SYMBOL_GPL(cpufreq_cpu_get_raw);
189
190unsigned int cpufreq_generic_get(unsigned int cpu)
191{
192 struct cpufreq_policy *policy = cpufreq_cpu_get_raw(cpu);
193
194 if (!policy || IS_ERR(policy->clk)) {
195 pr_err("%s: No %s associated to cpu: %d\n",
196 __func__, policy ? "clk" : "policy", cpu);
197 return 0;
198 }
199
200 return clk_get_rate(policy->clk) / 1000;
201}
202EXPORT_SYMBOL_GPL(cpufreq_generic_get);
203
204
205
206
207
208
209
210
211
212
213
214
215struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
216{
217 struct cpufreq_policy *policy = NULL;
218 unsigned long flags;
219
220 if (WARN_ON(cpu >= nr_cpu_ids))
221 return NULL;
222
223
224 read_lock_irqsave(&cpufreq_driver_lock, flags);
225
226 if (cpufreq_driver) {
227
228 policy = cpufreq_cpu_get_raw(cpu);
229 if (policy)
230 kobject_get(&policy->kobj);
231 }
232
233 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
234
235 return policy;
236}
237EXPORT_SYMBOL_GPL(cpufreq_cpu_get);
238
239
240
241
242
243void cpufreq_cpu_put(struct cpufreq_policy *policy)
244{
245 kobject_put(&policy->kobj);
246}
247EXPORT_SYMBOL_GPL(cpufreq_cpu_put);
248
249
250
251
252
253void cpufreq_cpu_release(struct cpufreq_policy *policy)
254{
255 if (WARN_ON(!policy))
256 return;
257
258 lockdep_assert_held(&policy->rwsem);
259
260 up_write(&policy->rwsem);
261
262 cpufreq_cpu_put(policy);
263}
264
265
266
267
268
269
270
271
272
273
274
275
276
277struct cpufreq_policy *cpufreq_cpu_acquire(unsigned int cpu)
278{
279 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
280
281 if (!policy)
282 return NULL;
283
284 down_write(&policy->rwsem);
285
286 if (policy_is_inactive(policy)) {
287 cpufreq_cpu_release(policy);
288 return NULL;
289 }
290
291 return policy;
292}
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308static void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
309{
310#ifndef CONFIG_SMP
311 static unsigned long l_p_j_ref;
312 static unsigned int l_p_j_ref_freq;
313
314 if (ci->flags & CPUFREQ_CONST_LOOPS)
315 return;
316
317 if (!l_p_j_ref_freq) {
318 l_p_j_ref = loops_per_jiffy;
319 l_p_j_ref_freq = ci->old;
320 pr_debug("saving %lu as reference value for loops_per_jiffy; freq is %u kHz\n",
321 l_p_j_ref, l_p_j_ref_freq);
322 }
323 if (val == CPUFREQ_POSTCHANGE && ci->old != ci->new) {
324 loops_per_jiffy = cpufreq_scale(l_p_j_ref, l_p_j_ref_freq,
325 ci->new);
326 pr_debug("scaling loops_per_jiffy to %lu for frequency %u kHz\n",
327 loops_per_jiffy, ci->new);
328 }
329#endif
330}
331
332
333
334
335
336
337
338
339
340
341
342static void cpufreq_notify_transition(struct cpufreq_policy *policy,
343 struct cpufreq_freqs *freqs,
344 unsigned int state)
345{
346 int cpu;
347
348 BUG_ON(irqs_disabled());
349
350 if (cpufreq_disabled())
351 return;
352
353 freqs->policy = policy;
354 freqs->flags = cpufreq_driver->flags;
355 pr_debug("notification %u of frequency transition to %u kHz\n",
356 state, freqs->new);
357
358 switch (state) {
359 case CPUFREQ_PRECHANGE:
360
361
362
363
364
365 if (policy->cur && policy->cur != freqs->old) {
366 pr_debug("Warning: CPU frequency is %u, cpufreq assumed %u kHz\n",
367 freqs->old, policy->cur);
368 freqs->old = policy->cur;
369 }
370
371 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
372 CPUFREQ_PRECHANGE, freqs);
373
374 adjust_jiffies(CPUFREQ_PRECHANGE, freqs);
375 break;
376
377 case CPUFREQ_POSTCHANGE:
378 adjust_jiffies(CPUFREQ_POSTCHANGE, freqs);
379 pr_debug("FREQ: %u - CPUs: %*pbl\n", freqs->new,
380 cpumask_pr_args(policy->cpus));
381
382 for_each_cpu(cpu, policy->cpus)
383 trace_cpu_frequency(freqs->new, cpu);
384
385 srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
386 CPUFREQ_POSTCHANGE, freqs);
387
388 cpufreq_stats_record_transition(policy, freqs->new);
389 policy->cur = freqs->new;
390 }
391}
392
393
394static void cpufreq_notify_post_transition(struct cpufreq_policy *policy,
395 struct cpufreq_freqs *freqs, int transition_failed)
396{
397 cpufreq_notify_transition(policy, freqs, CPUFREQ_POSTCHANGE);
398 if (!transition_failed)
399 return;
400
401 swap(freqs->old, freqs->new);
402 cpufreq_notify_transition(policy, freqs, CPUFREQ_PRECHANGE);
403 cpufreq_notify_transition(policy, freqs, CPUFREQ_POSTCHANGE);
404}
405
406void cpufreq_freq_transition_begin(struct cpufreq_policy *policy,
407 struct cpufreq_freqs *freqs)
408{
409
410
411
412
413
414
415
416
417
418 WARN_ON(!(cpufreq_driver->flags & CPUFREQ_ASYNC_NOTIFICATION)
419 && current == policy->transition_task);
420
421wait:
422 wait_event(policy->transition_wait, !policy->transition_ongoing);
423
424 spin_lock(&policy->transition_lock);
425
426 if (unlikely(policy->transition_ongoing)) {
427 spin_unlock(&policy->transition_lock);
428 goto wait;
429 }
430
431 policy->transition_ongoing = true;
432 policy->transition_task = current;
433
434 spin_unlock(&policy->transition_lock);
435
436 cpufreq_notify_transition(policy, freqs, CPUFREQ_PRECHANGE);
437}
438EXPORT_SYMBOL_GPL(cpufreq_freq_transition_begin);
439
440void cpufreq_freq_transition_end(struct cpufreq_policy *policy,
441 struct cpufreq_freqs *freqs, int transition_failed)
442{
443 if (WARN_ON(!policy->transition_ongoing))
444 return;
445
446 cpufreq_notify_post_transition(policy, freqs, transition_failed);
447
448 arch_set_freq_scale(policy->related_cpus,
449 policy->cur,
450 policy->cpuinfo.max_freq);
451
452 policy->transition_ongoing = false;
453 policy->transition_task = NULL;
454
455 wake_up(&policy->transition_wait);
456}
457EXPORT_SYMBOL_GPL(cpufreq_freq_transition_end);
458
459
460
461
462
463static int cpufreq_fast_switch_count;
464static DEFINE_MUTEX(cpufreq_fast_switch_lock);
465
466static void cpufreq_list_transition_notifiers(void)
467{
468 struct notifier_block *nb;
469
470 pr_info("Registered transition notifiers:\n");
471
472 mutex_lock(&cpufreq_transition_notifier_list.mutex);
473
474 for (nb = cpufreq_transition_notifier_list.head; nb; nb = nb->next)
475 pr_info("%pS\n", nb->notifier_call);
476
477 mutex_unlock(&cpufreq_transition_notifier_list.mutex);
478}
479
480
481
482
483
484
485
486
487
488
489
490
491void cpufreq_enable_fast_switch(struct cpufreq_policy *policy)
492{
493 lockdep_assert_held(&policy->rwsem);
494
495 if (!policy->fast_switch_possible)
496 return;
497
498 mutex_lock(&cpufreq_fast_switch_lock);
499 if (cpufreq_fast_switch_count >= 0) {
500 cpufreq_fast_switch_count++;
501 policy->fast_switch_enabled = true;
502 } else {
503 pr_warn("CPU%u: Fast frequency switching not enabled\n",
504 policy->cpu);
505 cpufreq_list_transition_notifiers();
506 }
507 mutex_unlock(&cpufreq_fast_switch_lock);
508}
509EXPORT_SYMBOL_GPL(cpufreq_enable_fast_switch);
510
511
512
513
514
515void cpufreq_disable_fast_switch(struct cpufreq_policy *policy)
516{
517 mutex_lock(&cpufreq_fast_switch_lock);
518 if (policy->fast_switch_enabled) {
519 policy->fast_switch_enabled = false;
520 if (!WARN_ON(cpufreq_fast_switch_count <= 0))
521 cpufreq_fast_switch_count--;
522 }
523 mutex_unlock(&cpufreq_fast_switch_lock);
524}
525EXPORT_SYMBOL_GPL(cpufreq_disable_fast_switch);
526
527static unsigned int __resolve_freq(struct cpufreq_policy *policy,
528 unsigned int target_freq, unsigned int relation)
529{
530 unsigned int idx;
531
532 target_freq = clamp_val(target_freq, policy->min, policy->max);
533
534 if (!cpufreq_driver->target_index)
535 return target_freq;
536
537 idx = cpufreq_frequency_table_target(policy, target_freq, relation);
538 policy->cached_resolved_idx = idx;
539 policy->cached_target_freq = target_freq;
540 return policy->freq_table[idx].frequency;
541}
542
543
544
545
546
547
548
549
550
551
552
553
554unsigned int cpufreq_driver_resolve_freq(struct cpufreq_policy *policy,
555 unsigned int target_freq)
556{
557 return __resolve_freq(policy, target_freq, CPUFREQ_RELATION_L);
558}
559EXPORT_SYMBOL_GPL(cpufreq_driver_resolve_freq);
560
561unsigned int cpufreq_policy_transition_delay_us(struct cpufreq_policy *policy)
562{
563 unsigned int latency;
564
565 if (policy->transition_delay_us)
566 return policy->transition_delay_us;
567
568 latency = policy->cpuinfo.transition_latency / NSEC_PER_USEC;
569 if (latency) {
570
571
572
573
574
575
576
577
578
579
580 return min(latency * LATENCY_MULTIPLIER, (unsigned int)10000);
581 }
582
583 return LATENCY_MULTIPLIER;
584}
585EXPORT_SYMBOL_GPL(cpufreq_policy_transition_delay_us);
586
587
588
589
590static ssize_t show_boost(struct kobject *kobj,
591 struct kobj_attribute *attr, char *buf)
592{
593 return sprintf(buf, "%d\n", cpufreq_driver->boost_enabled);
594}
595
596static ssize_t store_boost(struct kobject *kobj, struct kobj_attribute *attr,
597 const char *buf, size_t count)
598{
599 int ret, enable;
600
601 ret = sscanf(buf, "%d", &enable);
602 if (ret != 1 || enable < 0 || enable > 1)
603 return -EINVAL;
604
605 if (cpufreq_boost_trigger_state(enable)) {
606 pr_err("%s: Cannot %s BOOST!\n",
607 __func__, enable ? "enable" : "disable");
608 return -EINVAL;
609 }
610
611 pr_debug("%s: cpufreq BOOST %s\n",
612 __func__, enable ? "enabled" : "disabled");
613
614 return count;
615}
616define_one_global_rw(boost);
617
618static struct cpufreq_governor *find_governor(const char *str_governor)
619{
620 struct cpufreq_governor *t;
621
622 for_each_governor(t)
623 if (!strncasecmp(str_governor, t->name, CPUFREQ_NAME_LEN))
624 return t;
625
626 return NULL;
627}
628
629static struct cpufreq_governor *get_governor(const char *str_governor)
630{
631 struct cpufreq_governor *t;
632
633 mutex_lock(&cpufreq_governor_mutex);
634 t = find_governor(str_governor);
635 if (!t)
636 goto unlock;
637
638 if (!try_module_get(t->owner))
639 t = NULL;
640
641unlock:
642 mutex_unlock(&cpufreq_governor_mutex);
643
644 return t;
645}
646
647static unsigned int cpufreq_parse_policy(char *str_governor)
648{
649 if (!strncasecmp(str_governor, "performance", CPUFREQ_NAME_LEN))
650 return CPUFREQ_POLICY_PERFORMANCE;
651
652 if (!strncasecmp(str_governor, "powersave", CPUFREQ_NAME_LEN))
653 return CPUFREQ_POLICY_POWERSAVE;
654
655 return CPUFREQ_POLICY_UNKNOWN;
656}
657
658
659
660
661
662static struct cpufreq_governor *cpufreq_parse_governor(char *str_governor)
663{
664 struct cpufreq_governor *t;
665
666 t = get_governor(str_governor);
667 if (t)
668 return t;
669
670 if (request_module("cpufreq_%s", str_governor))
671 return NULL;
672
673 return get_governor(str_governor);
674}
675
676
677
678
679
680
681
682
683
684#define show_one(file_name, object) \
685static ssize_t show_##file_name \
686(struct cpufreq_policy *policy, char *buf) \
687{ \
688 return sprintf(buf, "%u\n", policy->object); \
689}
690
691show_one(cpuinfo_min_freq, cpuinfo.min_freq);
692show_one(cpuinfo_max_freq, cpuinfo.max_freq);
693show_one(cpuinfo_transition_latency, cpuinfo.transition_latency);
694show_one(scaling_min_freq, min);
695show_one(scaling_max_freq, max);
696
697__weak unsigned int arch_freq_get_on_cpu(int cpu)
698{
699 return 0;
700}
701
702static ssize_t show_scaling_cur_freq(struct cpufreq_policy *policy, char *buf)
703{
704 ssize_t ret;
705 unsigned int freq;
706
707 freq = arch_freq_get_on_cpu(policy->cpu);
708 if (freq)
709 ret = sprintf(buf, "%u\n", freq);
710 else if (cpufreq_driver->setpolicy && cpufreq_driver->get)
711 ret = sprintf(buf, "%u\n", cpufreq_driver->get(policy->cpu));
712 else
713 ret = sprintf(buf, "%u\n", policy->cur);
714 return ret;
715}
716
717
718
719
720#define store_one(file_name, object) \
721static ssize_t store_##file_name \
722(struct cpufreq_policy *policy, const char *buf, size_t count) \
723{ \
724 unsigned long val; \
725 int ret; \
726 \
727 ret = sscanf(buf, "%lu", &val); \
728 if (ret != 1) \
729 return -EINVAL; \
730 \
731 ret = freq_qos_update_request(policy->object##_freq_req, val);\
732 return ret >= 0 ? count : ret; \
733}
734
735store_one(scaling_min_freq, min);
736store_one(scaling_max_freq, max);
737
738
739
740
741static ssize_t show_cpuinfo_cur_freq(struct cpufreq_policy *policy,
742 char *buf)
743{
744 unsigned int cur_freq = __cpufreq_get(policy);
745
746 if (cur_freq)
747 return sprintf(buf, "%u\n", cur_freq);
748
749 return sprintf(buf, "<unknown>\n");
750}
751
752
753
754
755static ssize_t show_scaling_governor(struct cpufreq_policy *policy, char *buf)
756{
757 if (policy->policy == CPUFREQ_POLICY_POWERSAVE)
758 return sprintf(buf, "powersave\n");
759 else if (policy->policy == CPUFREQ_POLICY_PERFORMANCE)
760 return sprintf(buf, "performance\n");
761 else if (policy->governor)
762 return scnprintf(buf, CPUFREQ_NAME_PLEN, "%s\n",
763 policy->governor->name);
764 return -EINVAL;
765}
766
767
768
769
770static ssize_t store_scaling_governor(struct cpufreq_policy *policy,
771 const char *buf, size_t count)
772{
773 char str_governor[16];
774 int ret;
775
776 ret = sscanf(buf, "%15s", str_governor);
777 if (ret != 1)
778 return -EINVAL;
779
780 if (cpufreq_driver->setpolicy) {
781 unsigned int new_pol;
782
783 new_pol = cpufreq_parse_policy(str_governor);
784 if (!new_pol)
785 return -EINVAL;
786
787 ret = cpufreq_set_policy(policy, NULL, new_pol);
788 } else {
789 struct cpufreq_governor *new_gov;
790
791 new_gov = cpufreq_parse_governor(str_governor);
792 if (!new_gov)
793 return -EINVAL;
794
795 ret = cpufreq_set_policy(policy, new_gov,
796 CPUFREQ_POLICY_UNKNOWN);
797
798 module_put(new_gov->owner);
799 }
800
801 return ret ? ret : count;
802}
803
804
805
806
807static ssize_t show_scaling_driver(struct cpufreq_policy *policy, char *buf)
808{
809 return scnprintf(buf, CPUFREQ_NAME_PLEN, "%s\n", cpufreq_driver->name);
810}
811
812
813
814
815static ssize_t show_scaling_available_governors(struct cpufreq_policy *policy,
816 char *buf)
817{
818 ssize_t i = 0;
819 struct cpufreq_governor *t;
820
821 if (!has_target()) {
822 i += sprintf(buf, "performance powersave");
823 goto out;
824 }
825
826 mutex_lock(&cpufreq_governor_mutex);
827 for_each_governor(t) {
828 if (i >= (ssize_t) ((PAGE_SIZE / sizeof(char))
829 - (CPUFREQ_NAME_LEN + 2)))
830 break;
831 i += scnprintf(&buf[i], CPUFREQ_NAME_PLEN, "%s ", t->name);
832 }
833 mutex_unlock(&cpufreq_governor_mutex);
834out:
835 i += sprintf(&buf[i], "\n");
836 return i;
837}
838
839ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf)
840{
841 ssize_t i = 0;
842 unsigned int cpu;
843
844 for_each_cpu(cpu, mask) {
845 if (i)
846 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " ");
847 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu);
848 if (i >= (PAGE_SIZE - 5))
849 break;
850 }
851 i += sprintf(&buf[i], "\n");
852 return i;
853}
854EXPORT_SYMBOL_GPL(cpufreq_show_cpus);
855
856
857
858
859
860static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf)
861{
862 return cpufreq_show_cpus(policy->related_cpus, buf);
863}
864
865
866
867
868static ssize_t show_affected_cpus(struct cpufreq_policy *policy, char *buf)
869{
870 return cpufreq_show_cpus(policy->cpus, buf);
871}
872
873static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy,
874 const char *buf, size_t count)
875{
876 unsigned int freq = 0;
877 unsigned int ret;
878
879 if (!policy->governor || !policy->governor->store_setspeed)
880 return -EINVAL;
881
882 ret = sscanf(buf, "%u", &freq);
883 if (ret != 1)
884 return -EINVAL;
885
886 policy->governor->store_setspeed(policy, freq);
887
888 return count;
889}
890
891static ssize_t show_scaling_setspeed(struct cpufreq_policy *policy, char *buf)
892{
893 if (!policy->governor || !policy->governor->show_setspeed)
894 return sprintf(buf, "<unsupported>\n");
895
896 return policy->governor->show_setspeed(policy, buf);
897}
898
899
900
901
902static ssize_t show_bios_limit(struct cpufreq_policy *policy, char *buf)
903{
904 unsigned int limit;
905 int ret;
906 ret = cpufreq_driver->bios_limit(policy->cpu, &limit);
907 if (!ret)
908 return sprintf(buf, "%u\n", limit);
909 return sprintf(buf, "%u\n", policy->cpuinfo.max_freq);
910}
911
912cpufreq_freq_attr_ro_perm(cpuinfo_cur_freq, 0400);
913cpufreq_freq_attr_ro(cpuinfo_min_freq);
914cpufreq_freq_attr_ro(cpuinfo_max_freq);
915cpufreq_freq_attr_ro(cpuinfo_transition_latency);
916cpufreq_freq_attr_ro(scaling_available_governors);
917cpufreq_freq_attr_ro(scaling_driver);
918cpufreq_freq_attr_ro(scaling_cur_freq);
919cpufreq_freq_attr_ro(bios_limit);
920cpufreq_freq_attr_ro(related_cpus);
921cpufreq_freq_attr_ro(affected_cpus);
922cpufreq_freq_attr_rw(scaling_min_freq);
923cpufreq_freq_attr_rw(scaling_max_freq);
924cpufreq_freq_attr_rw(scaling_governor);
925cpufreq_freq_attr_rw(scaling_setspeed);
926
927static struct attribute *default_attrs[] = {
928 &cpuinfo_min_freq.attr,
929 &cpuinfo_max_freq.attr,
930 &cpuinfo_transition_latency.attr,
931 &scaling_min_freq.attr,
932 &scaling_max_freq.attr,
933 &affected_cpus.attr,
934 &related_cpus.attr,
935 &scaling_governor.attr,
936 &scaling_driver.attr,
937 &scaling_available_governors.attr,
938 &scaling_setspeed.attr,
939 NULL
940};
941
942#define to_policy(k) container_of(k, struct cpufreq_policy, kobj)
943#define to_attr(a) container_of(a, struct freq_attr, attr)
944
945static ssize_t show(struct kobject *kobj, struct attribute *attr, char *buf)
946{
947 struct cpufreq_policy *policy = to_policy(kobj);
948 struct freq_attr *fattr = to_attr(attr);
949 ssize_t ret;
950
951 if (!fattr->show)
952 return -EIO;
953
954 down_read(&policy->rwsem);
955 ret = fattr->show(policy, buf);
956 up_read(&policy->rwsem);
957
958 return ret;
959}
960
961static ssize_t store(struct kobject *kobj, struct attribute *attr,
962 const char *buf, size_t count)
963{
964 struct cpufreq_policy *policy = to_policy(kobj);
965 struct freq_attr *fattr = to_attr(attr);
966 ssize_t ret = -EINVAL;
967
968 if (!fattr->store)
969 return -EIO;
970
971
972
973
974
975 if (!cpus_read_trylock())
976 return -EBUSY;
977
978 if (cpu_online(policy->cpu)) {
979 down_write(&policy->rwsem);
980 ret = fattr->store(policy, buf, count);
981 up_write(&policy->rwsem);
982 }
983
984 cpus_read_unlock();
985
986 return ret;
987}
988
989static void cpufreq_sysfs_release(struct kobject *kobj)
990{
991 struct cpufreq_policy *policy = to_policy(kobj);
992 pr_debug("last reference is dropped\n");
993 complete(&policy->kobj_unregister);
994}
995
996static const struct sysfs_ops sysfs_ops = {
997 .show = show,
998 .store = store,
999};
1000
1001static struct kobj_type ktype_cpufreq = {
1002 .sysfs_ops = &sysfs_ops,
1003 .default_attrs = default_attrs,
1004 .release = cpufreq_sysfs_release,
1005};
1006
1007static void add_cpu_dev_symlink(struct cpufreq_policy *policy, unsigned int cpu)
1008{
1009 struct device *dev = get_cpu_device(cpu);
1010
1011 if (unlikely(!dev))
1012 return;
1013
1014 if (cpumask_test_and_set_cpu(cpu, policy->real_cpus))
1015 return;
1016
1017 dev_dbg(dev, "%s: Adding symlink\n", __func__);
1018 if (sysfs_create_link(&dev->kobj, &policy->kobj, "cpufreq"))
1019 dev_err(dev, "cpufreq symlink creation failed\n");
1020}
1021
1022static void remove_cpu_dev_symlink(struct cpufreq_policy *policy,
1023 struct device *dev)
1024{
1025 dev_dbg(dev, "%s: Removing symlink\n", __func__);
1026 sysfs_remove_link(&dev->kobj, "cpufreq");
1027}
1028
1029static int cpufreq_add_dev_interface(struct cpufreq_policy *policy)
1030{
1031 struct freq_attr **drv_attr;
1032 int ret = 0;
1033
1034
1035 drv_attr = cpufreq_driver->attr;
1036 while (drv_attr && *drv_attr) {
1037 ret = sysfs_create_file(&policy->kobj, &((*drv_attr)->attr));
1038 if (ret)
1039 return ret;
1040 drv_attr++;
1041 }
1042 if (cpufreq_driver->get) {
1043 ret = sysfs_create_file(&policy->kobj, &cpuinfo_cur_freq.attr);
1044 if (ret)
1045 return ret;
1046 }
1047
1048 ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr);
1049 if (ret)
1050 return ret;
1051
1052 if (cpufreq_driver->bios_limit) {
1053 ret = sysfs_create_file(&policy->kobj, &bios_limit.attr);
1054 if (ret)
1055 return ret;
1056 }
1057
1058 return 0;
1059}
1060
1061static int cpufreq_init_policy(struct cpufreq_policy *policy)
1062{
1063 struct cpufreq_governor *gov = NULL;
1064 unsigned int pol = CPUFREQ_POLICY_UNKNOWN;
1065 int ret;
1066
1067 if (has_target()) {
1068
1069 gov = get_governor(policy->last_governor);
1070 if (gov) {
1071 pr_debug("Restoring governor %s for cpu %d\n",
1072 gov->name, policy->cpu);
1073 } else {
1074 gov = get_governor(default_governor);
1075 }
1076
1077 if (!gov) {
1078 gov = cpufreq_default_governor();
1079 __module_get(gov->owner);
1080 }
1081
1082 } else {
1083
1084
1085 if (policy->last_policy) {
1086 pol = policy->last_policy;
1087 } else {
1088 pol = cpufreq_parse_policy(default_governor);
1089
1090
1091
1092
1093
1094 if (pol == CPUFREQ_POLICY_UNKNOWN)
1095 pol = policy->policy;
1096 }
1097 if (pol != CPUFREQ_POLICY_PERFORMANCE &&
1098 pol != CPUFREQ_POLICY_POWERSAVE)
1099 return -ENODATA;
1100 }
1101
1102 ret = cpufreq_set_policy(policy, gov, pol);
1103 if (gov)
1104 module_put(gov->owner);
1105
1106 return ret;
1107}
1108
1109static int cpufreq_add_policy_cpu(struct cpufreq_policy *policy, unsigned int cpu)
1110{
1111 int ret = 0;
1112
1113
1114 if (cpumask_test_cpu(cpu, policy->cpus))
1115 return 0;
1116
1117 down_write(&policy->rwsem);
1118 if (has_target())
1119 cpufreq_stop_governor(policy);
1120
1121 cpumask_set_cpu(cpu, policy->cpus);
1122
1123 if (has_target()) {
1124 ret = cpufreq_start_governor(policy);
1125 if (ret)
1126 pr_err("%s: Failed to start governor\n", __func__);
1127 }
1128 up_write(&policy->rwsem);
1129 return ret;
1130}
1131
1132void refresh_frequency_limits(struct cpufreq_policy *policy)
1133{
1134 if (!policy_is_inactive(policy)) {
1135 pr_debug("updating policy for CPU %u\n", policy->cpu);
1136
1137 cpufreq_set_policy(policy, policy->governor, policy->policy);
1138 }
1139}
1140EXPORT_SYMBOL(refresh_frequency_limits);
1141
1142static void handle_update(struct work_struct *work)
1143{
1144 struct cpufreq_policy *policy =
1145 container_of(work, struct cpufreq_policy, update);
1146
1147 pr_debug("handle_update for cpu %u called\n", policy->cpu);
1148 down_write(&policy->rwsem);
1149 refresh_frequency_limits(policy);
1150 up_write(&policy->rwsem);
1151}
1152
1153static int cpufreq_notifier_min(struct notifier_block *nb, unsigned long freq,
1154 void *data)
1155{
1156 struct cpufreq_policy *policy = container_of(nb, struct cpufreq_policy, nb_min);
1157
1158 schedule_work(&policy->update);
1159 return 0;
1160}
1161
1162static int cpufreq_notifier_max(struct notifier_block *nb, unsigned long freq,
1163 void *data)
1164{
1165 struct cpufreq_policy *policy = container_of(nb, struct cpufreq_policy, nb_max);
1166
1167 schedule_work(&policy->update);
1168 return 0;
1169}
1170
1171static void cpufreq_policy_put_kobj(struct cpufreq_policy *policy)
1172{
1173 struct kobject *kobj;
1174 struct completion *cmp;
1175
1176 down_write(&policy->rwsem);
1177 cpufreq_stats_free_table(policy);
1178 kobj = &policy->kobj;
1179 cmp = &policy->kobj_unregister;
1180 up_write(&policy->rwsem);
1181 kobject_put(kobj);
1182
1183
1184
1185
1186
1187
1188 pr_debug("waiting for dropping of refcount\n");
1189 wait_for_completion(cmp);
1190 pr_debug("wait complete\n");
1191}
1192
1193static struct cpufreq_policy *cpufreq_policy_alloc(unsigned int cpu)
1194{
1195 struct cpufreq_policy *policy;
1196 struct device *dev = get_cpu_device(cpu);
1197 int ret;
1198
1199 if (!dev)
1200 return NULL;
1201
1202 policy = kzalloc(sizeof(*policy), GFP_KERNEL);
1203 if (!policy)
1204 return NULL;
1205
1206 if (!alloc_cpumask_var(&policy->cpus, GFP_KERNEL))
1207 goto err_free_policy;
1208
1209 if (!zalloc_cpumask_var(&policy->related_cpus, GFP_KERNEL))
1210 goto err_free_cpumask;
1211
1212 if (!zalloc_cpumask_var(&policy->real_cpus, GFP_KERNEL))
1213 goto err_free_rcpumask;
1214
1215 ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq,
1216 cpufreq_global_kobject, "policy%u", cpu);
1217 if (ret) {
1218 dev_err(dev, "%s: failed to init policy->kobj: %d\n", __func__, ret);
1219
1220
1221
1222
1223
1224 kobject_put(&policy->kobj);
1225 goto err_free_real_cpus;
1226 }
1227
1228 freq_constraints_init(&policy->constraints);
1229
1230 policy->nb_min.notifier_call = cpufreq_notifier_min;
1231 policy->nb_max.notifier_call = cpufreq_notifier_max;
1232
1233 ret = freq_qos_add_notifier(&policy->constraints, FREQ_QOS_MIN,
1234 &policy->nb_min);
1235 if (ret) {
1236 dev_err(dev, "Failed to register MIN QoS notifier: %d (%*pbl)\n",
1237 ret, cpumask_pr_args(policy->cpus));
1238 goto err_kobj_remove;
1239 }
1240
1241 ret = freq_qos_add_notifier(&policy->constraints, FREQ_QOS_MAX,
1242 &policy->nb_max);
1243 if (ret) {
1244 dev_err(dev, "Failed to register MAX QoS notifier: %d (%*pbl)\n",
1245 ret, cpumask_pr_args(policy->cpus));
1246 goto err_min_qos_notifier;
1247 }
1248
1249 INIT_LIST_HEAD(&policy->policy_list);
1250 init_rwsem(&policy->rwsem);
1251 spin_lock_init(&policy->transition_lock);
1252 init_waitqueue_head(&policy->transition_wait);
1253 init_completion(&policy->kobj_unregister);
1254 INIT_WORK(&policy->update, handle_update);
1255
1256 policy->cpu = cpu;
1257 return policy;
1258
1259err_min_qos_notifier:
1260 freq_qos_remove_notifier(&policy->constraints, FREQ_QOS_MIN,
1261 &policy->nb_min);
1262err_kobj_remove:
1263 cpufreq_policy_put_kobj(policy);
1264err_free_real_cpus:
1265 free_cpumask_var(policy->real_cpus);
1266err_free_rcpumask:
1267 free_cpumask_var(policy->related_cpus);
1268err_free_cpumask:
1269 free_cpumask_var(policy->cpus);
1270err_free_policy:
1271 kfree(policy);
1272
1273 return NULL;
1274}
1275
1276static void cpufreq_policy_free(struct cpufreq_policy *policy)
1277{
1278 unsigned long flags;
1279 int cpu;
1280
1281
1282 write_lock_irqsave(&cpufreq_driver_lock, flags);
1283 list_del(&policy->policy_list);
1284
1285 for_each_cpu(cpu, policy->related_cpus)
1286 per_cpu(cpufreq_cpu_data, cpu) = NULL;
1287 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
1288
1289 freq_qos_remove_notifier(&policy->constraints, FREQ_QOS_MAX,
1290 &policy->nb_max);
1291 freq_qos_remove_notifier(&policy->constraints, FREQ_QOS_MIN,
1292 &policy->nb_min);
1293
1294
1295 cancel_work_sync(&policy->update);
1296
1297 if (policy->max_freq_req) {
1298
1299
1300
1301
1302 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1303 CPUFREQ_REMOVE_POLICY, policy);
1304 freq_qos_remove_request(policy->max_freq_req);
1305 }
1306
1307 freq_qos_remove_request(policy->min_freq_req);
1308 kfree(policy->min_freq_req);
1309
1310 cpufreq_policy_put_kobj(policy);
1311 free_cpumask_var(policy->real_cpus);
1312 free_cpumask_var(policy->related_cpus);
1313 free_cpumask_var(policy->cpus);
1314 kfree(policy);
1315}
1316
1317static int cpufreq_online(unsigned int cpu)
1318{
1319 struct cpufreq_policy *policy;
1320 bool new_policy;
1321 unsigned long flags;
1322 unsigned int j;
1323 int ret;
1324
1325 pr_debug("%s: bringing CPU%u online\n", __func__, cpu);
1326
1327
1328 policy = per_cpu(cpufreq_cpu_data, cpu);
1329 if (policy) {
1330 WARN_ON(!cpumask_test_cpu(cpu, policy->related_cpus));
1331 if (!policy_is_inactive(policy))
1332 return cpufreq_add_policy_cpu(policy, cpu);
1333
1334
1335 new_policy = false;
1336 down_write(&policy->rwsem);
1337 policy->cpu = cpu;
1338 policy->governor = NULL;
1339 up_write(&policy->rwsem);
1340 } else {
1341 new_policy = true;
1342 policy = cpufreq_policy_alloc(cpu);
1343 if (!policy)
1344 return -ENOMEM;
1345 }
1346
1347 if (!new_policy && cpufreq_driver->online) {
1348 ret = cpufreq_driver->online(policy);
1349 if (ret) {
1350 pr_debug("%s: %d: initialization failed\n", __func__,
1351 __LINE__);
1352 goto out_exit_policy;
1353 }
1354
1355
1356 cpumask_copy(policy->cpus, policy->related_cpus);
1357 } else {
1358 cpumask_copy(policy->cpus, cpumask_of(cpu));
1359
1360
1361
1362
1363
1364 ret = cpufreq_driver->init(policy);
1365 if (ret) {
1366 pr_debug("%s: %d: initialization failed\n", __func__,
1367 __LINE__);
1368 goto out_free_policy;
1369 }
1370
1371
1372
1373
1374
1375
1376 ret = cpufreq_table_validate_and_sort(policy);
1377 if (ret)
1378 goto out_offline_policy;
1379
1380
1381 cpumask_copy(policy->related_cpus, policy->cpus);
1382 }
1383
1384 down_write(&policy->rwsem);
1385
1386
1387
1388
1389 cpumask_and(policy->cpus, policy->cpus, cpu_online_mask);
1390
1391 if (new_policy) {
1392 for_each_cpu(j, policy->related_cpus) {
1393 per_cpu(cpufreq_cpu_data, j) = policy;
1394 add_cpu_dev_symlink(policy, j);
1395 }
1396
1397 policy->min_freq_req = kzalloc(2 * sizeof(*policy->min_freq_req),
1398 GFP_KERNEL);
1399 if (!policy->min_freq_req) {
1400 ret = -ENOMEM;
1401 goto out_destroy_policy;
1402 }
1403
1404 ret = freq_qos_add_request(&policy->constraints,
1405 policy->min_freq_req, FREQ_QOS_MIN,
1406 policy->min);
1407 if (ret < 0) {
1408
1409
1410
1411
1412 kfree(policy->min_freq_req);
1413 policy->min_freq_req = NULL;
1414 goto out_destroy_policy;
1415 }
1416
1417
1418
1419
1420
1421
1422 policy->max_freq_req = policy->min_freq_req + 1;
1423
1424 ret = freq_qos_add_request(&policy->constraints,
1425 policy->max_freq_req, FREQ_QOS_MAX,
1426 policy->max);
1427 if (ret < 0) {
1428 policy->max_freq_req = NULL;
1429 goto out_destroy_policy;
1430 }
1431
1432 blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
1433 CPUFREQ_CREATE_POLICY, policy);
1434 }
1435
1436 if (cpufreq_driver->get && has_target()) {
1437 policy->cur = cpufreq_driver->get(policy->cpu);
1438 if (!policy->cur) {
1439 ret = -EIO;
1440 pr_err("%s: ->get() failed\n", __func__);
1441 goto out_destroy_policy;
1442 }
1443 }
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463 if ((cpufreq_driver->flags & CPUFREQ_NEED_INITIAL_FREQ_CHECK)
1464 && has_target()) {
1465 unsigned int old_freq = policy->cur;
1466
1467
1468 ret = cpufreq_frequency_table_get_index(policy, old_freq);
1469 if (ret == -EINVAL) {
1470 ret = __cpufreq_driver_target(policy, old_freq - 1,
1471 CPUFREQ_RELATION_L);
1472
1473
1474
1475
1476
1477
1478 BUG_ON(ret);
1479 pr_info("%s: CPU%d: Running at unlisted initial frequency: %u KHz, changing to: %u KHz\n",
1480 __func__, policy->cpu, old_freq, policy->cur);
1481 }
1482 }
1483
1484 if (new_policy) {
1485 ret = cpufreq_add_dev_interface(policy);
1486 if (ret)
1487 goto out_destroy_policy;
1488
1489 cpufreq_stats_create_table(policy);
1490
1491 write_lock_irqsave(&cpufreq_driver_lock, flags);
1492 list_add(&policy->policy_list, &cpufreq_policy_list);
1493 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
1494 }
1495
1496 ret = cpufreq_init_policy(policy);
1497 if (ret) {
1498 pr_err("%s: Failed to initialize policy for cpu: %d (%d)\n",
1499 __func__, cpu, ret);
1500 goto out_destroy_policy;
1501 }
1502
1503 up_write(&policy->rwsem);
1504
1505 kobject_uevent(&policy->kobj, KOBJ_ADD);
1506
1507
1508 if (cpufreq_driver->ready)
1509 cpufreq_driver->ready(policy);
1510
1511 if (cpufreq_thermal_control_enabled(cpufreq_driver))
1512 policy->cdev = of_cpufreq_cooling_register(policy);
1513
1514 pr_debug("initialization complete\n");
1515
1516 return 0;
1517
1518out_destroy_policy:
1519 for_each_cpu(j, policy->real_cpus)
1520 remove_cpu_dev_symlink(policy, get_cpu_device(j));
1521
1522 up_write(&policy->rwsem);
1523
1524out_offline_policy:
1525 if (cpufreq_driver->offline)
1526 cpufreq_driver->offline(policy);
1527
1528out_exit_policy:
1529 if (cpufreq_driver->exit)
1530 cpufreq_driver->exit(policy);
1531
1532out_free_policy:
1533 cpufreq_policy_free(policy);
1534 return ret;
1535}
1536
1537
1538
1539
1540
1541
1542static int cpufreq_add_dev(struct device *dev, struct subsys_interface *sif)
1543{
1544 struct cpufreq_policy *policy;
1545 unsigned cpu = dev->id;
1546 int ret;
1547
1548 dev_dbg(dev, "%s: adding CPU%u\n", __func__, cpu);
1549
1550 if (cpu_online(cpu)) {
1551 ret = cpufreq_online(cpu);
1552 if (ret)
1553 return ret;
1554 }
1555
1556
1557 policy = per_cpu(cpufreq_cpu_data, cpu);
1558 if (policy)
1559 add_cpu_dev_symlink(policy, cpu);
1560
1561 return 0;
1562}
1563
1564static int cpufreq_offline(unsigned int cpu)
1565{
1566 struct cpufreq_policy *policy;
1567 int ret;
1568
1569 pr_debug("%s: unregistering CPU %u\n", __func__, cpu);
1570
1571 policy = cpufreq_cpu_get_raw(cpu);
1572 if (!policy) {
1573 pr_debug("%s: No cpu_data found\n", __func__);
1574 return 0;
1575 }
1576
1577 down_write(&policy->rwsem);
1578 if (has_target())
1579 cpufreq_stop_governor(policy);
1580
1581 cpumask_clear_cpu(cpu, policy->cpus);
1582
1583 if (policy_is_inactive(policy)) {
1584 if (has_target())
1585 strncpy(policy->last_governor, policy->governor->name,
1586 CPUFREQ_NAME_LEN);
1587 else
1588 policy->last_policy = policy->policy;
1589 } else if (cpu == policy->cpu) {
1590
1591 policy->cpu = cpumask_any(policy->cpus);
1592 }
1593
1594
1595 if (!policy_is_inactive(policy)) {
1596 if (has_target()) {
1597 ret = cpufreq_start_governor(policy);
1598 if (ret)
1599 pr_err("%s: Failed to start governor\n", __func__);
1600 }
1601
1602 goto unlock;
1603 }
1604
1605 if (cpufreq_thermal_control_enabled(cpufreq_driver)) {
1606 cpufreq_cooling_unregister(policy->cdev);
1607 policy->cdev = NULL;
1608 }
1609
1610 if (has_target())
1611 cpufreq_exit_governor(policy);
1612
1613
1614
1615
1616
1617 if (cpufreq_driver->offline) {
1618 cpufreq_driver->offline(policy);
1619 } else if (cpufreq_driver->exit) {
1620 cpufreq_driver->exit(policy);
1621 policy->freq_table = NULL;
1622 }
1623
1624unlock:
1625 up_write(&policy->rwsem);
1626 return 0;
1627}
1628
1629
1630
1631
1632
1633
1634static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
1635{
1636 unsigned int cpu = dev->id;
1637 struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu);
1638
1639 if (!policy)
1640 return;
1641
1642 if (cpu_online(cpu))
1643 cpufreq_offline(cpu);
1644
1645 cpumask_clear_cpu(cpu, policy->real_cpus);
1646 remove_cpu_dev_symlink(policy, dev);
1647
1648 if (cpumask_empty(policy->real_cpus)) {
1649
1650 if (cpufreq_driver->offline)
1651 cpufreq_driver->exit(policy);
1652
1653 cpufreq_policy_free(policy);
1654 }
1655}
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665static void cpufreq_out_of_sync(struct cpufreq_policy *policy,
1666 unsigned int new_freq)
1667{
1668 struct cpufreq_freqs freqs;
1669
1670 pr_debug("Warning: CPU frequency out of sync: cpufreq and timing core thinks of %u, is %u kHz\n",
1671 policy->cur, new_freq);
1672
1673 freqs.old = policy->cur;
1674 freqs.new = new_freq;
1675
1676 cpufreq_freq_transition_begin(policy, &freqs);
1677 cpufreq_freq_transition_end(policy, &freqs, 0);
1678}
1679
1680static unsigned int cpufreq_verify_current_freq(struct cpufreq_policy *policy, bool update)
1681{
1682 unsigned int new_freq;
1683
1684 new_freq = cpufreq_driver->get(policy->cpu);
1685 if (!new_freq)
1686 return 0;
1687
1688
1689
1690
1691
1692 if (policy->fast_switch_enabled || !has_target())
1693 return new_freq;
1694
1695 if (policy->cur != new_freq) {
1696 cpufreq_out_of_sync(policy, new_freq);
1697 if (update)
1698 schedule_work(&policy->update);
1699 }
1700
1701 return new_freq;
1702}
1703
1704
1705
1706
1707
1708
1709
1710
1711unsigned int cpufreq_quick_get(unsigned int cpu)
1712{
1713 struct cpufreq_policy *policy;
1714 unsigned int ret_freq = 0;
1715 unsigned long flags;
1716
1717 read_lock_irqsave(&cpufreq_driver_lock, flags);
1718
1719 if (cpufreq_driver && cpufreq_driver->setpolicy && cpufreq_driver->get) {
1720 ret_freq = cpufreq_driver->get(cpu);
1721 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
1722 return ret_freq;
1723 }
1724
1725 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
1726
1727 policy = cpufreq_cpu_get(cpu);
1728 if (policy) {
1729 ret_freq = policy->cur;
1730 cpufreq_cpu_put(policy);
1731 }
1732
1733 return ret_freq;
1734}
1735EXPORT_SYMBOL(cpufreq_quick_get);
1736
1737
1738
1739
1740
1741
1742
1743unsigned int cpufreq_quick_get_max(unsigned int cpu)
1744{
1745 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
1746 unsigned int ret_freq = 0;
1747
1748 if (policy) {
1749 ret_freq = policy->max;
1750 cpufreq_cpu_put(policy);
1751 }
1752
1753 return ret_freq;
1754}
1755EXPORT_SYMBOL(cpufreq_quick_get_max);
1756
1757
1758
1759
1760
1761
1762
1763__weak unsigned int cpufreq_get_hw_max_freq(unsigned int cpu)
1764{
1765 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
1766 unsigned int ret_freq = 0;
1767
1768 if (policy) {
1769 ret_freq = policy->cpuinfo.max_freq;
1770 cpufreq_cpu_put(policy);
1771 }
1772
1773 return ret_freq;
1774}
1775EXPORT_SYMBOL(cpufreq_get_hw_max_freq);
1776
1777static unsigned int __cpufreq_get(struct cpufreq_policy *policy)
1778{
1779 if (unlikely(policy_is_inactive(policy)))
1780 return 0;
1781
1782 return cpufreq_verify_current_freq(policy, true);
1783}
1784
1785
1786
1787
1788
1789
1790
1791unsigned int cpufreq_get(unsigned int cpu)
1792{
1793 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
1794 unsigned int ret_freq = 0;
1795
1796 if (policy) {
1797 down_read(&policy->rwsem);
1798 if (cpufreq_driver->get)
1799 ret_freq = __cpufreq_get(policy);
1800 up_read(&policy->rwsem);
1801
1802 cpufreq_cpu_put(policy);
1803 }
1804
1805 return ret_freq;
1806}
1807EXPORT_SYMBOL(cpufreq_get);
1808
1809static struct subsys_interface cpufreq_interface = {
1810 .name = "cpufreq",
1811 .subsys = &cpu_subsys,
1812 .add_dev = cpufreq_add_dev,
1813 .remove_dev = cpufreq_remove_dev,
1814};
1815
1816
1817
1818
1819
1820int cpufreq_generic_suspend(struct cpufreq_policy *policy)
1821{
1822 int ret;
1823
1824 if (!policy->suspend_freq) {
1825 pr_debug("%s: suspend_freq not defined\n", __func__);
1826 return 0;
1827 }
1828
1829 pr_debug("%s: Setting suspend-freq: %u\n", __func__,
1830 policy->suspend_freq);
1831
1832 ret = __cpufreq_driver_target(policy, policy->suspend_freq,
1833 CPUFREQ_RELATION_H);
1834 if (ret)
1835 pr_err("%s: unable to set suspend-freq: %u. err: %d\n",
1836 __func__, policy->suspend_freq, ret);
1837
1838 return ret;
1839}
1840EXPORT_SYMBOL(cpufreq_generic_suspend);
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850void cpufreq_suspend(void)
1851{
1852 struct cpufreq_policy *policy;
1853
1854 if (!cpufreq_driver)
1855 return;
1856
1857 if (!has_target() && !cpufreq_driver->suspend)
1858 goto suspend;
1859
1860 pr_debug("%s: Suspending Governors\n", __func__);
1861
1862 for_each_active_policy(policy) {
1863 if (has_target()) {
1864 down_write(&policy->rwsem);
1865 cpufreq_stop_governor(policy);
1866 up_write(&policy->rwsem);
1867 }
1868
1869 if (cpufreq_driver->suspend && cpufreq_driver->suspend(policy))
1870 pr_err("%s: Failed to suspend driver: %s\n", __func__,
1871 cpufreq_driver->name);
1872 }
1873
1874suspend:
1875 cpufreq_suspended = true;
1876}
1877
1878
1879
1880
1881
1882
1883
1884void cpufreq_resume(void)
1885{
1886 struct cpufreq_policy *policy;
1887 int ret;
1888
1889 if (!cpufreq_driver)
1890 return;
1891
1892 if (unlikely(!cpufreq_suspended))
1893 return;
1894
1895 cpufreq_suspended = false;
1896
1897 if (!has_target() && !cpufreq_driver->resume)
1898 return;
1899
1900 pr_debug("%s: Resuming Governors\n", __func__);
1901
1902 for_each_active_policy(policy) {
1903 if (cpufreq_driver->resume && cpufreq_driver->resume(policy)) {
1904 pr_err("%s: Failed to resume driver: %p\n", __func__,
1905 policy);
1906 } else if (has_target()) {
1907 down_write(&policy->rwsem);
1908 ret = cpufreq_start_governor(policy);
1909 up_write(&policy->rwsem);
1910
1911 if (ret)
1912 pr_err("%s: Failed to start governor for policy: %p\n",
1913 __func__, policy);
1914 }
1915 }
1916}
1917
1918
1919
1920
1921
1922
1923
1924
1925bool cpufreq_driver_test_flags(u16 flags)
1926{
1927 return !!(cpufreq_driver->flags & flags);
1928}
1929
1930
1931
1932
1933
1934
1935
1936const char *cpufreq_get_current_driver(void)
1937{
1938 if (cpufreq_driver)
1939 return cpufreq_driver->name;
1940
1941 return NULL;
1942}
1943EXPORT_SYMBOL_GPL(cpufreq_get_current_driver);
1944
1945
1946
1947
1948
1949
1950
1951void *cpufreq_get_driver_data(void)
1952{
1953 if (cpufreq_driver)
1954 return cpufreq_driver->driver_data;
1955
1956 return NULL;
1957}
1958EXPORT_SYMBOL_GPL(cpufreq_get_driver_data);
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list)
1977{
1978 int ret;
1979
1980 if (cpufreq_disabled())
1981 return -EINVAL;
1982
1983 switch (list) {
1984 case CPUFREQ_TRANSITION_NOTIFIER:
1985 mutex_lock(&cpufreq_fast_switch_lock);
1986
1987 if (cpufreq_fast_switch_count > 0) {
1988 mutex_unlock(&cpufreq_fast_switch_lock);
1989 return -EBUSY;
1990 }
1991 ret = srcu_notifier_chain_register(
1992 &cpufreq_transition_notifier_list, nb);
1993 if (!ret)
1994 cpufreq_fast_switch_count--;
1995
1996 mutex_unlock(&cpufreq_fast_switch_lock);
1997 break;
1998 case CPUFREQ_POLICY_NOTIFIER:
1999 ret = blocking_notifier_chain_register(
2000 &cpufreq_policy_notifier_list, nb);
2001 break;
2002 default:
2003 ret = -EINVAL;
2004 }
2005
2006 return ret;
2007}
2008EXPORT_SYMBOL(cpufreq_register_notifier);
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list)
2021{
2022 int ret;
2023
2024 if (cpufreq_disabled())
2025 return -EINVAL;
2026
2027 switch (list) {
2028 case CPUFREQ_TRANSITION_NOTIFIER:
2029 mutex_lock(&cpufreq_fast_switch_lock);
2030
2031 ret = srcu_notifier_chain_unregister(
2032 &cpufreq_transition_notifier_list, nb);
2033 if (!ret && !WARN_ON(cpufreq_fast_switch_count >= 0))
2034 cpufreq_fast_switch_count++;
2035
2036 mutex_unlock(&cpufreq_fast_switch_lock);
2037 break;
2038 case CPUFREQ_POLICY_NOTIFIER:
2039 ret = blocking_notifier_chain_unregister(
2040 &cpufreq_policy_notifier_list, nb);
2041 break;
2042 default:
2043 ret = -EINVAL;
2044 }
2045
2046 return ret;
2047}
2048EXPORT_SYMBOL(cpufreq_unregister_notifier);
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078unsigned int cpufreq_driver_fast_switch(struct cpufreq_policy *policy,
2079 unsigned int target_freq)
2080{
2081 unsigned int freq;
2082 int cpu;
2083
2084 target_freq = clamp_val(target_freq, policy->min, policy->max);
2085 freq = cpufreq_driver->fast_switch(policy, target_freq);
2086
2087 if (!freq)
2088 return 0;
2089
2090 policy->cur = freq;
2091 arch_set_freq_scale(policy->related_cpus, freq,
2092 policy->cpuinfo.max_freq);
2093 cpufreq_stats_record_transition(policy, freq);
2094
2095 if (trace_cpu_frequency_enabled()) {
2096 for_each_cpu(cpu, policy->cpus)
2097 trace_cpu_frequency(freq, cpu);
2098 }
2099
2100 return freq;
2101}
2102EXPORT_SYMBOL_GPL(cpufreq_driver_fast_switch);
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125void cpufreq_driver_adjust_perf(unsigned int cpu,
2126 unsigned long min_perf,
2127 unsigned long target_perf,
2128 unsigned long capacity)
2129{
2130 cpufreq_driver->adjust_perf(cpu, min_perf, target_perf, capacity);
2131}
2132
2133
2134
2135
2136
2137
2138
2139bool cpufreq_driver_has_adjust_perf(void)
2140{
2141 return !!cpufreq_driver->adjust_perf;
2142}
2143
2144
2145static int __target_intermediate(struct cpufreq_policy *policy,
2146 struct cpufreq_freqs *freqs, int index)
2147{
2148 int ret;
2149
2150 freqs->new = cpufreq_driver->get_intermediate(policy, index);
2151
2152
2153 if (!freqs->new)
2154 return 0;
2155
2156 pr_debug("%s: cpu: %d, switching to intermediate freq: oldfreq: %u, intermediate freq: %u\n",
2157 __func__, policy->cpu, freqs->old, freqs->new);
2158
2159 cpufreq_freq_transition_begin(policy, freqs);
2160 ret = cpufreq_driver->target_intermediate(policy, index);
2161 cpufreq_freq_transition_end(policy, freqs, ret);
2162
2163 if (ret)
2164 pr_err("%s: Failed to change to intermediate frequency: %d\n",
2165 __func__, ret);
2166
2167 return ret;
2168}
2169
2170static int __target_index(struct cpufreq_policy *policy, int index)
2171{
2172 struct cpufreq_freqs freqs = {.old = policy->cur, .flags = 0};
2173 unsigned int restore_freq, intermediate_freq = 0;
2174 unsigned int newfreq = policy->freq_table[index].frequency;
2175 int retval = -EINVAL;
2176 bool notify;
2177
2178 if (newfreq == policy->cur)
2179 return 0;
2180
2181
2182 restore_freq = policy->cur;
2183
2184 notify = !(cpufreq_driver->flags & CPUFREQ_ASYNC_NOTIFICATION);
2185 if (notify) {
2186
2187 if (cpufreq_driver->get_intermediate) {
2188 retval = __target_intermediate(policy, &freqs, index);
2189 if (retval)
2190 return retval;
2191
2192 intermediate_freq = freqs.new;
2193
2194 if (intermediate_freq)
2195 freqs.old = freqs.new;
2196 }
2197
2198 freqs.new = newfreq;
2199 pr_debug("%s: cpu: %d, oldfreq: %u, new freq: %u\n",
2200 __func__, policy->cpu, freqs.old, freqs.new);
2201
2202 cpufreq_freq_transition_begin(policy, &freqs);
2203 }
2204
2205 retval = cpufreq_driver->target_index(policy, index);
2206 if (retval)
2207 pr_err("%s: Failed to change cpu frequency: %d\n", __func__,
2208 retval);
2209
2210 if (notify) {
2211 cpufreq_freq_transition_end(policy, &freqs, retval);
2212
2213
2214
2215
2216
2217
2218
2219 if (unlikely(retval && intermediate_freq)) {
2220 freqs.old = intermediate_freq;
2221 freqs.new = restore_freq;
2222 cpufreq_freq_transition_begin(policy, &freqs);
2223 cpufreq_freq_transition_end(policy, &freqs, 0);
2224 }
2225 }
2226
2227 return retval;
2228}
2229
2230int __cpufreq_driver_target(struct cpufreq_policy *policy,
2231 unsigned int target_freq,
2232 unsigned int relation)
2233{
2234 unsigned int old_target_freq = target_freq;
2235
2236 if (cpufreq_disabled())
2237 return -ENODEV;
2238
2239 target_freq = __resolve_freq(policy, target_freq, relation);
2240
2241 pr_debug("target for CPU %u: %u kHz, relation %u, requested %u kHz\n",
2242 policy->cpu, target_freq, relation, old_target_freq);
2243
2244
2245
2246
2247
2248
2249
2250 if (target_freq == policy->cur &&
2251 !(cpufreq_driver->flags & CPUFREQ_NEED_UPDATE_LIMITS))
2252 return 0;
2253
2254 if (cpufreq_driver->target)
2255 return cpufreq_driver->target(policy, target_freq, relation);
2256
2257 if (!cpufreq_driver->target_index)
2258 return -EINVAL;
2259
2260 return __target_index(policy, policy->cached_resolved_idx);
2261}
2262EXPORT_SYMBOL_GPL(__cpufreq_driver_target);
2263
2264int cpufreq_driver_target(struct cpufreq_policy *policy,
2265 unsigned int target_freq,
2266 unsigned int relation)
2267{
2268 int ret;
2269
2270 down_write(&policy->rwsem);
2271
2272 ret = __cpufreq_driver_target(policy, target_freq, relation);
2273
2274 up_write(&policy->rwsem);
2275
2276 return ret;
2277}
2278EXPORT_SYMBOL_GPL(cpufreq_driver_target);
2279
2280__weak struct cpufreq_governor *cpufreq_fallback_governor(void)
2281{
2282 return NULL;
2283}
2284
2285static int cpufreq_init_governor(struct cpufreq_policy *policy)
2286{
2287 int ret;
2288
2289
2290 if (cpufreq_suspended)
2291 return 0;
2292
2293
2294
2295
2296 if (!policy->governor)
2297 return -EINVAL;
2298
2299
2300 if (policy->governor->flags & CPUFREQ_GOV_DYNAMIC_SWITCHING &&
2301 cpufreq_driver->flags & CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING) {
2302 struct cpufreq_governor *gov = cpufreq_fallback_governor();
2303
2304 if (gov) {
2305 pr_warn("Can't use %s governor as dynamic switching is disallowed. Fallback to %s governor\n",
2306 policy->governor->name, gov->name);
2307 policy->governor = gov;
2308 } else {
2309 return -EINVAL;
2310 }
2311 }
2312
2313 if (!try_module_get(policy->governor->owner))
2314 return -EINVAL;
2315
2316 pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
2317
2318 if (policy->governor->init) {
2319 ret = policy->governor->init(policy);
2320 if (ret) {
2321 module_put(policy->governor->owner);
2322 return ret;
2323 }
2324 }
2325
2326 policy->strict_target = !!(policy->governor->flags & CPUFREQ_GOV_STRICT_TARGET);
2327
2328 return 0;
2329}
2330
2331static void cpufreq_exit_governor(struct cpufreq_policy *policy)
2332{
2333 if (cpufreq_suspended || !policy->governor)
2334 return;
2335
2336 pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
2337
2338 if (policy->governor->exit)
2339 policy->governor->exit(policy);
2340
2341 module_put(policy->governor->owner);
2342}
2343
2344int cpufreq_start_governor(struct cpufreq_policy *policy)
2345{
2346 int ret;
2347
2348 if (cpufreq_suspended)
2349 return 0;
2350
2351 if (!policy->governor)
2352 return -EINVAL;
2353
2354 pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
2355
2356 if (cpufreq_driver->get)
2357 cpufreq_verify_current_freq(policy, false);
2358
2359 if (policy->governor->start) {
2360 ret = policy->governor->start(policy);
2361 if (ret)
2362 return ret;
2363 }
2364
2365 if (policy->governor->limits)
2366 policy->governor->limits(policy);
2367
2368 return 0;
2369}
2370
2371void cpufreq_stop_governor(struct cpufreq_policy *policy)
2372{
2373 if (cpufreq_suspended || !policy->governor)
2374 return;
2375
2376 pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
2377
2378 if (policy->governor->stop)
2379 policy->governor->stop(policy);
2380}
2381
2382static void cpufreq_governor_limits(struct cpufreq_policy *policy)
2383{
2384 if (cpufreq_suspended || !policy->governor)
2385 return;
2386
2387 pr_debug("%s: for CPU %u\n", __func__, policy->cpu);
2388
2389 if (policy->governor->limits)
2390 policy->governor->limits(policy);
2391}
2392
2393int cpufreq_register_governor(struct cpufreq_governor *governor)
2394{
2395 int err;
2396
2397 if (!governor)
2398 return -EINVAL;
2399
2400 if (cpufreq_disabled())
2401 return -ENODEV;
2402
2403 mutex_lock(&cpufreq_governor_mutex);
2404
2405 err = -EBUSY;
2406 if (!find_governor(governor->name)) {
2407 err = 0;
2408 list_add(&governor->governor_list, &cpufreq_governor_list);
2409 }
2410
2411 mutex_unlock(&cpufreq_governor_mutex);
2412 return err;
2413}
2414EXPORT_SYMBOL_GPL(cpufreq_register_governor);
2415
2416void cpufreq_unregister_governor(struct cpufreq_governor *governor)
2417{
2418 struct cpufreq_policy *policy;
2419 unsigned long flags;
2420
2421 if (!governor)
2422 return;
2423
2424 if (cpufreq_disabled())
2425 return;
2426
2427
2428 read_lock_irqsave(&cpufreq_driver_lock, flags);
2429 for_each_inactive_policy(policy) {
2430 if (!strcmp(policy->last_governor, governor->name)) {
2431 policy->governor = NULL;
2432 strcpy(policy->last_governor, "\0");
2433 }
2434 }
2435 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
2436
2437 mutex_lock(&cpufreq_governor_mutex);
2438 list_del(&governor->governor_list);
2439 mutex_unlock(&cpufreq_governor_mutex);
2440}
2441EXPORT_SYMBOL_GPL(cpufreq_unregister_governor);
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu)
2457{
2458 struct cpufreq_policy *cpu_policy;
2459 if (!policy)
2460 return -EINVAL;
2461
2462 cpu_policy = cpufreq_cpu_get(cpu);
2463 if (!cpu_policy)
2464 return -EINVAL;
2465
2466 memcpy(policy, cpu_policy, sizeof(*policy));
2467
2468 cpufreq_cpu_put(cpu_policy);
2469 return 0;
2470}
2471EXPORT_SYMBOL(cpufreq_get_policy);
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488static int cpufreq_set_policy(struct cpufreq_policy *policy,
2489 struct cpufreq_governor *new_gov,
2490 unsigned int new_pol)
2491{
2492 struct cpufreq_policy_data new_data;
2493 struct cpufreq_governor *old_gov;
2494 int ret;
2495
2496 memcpy(&new_data.cpuinfo, &policy->cpuinfo, sizeof(policy->cpuinfo));
2497 new_data.freq_table = policy->freq_table;
2498 new_data.cpu = policy->cpu;
2499
2500
2501
2502
2503 new_data.min = freq_qos_read_value(&policy->constraints, FREQ_QOS_MIN);
2504 new_data.max = freq_qos_read_value(&policy->constraints, FREQ_QOS_MAX);
2505
2506 pr_debug("setting new policy for CPU %u: %u - %u kHz\n",
2507 new_data.cpu, new_data.min, new_data.max);
2508
2509
2510
2511
2512
2513 ret = cpufreq_driver->verify(&new_data);
2514 if (ret)
2515 return ret;
2516
2517 policy->min = new_data.min;
2518 policy->max = new_data.max;
2519 trace_cpu_frequency_limits(policy);
2520
2521 policy->cached_target_freq = UINT_MAX;
2522
2523 pr_debug("new min and max freqs are %u - %u kHz\n",
2524 policy->min, policy->max);
2525
2526 if (cpufreq_driver->setpolicy) {
2527 policy->policy = new_pol;
2528 pr_debug("setting range\n");
2529 return cpufreq_driver->setpolicy(policy);
2530 }
2531
2532 if (new_gov == policy->governor) {
2533 pr_debug("governor limits update\n");
2534 cpufreq_governor_limits(policy);
2535 return 0;
2536 }
2537
2538 pr_debug("governor switch\n");
2539
2540
2541 old_gov = policy->governor;
2542
2543 if (old_gov) {
2544 cpufreq_stop_governor(policy);
2545 cpufreq_exit_governor(policy);
2546 }
2547
2548
2549 policy->governor = new_gov;
2550 ret = cpufreq_init_governor(policy);
2551 if (!ret) {
2552 ret = cpufreq_start_governor(policy);
2553 if (!ret) {
2554 pr_debug("governor change\n");
2555 sched_cpufreq_governor_change(policy, old_gov);
2556 return 0;
2557 }
2558 cpufreq_exit_governor(policy);
2559 }
2560
2561
2562 pr_debug("starting governor %s failed\n", policy->governor->name);
2563 if (old_gov) {
2564 policy->governor = old_gov;
2565 if (cpufreq_init_governor(policy))
2566 policy->governor = NULL;
2567 else
2568 cpufreq_start_governor(policy);
2569 }
2570
2571 return ret;
2572}
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583void cpufreq_update_policy(unsigned int cpu)
2584{
2585 struct cpufreq_policy *policy = cpufreq_cpu_acquire(cpu);
2586
2587 if (!policy)
2588 return;
2589
2590
2591
2592
2593
2594 if (cpufreq_driver->get && has_target() &&
2595 (cpufreq_suspended || WARN_ON(!cpufreq_verify_current_freq(policy, false))))
2596 goto unlock;
2597
2598 refresh_frequency_limits(policy);
2599
2600unlock:
2601 cpufreq_cpu_release(policy);
2602}
2603EXPORT_SYMBOL(cpufreq_update_policy);
2604
2605
2606
2607
2608
2609
2610
2611
2612void cpufreq_update_limits(unsigned int cpu)
2613{
2614 if (cpufreq_driver->update_limits)
2615 cpufreq_driver->update_limits(cpu);
2616 else
2617 cpufreq_update_policy(cpu);
2618}
2619EXPORT_SYMBOL_GPL(cpufreq_update_limits);
2620
2621
2622
2623
2624static int cpufreq_boost_set_sw(struct cpufreq_policy *policy, int state)
2625{
2626 int ret;
2627
2628 if (!policy->freq_table)
2629 return -ENXIO;
2630
2631 ret = cpufreq_frequency_table_cpuinfo(policy, policy->freq_table);
2632 if (ret) {
2633 pr_err("%s: Policy frequency update failed\n", __func__);
2634 return ret;
2635 }
2636
2637 ret = freq_qos_update_request(policy->max_freq_req, policy->max);
2638 if (ret < 0)
2639 return ret;
2640
2641 return 0;
2642}
2643
2644int cpufreq_boost_trigger_state(int state)
2645{
2646 struct cpufreq_policy *policy;
2647 unsigned long flags;
2648 int ret = 0;
2649
2650 if (cpufreq_driver->boost_enabled == state)
2651 return 0;
2652
2653 write_lock_irqsave(&cpufreq_driver_lock, flags);
2654 cpufreq_driver->boost_enabled = state;
2655 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2656
2657 get_online_cpus();
2658 for_each_active_policy(policy) {
2659 ret = cpufreq_driver->set_boost(policy, state);
2660 if (ret)
2661 goto err_reset_state;
2662 }
2663 put_online_cpus();
2664
2665 return 0;
2666
2667err_reset_state:
2668 put_online_cpus();
2669
2670 write_lock_irqsave(&cpufreq_driver_lock, flags);
2671 cpufreq_driver->boost_enabled = !state;
2672 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2673
2674 pr_err("%s: Cannot %s BOOST\n",
2675 __func__, state ? "enable" : "disable");
2676
2677 return ret;
2678}
2679
2680static bool cpufreq_boost_supported(void)
2681{
2682 return cpufreq_driver->set_boost;
2683}
2684
2685static int create_boost_sysfs_file(void)
2686{
2687 int ret;
2688
2689 ret = sysfs_create_file(cpufreq_global_kobject, &boost.attr);
2690 if (ret)
2691 pr_err("%s: cannot register global BOOST sysfs file\n",
2692 __func__);
2693
2694 return ret;
2695}
2696
2697static void remove_boost_sysfs_file(void)
2698{
2699 if (cpufreq_boost_supported())
2700 sysfs_remove_file(cpufreq_global_kobject, &boost.attr);
2701}
2702
2703int cpufreq_enable_boost_support(void)
2704{
2705 if (!cpufreq_driver)
2706 return -EINVAL;
2707
2708 if (cpufreq_boost_supported())
2709 return 0;
2710
2711 cpufreq_driver->set_boost = cpufreq_boost_set_sw;
2712
2713
2714 return create_boost_sysfs_file();
2715}
2716EXPORT_SYMBOL_GPL(cpufreq_enable_boost_support);
2717
2718int cpufreq_boost_enabled(void)
2719{
2720 return cpufreq_driver->boost_enabled;
2721}
2722EXPORT_SYMBOL_GPL(cpufreq_boost_enabled);
2723
2724
2725
2726
2727static enum cpuhp_state hp_online;
2728
2729static int cpuhp_cpufreq_online(unsigned int cpu)
2730{
2731 cpufreq_online(cpu);
2732
2733 return 0;
2734}
2735
2736static int cpuhp_cpufreq_offline(unsigned int cpu)
2737{
2738 cpufreq_offline(cpu);
2739
2740 return 0;
2741}
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753int cpufreq_register_driver(struct cpufreq_driver *driver_data)
2754{
2755 unsigned long flags;
2756 int ret;
2757
2758 if (cpufreq_disabled())
2759 return -ENODEV;
2760
2761
2762
2763
2764
2765 if (!get_cpu_device(0))
2766 return -EPROBE_DEFER;
2767
2768 if (!driver_data || !driver_data->verify || !driver_data->init ||
2769 !(driver_data->setpolicy || driver_data->target_index ||
2770 driver_data->target) ||
2771 (driver_data->setpolicy && (driver_data->target_index ||
2772 driver_data->target)) ||
2773 (!driver_data->get_intermediate != !driver_data->target_intermediate) ||
2774 (!driver_data->online != !driver_data->offline))
2775 return -EINVAL;
2776
2777 pr_debug("trying to register driver %s\n", driver_data->name);
2778
2779
2780 cpus_read_lock();
2781
2782 write_lock_irqsave(&cpufreq_driver_lock, flags);
2783 if (cpufreq_driver) {
2784 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2785 ret = -EEXIST;
2786 goto out;
2787 }
2788 cpufreq_driver = driver_data;
2789 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2790
2791
2792
2793
2794
2795 if (!cpufreq_driver->setpolicy) {
2796 static_branch_enable_cpuslocked(&cpufreq_freq_invariance);
2797 pr_debug("supports frequency invariance");
2798 }
2799
2800 if (driver_data->setpolicy)
2801 driver_data->flags |= CPUFREQ_CONST_LOOPS;
2802
2803 if (cpufreq_boost_supported()) {
2804 ret = create_boost_sysfs_file();
2805 if (ret)
2806 goto err_null_driver;
2807 }
2808
2809 ret = subsys_interface_register(&cpufreq_interface);
2810 if (ret)
2811 goto err_boost_unreg;
2812
2813 if (unlikely(list_empty(&cpufreq_policy_list))) {
2814
2815 ret = -ENODEV;
2816 pr_debug("%s: No CPU initialized for driver %s\n", __func__,
2817 driver_data->name);
2818 goto err_if_unreg;
2819 }
2820
2821 ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ONLINE_DYN,
2822 "cpufreq:online",
2823 cpuhp_cpufreq_online,
2824 cpuhp_cpufreq_offline);
2825 if (ret < 0)
2826 goto err_if_unreg;
2827 hp_online = ret;
2828 ret = 0;
2829
2830 pr_debug("driver %s up and running\n", driver_data->name);
2831 goto out;
2832
2833err_if_unreg:
2834 subsys_interface_unregister(&cpufreq_interface);
2835err_boost_unreg:
2836 remove_boost_sysfs_file();
2837err_null_driver:
2838 write_lock_irqsave(&cpufreq_driver_lock, flags);
2839 cpufreq_driver = NULL;
2840 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2841out:
2842 cpus_read_unlock();
2843 return ret;
2844}
2845EXPORT_SYMBOL_GPL(cpufreq_register_driver);
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855int cpufreq_unregister_driver(struct cpufreq_driver *driver)
2856{
2857 unsigned long flags;
2858
2859 if (!cpufreq_driver || (driver != cpufreq_driver))
2860 return -EINVAL;
2861
2862 pr_debug("unregistering driver %s\n", driver->name);
2863
2864
2865 cpus_read_lock();
2866 subsys_interface_unregister(&cpufreq_interface);
2867 remove_boost_sysfs_file();
2868 static_branch_disable_cpuslocked(&cpufreq_freq_invariance);
2869 cpuhp_remove_state_nocalls_cpuslocked(hp_online);
2870
2871 write_lock_irqsave(&cpufreq_driver_lock, flags);
2872
2873 cpufreq_driver = NULL;
2874
2875 write_unlock_irqrestore(&cpufreq_driver_lock, flags);
2876 cpus_read_unlock();
2877
2878 return 0;
2879}
2880EXPORT_SYMBOL_GPL(cpufreq_unregister_driver);
2881
2882static int __init cpufreq_core_init(void)
2883{
2884 struct cpufreq_governor *gov = cpufreq_default_governor();
2885
2886 if (cpufreq_disabled())
2887 return -ENODEV;
2888
2889 cpufreq_global_kobject = kobject_create_and_add("cpufreq", &cpu_subsys.dev_root->kobj);
2890 BUG_ON(!cpufreq_global_kobject);
2891
2892 if (!strlen(default_governor))
2893 strncpy(default_governor, gov->name, CPUFREQ_NAME_LEN);
2894
2895 return 0;
2896}
2897module_param(off, int, 0444);
2898module_param_string(default_governor, default_governor, CPUFREQ_NAME_LEN, 0444);
2899core_initcall(cpufreq_core_init);
2900