Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework
4 * for Non-CPU Devices.
5 *
6 * Copyright (C) 2011 Samsung Electronics
7 * MyungJoo Ham <myungjoo.ham@samsung.com>
8 */
9
10#include <linux/kernel.h>
11#include <linux/kmod.h>
12#include <linux/sched.h>
13#include <linux/debugfs.h>
14#include <linux/errno.h>
15#include <linux/err.h>
16#include <linux/init.h>
17#include <linux/export.h>
18#include <linux/slab.h>
19#include <linux/stat.h>
20#include <linux/pm_opp.h>
21#include <linux/devfreq.h>
22#include <linux/workqueue.h>
23#include <linux/platform_device.h>
24#include <linux/list.h>
25#include <linux/printk.h>
26#include <linux/hrtimer.h>
27#include <linux/of.h>
28#include <linux/pm_qos.h>
29#include "governor.h"
30
31#define CREATE_TRACE_POINTS
32#include <trace/events/devfreq.h>
33
34#define HZ_PER_KHZ 1000
35
36static struct class *devfreq_class;
37static struct dentry *devfreq_debugfs;
38
39/*
40 * devfreq core provides delayed work based load monitoring helper
41 * functions. Governors can use these or can implement their own
42 * monitoring mechanism.
43 */
44static struct workqueue_struct *devfreq_wq;
45
46/* The list of all device-devfreq governors */
47static LIST_HEAD(devfreq_governor_list);
48/* The list of all device-devfreq */
49static LIST_HEAD(devfreq_list);
50static DEFINE_MUTEX(devfreq_list_lock);
51
52/**
53 * find_device_devfreq() - find devfreq struct using device pointer
54 * @dev: device pointer used to lookup device devfreq.
55 *
56 * Search the list of device devfreqs and return the matched device's
57 * devfreq info. devfreq_list_lock should be held by the caller.
58 */
59static struct devfreq *find_device_devfreq(struct device *dev)
60{
61 struct devfreq *tmp_devfreq;
62
63 lockdep_assert_held(&devfreq_list_lock);
64
65 if (IS_ERR_OR_NULL(dev)) {
66 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
67 return ERR_PTR(-EINVAL);
68 }
69
70 list_for_each_entry(tmp_devfreq, &devfreq_list, node) {
71 if (tmp_devfreq->dev.parent == dev)
72 return tmp_devfreq;
73 }
74
75 return ERR_PTR(-ENODEV);
76}
77
78static unsigned long find_available_min_freq(struct devfreq *devfreq)
79{
80 struct dev_pm_opp *opp;
81 unsigned long min_freq = 0;
82
83 opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &min_freq);
84 if (IS_ERR(opp))
85 min_freq = 0;
86 else
87 dev_pm_opp_put(opp);
88
89 return min_freq;
90}
91
92static unsigned long find_available_max_freq(struct devfreq *devfreq)
93{
94 struct dev_pm_opp *opp;
95 unsigned long max_freq = ULONG_MAX;
96
97 opp = dev_pm_opp_find_freq_floor(devfreq->dev.parent, &max_freq);
98 if (IS_ERR(opp))
99 max_freq = 0;
100 else
101 dev_pm_opp_put(opp);
102
103 return max_freq;
104}
105
106/**
107 * get_freq_range() - Get the current freq range
108 * @devfreq: the devfreq instance
109 * @min_freq: the min frequency
110 * @max_freq: the max frequency
111 *
112 * This takes into consideration all constraints.
113 */
114static void get_freq_range(struct devfreq *devfreq,
115 unsigned long *min_freq,
116 unsigned long *max_freq)
117{
118 unsigned long *freq_table = devfreq->profile->freq_table;
119 s32 qos_min_freq, qos_max_freq;
120
121 lockdep_assert_held(&devfreq->lock);
122
123 /*
124 * Initialize minimum/maximum frequency from freq table.
125 * The devfreq drivers can initialize this in either ascending or
126 * descending order and devfreq core supports both.
127 */
128 if (freq_table[0] < freq_table[devfreq->profile->max_state - 1]) {
129 *min_freq = freq_table[0];
130 *max_freq = freq_table[devfreq->profile->max_state - 1];
131 } else {
132 *min_freq = freq_table[devfreq->profile->max_state - 1];
133 *max_freq = freq_table[0];
134 }
135
136 /* Apply constraints from PM QoS */
137 qos_min_freq = dev_pm_qos_read_value(devfreq->dev.parent,
138 DEV_PM_QOS_MIN_FREQUENCY);
139 qos_max_freq = dev_pm_qos_read_value(devfreq->dev.parent,
140 DEV_PM_QOS_MAX_FREQUENCY);
141 *min_freq = max(*min_freq, (unsigned long)HZ_PER_KHZ * qos_min_freq);
142 if (qos_max_freq != PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE)
143 *max_freq = min(*max_freq,
144 (unsigned long)HZ_PER_KHZ * qos_max_freq);
145
146 /* Apply constraints from OPP interface */
147 *min_freq = max(*min_freq, devfreq->scaling_min_freq);
148 *max_freq = min(*max_freq, devfreq->scaling_max_freq);
149
150 if (*min_freq > *max_freq)
151 *min_freq = *max_freq;
152}
153
154/**
155 * devfreq_get_freq_level() - Lookup freq_table for the frequency
156 * @devfreq: the devfreq instance
157 * @freq: the target frequency
158 */
159static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq)
160{
161 int lev;
162
163 for (lev = 0; lev < devfreq->profile->max_state; lev++)
164 if (freq == devfreq->profile->freq_table[lev])
165 return lev;
166
167 return -EINVAL;
168}
169
170static int set_freq_table(struct devfreq *devfreq)
171{
172 struct devfreq_dev_profile *profile = devfreq->profile;
173 struct dev_pm_opp *opp;
174 unsigned long freq;
175 int i, count;
176
177 /* Initialize the freq_table from OPP table */
178 count = dev_pm_opp_get_opp_count(devfreq->dev.parent);
179 if (count <= 0)
180 return -EINVAL;
181
182 profile->max_state = count;
183 profile->freq_table = devm_kcalloc(devfreq->dev.parent,
184 profile->max_state,
185 sizeof(*profile->freq_table),
186 GFP_KERNEL);
187 if (!profile->freq_table) {
188 profile->max_state = 0;
189 return -ENOMEM;
190 }
191
192 for (i = 0, freq = 0; i < profile->max_state; i++, freq++) {
193 opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &freq);
194 if (IS_ERR(opp)) {
195 devm_kfree(devfreq->dev.parent, profile->freq_table);
196 profile->max_state = 0;
197 return PTR_ERR(opp);
198 }
199 dev_pm_opp_put(opp);
200 profile->freq_table[i] = freq;
201 }
202
203 return 0;
204}
205
206/**
207 * devfreq_update_status() - Update statistics of devfreq behavior
208 * @devfreq: the devfreq instance
209 * @freq: the update target frequency
210 */
211int devfreq_update_status(struct devfreq *devfreq, unsigned long freq)
212{
213 int lev, prev_lev, ret = 0;
214 u64 cur_time;
215
216 lockdep_assert_held(&devfreq->lock);
217 cur_time = get_jiffies_64();
218
219 /* Immediately exit if previous_freq is not initialized yet. */
220 if (!devfreq->previous_freq)
221 goto out;
222
223 prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq);
224 if (prev_lev < 0) {
225 ret = prev_lev;
226 goto out;
227 }
228
229 devfreq->stats.time_in_state[prev_lev] +=
230 cur_time - devfreq->stats.last_update;
231
232 lev = devfreq_get_freq_level(devfreq, freq);
233 if (lev < 0) {
234 ret = lev;
235 goto out;
236 }
237
238 if (lev != prev_lev) {
239 devfreq->stats.trans_table[
240 (prev_lev * devfreq->profile->max_state) + lev]++;
241 devfreq->stats.total_trans++;
242 }
243
244out:
245 devfreq->stats.last_update = cur_time;
246 return ret;
247}
248EXPORT_SYMBOL(devfreq_update_status);
249
250/**
251 * find_devfreq_governor() - find devfreq governor from name
252 * @name: name of the governor
253 *
254 * Search the list of devfreq governors and return the matched
255 * governor's pointer. devfreq_list_lock should be held by the caller.
256 */
257static struct devfreq_governor *find_devfreq_governor(const char *name)
258{
259 struct devfreq_governor *tmp_governor;
260
261 lockdep_assert_held(&devfreq_list_lock);
262
263 if (IS_ERR_OR_NULL(name)) {
264 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
265 return ERR_PTR(-EINVAL);
266 }
267
268 list_for_each_entry(tmp_governor, &devfreq_governor_list, node) {
269 if (!strncmp(tmp_governor->name, name, DEVFREQ_NAME_LEN))
270 return tmp_governor;
271 }
272
273 return ERR_PTR(-ENODEV);
274}
275
276/**
277 * try_then_request_governor() - Try to find the governor and request the
278 * module if is not found.
279 * @name: name of the governor
280 *
281 * Search the list of devfreq governors and request the module and try again
282 * if is not found. This can happen when both drivers (the governor driver
283 * and the driver that call devfreq_add_device) are built as modules.
284 * devfreq_list_lock should be held by the caller. Returns the matched
285 * governor's pointer or an error pointer.
286 */
287static struct devfreq_governor *try_then_request_governor(const char *name)
288{
289 struct devfreq_governor *governor;
290 int err = 0;
291
292 lockdep_assert_held(&devfreq_list_lock);
293
294 if (IS_ERR_OR_NULL(name)) {
295 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
296 return ERR_PTR(-EINVAL);
297 }
298
299 governor = find_devfreq_governor(name);
300 if (IS_ERR(governor)) {
301 mutex_unlock(&devfreq_list_lock);
302
303 if (!strncmp(name, DEVFREQ_GOV_SIMPLE_ONDEMAND,
304 DEVFREQ_NAME_LEN))
305 err = request_module("governor_%s", "simpleondemand");
306 else
307 err = request_module("governor_%s", name);
308 /* Restore previous state before return */
309 mutex_lock(&devfreq_list_lock);
310 if (err)
311 return (err < 0) ? ERR_PTR(err) : ERR_PTR(-EINVAL);
312
313 governor = find_devfreq_governor(name);
314 }
315
316 return governor;
317}
318
319static int devfreq_notify_transition(struct devfreq *devfreq,
320 struct devfreq_freqs *freqs, unsigned int state)
321{
322 if (!devfreq)
323 return -EINVAL;
324
325 switch (state) {
326 case DEVFREQ_PRECHANGE:
327 srcu_notifier_call_chain(&devfreq->transition_notifier_list,
328 DEVFREQ_PRECHANGE, freqs);
329 break;
330
331 case DEVFREQ_POSTCHANGE:
332 srcu_notifier_call_chain(&devfreq->transition_notifier_list,
333 DEVFREQ_POSTCHANGE, freqs);
334 break;
335 default:
336 return -EINVAL;
337 }
338
339 return 0;
340}
341
342static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq,
343 u32 flags)
344{
345 struct devfreq_freqs freqs;
346 unsigned long cur_freq;
347 int err = 0;
348
349 if (devfreq->profile->get_cur_freq)
350 devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq);
351 else
352 cur_freq = devfreq->previous_freq;
353
354 freqs.old = cur_freq;
355 freqs.new = new_freq;
356 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE);
357
358 err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags);
359 if (err) {
360 freqs.new = cur_freq;
361 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
362 return err;
363 }
364
365 freqs.new = new_freq;
366 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
367
368 if (devfreq_update_status(devfreq, new_freq))
369 dev_err(&devfreq->dev,
370 "Couldn't update frequency transition information.\n");
371
372 devfreq->previous_freq = new_freq;
373
374 if (devfreq->suspend_freq)
375 devfreq->resume_freq = cur_freq;
376
377 return err;
378}
379
380/* Load monitoring helper functions for governors use */
381
382/**
383 * update_devfreq() - Reevaluate the device and configure frequency.
384 * @devfreq: the devfreq instance.
385 *
386 * Note: Lock devfreq->lock before calling update_devfreq
387 * This function is exported for governors.
388 */
389int update_devfreq(struct devfreq *devfreq)
390{
391 unsigned long freq, min_freq, max_freq;
392 int err = 0;
393 u32 flags = 0;
394
395 lockdep_assert_held(&devfreq->lock);
396
397 if (!devfreq->governor)
398 return -EINVAL;
399
400 /* Reevaluate the proper frequency */
401 err = devfreq->governor->get_target_freq(devfreq, &freq);
402 if (err)
403 return err;
404 get_freq_range(devfreq, &min_freq, &max_freq);
405
406 if (freq < min_freq) {
407 freq = min_freq;
408 flags &= ~DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use GLB */
409 }
410 if (freq > max_freq) {
411 freq = max_freq;
412 flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */
413 }
414
415 return devfreq_set_target(devfreq, freq, flags);
416
417}
418EXPORT_SYMBOL(update_devfreq);
419
420/**
421 * devfreq_monitor() - Periodically poll devfreq objects.
422 * @work: the work struct used to run devfreq_monitor periodically.
423 *
424 */
425static void devfreq_monitor(struct work_struct *work)
426{
427 int err;
428 struct devfreq *devfreq = container_of(work,
429 struct devfreq, work.work);
430
431 mutex_lock(&devfreq->lock);
432 err = update_devfreq(devfreq);
433 if (err)
434 dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err);
435
436 queue_delayed_work(devfreq_wq, &devfreq->work,
437 msecs_to_jiffies(devfreq->profile->polling_ms));
438 mutex_unlock(&devfreq->lock);
439
440 trace_devfreq_monitor(devfreq);
441}
442
443/**
444 * devfreq_monitor_start() - Start load monitoring of devfreq instance
445 * @devfreq: the devfreq instance.
446 *
447 * Helper function for starting devfreq device load monitoring. By
448 * default delayed work based monitoring is supported. Function
449 * to be called from governor in response to DEVFREQ_GOV_START
450 * event when device is added to devfreq framework.
451 */
452void devfreq_monitor_start(struct devfreq *devfreq)
453{
454 if (devfreq->governor->interrupt_driven)
455 return;
456
457 INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
458 if (devfreq->profile->polling_ms)
459 queue_delayed_work(devfreq_wq, &devfreq->work,
460 msecs_to_jiffies(devfreq->profile->polling_ms));
461}
462EXPORT_SYMBOL(devfreq_monitor_start);
463
464/**
465 * devfreq_monitor_stop() - Stop load monitoring of a devfreq instance
466 * @devfreq: the devfreq instance.
467 *
468 * Helper function to stop devfreq device load monitoring. Function
469 * to be called from governor in response to DEVFREQ_GOV_STOP
470 * event when device is removed from devfreq framework.
471 */
472void devfreq_monitor_stop(struct devfreq *devfreq)
473{
474 if (devfreq->governor->interrupt_driven)
475 return;
476
477 cancel_delayed_work_sync(&devfreq->work);
478}
479EXPORT_SYMBOL(devfreq_monitor_stop);
480
481/**
482 * devfreq_monitor_suspend() - Suspend load monitoring of a devfreq instance
483 * @devfreq: the devfreq instance.
484 *
485 * Helper function to suspend devfreq device load monitoring. Function
486 * to be called from governor in response to DEVFREQ_GOV_SUSPEND
487 * event or when polling interval is set to zero.
488 *
489 * Note: Though this function is same as devfreq_monitor_stop(),
490 * intentionally kept separate to provide hooks for collecting
491 * transition statistics.
492 */
493void devfreq_monitor_suspend(struct devfreq *devfreq)
494{
495 mutex_lock(&devfreq->lock);
496 if (devfreq->stop_polling) {
497 mutex_unlock(&devfreq->lock);
498 return;
499 }
500
501 devfreq_update_status(devfreq, devfreq->previous_freq);
502 devfreq->stop_polling = true;
503 mutex_unlock(&devfreq->lock);
504
505 if (devfreq->governor->interrupt_driven)
506 return;
507
508 cancel_delayed_work_sync(&devfreq->work);
509}
510EXPORT_SYMBOL(devfreq_monitor_suspend);
511
512/**
513 * devfreq_monitor_resume() - Resume load monitoring of a devfreq instance
514 * @devfreq: the devfreq instance.
515 *
516 * Helper function to resume devfreq device load monitoring. Function
517 * to be called from governor in response to DEVFREQ_GOV_RESUME
518 * event or when polling interval is set to non-zero.
519 */
520void devfreq_monitor_resume(struct devfreq *devfreq)
521{
522 unsigned long freq;
523
524 mutex_lock(&devfreq->lock);
525 if (!devfreq->stop_polling)
526 goto out;
527
528 if (devfreq->governor->interrupt_driven)
529 goto out_update;
530
531 if (!delayed_work_pending(&devfreq->work) &&
532 devfreq->profile->polling_ms)
533 queue_delayed_work(devfreq_wq, &devfreq->work,
534 msecs_to_jiffies(devfreq->profile->polling_ms));
535
536out_update:
537 devfreq->stats.last_update = get_jiffies_64();
538 devfreq->stop_polling = false;
539
540 if (devfreq->profile->get_cur_freq &&
541 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq))
542 devfreq->previous_freq = freq;
543
544out:
545 mutex_unlock(&devfreq->lock);
546}
547EXPORT_SYMBOL(devfreq_monitor_resume);
548
549/**
550 * devfreq_update_interval() - Update device devfreq monitoring interval
551 * @devfreq: the devfreq instance.
552 * @delay: new polling interval to be set.
553 *
554 * Helper function to set new load monitoring polling interval. Function
555 * to be called from governor in response to DEVFREQ_GOV_UPDATE_INTERVAL event.
556 */
557void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay)
558{
559 unsigned int cur_delay = devfreq->profile->polling_ms;
560 unsigned int new_delay = *delay;
561
562 mutex_lock(&devfreq->lock);
563 devfreq->profile->polling_ms = new_delay;
564
565 if (devfreq->stop_polling)
566 goto out;
567
568 if (devfreq->governor->interrupt_driven)
569 goto out;
570
571 /* if new delay is zero, stop polling */
572 if (!new_delay) {
573 mutex_unlock(&devfreq->lock);
574 cancel_delayed_work_sync(&devfreq->work);
575 return;
576 }
577
578 /* if current delay is zero, start polling with new delay */
579 if (!cur_delay) {
580 queue_delayed_work(devfreq_wq, &devfreq->work,
581 msecs_to_jiffies(devfreq->profile->polling_ms));
582 goto out;
583 }
584
585 /* if current delay is greater than new delay, restart polling */
586 if (cur_delay > new_delay) {
587 mutex_unlock(&devfreq->lock);
588 cancel_delayed_work_sync(&devfreq->work);
589 mutex_lock(&devfreq->lock);
590 if (!devfreq->stop_polling)
591 queue_delayed_work(devfreq_wq, &devfreq->work,
592 msecs_to_jiffies(devfreq->profile->polling_ms));
593 }
594out:
595 mutex_unlock(&devfreq->lock);
596}
597EXPORT_SYMBOL(devfreq_update_interval);
598
599/**
600 * devfreq_notifier_call() - Notify that the device frequency requirements
601 * has been changed out of devfreq framework.
602 * @nb: the notifier_block (supposed to be devfreq->nb)
603 * @type: not used
604 * @devp: not used
605 *
606 * Called by a notifier that uses devfreq->nb.
607 */
608static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type,
609 void *devp)
610{
611 struct devfreq *devfreq = container_of(nb, struct devfreq, nb);
612 int err = -EINVAL;
613
614 mutex_lock(&devfreq->lock);
615
616 devfreq->scaling_min_freq = find_available_min_freq(devfreq);
617 if (!devfreq->scaling_min_freq)
618 goto out;
619
620 devfreq->scaling_max_freq = find_available_max_freq(devfreq);
621 if (!devfreq->scaling_max_freq) {
622 devfreq->scaling_max_freq = ULONG_MAX;
623 goto out;
624 }
625
626 err = update_devfreq(devfreq);
627
628out:
629 mutex_unlock(&devfreq->lock);
630 if (err)
631 dev_err(devfreq->dev.parent,
632 "failed to update frequency from OPP notifier (%d)\n",
633 err);
634
635 return NOTIFY_OK;
636}
637
638/**
639 * qos_notifier_call() - Common handler for QoS constraints.
640 * @devfreq: the devfreq instance.
641 */
642static int qos_notifier_call(struct devfreq *devfreq)
643{
644 int err;
645
646 mutex_lock(&devfreq->lock);
647 err = update_devfreq(devfreq);
648 mutex_unlock(&devfreq->lock);
649 if (err)
650 dev_err(devfreq->dev.parent,
651 "failed to update frequency from PM QoS (%d)\n",
652 err);
653
654 return NOTIFY_OK;
655}
656
657/**
658 * qos_min_notifier_call() - Callback for QoS min_freq changes.
659 * @nb: Should be devfreq->nb_min
660 */
661static int qos_min_notifier_call(struct notifier_block *nb,
662 unsigned long val, void *ptr)
663{
664 return qos_notifier_call(container_of(nb, struct devfreq, nb_min));
665}
666
667/**
668 * qos_max_notifier_call() - Callback for QoS max_freq changes.
669 * @nb: Should be devfreq->nb_max
670 */
671static int qos_max_notifier_call(struct notifier_block *nb,
672 unsigned long val, void *ptr)
673{
674 return qos_notifier_call(container_of(nb, struct devfreq, nb_max));
675}
676
677/**
678 * devfreq_dev_release() - Callback for struct device to release the device.
679 * @dev: the devfreq device
680 *
681 * Remove devfreq from the list and release its resources.
682 */
683static void devfreq_dev_release(struct device *dev)
684{
685 struct devfreq *devfreq = to_devfreq(dev);
686 int err;
687
688 mutex_lock(&devfreq_list_lock);
689 list_del(&devfreq->node);
690 mutex_unlock(&devfreq_list_lock);
691
692 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_max,
693 DEV_PM_QOS_MAX_FREQUENCY);
694 if (err && err != -ENOENT)
695 dev_warn(dev->parent,
696 "Failed to remove max_freq notifier: %d\n", err);
697 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_min,
698 DEV_PM_QOS_MIN_FREQUENCY);
699 if (err && err != -ENOENT)
700 dev_warn(dev->parent,
701 "Failed to remove min_freq notifier: %d\n", err);
702
703 if (dev_pm_qos_request_active(&devfreq->user_max_freq_req)) {
704 err = dev_pm_qos_remove_request(&devfreq->user_max_freq_req);
705 if (err < 0)
706 dev_warn(dev->parent,
707 "Failed to remove max_freq request: %d\n", err);
708 }
709 if (dev_pm_qos_request_active(&devfreq->user_min_freq_req)) {
710 err = dev_pm_qos_remove_request(&devfreq->user_min_freq_req);
711 if (err < 0)
712 dev_warn(dev->parent,
713 "Failed to remove min_freq request: %d\n", err);
714 }
715
716 if (devfreq->profile->exit)
717 devfreq->profile->exit(devfreq->dev.parent);
718
719 mutex_destroy(&devfreq->lock);
720 kfree(devfreq);
721}
722
723/**
724 * devfreq_add_device() - Add devfreq feature to the device
725 * @dev: the device to add devfreq feature.
726 * @profile: device-specific profile to run devfreq.
727 * @governor_name: name of the policy to choose frequency.
728 * @data: private data for the governor. The devfreq framework does not
729 * touch this value.
730 */
731struct devfreq *devfreq_add_device(struct device *dev,
732 struct devfreq_dev_profile *profile,
733 const char *governor_name,
734 void *data)
735{
736 struct devfreq *devfreq;
737 struct devfreq_governor *governor;
738 int err = 0;
739
740 if (!dev || !profile || !governor_name) {
741 dev_err(dev, "%s: Invalid parameters.\n", __func__);
742 return ERR_PTR(-EINVAL);
743 }
744
745 mutex_lock(&devfreq_list_lock);
746 devfreq = find_device_devfreq(dev);
747 mutex_unlock(&devfreq_list_lock);
748 if (!IS_ERR(devfreq)) {
749 dev_err(dev, "%s: devfreq device already exists!\n",
750 __func__);
751 err = -EINVAL;
752 goto err_out;
753 }
754
755 devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL);
756 if (!devfreq) {
757 err = -ENOMEM;
758 goto err_out;
759 }
760
761 mutex_init(&devfreq->lock);
762 mutex_lock(&devfreq->lock);
763 devfreq->dev.parent = dev;
764 devfreq->dev.class = devfreq_class;
765 devfreq->dev.release = devfreq_dev_release;
766 INIT_LIST_HEAD(&devfreq->node);
767 devfreq->profile = profile;
768 strscpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN);
769 devfreq->previous_freq = profile->initial_freq;
770 devfreq->last_status.current_frequency = profile->initial_freq;
771 devfreq->data = data;
772 devfreq->nb.notifier_call = devfreq_notifier_call;
773
774 if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
775 mutex_unlock(&devfreq->lock);
776 err = set_freq_table(devfreq);
777 if (err < 0)
778 goto err_dev;
779 mutex_lock(&devfreq->lock);
780 }
781
782 devfreq->scaling_min_freq = find_available_min_freq(devfreq);
783 if (!devfreq->scaling_min_freq) {
784 mutex_unlock(&devfreq->lock);
785 err = -EINVAL;
786 goto err_dev;
787 }
788
789 devfreq->scaling_max_freq = find_available_max_freq(devfreq);
790 if (!devfreq->scaling_max_freq) {
791 mutex_unlock(&devfreq->lock);
792 err = -EINVAL;
793 goto err_dev;
794 }
795
796 devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev);
797 atomic_set(&devfreq->suspend_count, 0);
798
799 dev_set_name(&devfreq->dev, "%s", dev_name(dev));
800 err = device_register(&devfreq->dev);
801 if (err) {
802 mutex_unlock(&devfreq->lock);
803 put_device(&devfreq->dev);
804 goto err_out;
805 }
806
807 devfreq->stats.trans_table = devm_kzalloc(&devfreq->dev,
808 array3_size(sizeof(unsigned int),
809 devfreq->profile->max_state,
810 devfreq->profile->max_state),
811 GFP_KERNEL);
812 if (!devfreq->stats.trans_table) {
813 mutex_unlock(&devfreq->lock);
814 err = -ENOMEM;
815 goto err_devfreq;
816 }
817
818 devfreq->stats.time_in_state = devm_kcalloc(&devfreq->dev,
819 devfreq->profile->max_state,
820 sizeof(*devfreq->stats.time_in_state),
821 GFP_KERNEL);
822 if (!devfreq->stats.time_in_state) {
823 mutex_unlock(&devfreq->lock);
824 err = -ENOMEM;
825 goto err_devfreq;
826 }
827
828 devfreq->stats.total_trans = 0;
829 devfreq->stats.last_update = get_jiffies_64();
830
831 srcu_init_notifier_head(&devfreq->transition_notifier_list);
832
833 mutex_unlock(&devfreq->lock);
834
835 err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req,
836 DEV_PM_QOS_MIN_FREQUENCY, 0);
837 if (err < 0)
838 goto err_devfreq;
839 err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req,
840 DEV_PM_QOS_MAX_FREQUENCY,
841 PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE);
842 if (err < 0)
843 goto err_devfreq;
844
845 devfreq->nb_min.notifier_call = qos_min_notifier_call;
846 err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_min,
847 DEV_PM_QOS_MIN_FREQUENCY);
848 if (err)
849 goto err_devfreq;
850
851 devfreq->nb_max.notifier_call = qos_max_notifier_call;
852 err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_max,
853 DEV_PM_QOS_MAX_FREQUENCY);
854 if (err)
855 goto err_devfreq;
856
857 mutex_lock(&devfreq_list_lock);
858
859 governor = try_then_request_governor(devfreq->governor_name);
860 if (IS_ERR(governor)) {
861 dev_err(dev, "%s: Unable to find governor for the device\n",
862 __func__);
863 err = PTR_ERR(governor);
864 goto err_init;
865 }
866
867 devfreq->governor = governor;
868 err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START,
869 NULL);
870 if (err) {
871 dev_err(dev, "%s: Unable to start governor for the device\n",
872 __func__);
873 goto err_init;
874 }
875
876 list_add(&devfreq->node, &devfreq_list);
877
878 mutex_unlock(&devfreq_list_lock);
879
880 return devfreq;
881
882err_init:
883 mutex_unlock(&devfreq_list_lock);
884err_devfreq:
885 devfreq_remove_device(devfreq);
886 devfreq = NULL;
887err_dev:
888 kfree(devfreq);
889err_out:
890 return ERR_PTR(err);
891}
892EXPORT_SYMBOL(devfreq_add_device);
893
894/**
895 * devfreq_remove_device() - Remove devfreq feature from a device.
896 * @devfreq: the devfreq instance to be removed
897 *
898 * The opposite of devfreq_add_device().
899 */
900int devfreq_remove_device(struct devfreq *devfreq)
901{
902 if (!devfreq)
903 return -EINVAL;
904
905 if (devfreq->governor)
906 devfreq->governor->event_handler(devfreq,
907 DEVFREQ_GOV_STOP, NULL);
908 device_unregister(&devfreq->dev);
909
910 return 0;
911}
912EXPORT_SYMBOL(devfreq_remove_device);
913
914static int devm_devfreq_dev_match(struct device *dev, void *res, void *data)
915{
916 struct devfreq **r = res;
917
918 if (WARN_ON(!r || !*r))
919 return 0;
920
921 return *r == data;
922}
923
924static void devm_devfreq_dev_release(struct device *dev, void *res)
925{
926 devfreq_remove_device(*(struct devfreq **)res);
927}
928
929/**
930 * devm_devfreq_add_device() - Resource-managed devfreq_add_device()
931 * @dev: the device to add devfreq feature.
932 * @profile: device-specific profile to run devfreq.
933 * @governor_name: name of the policy to choose frequency.
934 * @data: private data for the governor. The devfreq framework does not
935 * touch this value.
936 *
937 * This function manages automatically the memory of devfreq device using device
938 * resource management and simplify the free operation for memory of devfreq
939 * device.
940 */
941struct devfreq *devm_devfreq_add_device(struct device *dev,
942 struct devfreq_dev_profile *profile,
943 const char *governor_name,
944 void *data)
945{
946 struct devfreq **ptr, *devfreq;
947
948 ptr = devres_alloc(devm_devfreq_dev_release, sizeof(*ptr), GFP_KERNEL);
949 if (!ptr)
950 return ERR_PTR(-ENOMEM);
951
952 devfreq = devfreq_add_device(dev, profile, governor_name, data);
953 if (IS_ERR(devfreq)) {
954 devres_free(ptr);
955 return devfreq;
956 }
957
958 *ptr = devfreq;
959 devres_add(dev, ptr);
960
961 return devfreq;
962}
963EXPORT_SYMBOL(devm_devfreq_add_device);
964
965#ifdef CONFIG_OF
966/*
967 * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree
968 * @dev - instance to the given device
969 * @index - index into list of devfreq
970 *
971 * return the instance of devfreq device
972 */
973struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
974{
975 struct device_node *node;
976 struct devfreq *devfreq;
977
978 if (!dev)
979 return ERR_PTR(-EINVAL);
980
981 if (!dev->of_node)
982 return ERR_PTR(-EINVAL);
983
984 node = of_parse_phandle(dev->of_node, "devfreq", index);
985 if (!node)
986 return ERR_PTR(-ENODEV);
987
988 mutex_lock(&devfreq_list_lock);
989 list_for_each_entry(devfreq, &devfreq_list, node) {
990 if (devfreq->dev.parent
991 && devfreq->dev.parent->of_node == node) {
992 mutex_unlock(&devfreq_list_lock);
993 of_node_put(node);
994 return devfreq;
995 }
996 }
997 mutex_unlock(&devfreq_list_lock);
998 of_node_put(node);
999
1000 return ERR_PTR(-EPROBE_DEFER);
1001}
1002#else
1003struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
1004{
1005 return ERR_PTR(-ENODEV);
1006}
1007#endif /* CONFIG_OF */
1008EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle);
1009
1010/**
1011 * devm_devfreq_remove_device() - Resource-managed devfreq_remove_device()
1012 * @dev: the device from which to remove devfreq feature.
1013 * @devfreq: the devfreq instance to be removed
1014 */
1015void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq)
1016{
1017 WARN_ON(devres_release(dev, devm_devfreq_dev_release,
1018 devm_devfreq_dev_match, devfreq));
1019}
1020EXPORT_SYMBOL(devm_devfreq_remove_device);
1021
1022/**
1023 * devfreq_suspend_device() - Suspend devfreq of a device.
1024 * @devfreq: the devfreq instance to be suspended
1025 *
1026 * This function is intended to be called by the pm callbacks
1027 * (e.g., runtime_suspend, suspend) of the device driver that
1028 * holds the devfreq.
1029 */
1030int devfreq_suspend_device(struct devfreq *devfreq)
1031{
1032 int ret;
1033
1034 if (!devfreq)
1035 return -EINVAL;
1036
1037 if (atomic_inc_return(&devfreq->suspend_count) > 1)
1038 return 0;
1039
1040 if (devfreq->governor) {
1041 ret = devfreq->governor->event_handler(devfreq,
1042 DEVFREQ_GOV_SUSPEND, NULL);
1043 if (ret)
1044 return ret;
1045 }
1046
1047 if (devfreq->suspend_freq) {
1048 mutex_lock(&devfreq->lock);
1049 ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0);
1050 mutex_unlock(&devfreq->lock);
1051 if (ret)
1052 return ret;
1053 }
1054
1055 return 0;
1056}
1057EXPORT_SYMBOL(devfreq_suspend_device);
1058
1059/**
1060 * devfreq_resume_device() - Resume devfreq of a device.
1061 * @devfreq: the devfreq instance to be resumed
1062 *
1063 * This function is intended to be called by the pm callbacks
1064 * (e.g., runtime_resume, resume) of the device driver that
1065 * holds the devfreq.
1066 */
1067int devfreq_resume_device(struct devfreq *devfreq)
1068{
1069 int ret;
1070
1071 if (!devfreq)
1072 return -EINVAL;
1073
1074 if (atomic_dec_return(&devfreq->suspend_count) >= 1)
1075 return 0;
1076
1077 if (devfreq->resume_freq) {
1078 mutex_lock(&devfreq->lock);
1079 ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0);
1080 mutex_unlock(&devfreq->lock);
1081 if (ret)
1082 return ret;
1083 }
1084
1085 if (devfreq->governor) {
1086 ret = devfreq->governor->event_handler(devfreq,
1087 DEVFREQ_GOV_RESUME, NULL);
1088 if (ret)
1089 return ret;
1090 }
1091
1092 return 0;
1093}
1094EXPORT_SYMBOL(devfreq_resume_device);
1095
1096/**
1097 * devfreq_suspend() - Suspend devfreq governors and devices
1098 *
1099 * Called during system wide Suspend/Hibernate cycles for suspending governors
1100 * and devices preserving the state for resume. On some platforms the devfreq
1101 * device must have precise state (frequency) after resume in order to provide
1102 * fully operating setup.
1103 */
1104void devfreq_suspend(void)
1105{
1106 struct devfreq *devfreq;
1107 int ret;
1108
1109 mutex_lock(&devfreq_list_lock);
1110 list_for_each_entry(devfreq, &devfreq_list, node) {
1111 ret = devfreq_suspend_device(devfreq);
1112 if (ret)
1113 dev_err(&devfreq->dev,
1114 "failed to suspend devfreq device\n");
1115 }
1116 mutex_unlock(&devfreq_list_lock);
1117}
1118
1119/**
1120 * devfreq_resume() - Resume devfreq governors and devices
1121 *
1122 * Called during system wide Suspend/Hibernate cycle for resuming governors and
1123 * devices that are suspended with devfreq_suspend().
1124 */
1125void devfreq_resume(void)
1126{
1127 struct devfreq *devfreq;
1128 int ret;
1129
1130 mutex_lock(&devfreq_list_lock);
1131 list_for_each_entry(devfreq, &devfreq_list, node) {
1132 ret = devfreq_resume_device(devfreq);
1133 if (ret)
1134 dev_warn(&devfreq->dev,
1135 "failed to resume devfreq device\n");
1136 }
1137 mutex_unlock(&devfreq_list_lock);
1138}
1139
1140/**
1141 * devfreq_add_governor() - Add devfreq governor
1142 * @governor: the devfreq governor to be added
1143 */
1144int devfreq_add_governor(struct devfreq_governor *governor)
1145{
1146 struct devfreq_governor *g;
1147 struct devfreq *devfreq;
1148 int err = 0;
1149
1150 if (!governor) {
1151 pr_err("%s: Invalid parameters.\n", __func__);
1152 return -EINVAL;
1153 }
1154
1155 mutex_lock(&devfreq_list_lock);
1156 g = find_devfreq_governor(governor->name);
1157 if (!IS_ERR(g)) {
1158 pr_err("%s: governor %s already registered\n", __func__,
1159 g->name);
1160 err = -EINVAL;
1161 goto err_out;
1162 }
1163
1164 list_add(&governor->node, &devfreq_governor_list);
1165
1166 list_for_each_entry(devfreq, &devfreq_list, node) {
1167 int ret = 0;
1168 struct device *dev = devfreq->dev.parent;
1169
1170 if (!strncmp(devfreq->governor_name, governor->name,
1171 DEVFREQ_NAME_LEN)) {
1172 /* The following should never occur */
1173 if (devfreq->governor) {
1174 dev_warn(dev,
1175 "%s: Governor %s already present\n",
1176 __func__, devfreq->governor->name);
1177 ret = devfreq->governor->event_handler(devfreq,
1178 DEVFREQ_GOV_STOP, NULL);
1179 if (ret) {
1180 dev_warn(dev,
1181 "%s: Governor %s stop = %d\n",
1182 __func__,
1183 devfreq->governor->name, ret);
1184 }
1185 /* Fall through */
1186 }
1187 devfreq->governor = governor;
1188 ret = devfreq->governor->event_handler(devfreq,
1189 DEVFREQ_GOV_START, NULL);
1190 if (ret) {
1191 dev_warn(dev, "%s: Governor %s start=%d\n",
1192 __func__, devfreq->governor->name,
1193 ret);
1194 }
1195 }
1196 }
1197
1198err_out:
1199 mutex_unlock(&devfreq_list_lock);
1200
1201 return err;
1202}
1203EXPORT_SYMBOL(devfreq_add_governor);
1204
1205/**
1206 * devfreq_remove_governor() - Remove devfreq feature from a device.
1207 * @governor: the devfreq governor to be removed
1208 */
1209int devfreq_remove_governor(struct devfreq_governor *governor)
1210{
1211 struct devfreq_governor *g;
1212 struct devfreq *devfreq;
1213 int err = 0;
1214
1215 if (!governor) {
1216 pr_err("%s: Invalid parameters.\n", __func__);
1217 return -EINVAL;
1218 }
1219
1220 mutex_lock(&devfreq_list_lock);
1221 g = find_devfreq_governor(governor->name);
1222 if (IS_ERR(g)) {
1223 pr_err("%s: governor %s not registered\n", __func__,
1224 governor->name);
1225 err = PTR_ERR(g);
1226 goto err_out;
1227 }
1228 list_for_each_entry(devfreq, &devfreq_list, node) {
1229 int ret;
1230 struct device *dev = devfreq->dev.parent;
1231
1232 if (!strncmp(devfreq->governor_name, governor->name,
1233 DEVFREQ_NAME_LEN)) {
1234 /* we should have a devfreq governor! */
1235 if (!devfreq->governor) {
1236 dev_warn(dev, "%s: Governor %s NOT present\n",
1237 __func__, governor->name);
1238 continue;
1239 /* Fall through */
1240 }
1241 ret = devfreq->governor->event_handler(devfreq,
1242 DEVFREQ_GOV_STOP, NULL);
1243 if (ret) {
1244 dev_warn(dev, "%s: Governor %s stop=%d\n",
1245 __func__, devfreq->governor->name,
1246 ret);
1247 }
1248 devfreq->governor = NULL;
1249 }
1250 }
1251
1252 list_del(&governor->node);
1253err_out:
1254 mutex_unlock(&devfreq_list_lock);
1255
1256 return err;
1257}
1258EXPORT_SYMBOL(devfreq_remove_governor);
1259
1260static ssize_t name_show(struct device *dev,
1261 struct device_attribute *attr, char *buf)
1262{
1263 struct devfreq *devfreq = to_devfreq(dev);
1264 return sprintf(buf, "%s\n", dev_name(devfreq->dev.parent));
1265}
1266static DEVICE_ATTR_RO(name);
1267
1268static ssize_t governor_show(struct device *dev,
1269 struct device_attribute *attr, char *buf)
1270{
1271 if (!to_devfreq(dev)->governor)
1272 return -EINVAL;
1273
1274 return sprintf(buf, "%s\n", to_devfreq(dev)->governor->name);
1275}
1276
1277static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
1278 const char *buf, size_t count)
1279{
1280 struct devfreq *df = to_devfreq(dev);
1281 int ret;
1282 char str_governor[DEVFREQ_NAME_LEN + 1];
1283 const struct devfreq_governor *governor, *prev_governor;
1284
1285 ret = sscanf(buf, "%" __stringify(DEVFREQ_NAME_LEN) "s", str_governor);
1286 if (ret != 1)
1287 return -EINVAL;
1288
1289 mutex_lock(&devfreq_list_lock);
1290 governor = try_then_request_governor(str_governor);
1291 if (IS_ERR(governor)) {
1292 ret = PTR_ERR(governor);
1293 goto out;
1294 }
1295 if (df->governor == governor) {
1296 ret = 0;
1297 goto out;
1298 } else if ((df->governor && df->governor->immutable) ||
1299 governor->immutable) {
1300 ret = -EINVAL;
1301 goto out;
1302 }
1303
1304 if (df->governor) {
1305 ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL);
1306 if (ret) {
1307 dev_warn(dev, "%s: Governor %s not stopped(%d)\n",
1308 __func__, df->governor->name, ret);
1309 goto out;
1310 }
1311 }
1312 prev_governor = df->governor;
1313 df->governor = governor;
1314 strncpy(df->governor_name, governor->name, DEVFREQ_NAME_LEN);
1315 ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
1316 if (ret) {
1317 dev_warn(dev, "%s: Governor %s not started(%d)\n",
1318 __func__, df->governor->name, ret);
1319 df->governor = prev_governor;
1320 strncpy(df->governor_name, prev_governor->name,
1321 DEVFREQ_NAME_LEN);
1322 ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
1323 if (ret) {
1324 dev_err(dev,
1325 "%s: reverting to Governor %s failed (%d)\n",
1326 __func__, df->governor_name, ret);
1327 df->governor = NULL;
1328 }
1329 }
1330out:
1331 mutex_unlock(&devfreq_list_lock);
1332
1333 if (!ret)
1334 ret = count;
1335 return ret;
1336}
1337static DEVICE_ATTR_RW(governor);
1338
1339static ssize_t available_governors_show(struct device *d,
1340 struct device_attribute *attr,
1341 char *buf)
1342{
1343 struct devfreq *df = to_devfreq(d);
1344 ssize_t count = 0;
1345
1346 mutex_lock(&devfreq_list_lock);
1347
1348 /*
1349 * The devfreq with immutable governor (e.g., passive) shows
1350 * only own governor.
1351 */
1352 if (df->governor && df->governor->immutable) {
1353 count = scnprintf(&buf[count], DEVFREQ_NAME_LEN,
1354 "%s ", df->governor_name);
1355 /*
1356 * The devfreq device shows the registered governor except for
1357 * immutable governors such as passive governor .
1358 */
1359 } else {
1360 struct devfreq_governor *governor;
1361
1362 list_for_each_entry(governor, &devfreq_governor_list, node) {
1363 if (governor->immutable)
1364 continue;
1365 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
1366 "%s ", governor->name);
1367 }
1368 }
1369
1370 mutex_unlock(&devfreq_list_lock);
1371
1372 /* Truncate the trailing space */
1373 if (count)
1374 count--;
1375
1376 count += sprintf(&buf[count], "\n");
1377
1378 return count;
1379}
1380static DEVICE_ATTR_RO(available_governors);
1381
1382static ssize_t cur_freq_show(struct device *dev, struct device_attribute *attr,
1383 char *buf)
1384{
1385 unsigned long freq;
1386 struct devfreq *devfreq = to_devfreq(dev);
1387
1388 if (devfreq->profile->get_cur_freq &&
1389 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq))
1390 return sprintf(buf, "%lu\n", freq);
1391
1392 return sprintf(buf, "%lu\n", devfreq->previous_freq);
1393}
1394static DEVICE_ATTR_RO(cur_freq);
1395
1396static ssize_t target_freq_show(struct device *dev,
1397 struct device_attribute *attr, char *buf)
1398{
1399 return sprintf(buf, "%lu\n", to_devfreq(dev)->previous_freq);
1400}
1401static DEVICE_ATTR_RO(target_freq);
1402
1403static ssize_t polling_interval_show(struct device *dev,
1404 struct device_attribute *attr, char *buf)
1405{
1406 return sprintf(buf, "%d\n", to_devfreq(dev)->profile->polling_ms);
1407}
1408
1409static ssize_t polling_interval_store(struct device *dev,
1410 struct device_attribute *attr,
1411 const char *buf, size_t count)
1412{
1413 struct devfreq *df = to_devfreq(dev);
1414 unsigned int value;
1415 int ret;
1416
1417 if (!df->governor)
1418 return -EINVAL;
1419
1420 ret = sscanf(buf, "%u", &value);
1421 if (ret != 1)
1422 return -EINVAL;
1423
1424 df->governor->event_handler(df, DEVFREQ_GOV_UPDATE_INTERVAL, &value);
1425 ret = count;
1426
1427 return ret;
1428}
1429static DEVICE_ATTR_RW(polling_interval);
1430
1431static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr,
1432 const char *buf, size_t count)
1433{
1434 struct devfreq *df = to_devfreq(dev);
1435 unsigned long value;
1436 int ret;
1437
1438 /*
1439 * Protect against theoretical sysfs writes between
1440 * device_add and dev_pm_qos_add_request
1441 */
1442 if (!dev_pm_qos_request_active(&df->user_min_freq_req))
1443 return -EAGAIN;
1444
1445 ret = sscanf(buf, "%lu", &value);
1446 if (ret != 1)
1447 return -EINVAL;
1448
1449 /* Round down to kHz for PM QoS */
1450 ret = dev_pm_qos_update_request(&df->user_min_freq_req,
1451 value / HZ_PER_KHZ);
1452 if (ret < 0)
1453 return ret;
1454
1455 return count;
1456}
1457
1458static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr,
1459 char *buf)
1460{
1461 struct devfreq *df = to_devfreq(dev);
1462 unsigned long min_freq, max_freq;
1463
1464 mutex_lock(&df->lock);
1465 get_freq_range(df, &min_freq, &max_freq);
1466 mutex_unlock(&df->lock);
1467
1468 return sprintf(buf, "%lu\n", min_freq);
1469}
1470static DEVICE_ATTR_RW(min_freq);
1471
1472static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr,
1473 const char *buf, size_t count)
1474{
1475 struct devfreq *df = to_devfreq(dev);
1476 unsigned long value;
1477 int ret;
1478
1479 /*
1480 * Protect against theoretical sysfs writes between
1481 * device_add and dev_pm_qos_add_request
1482 */
1483 if (!dev_pm_qos_request_active(&df->user_max_freq_req))
1484 return -EINVAL;
1485
1486 ret = sscanf(buf, "%lu", &value);
1487 if (ret != 1)
1488 return -EINVAL;
1489
1490 /*
1491 * PM QoS frequencies are in kHz so we need to convert. Convert by
1492 * rounding upwards so that the acceptable interval never shrinks.
1493 *
1494 * For example if the user writes "666666666" to sysfs this value will
1495 * be converted to 666667 kHz and back to 666667000 Hz before an OPP
1496 * lookup, this ensures that an OPP of 666666666Hz is still accepted.
1497 *
1498 * A value of zero means "no limit".
1499 */
1500 if (value)
1501 value = DIV_ROUND_UP(value, HZ_PER_KHZ);
1502 else
1503 value = PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE;
1504
1505 ret = dev_pm_qos_update_request(&df->user_max_freq_req, value);
1506 if (ret < 0)
1507 return ret;
1508
1509 return count;
1510}
1511
1512static ssize_t max_freq_show(struct device *dev, struct device_attribute *attr,
1513 char *buf)
1514{
1515 struct devfreq *df = to_devfreq(dev);
1516 unsigned long min_freq, max_freq;
1517
1518 mutex_lock(&df->lock);
1519 get_freq_range(df, &min_freq, &max_freq);
1520 mutex_unlock(&df->lock);
1521
1522 return sprintf(buf, "%lu\n", max_freq);
1523}
1524static DEVICE_ATTR_RW(max_freq);
1525
1526static ssize_t available_frequencies_show(struct device *d,
1527 struct device_attribute *attr,
1528 char *buf)
1529{
1530 struct devfreq *df = to_devfreq(d);
1531 ssize_t count = 0;
1532 int i;
1533
1534 mutex_lock(&df->lock);
1535
1536 for (i = 0; i < df->profile->max_state; i++)
1537 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
1538 "%lu ", df->profile->freq_table[i]);
1539
1540 mutex_unlock(&df->lock);
1541 /* Truncate the trailing space */
1542 if (count)
1543 count--;
1544
1545 count += sprintf(&buf[count], "\n");
1546
1547 return count;
1548}
1549static DEVICE_ATTR_RO(available_frequencies);
1550
1551static ssize_t trans_stat_show(struct device *dev,
1552 struct device_attribute *attr, char *buf)
1553{
1554 struct devfreq *devfreq = to_devfreq(dev);
1555 ssize_t len;
1556 int i, j;
1557 unsigned int max_state = devfreq->profile->max_state;
1558
1559 if (max_state == 0)
1560 return sprintf(buf, "Not Supported.\n");
1561
1562 mutex_lock(&devfreq->lock);
1563 if (!devfreq->stop_polling &&
1564 devfreq_update_status(devfreq, devfreq->previous_freq)) {
1565 mutex_unlock(&devfreq->lock);
1566 return 0;
1567 }
1568 mutex_unlock(&devfreq->lock);
1569
1570 len = sprintf(buf, " From : To\n");
1571 len += sprintf(buf + len, " :");
1572 for (i = 0; i < max_state; i++)
1573 len += sprintf(buf + len, "%10lu",
1574 devfreq->profile->freq_table[i]);
1575
1576 len += sprintf(buf + len, " time(ms)\n");
1577
1578 for (i = 0; i < max_state; i++) {
1579 if (devfreq->profile->freq_table[i]
1580 == devfreq->previous_freq) {
1581 len += sprintf(buf + len, "*");
1582 } else {
1583 len += sprintf(buf + len, " ");
1584 }
1585 len += sprintf(buf + len, "%10lu:",
1586 devfreq->profile->freq_table[i]);
1587 for (j = 0; j < max_state; j++)
1588 len += sprintf(buf + len, "%10u",
1589 devfreq->stats.trans_table[(i * max_state) + j]);
1590
1591 len += sprintf(buf + len, "%10llu\n", (u64)
1592 jiffies64_to_msecs(devfreq->stats.time_in_state[i]));
1593 }
1594
1595 len += sprintf(buf + len, "Total transition : %u\n",
1596 devfreq->stats.total_trans);
1597 return len;
1598}
1599
1600static ssize_t trans_stat_store(struct device *dev,
1601 struct device_attribute *attr,
1602 const char *buf, size_t count)
1603{
1604 struct devfreq *df = to_devfreq(dev);
1605 int err, value;
1606
1607 if (df->profile->max_state == 0)
1608 return count;
1609
1610 err = kstrtoint(buf, 10, &value);
1611 if (err || value != 0)
1612 return -EINVAL;
1613
1614 mutex_lock(&df->lock);
1615 memset(df->stats.time_in_state, 0, (df->profile->max_state *
1616 sizeof(*df->stats.time_in_state)));
1617 memset(df->stats.trans_table, 0, array3_size(sizeof(unsigned int),
1618 df->profile->max_state,
1619 df->profile->max_state));
1620 df->stats.total_trans = 0;
1621 df->stats.last_update = get_jiffies_64();
1622 mutex_unlock(&df->lock);
1623
1624 return count;
1625}
1626static DEVICE_ATTR_RW(trans_stat);
1627
1628static struct attribute *devfreq_attrs[] = {
1629 &dev_attr_name.attr,
1630 &dev_attr_governor.attr,
1631 &dev_attr_available_governors.attr,
1632 &dev_attr_cur_freq.attr,
1633 &dev_attr_available_frequencies.attr,
1634 &dev_attr_target_freq.attr,
1635 &dev_attr_polling_interval.attr,
1636 &dev_attr_min_freq.attr,
1637 &dev_attr_max_freq.attr,
1638 &dev_attr_trans_stat.attr,
1639 NULL,
1640};
1641ATTRIBUTE_GROUPS(devfreq);
1642
1643/**
1644 * devfreq_summary_show() - Show the summary of the devfreq devices
1645 * @s: seq_file instance to show the summary of devfreq devices
1646 * @data: not used
1647 *
1648 * Show the summary of the devfreq devices via 'devfreq_summary' debugfs file.
1649 * It helps that user can know the detailed information of the devfreq devices.
1650 *
1651 * Return 0 always because it shows the information without any data change.
1652 */
1653static int devfreq_summary_show(struct seq_file *s, void *data)
1654{
1655 struct devfreq *devfreq;
1656 struct devfreq *p_devfreq = NULL;
1657 unsigned long cur_freq, min_freq, max_freq;
1658 unsigned int polling_ms;
1659
1660 seq_printf(s, "%-30s %-10s %-10s %-15s %10s %12s %12s %12s\n",
1661 "dev_name",
1662 "dev",
1663 "parent_dev",
1664 "governor",
1665 "polling_ms",
1666 "cur_freq_Hz",
1667 "min_freq_Hz",
1668 "max_freq_Hz");
1669 seq_printf(s, "%30s %10s %10s %15s %10s %12s %12s %12s\n",
1670 "------------------------------",
1671 "----------",
1672 "----------",
1673 "---------------",
1674 "----------",
1675 "------------",
1676 "------------",
1677 "------------");
1678
1679 mutex_lock(&devfreq_list_lock);
1680
1681 list_for_each_entry_reverse(devfreq, &devfreq_list, node) {
1682#if IS_ENABLED(CONFIG_DEVFREQ_GOV_PASSIVE)
1683 if (!strncmp(devfreq->governor_name, DEVFREQ_GOV_PASSIVE,
1684 DEVFREQ_NAME_LEN)) {
1685 struct devfreq_passive_data *data = devfreq->data;
1686
1687 if (data)
1688 p_devfreq = data->parent;
1689 } else {
1690 p_devfreq = NULL;
1691 }
1692#endif
1693
1694 mutex_lock(&devfreq->lock);
1695 cur_freq = devfreq->previous_freq,
1696 get_freq_range(devfreq, &min_freq, &max_freq);
1697 polling_ms = devfreq->profile->polling_ms,
1698 mutex_unlock(&devfreq->lock);
1699
1700 seq_printf(s,
1701 "%-30s %-10s %-10s %-15s %10d %12ld %12ld %12ld\n",
1702 dev_name(devfreq->dev.parent),
1703 dev_name(&devfreq->dev),
1704 p_devfreq ? dev_name(&p_devfreq->dev) : "null",
1705 devfreq->governor_name,
1706 polling_ms,
1707 cur_freq,
1708 min_freq,
1709 max_freq);
1710 }
1711
1712 mutex_unlock(&devfreq_list_lock);
1713
1714 return 0;
1715}
1716DEFINE_SHOW_ATTRIBUTE(devfreq_summary);
1717
1718static int __init devfreq_init(void)
1719{
1720 devfreq_class = class_create(THIS_MODULE, "devfreq");
1721 if (IS_ERR(devfreq_class)) {
1722 pr_err("%s: couldn't create class\n", __FILE__);
1723 return PTR_ERR(devfreq_class);
1724 }
1725
1726 devfreq_wq = create_freezable_workqueue("devfreq_wq");
1727 if (!devfreq_wq) {
1728 class_destroy(devfreq_class);
1729 pr_err("%s: couldn't create workqueue\n", __FILE__);
1730 return -ENOMEM;
1731 }
1732 devfreq_class->dev_groups = devfreq_groups;
1733
1734 devfreq_debugfs = debugfs_create_dir("devfreq", NULL);
1735 debugfs_create_file("devfreq_summary", 0444,
1736 devfreq_debugfs, NULL,
1737 &devfreq_summary_fops);
1738
1739 return 0;
1740}
1741subsys_initcall(devfreq_init);
1742
1743/*
1744 * The following are helper functions for devfreq user device drivers with
1745 * OPP framework.
1746 */
1747
1748/**
1749 * devfreq_recommended_opp() - Helper function to get proper OPP for the
1750 * freq value given to target callback.
1751 * @dev: The devfreq user device. (parent of devfreq)
1752 * @freq: The frequency given to target function
1753 * @flags: Flags handed from devfreq framework.
1754 *
1755 * The callers are required to call dev_pm_opp_put() for the returned OPP after
1756 * use.
1757 */
1758struct dev_pm_opp *devfreq_recommended_opp(struct device *dev,
1759 unsigned long *freq,
1760 u32 flags)
1761{
1762 struct dev_pm_opp *opp;
1763
1764 if (flags & DEVFREQ_FLAG_LEAST_UPPER_BOUND) {
1765 /* The freq is an upper bound. opp should be lower */
1766 opp = dev_pm_opp_find_freq_floor(dev, freq);
1767
1768 /* If not available, use the closest opp */
1769 if (opp == ERR_PTR(-ERANGE))
1770 opp = dev_pm_opp_find_freq_ceil(dev, freq);
1771 } else {
1772 /* The freq is an lower bound. opp should be higher */
1773 opp = dev_pm_opp_find_freq_ceil(dev, freq);
1774
1775 /* If not available, use the closest opp */
1776 if (opp == ERR_PTR(-ERANGE))
1777 opp = dev_pm_opp_find_freq_floor(dev, freq);
1778 }
1779
1780 return opp;
1781}
1782EXPORT_SYMBOL(devfreq_recommended_opp);
1783
1784/**
1785 * devfreq_register_opp_notifier() - Helper function to get devfreq notified
1786 * for any changes in the OPP availability
1787 * changes
1788 * @dev: The devfreq user device. (parent of devfreq)
1789 * @devfreq: The devfreq object.
1790 */
1791int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq)
1792{
1793 return dev_pm_opp_register_notifier(dev, &devfreq->nb);
1794}
1795EXPORT_SYMBOL(devfreq_register_opp_notifier);
1796
1797/**
1798 * devfreq_unregister_opp_notifier() - Helper function to stop getting devfreq
1799 * notified for any changes in the OPP
1800 * availability changes anymore.
1801 * @dev: The devfreq user device. (parent of devfreq)
1802 * @devfreq: The devfreq object.
1803 *
1804 * At exit() callback of devfreq_dev_profile, this must be included if
1805 * devfreq_recommended_opp is used.
1806 */
1807int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq)
1808{
1809 return dev_pm_opp_unregister_notifier(dev, &devfreq->nb);
1810}
1811EXPORT_SYMBOL(devfreq_unregister_opp_notifier);
1812
1813static void devm_devfreq_opp_release(struct device *dev, void *res)
1814{
1815 devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res);
1816}
1817
1818/**
1819 * devm_devfreq_register_opp_notifier() - Resource-managed
1820 * devfreq_register_opp_notifier()
1821 * @dev: The devfreq user device. (parent of devfreq)
1822 * @devfreq: The devfreq object.
1823 */
1824int devm_devfreq_register_opp_notifier(struct device *dev,
1825 struct devfreq *devfreq)
1826{
1827 struct devfreq **ptr;
1828 int ret;
1829
1830 ptr = devres_alloc(devm_devfreq_opp_release, sizeof(*ptr), GFP_KERNEL);
1831 if (!ptr)
1832 return -ENOMEM;
1833
1834 ret = devfreq_register_opp_notifier(dev, devfreq);
1835 if (ret) {
1836 devres_free(ptr);
1837 return ret;
1838 }
1839
1840 *ptr = devfreq;
1841 devres_add(dev, ptr);
1842
1843 return 0;
1844}
1845EXPORT_SYMBOL(devm_devfreq_register_opp_notifier);
1846
1847/**
1848 * devm_devfreq_unregister_opp_notifier() - Resource-managed
1849 * devfreq_unregister_opp_notifier()
1850 * @dev: The devfreq user device. (parent of devfreq)
1851 * @devfreq: The devfreq object.
1852 */
1853void devm_devfreq_unregister_opp_notifier(struct device *dev,
1854 struct devfreq *devfreq)
1855{
1856 WARN_ON(devres_release(dev, devm_devfreq_opp_release,
1857 devm_devfreq_dev_match, devfreq));
1858}
1859EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier);
1860
1861/**
1862 * devfreq_register_notifier() - Register a driver with devfreq
1863 * @devfreq: The devfreq object.
1864 * @nb: The notifier block to register.
1865 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1866 */
1867int devfreq_register_notifier(struct devfreq *devfreq,
1868 struct notifier_block *nb,
1869 unsigned int list)
1870{
1871 int ret = 0;
1872
1873 if (!devfreq)
1874 return -EINVAL;
1875
1876 switch (list) {
1877 case DEVFREQ_TRANSITION_NOTIFIER:
1878 ret = srcu_notifier_chain_register(
1879 &devfreq->transition_notifier_list, nb);
1880 break;
1881 default:
1882 ret = -EINVAL;
1883 }
1884
1885 return ret;
1886}
1887EXPORT_SYMBOL(devfreq_register_notifier);
1888
1889/*
1890 * devfreq_unregister_notifier() - Unregister a driver with devfreq
1891 * @devfreq: The devfreq object.
1892 * @nb: The notifier block to be unregistered.
1893 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1894 */
1895int devfreq_unregister_notifier(struct devfreq *devfreq,
1896 struct notifier_block *nb,
1897 unsigned int list)
1898{
1899 int ret = 0;
1900
1901 if (!devfreq)
1902 return -EINVAL;
1903
1904 switch (list) {
1905 case DEVFREQ_TRANSITION_NOTIFIER:
1906 ret = srcu_notifier_chain_unregister(
1907 &devfreq->transition_notifier_list, nb);
1908 break;
1909 default:
1910 ret = -EINVAL;
1911 }
1912
1913 return ret;
1914}
1915EXPORT_SYMBOL(devfreq_unregister_notifier);
1916
1917struct devfreq_notifier_devres {
1918 struct devfreq *devfreq;
1919 struct notifier_block *nb;
1920 unsigned int list;
1921};
1922
1923static void devm_devfreq_notifier_release(struct device *dev, void *res)
1924{
1925 struct devfreq_notifier_devres *this = res;
1926
1927 devfreq_unregister_notifier(this->devfreq, this->nb, this->list);
1928}
1929
1930/**
1931 * devm_devfreq_register_notifier()
1932 * - Resource-managed devfreq_register_notifier()
1933 * @dev: The devfreq user device. (parent of devfreq)
1934 * @devfreq: The devfreq object.
1935 * @nb: The notifier block to be unregistered.
1936 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1937 */
1938int devm_devfreq_register_notifier(struct device *dev,
1939 struct devfreq *devfreq,
1940 struct notifier_block *nb,
1941 unsigned int list)
1942{
1943 struct devfreq_notifier_devres *ptr;
1944 int ret;
1945
1946 ptr = devres_alloc(devm_devfreq_notifier_release, sizeof(*ptr),
1947 GFP_KERNEL);
1948 if (!ptr)
1949 return -ENOMEM;
1950
1951 ret = devfreq_register_notifier(devfreq, nb, list);
1952 if (ret) {
1953 devres_free(ptr);
1954 return ret;
1955 }
1956
1957 ptr->devfreq = devfreq;
1958 ptr->nb = nb;
1959 ptr->list = list;
1960 devres_add(dev, ptr);
1961
1962 return 0;
1963}
1964EXPORT_SYMBOL(devm_devfreq_register_notifier);
1965
1966/**
1967 * devm_devfreq_unregister_notifier()
1968 * - Resource-managed devfreq_unregister_notifier()
1969 * @dev: The devfreq user device. (parent of devfreq)
1970 * @devfreq: The devfreq object.
1971 * @nb: The notifier block to be unregistered.
1972 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1973 */
1974void devm_devfreq_unregister_notifier(struct device *dev,
1975 struct devfreq *devfreq,
1976 struct notifier_block *nb,
1977 unsigned int list)
1978{
1979 WARN_ON(devres_release(dev, devm_devfreq_notifier_release,
1980 devm_devfreq_dev_match, devfreq));
1981}
1982EXPORT_SYMBOL(devm_devfreq_unregister_notifier);