1 // SPDX-License-Identifier: GPL-2.0-only
3 * Generic OPP Interface
5 * Copyright (C) 2009-2010 Texas Instruments Incorporated.
11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13 #include <linux/clk.h>
14 #include <linux/errno.h>
15 #include <linux/err.h>
16 #include <linux/device.h>
17 #include <linux/export.h>
18 #include <linux/pm_domain.h>
19 #include <linux/regulator/consumer.h>
20 #include <linux/slab.h>
21 #include <linux/xarray.h>
26 * The root of the list of all opp-tables. All opp_table structures branch off
27 * from here, with each opp_table containing the list of opps it supports in
28 * various states of availability.
30 LIST_HEAD(opp_tables
);
32 /* Lock to allow exclusive modification to the device and opp lists */
33 DEFINE_MUTEX(opp_table_lock
);
34 /* Flag indicating that opp_tables list is being updated at the moment */
35 static bool opp_tables_busy
;
37 /* OPP ID allocator */
38 static DEFINE_XARRAY_ALLOC1(opp_configs
);
40 static bool _find_opp_dev(const struct device
*dev
, struct opp_table
*opp_table
)
42 struct opp_device
*opp_dev
;
45 mutex_lock(&opp_table
->lock
);
46 list_for_each_entry(opp_dev
, &opp_table
->dev_list
, node
)
47 if (opp_dev
->dev
== dev
) {
52 mutex_unlock(&opp_table
->lock
);
56 static struct opp_table
*_find_opp_table_unlocked(struct device
*dev
)
58 struct opp_table
*opp_table
;
60 list_for_each_entry(opp_table
, &opp_tables
, node
) {
61 if (_find_opp_dev(dev
, opp_table
)) {
62 _get_opp_table_kref(opp_table
);
67 return ERR_PTR(-ENODEV
);
71 * _find_opp_table() - find opp_table struct using device pointer
72 * @dev: device pointer used to lookup OPP table
74 * Search OPP table for one containing matching device.
76 * Return: pointer to 'struct opp_table' if found, otherwise -ENODEV or
77 * -EINVAL based on type of error.
79 * The callers must call dev_pm_opp_put_opp_table() after the table is used.
81 struct opp_table
*_find_opp_table(struct device
*dev
)
83 struct opp_table
*opp_table
;
85 if (IS_ERR_OR_NULL(dev
)) {
86 pr_err("%s: Invalid parameters\n", __func__
);
87 return ERR_PTR(-EINVAL
);
90 mutex_lock(&opp_table_lock
);
91 opp_table
= _find_opp_table_unlocked(dev
);
92 mutex_unlock(&opp_table_lock
);
98 * Returns true if multiple clocks aren't there, else returns false with WARN.
100 * We don't force clk_count == 1 here as there are users who don't have a clock
101 * representation in the OPP table and manage the clock configuration themselves
102 * in an platform specific way.
104 static bool assert_single_clk(struct opp_table
*opp_table
)
106 return !WARN_ON(opp_table
->clk_count
> 1);
110 * dev_pm_opp_get_voltage() - Gets the voltage corresponding to an opp
111 * @opp: opp for which voltage has to be returned for
113 * Return: voltage in micro volt corresponding to the opp, else
116 * This is useful only for devices with single power supply.
118 unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp
*opp
)
120 if (IS_ERR_OR_NULL(opp
)) {
121 pr_err("%s: Invalid parameters\n", __func__
);
125 return opp
->supplies
[0].u_volt
;
127 EXPORT_SYMBOL_GPL(dev_pm_opp_get_voltage
);
130 * dev_pm_opp_get_supplies() - Gets the supply information corresponding to an opp
131 * @opp: opp for which voltage has to be returned for
132 * @supplies: Placeholder for copying the supply information.
134 * Return: negative error number on failure, 0 otherwise on success after
137 * This can be used for devices with any number of power supplies. The caller
138 * must ensure the @supplies array must contain space for each regulator.
140 int dev_pm_opp_get_supplies(struct dev_pm_opp
*opp
,
141 struct dev_pm_opp_supply
*supplies
)
143 if (IS_ERR_OR_NULL(opp
) || !supplies
) {
144 pr_err("%s: Invalid parameters\n", __func__
);
148 memcpy(supplies
, opp
->supplies
,
149 sizeof(*supplies
) * opp
->opp_table
->regulator_count
);
152 EXPORT_SYMBOL_GPL(dev_pm_opp_get_supplies
);
155 * dev_pm_opp_get_power() - Gets the power corresponding to an opp
156 * @opp: opp for which power has to be returned for
158 * Return: power in micro watt corresponding to the opp, else
161 * This is useful only for devices with single power supply.
163 unsigned long dev_pm_opp_get_power(struct dev_pm_opp
*opp
)
165 unsigned long opp_power
= 0;
168 if (IS_ERR_OR_NULL(opp
)) {
169 pr_err("%s: Invalid parameters\n", __func__
);
172 for (i
= 0; i
< opp
->opp_table
->regulator_count
; i
++)
173 opp_power
+= opp
->supplies
[i
].u_watt
;
177 EXPORT_SYMBOL_GPL(dev_pm_opp_get_power
);
180 * dev_pm_opp_get_freq_indexed() - Gets the frequency corresponding to an
181 * available opp with specified index
182 * @opp: opp for which frequency has to be returned for
183 * @index: index of the frequency within the required opp
185 * Return: frequency in hertz corresponding to the opp with specified index,
188 unsigned long dev_pm_opp_get_freq_indexed(struct dev_pm_opp
*opp
, u32 index
)
190 if (IS_ERR_OR_NULL(opp
) || index
>= opp
->opp_table
->clk_count
) {
191 pr_err("%s: Invalid parameters\n", __func__
);
195 return opp
->rates
[index
];
197 EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq_indexed
);
200 * dev_pm_opp_get_level() - Gets the level corresponding to an available opp
201 * @opp: opp for which level value has to be returned for
203 * Return: level read from device tree corresponding to the opp, else
206 unsigned int dev_pm_opp_get_level(struct dev_pm_opp
*opp
)
208 if (IS_ERR_OR_NULL(opp
) || !opp
->available
) {
209 pr_err("%s: Invalid parameters\n", __func__
);
215 EXPORT_SYMBOL_GPL(dev_pm_opp_get_level
);
218 * dev_pm_opp_get_required_pstate() - Gets the required performance state
219 * corresponding to an available opp
220 * @opp: opp for which performance state has to be returned for
221 * @index: index of the required opp
223 * Return: performance state read from device tree corresponding to the
224 * required opp, else return U32_MAX.
226 unsigned int dev_pm_opp_get_required_pstate(struct dev_pm_opp
*opp
,
229 if (IS_ERR_OR_NULL(opp
) || !opp
->available
||
230 index
>= opp
->opp_table
->required_opp_count
) {
231 pr_err("%s: Invalid parameters\n", __func__
);
235 /* required-opps not fully initialized yet */
236 if (lazy_linking_pending(opp
->opp_table
))
239 /* The required OPP table must belong to a genpd */
240 if (unlikely(!opp
->opp_table
->required_opp_tables
[index
]->is_genpd
)) {
241 pr_err("%s: Performance state is only valid for genpds.\n", __func__
);
245 return opp
->required_opps
[index
]->level
;
247 EXPORT_SYMBOL_GPL(dev_pm_opp_get_required_pstate
);
250 * dev_pm_opp_is_turbo() - Returns if opp is turbo OPP or not
251 * @opp: opp for which turbo mode is being verified
253 * Turbo OPPs are not for normal use, and can be enabled (under certain
254 * conditions) for short duration of times to finish high throughput work
255 * quickly. Running on them for longer times may overheat the chip.
257 * Return: true if opp is turbo opp, else false.
259 bool dev_pm_opp_is_turbo(struct dev_pm_opp
*opp
)
261 if (IS_ERR_OR_NULL(opp
) || !opp
->available
) {
262 pr_err("%s: Invalid parameters\n", __func__
);
268 EXPORT_SYMBOL_GPL(dev_pm_opp_is_turbo
);
271 * dev_pm_opp_get_max_clock_latency() - Get max clock latency in nanoseconds
272 * @dev: device for which we do this operation
274 * Return: This function returns the max clock latency in nanoseconds.
276 unsigned long dev_pm_opp_get_max_clock_latency(struct device
*dev
)
278 struct opp_table
*opp_table
;
279 unsigned long clock_latency_ns
;
281 opp_table
= _find_opp_table(dev
);
282 if (IS_ERR(opp_table
))
285 clock_latency_ns
= opp_table
->clock_latency_ns_max
;
287 dev_pm_opp_put_opp_table(opp_table
);
289 return clock_latency_ns
;
291 EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_clock_latency
);
294 * dev_pm_opp_get_max_volt_latency() - Get max voltage latency in nanoseconds
295 * @dev: device for which we do this operation
297 * Return: This function returns the max voltage latency in nanoseconds.
299 unsigned long dev_pm_opp_get_max_volt_latency(struct device
*dev
)
301 struct opp_table
*opp_table
;
302 struct dev_pm_opp
*opp
;
303 struct regulator
*reg
;
304 unsigned long latency_ns
= 0;
311 opp_table
= _find_opp_table(dev
);
312 if (IS_ERR(opp_table
))
315 /* Regulator may not be required for the device */
316 if (!opp_table
->regulators
)
319 count
= opp_table
->regulator_count
;
321 uV
= kmalloc_array(count
, sizeof(*uV
), GFP_KERNEL
);
325 mutex_lock(&opp_table
->lock
);
327 for (i
= 0; i
< count
; i
++) {
331 list_for_each_entry(opp
, &opp_table
->opp_list
, node
) {
335 if (opp
->supplies
[i
].u_volt_min
< uV
[i
].min
)
336 uV
[i
].min
= opp
->supplies
[i
].u_volt_min
;
337 if (opp
->supplies
[i
].u_volt_max
> uV
[i
].max
)
338 uV
[i
].max
= opp
->supplies
[i
].u_volt_max
;
342 mutex_unlock(&opp_table
->lock
);
345 * The caller needs to ensure that opp_table (and hence the regulator)
346 * isn't freed, while we are executing this routine.
348 for (i
= 0; i
< count
; i
++) {
349 reg
= opp_table
->regulators
[i
];
350 ret
= regulator_set_voltage_time(reg
, uV
[i
].min
, uV
[i
].max
);
352 latency_ns
+= ret
* 1000;
357 dev_pm_opp_put_opp_table(opp_table
);
361 EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_volt_latency
);
364 * dev_pm_opp_get_max_transition_latency() - Get max transition latency in
366 * @dev: device for which we do this operation
368 * Return: This function returns the max transition latency, in nanoseconds, to
369 * switch from one OPP to other.
371 unsigned long dev_pm_opp_get_max_transition_latency(struct device
*dev
)
373 return dev_pm_opp_get_max_volt_latency(dev
) +
374 dev_pm_opp_get_max_clock_latency(dev
);
376 EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_transition_latency
);
379 * dev_pm_opp_get_suspend_opp_freq() - Get frequency of suspend opp in Hz
380 * @dev: device for which we do this operation
382 * Return: This function returns the frequency of the OPP marked as suspend_opp
383 * if one is available, else returns 0;
385 unsigned long dev_pm_opp_get_suspend_opp_freq(struct device
*dev
)
387 struct opp_table
*opp_table
;
388 unsigned long freq
= 0;
390 opp_table
= _find_opp_table(dev
);
391 if (IS_ERR(opp_table
))
394 if (opp_table
->suspend_opp
&& opp_table
->suspend_opp
->available
)
395 freq
= dev_pm_opp_get_freq(opp_table
->suspend_opp
);
397 dev_pm_opp_put_opp_table(opp_table
);
401 EXPORT_SYMBOL_GPL(dev_pm_opp_get_suspend_opp_freq
);
403 int _get_opp_count(struct opp_table
*opp_table
)
405 struct dev_pm_opp
*opp
;
408 mutex_lock(&opp_table
->lock
);
410 list_for_each_entry(opp
, &opp_table
->opp_list
, node
) {
415 mutex_unlock(&opp_table
->lock
);
421 * dev_pm_opp_get_opp_count() - Get number of opps available in the opp table
422 * @dev: device for which we do this operation
424 * Return: This function returns the number of available opps if there are any,
425 * else returns 0 if none or the corresponding error value.
427 int dev_pm_opp_get_opp_count(struct device
*dev
)
429 struct opp_table
*opp_table
;
432 opp_table
= _find_opp_table(dev
);
433 if (IS_ERR(opp_table
)) {
434 count
= PTR_ERR(opp_table
);
435 dev_dbg(dev
, "%s: OPP table not found (%d)\n",
440 count
= _get_opp_count(opp_table
);
441 dev_pm_opp_put_opp_table(opp_table
);
445 EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_count
);
447 /* Helpers to read keys */
448 static unsigned long _read_freq(struct dev_pm_opp
*opp
, int index
)
450 return opp
->rates
[index
];
453 static unsigned long _read_level(struct dev_pm_opp
*opp
, int index
)
458 static unsigned long _read_bw(struct dev_pm_opp
*opp
, int index
)
460 return opp
->bandwidth
[index
].peak
;
463 /* Generic comparison helpers */
464 static bool _compare_exact(struct dev_pm_opp
**opp
, struct dev_pm_opp
*temp_opp
,
465 unsigned long opp_key
, unsigned long key
)
467 if (opp_key
== key
) {
475 static bool _compare_ceil(struct dev_pm_opp
**opp
, struct dev_pm_opp
*temp_opp
,
476 unsigned long opp_key
, unsigned long key
)
478 if (opp_key
>= key
) {
486 static bool _compare_floor(struct dev_pm_opp
**opp
, struct dev_pm_opp
*temp_opp
,
487 unsigned long opp_key
, unsigned long key
)
496 /* Generic key finding helpers */
497 static struct dev_pm_opp
*_opp_table_find_key(struct opp_table
*opp_table
,
498 unsigned long *key
, int index
, bool available
,
499 unsigned long (*read
)(struct dev_pm_opp
*opp
, int index
),
500 bool (*compare
)(struct dev_pm_opp
**opp
, struct dev_pm_opp
*temp_opp
,
501 unsigned long opp_key
, unsigned long key
),
502 bool (*assert)(struct opp_table
*opp_table
))
504 struct dev_pm_opp
*temp_opp
, *opp
= ERR_PTR(-ERANGE
);
506 /* Assert that the requirement is met */
507 if (assert && !assert(opp_table
))
508 return ERR_PTR(-EINVAL
);
510 mutex_lock(&opp_table
->lock
);
512 list_for_each_entry(temp_opp
, &opp_table
->opp_list
, node
) {
513 if (temp_opp
->available
== available
) {
514 if (compare(&opp
, temp_opp
, read(temp_opp
, index
), *key
))
519 /* Increment the reference count of OPP */
521 *key
= read(opp
, index
);
525 mutex_unlock(&opp_table
->lock
);
530 static struct dev_pm_opp
*
531 _find_key(struct device
*dev
, unsigned long *key
, int index
, bool available
,
532 unsigned long (*read
)(struct dev_pm_opp
*opp
, int index
),
533 bool (*compare
)(struct dev_pm_opp
**opp
, struct dev_pm_opp
*temp_opp
,
534 unsigned long opp_key
, unsigned long key
),
535 bool (*assert)(struct opp_table
*opp_table
))
537 struct opp_table
*opp_table
;
538 struct dev_pm_opp
*opp
;
540 opp_table
= _find_opp_table(dev
);
541 if (IS_ERR(opp_table
)) {
542 dev_err(dev
, "%s: OPP table not found (%ld)\n", __func__
,
544 return ERR_CAST(opp_table
);
547 opp
= _opp_table_find_key(opp_table
, key
, index
, available
, read
,
550 dev_pm_opp_put_opp_table(opp_table
);
555 static struct dev_pm_opp
*_find_key_exact(struct device
*dev
,
556 unsigned long key
, int index
, bool available
,
557 unsigned long (*read
)(struct dev_pm_opp
*opp
, int index
),
558 bool (*assert)(struct opp_table
*opp_table
))
561 * The value of key will be updated here, but will be ignored as the
562 * caller doesn't need it.
564 return _find_key(dev
, &key
, index
, available
, read
, _compare_exact
,
568 static struct dev_pm_opp
*_opp_table_find_key_ceil(struct opp_table
*opp_table
,
569 unsigned long *key
, int index
, bool available
,
570 unsigned long (*read
)(struct dev_pm_opp
*opp
, int index
),
571 bool (*assert)(struct opp_table
*opp_table
))
573 return _opp_table_find_key(opp_table
, key
, index
, available
, read
,
574 _compare_ceil
, assert);
577 static struct dev_pm_opp
*_find_key_ceil(struct device
*dev
, unsigned long *key
,
578 int index
, bool available
,
579 unsigned long (*read
)(struct dev_pm_opp
*opp
, int index
),
580 bool (*assert)(struct opp_table
*opp_table
))
582 return _find_key(dev
, key
, index
, available
, read
, _compare_ceil
,
586 static struct dev_pm_opp
*_find_key_floor(struct device
*dev
,
587 unsigned long *key
, int index
, bool available
,
588 unsigned long (*read
)(struct dev_pm_opp
*opp
, int index
),
589 bool (*assert)(struct opp_table
*opp_table
))
591 return _find_key(dev
, key
, index
, available
, read
, _compare_floor
,
596 * dev_pm_opp_find_freq_exact() - search for an exact frequency
597 * @dev: device for which we do this operation
598 * @freq: frequency to search for
599 * @available: true/false - match for available opp
601 * Return: Searches for exact match in the opp table and returns pointer to the
602 * matching opp if found, else returns ERR_PTR in case of error and should
603 * be handled using IS_ERR. Error return values can be:
604 * EINVAL: for bad pointer
605 * ERANGE: no match found for search
606 * ENODEV: if device not found in list of registered devices
608 * Note: available is a modifier for the search. if available=true, then the
609 * match is for exact matching frequency and is available in the stored OPP
610 * table. if false, the match is for exact frequency which is not available.
612 * This provides a mechanism to enable an opp which is not available currently
613 * or the opposite as well.
615 * The callers are required to call dev_pm_opp_put() for the returned OPP after
618 struct dev_pm_opp
*dev_pm_opp_find_freq_exact(struct device
*dev
,
619 unsigned long freq
, bool available
)
621 return _find_key_exact(dev
, freq
, 0, available
, _read_freq
,
624 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_exact
);
627 * dev_pm_opp_find_freq_exact_indexed() - Search for an exact freq for the
628 * clock corresponding to the index
629 * @dev: Device for which we do this operation
630 * @freq: frequency to search for
631 * @index: Clock index
632 * @available: true/false - match for available opp
634 * Search for the matching exact OPP for the clock corresponding to the
635 * specified index from a starting freq for a device.
637 * Return: matching *opp , else returns ERR_PTR in case of error and should be
638 * handled using IS_ERR. Error return values can be:
639 * EINVAL: for bad pointer
640 * ERANGE: no match found for search
641 * ENODEV: if device not found in list of registered devices
643 * The callers are required to call dev_pm_opp_put() for the returned OPP after
647 dev_pm_opp_find_freq_exact_indexed(struct device
*dev
, unsigned long freq
,
648 u32 index
, bool available
)
650 return _find_key_exact(dev
, freq
, index
, available
, _read_freq
, NULL
);
652 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_exact_indexed
);
654 static noinline
struct dev_pm_opp
*_find_freq_ceil(struct opp_table
*opp_table
,
657 return _opp_table_find_key_ceil(opp_table
, freq
, 0, true, _read_freq
,
662 * dev_pm_opp_find_freq_ceil() - Search for an rounded ceil freq
663 * @dev: device for which we do this operation
664 * @freq: Start frequency
666 * Search for the matching ceil *available* OPP from a starting freq
669 * Return: matching *opp and refreshes *freq accordingly, else returns
670 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
672 * EINVAL: for bad pointer
673 * ERANGE: no match found for search
674 * ENODEV: if device not found in list of registered devices
676 * The callers are required to call dev_pm_opp_put() for the returned OPP after
679 struct dev_pm_opp
*dev_pm_opp_find_freq_ceil(struct device
*dev
,
682 return _find_key_ceil(dev
, freq
, 0, true, _read_freq
, assert_single_clk
);
684 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_ceil
);
687 * dev_pm_opp_find_freq_ceil_indexed() - Search for a rounded ceil freq for the
688 * clock corresponding to the index
689 * @dev: Device for which we do this operation
690 * @freq: Start frequency
691 * @index: Clock index
693 * Search for the matching ceil *available* OPP for the clock corresponding to
694 * the specified index from a starting freq for a device.
696 * Return: matching *opp and refreshes *freq accordingly, else returns
697 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
699 * EINVAL: for bad pointer
700 * ERANGE: no match found for search
701 * ENODEV: if device not found in list of registered devices
703 * The callers are required to call dev_pm_opp_put() for the returned OPP after
707 dev_pm_opp_find_freq_ceil_indexed(struct device
*dev
, unsigned long *freq
,
710 return _find_key_ceil(dev
, freq
, index
, true, _read_freq
, NULL
);
712 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_ceil_indexed
);
715 * dev_pm_opp_find_freq_floor() - Search for a rounded floor freq
716 * @dev: device for which we do this operation
717 * @freq: Start frequency
719 * Search for the matching floor *available* OPP from a starting freq
722 * Return: matching *opp and refreshes *freq accordingly, else returns
723 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
725 * EINVAL: for bad pointer
726 * ERANGE: no match found for search
727 * ENODEV: if device not found in list of registered devices
729 * The callers are required to call dev_pm_opp_put() for the returned OPP after
732 struct dev_pm_opp
*dev_pm_opp_find_freq_floor(struct device
*dev
,
735 return _find_key_floor(dev
, freq
, 0, true, _read_freq
, assert_single_clk
);
737 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor
);
740 * dev_pm_opp_find_freq_floor_indexed() - Search for a rounded floor freq for the
741 * clock corresponding to the index
742 * @dev: Device for which we do this operation
743 * @freq: Start frequency
744 * @index: Clock index
746 * Search for the matching floor *available* OPP for the clock corresponding to
747 * the specified index from a starting freq for a device.
749 * Return: matching *opp and refreshes *freq accordingly, else returns
750 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
752 * EINVAL: for bad pointer
753 * ERANGE: no match found for search
754 * ENODEV: if device not found in list of registered devices
756 * The callers are required to call dev_pm_opp_put() for the returned OPP after
760 dev_pm_opp_find_freq_floor_indexed(struct device
*dev
, unsigned long *freq
,
763 return _find_key_floor(dev
, freq
, index
, true, _read_freq
, NULL
);
765 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor_indexed
);
768 * dev_pm_opp_find_level_exact() - search for an exact level
769 * @dev: device for which we do this operation
770 * @level: level to search for
772 * Return: Searches for exact match in the opp table and returns pointer to the
773 * matching opp if found, else returns ERR_PTR in case of error and should
774 * be handled using IS_ERR. Error return values can be:
775 * EINVAL: for bad pointer
776 * ERANGE: no match found for search
777 * ENODEV: if device not found in list of registered devices
779 * The callers are required to call dev_pm_opp_put() for the returned OPP after
782 struct dev_pm_opp
*dev_pm_opp_find_level_exact(struct device
*dev
,
785 return _find_key_exact(dev
, level
, 0, true, _read_level
, NULL
);
787 EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_exact
);
790 * dev_pm_opp_find_level_ceil() - search for an rounded up level
791 * @dev: device for which we do this operation
792 * @level: level to search for
794 * Return: Searches for rounded up match in the opp table and returns pointer
795 * to the matching opp if found, else returns ERR_PTR in case of error and
796 * should be handled using IS_ERR. Error return values can be:
797 * EINVAL: for bad pointer
798 * ERANGE: no match found for search
799 * ENODEV: if device not found in list of registered devices
801 * The callers are required to call dev_pm_opp_put() for the returned OPP after
804 struct dev_pm_opp
*dev_pm_opp_find_level_ceil(struct device
*dev
,
807 unsigned long temp
= *level
;
808 struct dev_pm_opp
*opp
;
810 opp
= _find_key_ceil(dev
, &temp
, 0, true, _read_level
, NULL
);
815 if (temp
== OPP_LEVEL_UNSET
) {
816 dev_err(dev
, "%s: OPP levels aren't available\n", __func__
);
818 return ERR_PTR(-ENODEV
);
824 EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_ceil
);
827 * dev_pm_opp_find_level_floor() - Search for a rounded floor level
828 * @dev: device for which we do this operation
829 * @level: Start level
831 * Search for the matching floor *available* OPP from a starting level
834 * Return: matching *opp and refreshes *level accordingly, else returns
835 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
837 * EINVAL: for bad pointer
838 * ERANGE: no match found for search
839 * ENODEV: if device not found in list of registered devices
841 * The callers are required to call dev_pm_opp_put() for the returned OPP after
844 struct dev_pm_opp
*dev_pm_opp_find_level_floor(struct device
*dev
,
847 unsigned long temp
= *level
;
848 struct dev_pm_opp
*opp
;
850 opp
= _find_key_floor(dev
, &temp
, 0, true, _read_level
, NULL
);
854 EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor
);
857 * dev_pm_opp_find_bw_ceil() - Search for a rounded ceil bandwidth
858 * @dev: device for which we do this operation
859 * @bw: start bandwidth
860 * @index: which bandwidth to compare, in case of OPPs with several values
862 * Search for the matching floor *available* OPP from a starting bandwidth
865 * Return: matching *opp and refreshes *bw accordingly, else returns
866 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
868 * EINVAL: for bad pointer
869 * ERANGE: no match found for search
870 * ENODEV: if device not found in list of registered devices
872 * The callers are required to call dev_pm_opp_put() for the returned OPP after
875 struct dev_pm_opp
*dev_pm_opp_find_bw_ceil(struct device
*dev
, unsigned int *bw
,
878 unsigned long temp
= *bw
;
879 struct dev_pm_opp
*opp
;
881 opp
= _find_key_ceil(dev
, &temp
, index
, true, _read_bw
, NULL
);
885 EXPORT_SYMBOL_GPL(dev_pm_opp_find_bw_ceil
);
888 * dev_pm_opp_find_bw_floor() - Search for a rounded floor bandwidth
889 * @dev: device for which we do this operation
890 * @bw: start bandwidth
891 * @index: which bandwidth to compare, in case of OPPs with several values
893 * Search for the matching floor *available* OPP from a starting bandwidth
896 * Return: matching *opp and refreshes *bw accordingly, else returns
897 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
899 * EINVAL: for bad pointer
900 * ERANGE: no match found for search
901 * ENODEV: if device not found in list of registered devices
903 * The callers are required to call dev_pm_opp_put() for the returned OPP after
906 struct dev_pm_opp
*dev_pm_opp_find_bw_floor(struct device
*dev
,
907 unsigned int *bw
, int index
)
909 unsigned long temp
= *bw
;
910 struct dev_pm_opp
*opp
;
912 opp
= _find_key_floor(dev
, &temp
, index
, true, _read_bw
, NULL
);
916 EXPORT_SYMBOL_GPL(dev_pm_opp_find_bw_floor
);
918 static int _set_opp_voltage(struct device
*dev
, struct regulator
*reg
,
919 struct dev_pm_opp_supply
*supply
)
923 /* Regulator not available for device */
925 dev_dbg(dev
, "%s: regulator not available: %ld\n", __func__
,
930 dev_dbg(dev
, "%s: voltages (mV): %lu %lu %lu\n", __func__
,
931 supply
->u_volt_min
, supply
->u_volt
, supply
->u_volt_max
);
933 ret
= regulator_set_voltage_triplet(reg
, supply
->u_volt_min
,
934 supply
->u_volt
, supply
->u_volt_max
);
936 dev_err(dev
, "%s: failed to set voltage (%lu %lu %lu mV): %d\n",
937 __func__
, supply
->u_volt_min
, supply
->u_volt
,
938 supply
->u_volt_max
, ret
);
944 _opp_config_clk_single(struct device
*dev
, struct opp_table
*opp_table
,
945 struct dev_pm_opp
*opp
, void *data
, bool scaling_down
)
947 unsigned long *target
= data
;
951 /* One of target and opp must be available */
955 freq
= opp
->rates
[0];
961 ret
= clk_set_rate(opp_table
->clk
, freq
);
963 dev_err(dev
, "%s: failed to set clock rate: %d\n", __func__
,
966 opp_table
->current_rate_single_clk
= freq
;
973 * Simple implementation for configuring multiple clocks. Configure clocks in
974 * the order in which they are present in the array while scaling up.
976 int dev_pm_opp_config_clks_simple(struct device
*dev
,
977 struct opp_table
*opp_table
, struct dev_pm_opp
*opp
, void *data
,
983 for (i
= opp_table
->clk_count
- 1; i
>= 0; i
--) {
984 ret
= clk_set_rate(opp_table
->clks
[i
], opp
->rates
[i
]);
986 dev_err(dev
, "%s: failed to set clock rate: %d\n", __func__
,
992 for (i
= 0; i
< opp_table
->clk_count
; i
++) {
993 ret
= clk_set_rate(opp_table
->clks
[i
], opp
->rates
[i
]);
995 dev_err(dev
, "%s: failed to set clock rate: %d\n", __func__
,
1004 EXPORT_SYMBOL_GPL(dev_pm_opp_config_clks_simple
);
1006 static int _opp_config_regulator_single(struct device
*dev
,
1007 struct dev_pm_opp
*old_opp
, struct dev_pm_opp
*new_opp
,
1008 struct regulator
**regulators
, unsigned int count
)
1010 struct regulator
*reg
= regulators
[0];
1013 /* This function only supports single regulator per device */
1014 if (WARN_ON(count
> 1)) {
1015 dev_err(dev
, "multiple regulators are not supported\n");
1019 ret
= _set_opp_voltage(dev
, reg
, new_opp
->supplies
);
1024 * Enable the regulator after setting its voltages, otherwise it breaks
1025 * some boot-enabled regulators.
1027 if (unlikely(!new_opp
->opp_table
->enabled
)) {
1028 ret
= regulator_enable(reg
);
1030 dev_warn(dev
, "Failed to enable regulator: %d", ret
);
1036 static int _set_opp_bw(const struct opp_table
*opp_table
,
1037 struct dev_pm_opp
*opp
, struct device
*dev
)
1042 if (!opp_table
->paths
)
1045 for (i
= 0; i
< opp_table
->path_count
; i
++) {
1050 avg
= opp
->bandwidth
[i
].avg
;
1051 peak
= opp
->bandwidth
[i
].peak
;
1053 ret
= icc_set_bw(opp_table
->paths
[i
], avg
, peak
);
1055 dev_err(dev
, "Failed to %s bandwidth[%d]: %d\n",
1056 opp
? "set" : "remove", i
, ret
);
1064 static int _set_opp_level(struct device
*dev
, struct dev_pm_opp
*opp
)
1066 unsigned int level
= 0;
1070 if (opp
->level
== OPP_LEVEL_UNSET
)
1076 /* Request a new performance state through the device's PM domain. */
1077 ret
= dev_pm_domain_set_performance_state(dev
, level
);
1079 dev_err(dev
, "Failed to set performance state %u (%d)\n", level
,
1085 /* This is only called for PM domain for now */
1086 static int _set_required_opps(struct device
*dev
, struct opp_table
*opp_table
,
1087 struct dev_pm_opp
*opp
, bool up
)
1089 struct device
**devs
= opp_table
->required_devs
;
1090 struct dev_pm_opp
*required_opp
;
1091 int index
, target
, delta
, ret
;
1096 /* required-opps not fully initialized yet */
1097 if (lazy_linking_pending(opp_table
))
1100 /* Scaling up? Set required OPPs in normal order, else reverse */
1103 target
= opp_table
->required_opp_count
;
1106 index
= opp_table
->required_opp_count
- 1;
1111 while (index
!= target
) {
1113 required_opp
= opp
? opp
->required_opps
[index
] : NULL
;
1115 ret
= _set_opp_level(devs
[index
], required_opp
);
1126 static void _find_current_opp(struct device
*dev
, struct opp_table
*opp_table
)
1128 struct dev_pm_opp
*opp
= ERR_PTR(-ENODEV
);
1131 if (!IS_ERR(opp_table
->clk
)) {
1132 freq
= clk_get_rate(opp_table
->clk
);
1133 opp
= _find_freq_ceil(opp_table
, &freq
);
1137 * Unable to find the current OPP ? Pick the first from the list since
1138 * it is in ascending order, otherwise rest of the code will need to
1139 * make special checks to validate current_opp.
1142 mutex_lock(&opp_table
->lock
);
1143 opp
= list_first_entry(&opp_table
->opp_list
, struct dev_pm_opp
, node
);
1144 dev_pm_opp_get(opp
);
1145 mutex_unlock(&opp_table
->lock
);
1148 opp_table
->current_opp
= opp
;
1151 static int _disable_opp_table(struct device
*dev
, struct opp_table
*opp_table
)
1155 if (!opp_table
->enabled
)
1159 * Some drivers need to support cases where some platforms may
1160 * have OPP table for the device, while others don't and
1161 * opp_set_rate() just needs to behave like clk_set_rate().
1163 if (!_get_opp_count(opp_table
))
1166 ret
= _set_opp_bw(opp_table
, NULL
, dev
);
1170 if (opp_table
->regulators
)
1171 regulator_disable(opp_table
->regulators
[0]);
1173 ret
= _set_opp_level(dev
, NULL
);
1177 ret
= _set_required_opps(dev
, opp_table
, NULL
, false);
1180 opp_table
->enabled
= false;
1184 static int _set_opp(struct device
*dev
, struct opp_table
*opp_table
,
1185 struct dev_pm_opp
*opp
, void *clk_data
, bool forced
)
1187 struct dev_pm_opp
*old_opp
;
1188 int scaling_down
, ret
;
1191 return _disable_opp_table(dev
, opp_table
);
1193 /* Find the currently set OPP if we don't know already */
1194 if (unlikely(!opp_table
->current_opp
))
1195 _find_current_opp(dev
, opp_table
);
1197 old_opp
= opp_table
->current_opp
;
1199 /* Return early if nothing to do */
1200 if (!forced
&& old_opp
== opp
&& opp_table
->enabled
) {
1201 dev_dbg_ratelimited(dev
, "%s: OPPs are same, nothing to do\n", __func__
);
1205 dev_dbg(dev
, "%s: switching OPP: Freq %lu -> %lu Hz, Level %u -> %u, Bw %u -> %u\n",
1206 __func__
, old_opp
->rates
[0], opp
->rates
[0], old_opp
->level
,
1207 opp
->level
, old_opp
->bandwidth
? old_opp
->bandwidth
[0].peak
: 0,
1208 opp
->bandwidth
? opp
->bandwidth
[0].peak
: 0);
1210 scaling_down
= _opp_compare_key(opp_table
, old_opp
, opp
);
1211 if (scaling_down
== -1)
1214 /* Scaling up? Configure required OPPs before frequency */
1215 if (!scaling_down
) {
1216 ret
= _set_required_opps(dev
, opp_table
, opp
, true);
1218 dev_err(dev
, "Failed to set required opps: %d\n", ret
);
1222 ret
= _set_opp_level(dev
, opp
);
1226 ret
= _set_opp_bw(opp_table
, opp
, dev
);
1228 dev_err(dev
, "Failed to set bw: %d\n", ret
);
1232 if (opp_table
->config_regulators
) {
1233 ret
= opp_table
->config_regulators(dev
, old_opp
, opp
,
1234 opp_table
->regulators
,
1235 opp_table
->regulator_count
);
1237 dev_err(dev
, "Failed to set regulator voltages: %d\n",
1244 if (opp_table
->config_clks
) {
1245 ret
= opp_table
->config_clks(dev
, opp_table
, opp
, clk_data
, scaling_down
);
1250 /* Scaling down? Configure required OPPs after frequency */
1252 if (opp_table
->config_regulators
) {
1253 ret
= opp_table
->config_regulators(dev
, old_opp
, opp
,
1254 opp_table
->regulators
,
1255 opp_table
->regulator_count
);
1257 dev_err(dev
, "Failed to set regulator voltages: %d\n",
1263 ret
= _set_opp_bw(opp_table
, opp
, dev
);
1265 dev_err(dev
, "Failed to set bw: %d\n", ret
);
1269 ret
= _set_opp_level(dev
, opp
);
1273 ret
= _set_required_opps(dev
, opp_table
, opp
, false);
1275 dev_err(dev
, "Failed to set required opps: %d\n", ret
);
1280 opp_table
->enabled
= true;
1281 dev_pm_opp_put(old_opp
);
1283 /* Make sure current_opp doesn't get freed */
1284 dev_pm_opp_get(opp
);
1285 opp_table
->current_opp
= opp
;
1291 * dev_pm_opp_set_rate() - Configure new OPP based on frequency
1292 * @dev: device for which we do this operation
1293 * @target_freq: frequency to achieve
1295 * This configures the power-supplies to the levels specified by the OPP
1296 * corresponding to the target_freq, and programs the clock to a value <=
1297 * target_freq, as rounded by clk_round_rate(). Device wanting to run at fmax
1298 * provided by the opp, should have already rounded to the target OPP's
1301 int dev_pm_opp_set_rate(struct device
*dev
, unsigned long target_freq
)
1303 struct opp_table
*opp_table
;
1304 unsigned long freq
= 0, temp_freq
;
1305 struct dev_pm_opp
*opp
= NULL
;
1306 bool forced
= false;
1309 opp_table
= _find_opp_table(dev
);
1310 if (IS_ERR(opp_table
)) {
1311 dev_err(dev
, "%s: device's opp table doesn't exist\n", __func__
);
1312 return PTR_ERR(opp_table
);
1317 * For IO devices which require an OPP on some platforms/SoCs
1318 * while just needing to scale the clock on some others
1319 * we look for empty OPP tables with just a clock handle and
1320 * scale only the clk. This makes dev_pm_opp_set_rate()
1321 * equivalent to a clk_set_rate()
1323 if (!_get_opp_count(opp_table
)) {
1324 ret
= opp_table
->config_clks(dev
, opp_table
, NULL
,
1325 &target_freq
, false);
1329 freq
= clk_round_rate(opp_table
->clk
, target_freq
);
1330 if ((long)freq
<= 0)
1334 * The clock driver may support finer resolution of the
1335 * frequencies than the OPP table, don't update the frequency we
1336 * pass to clk_set_rate() here.
1339 opp
= _find_freq_ceil(opp_table
, &temp_freq
);
1342 dev_err(dev
, "%s: failed to find OPP for freq %lu (%d)\n",
1343 __func__
, freq
, ret
);
1348 * An OPP entry specifies the highest frequency at which other
1349 * properties of the OPP entry apply. Even if the new OPP is
1350 * same as the old one, we may still reach here for a different
1351 * value of the frequency. In such a case, do not abort but
1352 * configure the hardware to the desired frequency forcefully.
1354 forced
= opp_table
->current_rate_single_clk
!= freq
;
1357 ret
= _set_opp(dev
, opp_table
, opp
, &freq
, forced
);
1360 dev_pm_opp_put(opp
);
1363 dev_pm_opp_put_opp_table(opp_table
);
1366 EXPORT_SYMBOL_GPL(dev_pm_opp_set_rate
);
1369 * dev_pm_opp_set_opp() - Configure device for OPP
1370 * @dev: device for which we do this operation
1371 * @opp: OPP to set to
1373 * This configures the device based on the properties of the OPP passed to this
1376 * Return: 0 on success, a negative error number otherwise.
1378 int dev_pm_opp_set_opp(struct device
*dev
, struct dev_pm_opp
*opp
)
1380 struct opp_table
*opp_table
;
1383 opp_table
= _find_opp_table(dev
);
1384 if (IS_ERR(opp_table
)) {
1385 dev_err(dev
, "%s: device opp doesn't exist\n", __func__
);
1386 return PTR_ERR(opp_table
);
1389 ret
= _set_opp(dev
, opp_table
, opp
, NULL
, false);
1390 dev_pm_opp_put_opp_table(opp_table
);
1394 EXPORT_SYMBOL_GPL(dev_pm_opp_set_opp
);
1396 /* OPP-dev Helpers */
1397 static void _remove_opp_dev(struct opp_device
*opp_dev
,
1398 struct opp_table
*opp_table
)
1400 opp_debug_unregister(opp_dev
, opp_table
);
1401 list_del(&opp_dev
->node
);
1405 struct opp_device
*_add_opp_dev(const struct device
*dev
,
1406 struct opp_table
*opp_table
)
1408 struct opp_device
*opp_dev
;
1410 opp_dev
= kzalloc(sizeof(*opp_dev
), GFP_KERNEL
);
1414 /* Initialize opp-dev */
1417 mutex_lock(&opp_table
->lock
);
1418 list_add(&opp_dev
->node
, &opp_table
->dev_list
);
1419 mutex_unlock(&opp_table
->lock
);
1421 /* Create debugfs entries for the opp_table */
1422 opp_debug_register(opp_dev
, opp_table
);
1427 static struct opp_table
*_allocate_opp_table(struct device
*dev
, int index
)
1429 struct opp_table
*opp_table
;
1430 struct opp_device
*opp_dev
;
1434 * Allocate a new OPP table. In the infrequent case where a new
1435 * device is needed to be added, we pay this penalty.
1437 opp_table
= kzalloc(sizeof(*opp_table
), GFP_KERNEL
);
1439 return ERR_PTR(-ENOMEM
);
1441 mutex_init(&opp_table
->lock
);
1442 INIT_LIST_HEAD(&opp_table
->dev_list
);
1443 INIT_LIST_HEAD(&opp_table
->lazy
);
1445 opp_table
->clk
= ERR_PTR(-ENODEV
);
1447 /* Mark regulator count uninitialized */
1448 opp_table
->regulator_count
= -1;
1450 opp_dev
= _add_opp_dev(dev
, opp_table
);
1456 _of_init_opp_table(opp_table
, dev
, index
);
1458 /* Find interconnect path(s) for the device */
1459 ret
= dev_pm_opp_of_find_icc_paths(dev
, opp_table
);
1461 if (ret
== -EPROBE_DEFER
)
1462 goto remove_opp_dev
;
1464 dev_warn(dev
, "%s: Error finding interconnect paths: %d\n",
1468 BLOCKING_INIT_NOTIFIER_HEAD(&opp_table
->head
);
1469 INIT_LIST_HEAD(&opp_table
->opp_list
);
1470 kref_init(&opp_table
->kref
);
1475 _of_clear_opp_table(opp_table
);
1476 _remove_opp_dev(opp_dev
, opp_table
);
1477 mutex_destroy(&opp_table
->lock
);
1480 return ERR_PTR(ret
);
1483 void _get_opp_table_kref(struct opp_table
*opp_table
)
1485 kref_get(&opp_table
->kref
);
1488 static struct opp_table
*_update_opp_table_clk(struct device
*dev
,
1489 struct opp_table
*opp_table
,
1495 * Return early if we don't need to get clk or we have already done it
1498 if (!getclk
|| IS_ERR(opp_table
) || !IS_ERR(opp_table
->clk
) ||
1502 /* Find clk for the device */
1503 opp_table
->clk
= clk_get(dev
, NULL
);
1505 ret
= PTR_ERR_OR_ZERO(opp_table
->clk
);
1507 opp_table
->config_clks
= _opp_config_clk_single
;
1508 opp_table
->clk_count
= 1;
1512 if (ret
== -ENOENT
) {
1514 * There are few platforms which don't want the OPP core to
1515 * manage device's clock settings. In such cases neither the
1516 * platform provides the clks explicitly to us, nor the DT
1517 * contains a valid clk entry. The OPP nodes in DT may still
1518 * contain "opp-hz" property though, which we need to parse and
1519 * allow the platform to find an OPP based on freq later on.
1521 * This is a simple solution to take care of such corner cases,
1522 * i.e. make the clk_count 1, which lets us allocate space for
1523 * frequency in opp->rates and also parse the entries in DT.
1525 opp_table
->clk_count
= 1;
1527 dev_dbg(dev
, "%s: Couldn't find clock: %d\n", __func__
, ret
);
1531 dev_pm_opp_put_opp_table(opp_table
);
1532 dev_err_probe(dev
, ret
, "Couldn't find clock\n");
1534 return ERR_PTR(ret
);
1538 * We need to make sure that the OPP table for a device doesn't get added twice,
1539 * if this routine gets called in parallel with the same device pointer.
1541 * The simplest way to enforce that is to perform everything (find existing
1542 * table and if not found, create a new one) under the opp_table_lock, so only
1543 * one creator gets access to the same. But that expands the critical section
1544 * under the lock and may end up causing circular dependencies with frameworks
1545 * like debugfs, interconnect or clock framework as they may be direct or
1546 * indirect users of OPP core.
1548 * And for that reason we have to go for a bit tricky implementation here, which
1549 * uses the opp_tables_busy flag to indicate if another creator is in the middle
1550 * of adding an OPP table and others should wait for it to finish.
1552 struct opp_table
*_add_opp_table_indexed(struct device
*dev
, int index
,
1555 struct opp_table
*opp_table
;
1558 mutex_lock(&opp_table_lock
);
1560 opp_table
= _find_opp_table_unlocked(dev
);
1561 if (!IS_ERR(opp_table
))
1565 * The opp_tables list or an OPP table's dev_list is getting updated by
1566 * another user, wait for it to finish.
1568 if (unlikely(opp_tables_busy
)) {
1569 mutex_unlock(&opp_table_lock
);
1574 opp_tables_busy
= true;
1575 opp_table
= _managed_opp(dev
, index
);
1577 /* Drop the lock to reduce the size of critical section */
1578 mutex_unlock(&opp_table_lock
);
1581 if (!_add_opp_dev(dev
, opp_table
)) {
1582 dev_pm_opp_put_opp_table(opp_table
);
1583 opp_table
= ERR_PTR(-ENOMEM
);
1586 mutex_lock(&opp_table_lock
);
1588 opp_table
= _allocate_opp_table(dev
, index
);
1590 mutex_lock(&opp_table_lock
);
1591 if (!IS_ERR(opp_table
))
1592 list_add(&opp_table
->node
, &opp_tables
);
1595 opp_tables_busy
= false;
1598 mutex_unlock(&opp_table_lock
);
1600 return _update_opp_table_clk(dev
, opp_table
, getclk
);
1603 static struct opp_table
*_add_opp_table(struct device
*dev
, bool getclk
)
1605 return _add_opp_table_indexed(dev
, 0, getclk
);
1608 struct opp_table
*dev_pm_opp_get_opp_table(struct device
*dev
)
1610 return _find_opp_table(dev
);
1612 EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_table
);
1614 static void _opp_table_kref_release(struct kref
*kref
)
1616 struct opp_table
*opp_table
= container_of(kref
, struct opp_table
, kref
);
1617 struct opp_device
*opp_dev
, *temp
;
1620 /* Drop the lock as soon as we can */
1621 list_del(&opp_table
->node
);
1622 mutex_unlock(&opp_table_lock
);
1624 if (opp_table
->current_opp
)
1625 dev_pm_opp_put(opp_table
->current_opp
);
1627 _of_clear_opp_table(opp_table
);
1629 /* Release automatically acquired single clk */
1630 if (!IS_ERR(opp_table
->clk
))
1631 clk_put(opp_table
->clk
);
1633 if (opp_table
->paths
) {
1634 for (i
= 0; i
< opp_table
->path_count
; i
++)
1635 icc_put(opp_table
->paths
[i
]);
1636 kfree(opp_table
->paths
);
1639 WARN_ON(!list_empty(&opp_table
->opp_list
));
1641 list_for_each_entry_safe(opp_dev
, temp
, &opp_table
->dev_list
, node
)
1642 _remove_opp_dev(opp_dev
, opp_table
);
1644 mutex_destroy(&opp_table
->lock
);
1648 void dev_pm_opp_put_opp_table(struct opp_table
*opp_table
)
1650 kref_put_mutex(&opp_table
->kref
, _opp_table_kref_release
,
1653 EXPORT_SYMBOL_GPL(dev_pm_opp_put_opp_table
);
1655 void _opp_free(struct dev_pm_opp
*opp
)
1660 static void _opp_kref_release(struct kref
*kref
)
1662 struct dev_pm_opp
*opp
= container_of(kref
, struct dev_pm_opp
, kref
);
1663 struct opp_table
*opp_table
= opp
->opp_table
;
1665 list_del(&opp
->node
);
1666 mutex_unlock(&opp_table
->lock
);
1669 * Notify the changes in the availability of the operable
1670 * frequency/voltage list.
1672 blocking_notifier_call_chain(&opp_table
->head
, OPP_EVENT_REMOVE
, opp
);
1673 _of_clear_opp(opp_table
, opp
);
1674 opp_debug_remove_one(opp
);
1678 void dev_pm_opp_get(struct dev_pm_opp
*opp
)
1680 kref_get(&opp
->kref
);
1683 void dev_pm_opp_put(struct dev_pm_opp
*opp
)
1685 kref_put_mutex(&opp
->kref
, _opp_kref_release
, &opp
->opp_table
->lock
);
1687 EXPORT_SYMBOL_GPL(dev_pm_opp_put
);
1690 * dev_pm_opp_remove() - Remove an OPP from OPP table
1691 * @dev: device for which we do this operation
1692 * @freq: OPP to remove with matching 'freq'
1694 * This function removes an opp from the opp table.
1696 void dev_pm_opp_remove(struct device
*dev
, unsigned long freq
)
1698 struct dev_pm_opp
*opp
= NULL
, *iter
;
1699 struct opp_table
*opp_table
;
1701 opp_table
= _find_opp_table(dev
);
1702 if (IS_ERR(opp_table
))
1705 if (!assert_single_clk(opp_table
))
1708 mutex_lock(&opp_table
->lock
);
1710 list_for_each_entry(iter
, &opp_table
->opp_list
, node
) {
1711 if (iter
->rates
[0] == freq
) {
1717 mutex_unlock(&opp_table
->lock
);
1720 dev_pm_opp_put(opp
);
1722 /* Drop the reference taken by dev_pm_opp_add() */
1723 dev_pm_opp_put_opp_table(opp_table
);
1725 dev_warn(dev
, "%s: Couldn't find OPP with freq: %lu\n",
1730 /* Drop the reference taken by _find_opp_table() */
1731 dev_pm_opp_put_opp_table(opp_table
);
1733 EXPORT_SYMBOL_GPL(dev_pm_opp_remove
);
1735 static struct dev_pm_opp
*_opp_get_next(struct opp_table
*opp_table
,
1738 struct dev_pm_opp
*opp
= NULL
, *temp
;
1740 mutex_lock(&opp_table
->lock
);
1741 list_for_each_entry(temp
, &opp_table
->opp_list
, node
) {
1743 * Refcount must be dropped only once for each OPP by OPP core,
1744 * do that with help of "removed" flag.
1746 if (!temp
->removed
&& dynamic
== temp
->dynamic
) {
1752 mutex_unlock(&opp_table
->lock
);
1757 * Can't call dev_pm_opp_put() from under the lock as debugfs removal needs to
1758 * happen lock less to avoid circular dependency issues. This routine must be
1759 * called without the opp_table->lock held.
1761 static void _opp_remove_all(struct opp_table
*opp_table
, bool dynamic
)
1763 struct dev_pm_opp
*opp
;
1765 while ((opp
= _opp_get_next(opp_table
, dynamic
))) {
1766 opp
->removed
= true;
1767 dev_pm_opp_put(opp
);
1769 /* Drop the references taken by dev_pm_opp_add() */
1771 dev_pm_opp_put_opp_table(opp_table
);
1775 bool _opp_remove_all_static(struct opp_table
*opp_table
)
1777 mutex_lock(&opp_table
->lock
);
1779 if (!opp_table
->parsed_static_opps
) {
1780 mutex_unlock(&opp_table
->lock
);
1784 if (--opp_table
->parsed_static_opps
) {
1785 mutex_unlock(&opp_table
->lock
);
1789 mutex_unlock(&opp_table
->lock
);
1791 _opp_remove_all(opp_table
, false);
1796 * dev_pm_opp_remove_all_dynamic() - Remove all dynamically created OPPs
1797 * @dev: device for which we do this operation
1799 * This function removes all dynamically created OPPs from the opp table.
1801 void dev_pm_opp_remove_all_dynamic(struct device
*dev
)
1803 struct opp_table
*opp_table
;
1805 opp_table
= _find_opp_table(dev
);
1806 if (IS_ERR(opp_table
))
1809 _opp_remove_all(opp_table
, true);
1811 /* Drop the reference taken by _find_opp_table() */
1812 dev_pm_opp_put_opp_table(opp_table
);
1814 EXPORT_SYMBOL_GPL(dev_pm_opp_remove_all_dynamic
);
1816 struct dev_pm_opp
*_opp_allocate(struct opp_table
*opp_table
)
1818 struct dev_pm_opp
*opp
;
1819 int supply_count
, supply_size
, icc_size
, clk_size
;
1821 /* Allocate space for at least one supply */
1822 supply_count
= opp_table
->regulator_count
> 0 ?
1823 opp_table
->regulator_count
: 1;
1824 supply_size
= sizeof(*opp
->supplies
) * supply_count
;
1825 clk_size
= sizeof(*opp
->rates
) * opp_table
->clk_count
;
1826 icc_size
= sizeof(*opp
->bandwidth
) * opp_table
->path_count
;
1828 /* allocate new OPP node and supplies structures */
1829 opp
= kzalloc(sizeof(*opp
) + supply_size
+ clk_size
+ icc_size
, GFP_KERNEL
);
1833 /* Put the supplies, bw and clock at the end of the OPP structure */
1834 opp
->supplies
= (struct dev_pm_opp_supply
*)(opp
+ 1);
1836 opp
->rates
= (unsigned long *)(opp
->supplies
+ supply_count
);
1839 opp
->bandwidth
= (struct dev_pm_opp_icc_bw
*)(opp
->rates
+ opp_table
->clk_count
);
1841 INIT_LIST_HEAD(&opp
->node
);
1843 opp
->level
= OPP_LEVEL_UNSET
;
1848 static bool _opp_supported_by_regulators(struct dev_pm_opp
*opp
,
1849 struct opp_table
*opp_table
)
1851 struct regulator
*reg
;
1854 if (!opp_table
->regulators
)
1857 for (i
= 0; i
< opp_table
->regulator_count
; i
++) {
1858 reg
= opp_table
->regulators
[i
];
1860 if (!regulator_is_supported_voltage(reg
,
1861 opp
->supplies
[i
].u_volt_min
,
1862 opp
->supplies
[i
].u_volt_max
)) {
1863 pr_warn("%s: OPP minuV: %lu maxuV: %lu, not supported by regulator\n",
1864 __func__
, opp
->supplies
[i
].u_volt_min
,
1865 opp
->supplies
[i
].u_volt_max
);
1873 static int _opp_compare_rate(struct opp_table
*opp_table
,
1874 struct dev_pm_opp
*opp1
, struct dev_pm_opp
*opp2
)
1878 for (i
= 0; i
< opp_table
->clk_count
; i
++) {
1879 if (opp1
->rates
[i
] != opp2
->rates
[i
])
1880 return opp1
->rates
[i
] < opp2
->rates
[i
] ? -1 : 1;
1883 /* Same rates for both OPPs */
1887 static int _opp_compare_bw(struct opp_table
*opp_table
, struct dev_pm_opp
*opp1
,
1888 struct dev_pm_opp
*opp2
)
1892 for (i
= 0; i
< opp_table
->path_count
; i
++) {
1893 if (opp1
->bandwidth
[i
].peak
!= opp2
->bandwidth
[i
].peak
)
1894 return opp1
->bandwidth
[i
].peak
< opp2
->bandwidth
[i
].peak
? -1 : 1;
1897 /* Same bw for both OPPs */
1907 int _opp_compare_key(struct opp_table
*opp_table
, struct dev_pm_opp
*opp1
,
1908 struct dev_pm_opp
*opp2
)
1912 ret
= _opp_compare_rate(opp_table
, opp1
, opp2
);
1916 ret
= _opp_compare_bw(opp_table
, opp1
, opp2
);
1920 if (opp1
->level
!= opp2
->level
)
1921 return opp1
->level
< opp2
->level
? -1 : 1;
1923 /* Duplicate OPPs */
1927 static int _opp_is_duplicate(struct device
*dev
, struct dev_pm_opp
*new_opp
,
1928 struct opp_table
*opp_table
,
1929 struct list_head
**head
)
1931 struct dev_pm_opp
*opp
;
1935 * Insert new OPP in order of increasing frequency and discard if
1938 * Need to use &opp_table->opp_list in the condition part of the 'for'
1939 * loop, don't replace it with head otherwise it will become an infinite
1942 list_for_each_entry(opp
, &opp_table
->opp_list
, node
) {
1943 opp_cmp
= _opp_compare_key(opp_table
, new_opp
, opp
);
1952 /* Duplicate OPPs */
1953 dev_warn(dev
, "%s: duplicate OPPs detected. Existing: freq: %lu, volt: %lu, enabled: %d. New: freq: %lu, volt: %lu, enabled: %d\n",
1954 __func__
, opp
->rates
[0], opp
->supplies
[0].u_volt
,
1955 opp
->available
, new_opp
->rates
[0],
1956 new_opp
->supplies
[0].u_volt
, new_opp
->available
);
1958 /* Should we compare voltages for all regulators here ? */
1959 return opp
->available
&&
1960 new_opp
->supplies
[0].u_volt
== opp
->supplies
[0].u_volt
? -EBUSY
: -EEXIST
;
1966 void _required_opps_available(struct dev_pm_opp
*opp
, int count
)
1970 for (i
= 0; i
< count
; i
++) {
1971 if (opp
->required_opps
[i
]->available
)
1974 opp
->available
= false;
1975 pr_warn("%s: OPP not supported by required OPP %pOF (%lu)\n",
1976 __func__
, opp
->required_opps
[i
]->np
, opp
->rates
[0]);
1983 * 0: On success. And appropriate error message for duplicate OPPs.
1984 * -EBUSY: For OPP with same freq/volt and is available. The callers of
1985 * _opp_add() must return 0 if they receive -EBUSY from it. This is to make
1986 * sure we don't print error messages unnecessarily if different parts of
1987 * kernel try to initialize the OPP table.
1988 * -EEXIST: For OPP with same freq but different volt or is unavailable. This
1989 * should be considered an error by the callers of _opp_add().
1991 int _opp_add(struct device
*dev
, struct dev_pm_opp
*new_opp
,
1992 struct opp_table
*opp_table
)
1994 struct list_head
*head
;
1997 mutex_lock(&opp_table
->lock
);
1998 head
= &opp_table
->opp_list
;
2000 ret
= _opp_is_duplicate(dev
, new_opp
, opp_table
, &head
);
2002 mutex_unlock(&opp_table
->lock
);
2006 list_add(&new_opp
->node
, head
);
2007 mutex_unlock(&opp_table
->lock
);
2009 new_opp
->opp_table
= opp_table
;
2010 kref_init(&new_opp
->kref
);
2012 opp_debug_create_one(new_opp
, opp_table
);
2014 if (!_opp_supported_by_regulators(new_opp
, opp_table
)) {
2015 new_opp
->available
= false;
2016 dev_warn(dev
, "%s: OPP not supported by regulators (%lu)\n",
2017 __func__
, new_opp
->rates
[0]);
2020 /* required-opps not fully initialized yet */
2021 if (lazy_linking_pending(opp_table
))
2024 _required_opps_available(new_opp
, opp_table
->required_opp_count
);
2030 * _opp_add_v1() - Allocate a OPP based on v1 bindings.
2031 * @opp_table: OPP table
2032 * @dev: device for which we do this operation
2033 * @data: The OPP data for the OPP to add
2034 * @dynamic: Dynamically added OPPs.
2036 * This function adds an opp definition to the opp table and returns status.
2037 * The opp is made available by default and it can be controlled using
2038 * dev_pm_opp_enable/disable functions and may be removed by dev_pm_opp_remove.
2040 * NOTE: "dynamic" parameter impacts OPPs added by the dev_pm_opp_of_add_table
2041 * and freed by dev_pm_opp_of_remove_table.
2045 * Duplicate OPPs (both freq and volt are same) and opp->available
2046 * -EEXIST Freq are same and volt are different OR
2047 * Duplicate OPPs (both freq and volt are same) and !opp->available
2048 * -ENOMEM Memory allocation failure
2050 int _opp_add_v1(struct opp_table
*opp_table
, struct device
*dev
,
2051 struct dev_pm_opp_data
*data
, bool dynamic
)
2053 struct dev_pm_opp
*new_opp
;
2054 unsigned long tol
, u_volt
= data
->u_volt
;
2057 if (!assert_single_clk(opp_table
))
2060 new_opp
= _opp_allocate(opp_table
);
2064 /* populate the opp table */
2065 new_opp
->rates
[0] = data
->freq
;
2066 new_opp
->level
= data
->level
;
2067 new_opp
->turbo
= data
->turbo
;
2068 tol
= u_volt
* opp_table
->voltage_tolerance_v1
/ 100;
2069 new_opp
->supplies
[0].u_volt
= u_volt
;
2070 new_opp
->supplies
[0].u_volt_min
= u_volt
- tol
;
2071 new_opp
->supplies
[0].u_volt_max
= u_volt
+ tol
;
2072 new_opp
->available
= true;
2073 new_opp
->dynamic
= dynamic
;
2075 ret
= _opp_add(dev
, new_opp
, opp_table
);
2077 /* Don't return error for duplicate OPPs */
2084 * Notify the changes in the availability of the operable
2085 * frequency/voltage list.
2087 blocking_notifier_call_chain(&opp_table
->head
, OPP_EVENT_ADD
, new_opp
);
2097 * This is required only for the V2 bindings, and it enables a platform to
2098 * specify the hierarchy of versions it supports. OPP layer will then enable
2099 * OPPs, which are available for those versions, based on its 'opp-supported-hw'
2102 static int _opp_set_supported_hw(struct opp_table
*opp_table
,
2103 const u32
*versions
, unsigned int count
)
2105 /* Another CPU that shares the OPP table has set the property ? */
2106 if (opp_table
->supported_hw
)
2109 opp_table
->supported_hw
= kmemdup(versions
, count
* sizeof(*versions
),
2111 if (!opp_table
->supported_hw
)
2114 opp_table
->supported_hw_count
= count
;
2119 static void _opp_put_supported_hw(struct opp_table
*opp_table
)
2121 if (opp_table
->supported_hw
) {
2122 kfree(opp_table
->supported_hw
);
2123 opp_table
->supported_hw
= NULL
;
2124 opp_table
->supported_hw_count
= 0;
2129 * This is required only for the V2 bindings, and it enables a platform to
2130 * specify the extn to be used for certain property names. The properties to
2131 * which the extension will apply are opp-microvolt and opp-microamp. OPP core
2132 * should postfix the property name with -<name> while looking for them.
2134 static int _opp_set_prop_name(struct opp_table
*opp_table
, const char *name
)
2136 /* Another CPU that shares the OPP table has set the property ? */
2137 if (!opp_table
->prop_name
) {
2138 opp_table
->prop_name
= kstrdup(name
, GFP_KERNEL
);
2139 if (!opp_table
->prop_name
)
2146 static void _opp_put_prop_name(struct opp_table
*opp_table
)
2148 if (opp_table
->prop_name
) {
2149 kfree(opp_table
->prop_name
);
2150 opp_table
->prop_name
= NULL
;
2155 * In order to support OPP switching, OPP layer needs to know the name of the
2156 * device's regulators, as the core would be required to switch voltages as
2159 * This must be called before any OPPs are initialized for the device.
2161 static int _opp_set_regulators(struct opp_table
*opp_table
, struct device
*dev
,
2162 const char * const names
[])
2164 const char * const *temp
= names
;
2165 struct regulator
*reg
;
2166 int count
= 0, ret
, i
;
2168 /* Count number of regulators */
2175 /* Another CPU that shares the OPP table has set the regulators ? */
2176 if (opp_table
->regulators
)
2179 opp_table
->regulators
= kmalloc_array(count
,
2180 sizeof(*opp_table
->regulators
),
2182 if (!opp_table
->regulators
)
2185 for (i
= 0; i
< count
; i
++) {
2186 reg
= regulator_get_optional(dev
, names
[i
]);
2188 ret
= dev_err_probe(dev
, PTR_ERR(reg
),
2189 "%s: no regulator (%s) found\n",
2190 __func__
, names
[i
]);
2191 goto free_regulators
;
2194 opp_table
->regulators
[i
] = reg
;
2197 opp_table
->regulator_count
= count
;
2199 /* Set generic config_regulators() for single regulators here */
2201 opp_table
->config_regulators
= _opp_config_regulator_single
;
2207 regulator_put(opp_table
->regulators
[--i
]);
2209 kfree(opp_table
->regulators
);
2210 opp_table
->regulators
= NULL
;
2211 opp_table
->regulator_count
= -1;
2216 static void _opp_put_regulators(struct opp_table
*opp_table
)
2220 if (!opp_table
->regulators
)
2223 if (opp_table
->enabled
) {
2224 for (i
= opp_table
->regulator_count
- 1; i
>= 0; i
--)
2225 regulator_disable(opp_table
->regulators
[i
]);
2228 for (i
= opp_table
->regulator_count
- 1; i
>= 0; i
--)
2229 regulator_put(opp_table
->regulators
[i
]);
2231 kfree(opp_table
->regulators
);
2232 opp_table
->regulators
= NULL
;
2233 opp_table
->regulator_count
= -1;
2236 static void _put_clks(struct opp_table
*opp_table
, int count
)
2240 for (i
= count
- 1; i
>= 0; i
--)
2241 clk_put(opp_table
->clks
[i
]);
2243 kfree(opp_table
->clks
);
2244 opp_table
->clks
= NULL
;
2248 * In order to support OPP switching, OPP layer needs to get pointers to the
2249 * clocks for the device. Simple cases work fine without using this routine
2250 * (i.e. by passing connection-id as NULL), but for a device with multiple
2251 * clocks available, the OPP core needs to know the exact names of the clks to
2254 * This must be called before any OPPs are initialized for the device.
2256 static int _opp_set_clknames(struct opp_table
*opp_table
, struct device
*dev
,
2257 const char * const names
[],
2258 config_clks_t config_clks
)
2260 const char * const *temp
= names
;
2261 int count
= 0, ret
, i
;
2264 /* Count number of clks */
2269 * This is a special case where we have a single clock, whose connection
2270 * id name is NULL, i.e. first two entries are NULL in the array.
2272 if (!count
&& !names
[1])
2275 /* Fail early for invalid configurations */
2276 if (!count
|| (!config_clks
&& count
> 1))
2279 /* Another CPU that shares the OPP table has set the clkname ? */
2280 if (opp_table
->clks
)
2283 opp_table
->clks
= kmalloc_array(count
, sizeof(*opp_table
->clks
),
2285 if (!opp_table
->clks
)
2288 /* Find clks for the device */
2289 for (i
= 0; i
< count
; i
++) {
2290 clk
= clk_get(dev
, names
[i
]);
2292 ret
= dev_err_probe(dev
, PTR_ERR(clk
),
2293 "%s: Couldn't find clock with name: %s\n",
2294 __func__
, names
[i
]);
2298 opp_table
->clks
[i
] = clk
;
2301 opp_table
->clk_count
= count
;
2302 opp_table
->config_clks
= config_clks
;
2304 /* Set generic single clk set here */
2306 if (!opp_table
->config_clks
)
2307 opp_table
->config_clks
= _opp_config_clk_single
;
2310 * We could have just dropped the "clk" field and used "clks"
2311 * everywhere. Instead we kept the "clk" field around for
2312 * following reasons:
2314 * - avoiding clks[0] everywhere else.
2315 * - not running single clk helpers for multiple clk usecase by
2318 * Since this is single-clk case, just update the clk pointer
2321 opp_table
->clk
= opp_table
->clks
[0];
2327 _put_clks(opp_table
, i
);
2331 static void _opp_put_clknames(struct opp_table
*opp_table
)
2333 if (!opp_table
->clks
)
2336 opp_table
->config_clks
= NULL
;
2337 opp_table
->clk
= ERR_PTR(-ENODEV
);
2339 _put_clks(opp_table
, opp_table
->clk_count
);
2343 * This is useful to support platforms with multiple regulators per device.
2345 * This must be called before any OPPs are initialized for the device.
2347 static int _opp_set_config_regulators_helper(struct opp_table
*opp_table
,
2348 struct device
*dev
, config_regulators_t config_regulators
)
2350 /* Another CPU that shares the OPP table has set the helper ? */
2351 if (!opp_table
->config_regulators
)
2352 opp_table
->config_regulators
= config_regulators
;
2357 static void _opp_put_config_regulators_helper(struct opp_table
*opp_table
)
2359 if (opp_table
->config_regulators
)
2360 opp_table
->config_regulators
= NULL
;
2363 static int _opp_set_required_dev(struct opp_table
*opp_table
,
2365 struct device
*required_dev
,
2368 struct opp_table
*required_table
, *pd_table
;
2369 struct device
*gdev
;
2371 /* Genpd core takes care of propagation to parent genpd */
2372 if (opp_table
->is_genpd
) {
2373 dev_err(dev
, "%s: Operation not supported for genpds\n", __func__
);
2377 if (index
>= opp_table
->required_opp_count
) {
2378 dev_err(dev
, "Required OPPs not available, can't set required devs\n");
2382 required_table
= opp_table
->required_opp_tables
[index
];
2383 if (IS_ERR(required_table
)) {
2384 dev_err(dev
, "Missing OPP table, unable to set the required devs\n");
2389 * The required_opp_tables parsing is not perfect, as the OPP core does
2390 * the parsing solely based on the DT node pointers. The core sets the
2391 * required_opp_tables entry to the first OPP table in the "opp_tables"
2392 * list, that matches with the node pointer.
2394 * If the target DT OPP table is used by multiple devices and they all
2395 * create separate instances of 'struct opp_table' from it, then it is
2396 * possible that the required_opp_tables entry may be set to the
2397 * incorrect sibling device.
2399 * Cross check it again and fix if required.
2401 gdev
= dev_to_genpd_dev(required_dev
);
2403 return PTR_ERR(gdev
);
2405 pd_table
= _find_opp_table(gdev
);
2406 if (!IS_ERR(pd_table
)) {
2407 if (pd_table
!= required_table
) {
2408 dev_pm_opp_put_opp_table(required_table
);
2409 opp_table
->required_opp_tables
[index
] = pd_table
;
2411 dev_pm_opp_put_opp_table(pd_table
);
2415 opp_table
->required_devs
[index
] = required_dev
;
2419 static void _opp_put_required_dev(struct opp_table
*opp_table
,
2422 opp_table
->required_devs
[index
] = NULL
;
2425 static void _opp_clear_config(struct opp_config_data
*data
)
2427 if (data
->flags
& OPP_CONFIG_REQUIRED_DEV
)
2428 _opp_put_required_dev(data
->opp_table
,
2429 data
->required_dev_index
);
2430 if (data
->flags
& OPP_CONFIG_REGULATOR
)
2431 _opp_put_regulators(data
->opp_table
);
2432 if (data
->flags
& OPP_CONFIG_SUPPORTED_HW
)
2433 _opp_put_supported_hw(data
->opp_table
);
2434 if (data
->flags
& OPP_CONFIG_REGULATOR_HELPER
)
2435 _opp_put_config_regulators_helper(data
->opp_table
);
2436 if (data
->flags
& OPP_CONFIG_PROP_NAME
)
2437 _opp_put_prop_name(data
->opp_table
);
2438 if (data
->flags
& OPP_CONFIG_CLK
)
2439 _opp_put_clknames(data
->opp_table
);
2441 dev_pm_opp_put_opp_table(data
->opp_table
);
2446 * dev_pm_opp_set_config() - Set OPP configuration for the device.
2447 * @dev: Device for which configuration is being set.
2448 * @config: OPP configuration.
2450 * This allows all device OPP configurations to be performed at once.
2452 * This must be called before any OPPs are initialized for the device. This may
2453 * be called multiple times for the same OPP table, for example once for each
2454 * CPU that share the same table. This must be balanced by the same number of
2455 * calls to dev_pm_opp_clear_config() in order to free the OPP table properly.
2457 * This returns a token to the caller, which must be passed to
2458 * dev_pm_opp_clear_config() to free the resources later. The value of the
2459 * returned token will be >= 1 for success and negative for errors. The minimum
2460 * value of 1 is chosen here to make it easy for callers to manage the resource.
2462 int dev_pm_opp_set_config(struct device
*dev
, struct dev_pm_opp_config
*config
)
2464 struct opp_table
*opp_table
;
2465 struct opp_config_data
*data
;
2469 data
= kmalloc(sizeof(*data
), GFP_KERNEL
);
2473 opp_table
= _add_opp_table(dev
, false);
2474 if (IS_ERR(opp_table
)) {
2476 return PTR_ERR(opp_table
);
2479 data
->opp_table
= opp_table
;
2482 /* This should be called before OPPs are initialized */
2483 if (WARN_ON(!list_empty(&opp_table
->opp_list
))) {
2488 /* Configure clocks */
2489 if (config
->clk_names
) {
2490 ret
= _opp_set_clknames(opp_table
, dev
, config
->clk_names
,
2491 config
->config_clks
);
2495 data
->flags
|= OPP_CONFIG_CLK
;
2496 } else if (config
->config_clks
) {
2497 /* Don't allow config callback without clocks */
2502 /* Configure property names */
2503 if (config
->prop_name
) {
2504 ret
= _opp_set_prop_name(opp_table
, config
->prop_name
);
2508 data
->flags
|= OPP_CONFIG_PROP_NAME
;
2511 /* Configure config_regulators helper */
2512 if (config
->config_regulators
) {
2513 ret
= _opp_set_config_regulators_helper(opp_table
, dev
,
2514 config
->config_regulators
);
2518 data
->flags
|= OPP_CONFIG_REGULATOR_HELPER
;
2521 /* Configure supported hardware */
2522 if (config
->supported_hw
) {
2523 ret
= _opp_set_supported_hw(opp_table
, config
->supported_hw
,
2524 config
->supported_hw_count
);
2528 data
->flags
|= OPP_CONFIG_SUPPORTED_HW
;
2531 /* Configure supplies */
2532 if (config
->regulator_names
) {
2533 ret
= _opp_set_regulators(opp_table
, dev
,
2534 config
->regulator_names
);
2538 data
->flags
|= OPP_CONFIG_REGULATOR
;
2541 if (config
->required_dev
) {
2542 ret
= _opp_set_required_dev(opp_table
, dev
,
2543 config
->required_dev
,
2544 config
->required_dev_index
);
2548 data
->required_dev_index
= config
->required_dev_index
;
2549 data
->flags
|= OPP_CONFIG_REQUIRED_DEV
;
2552 ret
= xa_alloc(&opp_configs
, &id
, data
, XA_LIMIT(1, INT_MAX
),
2560 _opp_clear_config(data
);
2563 EXPORT_SYMBOL_GPL(dev_pm_opp_set_config
);
2566 * dev_pm_opp_clear_config() - Releases resources blocked for OPP configuration.
2567 * @token: The token returned by dev_pm_opp_set_config() previously.
2569 * This allows all device OPP configurations to be cleared at once. This must be
2570 * called once for each call made to dev_pm_opp_set_config(), in order to free
2571 * the OPPs properly.
2573 * Currently the first call itself ends up freeing all the OPP configurations,
2574 * while the later ones only drop the OPP table reference. This works well for
2575 * now as we would never want to use an half initialized OPP table and want to
2576 * remove the configurations together.
2578 void dev_pm_opp_clear_config(int token
)
2580 struct opp_config_data
*data
;
2583 * This lets the callers call this unconditionally and keep their code
2586 if (unlikely(token
<= 0))
2589 data
= xa_erase(&opp_configs
, token
);
2593 _opp_clear_config(data
);
2595 EXPORT_SYMBOL_GPL(dev_pm_opp_clear_config
);
2597 static void devm_pm_opp_config_release(void *token
)
2599 dev_pm_opp_clear_config((unsigned long)token
);
2603 * devm_pm_opp_set_config() - Set OPP configuration for the device.
2604 * @dev: Device for which configuration is being set.
2605 * @config: OPP configuration.
2607 * This allows all device OPP configurations to be performed at once.
2608 * This is a resource-managed variant of dev_pm_opp_set_config().
2610 * Return: 0 on success and errorno otherwise.
2612 int devm_pm_opp_set_config(struct device
*dev
, struct dev_pm_opp_config
*config
)
2614 int token
= dev_pm_opp_set_config(dev
, config
);
2619 return devm_add_action_or_reset(dev
, devm_pm_opp_config_release
,
2620 (void *) ((unsigned long) token
));
2622 EXPORT_SYMBOL_GPL(devm_pm_opp_set_config
);
2625 * dev_pm_opp_xlate_required_opp() - Find required OPP for @src_table OPP.
2626 * @src_table: OPP table which has @dst_table as one of its required OPP table.
2627 * @dst_table: Required OPP table of the @src_table.
2628 * @src_opp: OPP from the @src_table.
2630 * This function returns the OPP (present in @dst_table) pointed out by the
2631 * "required-opps" property of the @src_opp (present in @src_table).
2633 * The callers are required to call dev_pm_opp_put() for the returned OPP after
2636 * Return: pointer to 'struct dev_pm_opp' on success and errorno otherwise.
2638 struct dev_pm_opp
*dev_pm_opp_xlate_required_opp(struct opp_table
*src_table
,
2639 struct opp_table
*dst_table
,
2640 struct dev_pm_opp
*src_opp
)
2642 struct dev_pm_opp
*opp
, *dest_opp
= ERR_PTR(-ENODEV
);
2645 if (!src_table
|| !dst_table
|| !src_opp
||
2646 !src_table
->required_opp_tables
)
2647 return ERR_PTR(-EINVAL
);
2649 /* required-opps not fully initialized yet */
2650 if (lazy_linking_pending(src_table
))
2651 return ERR_PTR(-EBUSY
);
2653 for (i
= 0; i
< src_table
->required_opp_count
; i
++) {
2654 if (src_table
->required_opp_tables
[i
] == dst_table
) {
2655 mutex_lock(&src_table
->lock
);
2657 list_for_each_entry(opp
, &src_table
->opp_list
, node
) {
2658 if (opp
== src_opp
) {
2659 dest_opp
= opp
->required_opps
[i
];
2660 dev_pm_opp_get(dest_opp
);
2665 mutex_unlock(&src_table
->lock
);
2670 if (IS_ERR(dest_opp
)) {
2671 pr_err("%s: Couldn't find matching OPP (%p: %p)\n", __func__
,
2672 src_table
, dst_table
);
2677 EXPORT_SYMBOL_GPL(dev_pm_opp_xlate_required_opp
);
2680 * dev_pm_opp_xlate_performance_state() - Find required OPP's pstate for src_table.
2681 * @src_table: OPP table which has dst_table as one of its required OPP table.
2682 * @dst_table: Required OPP table of the src_table.
2683 * @pstate: Current performance state of the src_table.
2685 * This Returns pstate of the OPP (present in @dst_table) pointed out by the
2686 * "required-opps" property of the OPP (present in @src_table) which has
2687 * performance state set to @pstate.
2689 * Return: Zero or positive performance state on success, otherwise negative
2692 int dev_pm_opp_xlate_performance_state(struct opp_table
*src_table
,
2693 struct opp_table
*dst_table
,
2694 unsigned int pstate
)
2696 struct dev_pm_opp
*opp
;
2697 int dest_pstate
= -EINVAL
;
2701 * Normally the src_table will have the "required_opps" property set to
2702 * point to one of the OPPs in the dst_table, but in some cases the
2703 * genpd and its master have one to one mapping of performance states
2704 * and so none of them have the "required-opps" property set. Return the
2705 * pstate of the src_table as it is in such cases.
2707 if (!src_table
|| !src_table
->required_opp_count
)
2710 /* Both OPP tables must belong to genpds */
2711 if (unlikely(!src_table
->is_genpd
|| !dst_table
->is_genpd
)) {
2712 pr_err("%s: Performance state is only valid for genpds.\n", __func__
);
2716 /* required-opps not fully initialized yet */
2717 if (lazy_linking_pending(src_table
))
2720 for (i
= 0; i
< src_table
->required_opp_count
; i
++) {
2721 if (src_table
->required_opp_tables
[i
]->np
== dst_table
->np
)
2725 if (unlikely(i
== src_table
->required_opp_count
)) {
2726 pr_err("%s: Couldn't find matching OPP table (%p: %p)\n",
2727 __func__
, src_table
, dst_table
);
2731 mutex_lock(&src_table
->lock
);
2733 list_for_each_entry(opp
, &src_table
->opp_list
, node
) {
2734 if (opp
->level
== pstate
) {
2735 dest_pstate
= opp
->required_opps
[i
]->level
;
2740 pr_err("%s: Couldn't find matching OPP (%p: %p)\n", __func__
, src_table
,
2744 mutex_unlock(&src_table
->lock
);
2750 * dev_pm_opp_add_dynamic() - Add an OPP table from a table definitions
2751 * @dev: The device for which we do this operation
2752 * @data: The OPP data for the OPP to add
2754 * This function adds an opp definition to the opp table and returns status.
2755 * The opp is made available by default and it can be controlled using
2756 * dev_pm_opp_enable/disable functions.
2760 * Duplicate OPPs (both freq and volt are same) and opp->available
2761 * -EEXIST Freq are same and volt are different OR
2762 * Duplicate OPPs (both freq and volt are same) and !opp->available
2763 * -ENOMEM Memory allocation failure
2765 int dev_pm_opp_add_dynamic(struct device
*dev
, struct dev_pm_opp_data
*data
)
2767 struct opp_table
*opp_table
;
2770 opp_table
= _add_opp_table(dev
, true);
2771 if (IS_ERR(opp_table
))
2772 return PTR_ERR(opp_table
);
2774 /* Fix regulator count for dynamic OPPs */
2775 opp_table
->regulator_count
= 1;
2777 ret
= _opp_add_v1(opp_table
, dev
, data
, true);
2779 dev_pm_opp_put_opp_table(opp_table
);
2783 EXPORT_SYMBOL_GPL(dev_pm_opp_add_dynamic
);
2786 * _opp_set_availability() - helper to set the availability of an opp
2787 * @dev: device for which we do this operation
2788 * @freq: OPP frequency to modify availability
2789 * @availability_req: availability status requested for this opp
2791 * Set the availability of an OPP, opp_{enable,disable} share a common logic
2792 * which is isolated here.
2794 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the
2795 * copy operation, returns 0 if no modification was done OR modification was
2798 static int _opp_set_availability(struct device
*dev
, unsigned long freq
,
2799 bool availability_req
)
2801 struct opp_table
*opp_table
;
2802 struct dev_pm_opp
*tmp_opp
, *opp
= ERR_PTR(-ENODEV
);
2805 /* Find the opp_table */
2806 opp_table
= _find_opp_table(dev
);
2807 if (IS_ERR(opp_table
)) {
2808 r
= PTR_ERR(opp_table
);
2809 dev_warn(dev
, "%s: Device OPP not found (%d)\n", __func__
, r
);
2813 if (!assert_single_clk(opp_table
)) {
2818 mutex_lock(&opp_table
->lock
);
2820 /* Do we have the frequency? */
2821 list_for_each_entry(tmp_opp
, &opp_table
->opp_list
, node
) {
2822 if (tmp_opp
->rates
[0] == freq
) {
2833 /* Is update really needed? */
2834 if (opp
->available
== availability_req
)
2837 opp
->available
= availability_req
;
2839 dev_pm_opp_get(opp
);
2840 mutex_unlock(&opp_table
->lock
);
2842 /* Notify the change of the OPP availability */
2843 if (availability_req
)
2844 blocking_notifier_call_chain(&opp_table
->head
, OPP_EVENT_ENABLE
,
2847 blocking_notifier_call_chain(&opp_table
->head
,
2848 OPP_EVENT_DISABLE
, opp
);
2850 dev_pm_opp_put(opp
);
2854 mutex_unlock(&opp_table
->lock
);
2856 dev_pm_opp_put_opp_table(opp_table
);
2861 * dev_pm_opp_adjust_voltage() - helper to change the voltage of an OPP
2862 * @dev: device for which we do this operation
2863 * @freq: OPP frequency to adjust voltage of
2864 * @u_volt: new OPP target voltage
2865 * @u_volt_min: new OPP min voltage
2866 * @u_volt_max: new OPP max voltage
2868 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the
2869 * copy operation, returns 0 if no modifcation was done OR modification was
2872 int dev_pm_opp_adjust_voltage(struct device
*dev
, unsigned long freq
,
2873 unsigned long u_volt
, unsigned long u_volt_min
,
2874 unsigned long u_volt_max
)
2877 struct opp_table
*opp_table
;
2878 struct dev_pm_opp
*tmp_opp
, *opp
= ERR_PTR(-ENODEV
);
2881 /* Find the opp_table */
2882 opp_table
= _find_opp_table(dev
);
2883 if (IS_ERR(opp_table
)) {
2884 r
= PTR_ERR(opp_table
);
2885 dev_warn(dev
, "%s: Device OPP not found (%d)\n", __func__
, r
);
2889 if (!assert_single_clk(opp_table
)) {
2894 mutex_lock(&opp_table
->lock
);
2896 /* Do we have the frequency? */
2897 list_for_each_entry(tmp_opp
, &opp_table
->opp_list
, node
) {
2898 if (tmp_opp
->rates
[0] == freq
) {
2909 /* Is update really needed? */
2910 if (opp
->supplies
->u_volt
== u_volt
)
2913 opp
->supplies
->u_volt
= u_volt
;
2914 opp
->supplies
->u_volt_min
= u_volt_min
;
2915 opp
->supplies
->u_volt_max
= u_volt_max
;
2917 dev_pm_opp_get(opp
);
2918 mutex_unlock(&opp_table
->lock
);
2920 /* Notify the voltage change of the OPP */
2921 blocking_notifier_call_chain(&opp_table
->head
, OPP_EVENT_ADJUST_VOLTAGE
,
2924 dev_pm_opp_put(opp
);
2928 mutex_unlock(&opp_table
->lock
);
2930 dev_pm_opp_put_opp_table(opp_table
);
2933 EXPORT_SYMBOL_GPL(dev_pm_opp_adjust_voltage
);
2936 * dev_pm_opp_sync_regulators() - Sync state of voltage regulators
2937 * @dev: device for which we do this operation
2939 * Sync voltage state of the OPP table regulators.
2941 * Return: 0 on success or a negative error value.
2943 int dev_pm_opp_sync_regulators(struct device
*dev
)
2945 struct opp_table
*opp_table
;
2946 struct regulator
*reg
;
2949 /* Device may not have OPP table */
2950 opp_table
= _find_opp_table(dev
);
2951 if (IS_ERR(opp_table
))
2954 /* Regulator may not be required for the device */
2955 if (unlikely(!opp_table
->regulators
))
2958 /* Nothing to sync if voltage wasn't changed */
2959 if (!opp_table
->enabled
)
2962 for (i
= 0; i
< opp_table
->regulator_count
; i
++) {
2963 reg
= opp_table
->regulators
[i
];
2964 ret
= regulator_sync_voltage(reg
);
2969 /* Drop reference taken by _find_opp_table() */
2970 dev_pm_opp_put_opp_table(opp_table
);
2974 EXPORT_SYMBOL_GPL(dev_pm_opp_sync_regulators
);
2977 * dev_pm_opp_enable() - Enable a specific OPP
2978 * @dev: device for which we do this operation
2979 * @freq: OPP frequency to enable
2981 * Enables a provided opp. If the operation is valid, this returns 0, else the
2982 * corresponding error value. It is meant to be used for users an OPP available
2983 * after being temporarily made unavailable with dev_pm_opp_disable.
2985 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the
2986 * copy operation, returns 0 if no modification was done OR modification was
2989 int dev_pm_opp_enable(struct device
*dev
, unsigned long freq
)
2991 return _opp_set_availability(dev
, freq
, true);
2993 EXPORT_SYMBOL_GPL(dev_pm_opp_enable
);
2996 * dev_pm_opp_disable() - Disable a specific OPP
2997 * @dev: device for which we do this operation
2998 * @freq: OPP frequency to disable
3000 * Disables a provided opp. If the operation is valid, this returns
3001 * 0, else the corresponding error value. It is meant to be a temporary
3002 * control by users to make this OPP not available until the circumstances are
3003 * right to make it available again (with a call to dev_pm_opp_enable).
3005 * Return: -EINVAL for bad pointers, -ENOMEM if no memory available for the
3006 * copy operation, returns 0 if no modification was done OR modification was
3009 int dev_pm_opp_disable(struct device
*dev
, unsigned long freq
)
3011 return _opp_set_availability(dev
, freq
, false);
3013 EXPORT_SYMBOL_GPL(dev_pm_opp_disable
);
3016 * dev_pm_opp_register_notifier() - Register OPP notifier for the device
3017 * @dev: Device for which notifier needs to be registered
3018 * @nb: Notifier block to be registered
3020 * Return: 0 on success or a negative error value.
3022 int dev_pm_opp_register_notifier(struct device
*dev
, struct notifier_block
*nb
)
3024 struct opp_table
*opp_table
;
3027 opp_table
= _find_opp_table(dev
);
3028 if (IS_ERR(opp_table
))
3029 return PTR_ERR(opp_table
);
3031 ret
= blocking_notifier_chain_register(&opp_table
->head
, nb
);
3033 dev_pm_opp_put_opp_table(opp_table
);
3037 EXPORT_SYMBOL(dev_pm_opp_register_notifier
);
3040 * dev_pm_opp_unregister_notifier() - Unregister OPP notifier for the device
3041 * @dev: Device for which notifier needs to be unregistered
3042 * @nb: Notifier block to be unregistered
3044 * Return: 0 on success or a negative error value.
3046 int dev_pm_opp_unregister_notifier(struct device
*dev
,
3047 struct notifier_block
*nb
)
3049 struct opp_table
*opp_table
;
3052 opp_table
= _find_opp_table(dev
);
3053 if (IS_ERR(opp_table
))
3054 return PTR_ERR(opp_table
);
3056 ret
= blocking_notifier_chain_unregister(&opp_table
->head
, nb
);
3058 dev_pm_opp_put_opp_table(opp_table
);
3062 EXPORT_SYMBOL(dev_pm_opp_unregister_notifier
);
3065 * dev_pm_opp_remove_table() - Free all OPPs associated with the device
3066 * @dev: device pointer used to lookup OPP table.
3068 * Free both OPPs created using static entries present in DT and the
3069 * dynamically added entries.
3071 void dev_pm_opp_remove_table(struct device
*dev
)
3073 struct opp_table
*opp_table
;
3075 /* Check for existing table for 'dev' */
3076 opp_table
= _find_opp_table(dev
);
3077 if (IS_ERR(opp_table
)) {
3078 int error
= PTR_ERR(opp_table
);
3080 if (error
!= -ENODEV
)
3081 WARN(1, "%s: opp_table: %d\n",
3082 IS_ERR_OR_NULL(dev
) ?
3083 "Invalid device" : dev_name(dev
),
3089 * Drop the extra reference only if the OPP table was successfully added
3090 * with dev_pm_opp_of_add_table() earlier.
3092 if (_opp_remove_all_static(opp_table
))
3093 dev_pm_opp_put_opp_table(opp_table
);
3095 /* Drop reference taken by _find_opp_table() */
3096 dev_pm_opp_put_opp_table(opp_table
);
3098 EXPORT_SYMBOL_GPL(dev_pm_opp_remove_table
);