fanotify: disallow mount/sb marks on kernel internal pseudo fs
[sfrench/cifs-2.6.git] / drivers / opp / of.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Generic OPP OF helpers
4  *
5  * Copyright (C) 2009-2010 Texas Instruments Incorporated.
6  *      Nishanth Menon
7  *      Romit Dasgupta
8  *      Kevin Hilman
9  */
10
11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12
13 #include <linux/cpu.h>
14 #include <linux/errno.h>
15 #include <linux/device.h>
16 #include <linux/of.h>
17 #include <linux/pm_domain.h>
18 #include <linux/slab.h>
19 #include <linux/export.h>
20 #include <linux/energy_model.h>
21
22 #include "opp.h"
23
24 /*
25  * Returns opp descriptor node for a device node, caller must
26  * do of_node_put().
27  */
28 static struct device_node *_opp_of_get_opp_desc_node(struct device_node *np,
29                                                      int index)
30 {
31         /* "operating-points-v2" can be an array for power domain providers */
32         return of_parse_phandle(np, "operating-points-v2", index);
33 }
34
35 /* Returns opp descriptor node for a device, caller must do of_node_put() */
36 struct device_node *dev_pm_opp_of_get_opp_desc_node(struct device *dev)
37 {
38         return _opp_of_get_opp_desc_node(dev->of_node, 0);
39 }
40 EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_opp_desc_node);
41
42 struct opp_table *_managed_opp(struct device *dev, int index)
43 {
44         struct opp_table *opp_table, *managed_table = NULL;
45         struct device_node *np;
46
47         np = _opp_of_get_opp_desc_node(dev->of_node, index);
48         if (!np)
49                 return NULL;
50
51         list_for_each_entry(opp_table, &opp_tables, node) {
52                 if (opp_table->np == np) {
53                         /*
54                          * Multiple devices can point to the same OPP table and
55                          * so will have same node-pointer, np.
56                          *
57                          * But the OPPs will be considered as shared only if the
58                          * OPP table contains a "opp-shared" property.
59                          */
60                         if (opp_table->shared_opp == OPP_TABLE_ACCESS_SHARED) {
61                                 _get_opp_table_kref(opp_table);
62                                 managed_table = opp_table;
63                         }
64
65                         break;
66                 }
67         }
68
69         of_node_put(np);
70
71         return managed_table;
72 }
73
74 /* The caller must call dev_pm_opp_put() after the OPP is used */
75 static struct dev_pm_opp *_find_opp_of_np(struct opp_table *opp_table,
76                                           struct device_node *opp_np)
77 {
78         struct dev_pm_opp *opp;
79
80         mutex_lock(&opp_table->lock);
81
82         list_for_each_entry(opp, &opp_table->opp_list, node) {
83                 if (opp->np == opp_np) {
84                         dev_pm_opp_get(opp);
85                         mutex_unlock(&opp_table->lock);
86                         return opp;
87                 }
88         }
89
90         mutex_unlock(&opp_table->lock);
91
92         return NULL;
93 }
94
95 static struct device_node *of_parse_required_opp(struct device_node *np,
96                                                  int index)
97 {
98         return of_parse_phandle(np, "required-opps", index);
99 }
100
101 /* The caller must call dev_pm_opp_put_opp_table() after the table is used */
102 static struct opp_table *_find_table_of_opp_np(struct device_node *opp_np)
103 {
104         struct opp_table *opp_table;
105         struct device_node *opp_table_np;
106
107         opp_table_np = of_get_parent(opp_np);
108         if (!opp_table_np)
109                 goto err;
110
111         /* It is safe to put the node now as all we need now is its address */
112         of_node_put(opp_table_np);
113
114         mutex_lock(&opp_table_lock);
115         list_for_each_entry(opp_table, &opp_tables, node) {
116                 if (opp_table_np == opp_table->np) {
117                         _get_opp_table_kref(opp_table);
118                         mutex_unlock(&opp_table_lock);
119                         return opp_table;
120                 }
121         }
122         mutex_unlock(&opp_table_lock);
123
124 err:
125         return ERR_PTR(-ENODEV);
126 }
127
128 /* Free resources previously acquired by _opp_table_alloc_required_tables() */
129 static void _opp_table_free_required_tables(struct opp_table *opp_table)
130 {
131         struct opp_table **required_opp_tables = opp_table->required_opp_tables;
132         int i;
133
134         if (!required_opp_tables)
135                 return;
136
137         for (i = 0; i < opp_table->required_opp_count; i++) {
138                 if (IS_ERR_OR_NULL(required_opp_tables[i]))
139                         continue;
140
141                 dev_pm_opp_put_opp_table(required_opp_tables[i]);
142         }
143
144         kfree(required_opp_tables);
145
146         opp_table->required_opp_count = 0;
147         opp_table->required_opp_tables = NULL;
148         list_del(&opp_table->lazy);
149 }
150
151 /*
152  * Populate all devices and opp tables which are part of "required-opps" list.
153  * Checking only the first OPP node should be enough.
154  */
155 static void _opp_table_alloc_required_tables(struct opp_table *opp_table,
156                                              struct device *dev,
157                                              struct device_node *opp_np)
158 {
159         struct opp_table **required_opp_tables;
160         struct device_node *required_np, *np;
161         bool lazy = false;
162         int count, i;
163
164         /* Traversing the first OPP node is all we need */
165         np = of_get_next_available_child(opp_np, NULL);
166         if (!np) {
167                 dev_warn(dev, "Empty OPP table\n");
168
169                 return;
170         }
171
172         count = of_count_phandle_with_args(np, "required-opps", NULL);
173         if (count <= 0)
174                 goto put_np;
175
176         required_opp_tables = kcalloc(count, sizeof(*required_opp_tables),
177                                       GFP_KERNEL);
178         if (!required_opp_tables)
179                 goto put_np;
180
181         opp_table->required_opp_tables = required_opp_tables;
182         opp_table->required_opp_count = count;
183
184         for (i = 0; i < count; i++) {
185                 required_np = of_parse_required_opp(np, i);
186                 if (!required_np)
187                         goto free_required_tables;
188
189                 required_opp_tables[i] = _find_table_of_opp_np(required_np);
190                 of_node_put(required_np);
191
192                 if (IS_ERR(required_opp_tables[i]))
193                         lazy = true;
194         }
195
196         /* Let's do the linking later on */
197         if (lazy)
198                 list_add(&opp_table->lazy, &lazy_opp_tables);
199         else
200                 _update_set_required_opps(opp_table);
201
202         goto put_np;
203
204 free_required_tables:
205         _opp_table_free_required_tables(opp_table);
206 put_np:
207         of_node_put(np);
208 }
209
210 void _of_init_opp_table(struct opp_table *opp_table, struct device *dev,
211                         int index)
212 {
213         struct device_node *np, *opp_np;
214         u32 val;
215
216         /*
217          * Only required for backward compatibility with v1 bindings, but isn't
218          * harmful for other cases. And so we do it unconditionally.
219          */
220         np = of_node_get(dev->of_node);
221         if (!np)
222                 return;
223
224         if (!of_property_read_u32(np, "clock-latency", &val))
225                 opp_table->clock_latency_ns_max = val;
226         of_property_read_u32(np, "voltage-tolerance",
227                              &opp_table->voltage_tolerance_v1);
228
229         if (of_property_present(np, "#power-domain-cells"))
230                 opp_table->is_genpd = true;
231
232         /* Get OPP table node */
233         opp_np = _opp_of_get_opp_desc_node(np, index);
234         of_node_put(np);
235
236         if (!opp_np)
237                 return;
238
239         if (of_property_read_bool(opp_np, "opp-shared"))
240                 opp_table->shared_opp = OPP_TABLE_ACCESS_SHARED;
241         else
242                 opp_table->shared_opp = OPP_TABLE_ACCESS_EXCLUSIVE;
243
244         opp_table->np = opp_np;
245
246         _opp_table_alloc_required_tables(opp_table, dev, opp_np);
247 }
248
249 void _of_clear_opp_table(struct opp_table *opp_table)
250 {
251         _opp_table_free_required_tables(opp_table);
252         of_node_put(opp_table->np);
253 }
254
255 /*
256  * Release all resources previously acquired with a call to
257  * _of_opp_alloc_required_opps().
258  */
259 static void _of_opp_free_required_opps(struct opp_table *opp_table,
260                                        struct dev_pm_opp *opp)
261 {
262         struct dev_pm_opp **required_opps = opp->required_opps;
263         int i;
264
265         if (!required_opps)
266                 return;
267
268         for (i = 0; i < opp_table->required_opp_count; i++) {
269                 if (!required_opps[i])
270                         continue;
271
272                 /* Put the reference back */
273                 dev_pm_opp_put(required_opps[i]);
274         }
275
276         opp->required_opps = NULL;
277         kfree(required_opps);
278 }
279
280 void _of_clear_opp(struct opp_table *opp_table, struct dev_pm_opp *opp)
281 {
282         _of_opp_free_required_opps(opp_table, opp);
283         of_node_put(opp->np);
284 }
285
286 /* Populate all required OPPs which are part of "required-opps" list */
287 static int _of_opp_alloc_required_opps(struct opp_table *opp_table,
288                                        struct dev_pm_opp *opp)
289 {
290         struct dev_pm_opp **required_opps;
291         struct opp_table *required_table;
292         struct device_node *np;
293         int i, ret, count = opp_table->required_opp_count;
294
295         if (!count)
296                 return 0;
297
298         required_opps = kcalloc(count, sizeof(*required_opps), GFP_KERNEL);
299         if (!required_opps)
300                 return -ENOMEM;
301
302         opp->required_opps = required_opps;
303
304         for (i = 0; i < count; i++) {
305                 required_table = opp_table->required_opp_tables[i];
306
307                 /* Required table not added yet, we will link later */
308                 if (IS_ERR_OR_NULL(required_table))
309                         continue;
310
311                 np = of_parse_required_opp(opp->np, i);
312                 if (unlikely(!np)) {
313                         ret = -ENODEV;
314                         goto free_required_opps;
315                 }
316
317                 required_opps[i] = _find_opp_of_np(required_table, np);
318                 of_node_put(np);
319
320                 if (!required_opps[i]) {
321                         pr_err("%s: Unable to find required OPP node: %pOF (%d)\n",
322                                __func__, opp->np, i);
323                         ret = -ENODEV;
324                         goto free_required_opps;
325                 }
326         }
327
328         return 0;
329
330 free_required_opps:
331         _of_opp_free_required_opps(opp_table, opp);
332
333         return ret;
334 }
335
336 /* Link required OPPs for an individual OPP */
337 static int lazy_link_required_opps(struct opp_table *opp_table,
338                                    struct opp_table *new_table, int index)
339 {
340         struct device_node *required_np;
341         struct dev_pm_opp *opp;
342
343         list_for_each_entry(opp, &opp_table->opp_list, node) {
344                 required_np = of_parse_required_opp(opp->np, index);
345                 if (unlikely(!required_np))
346                         return -ENODEV;
347
348                 opp->required_opps[index] = _find_opp_of_np(new_table, required_np);
349                 of_node_put(required_np);
350
351                 if (!opp->required_opps[index]) {
352                         pr_err("%s: Unable to find required OPP node: %pOF (%d)\n",
353                                __func__, opp->np, index);
354                         return -ENODEV;
355                 }
356         }
357
358         return 0;
359 }
360
361 /* Link required OPPs for all OPPs of the newly added OPP table */
362 static void lazy_link_required_opp_table(struct opp_table *new_table)
363 {
364         struct opp_table *opp_table, *temp, **required_opp_tables;
365         struct device_node *required_np, *opp_np, *required_table_np;
366         struct dev_pm_opp *opp;
367         int i, ret;
368
369         mutex_lock(&opp_table_lock);
370
371         list_for_each_entry_safe(opp_table, temp, &lazy_opp_tables, lazy) {
372                 bool lazy = false;
373
374                 /* opp_np can't be invalid here */
375                 opp_np = of_get_next_available_child(opp_table->np, NULL);
376
377                 for (i = 0; i < opp_table->required_opp_count; i++) {
378                         required_opp_tables = opp_table->required_opp_tables;
379
380                         /* Required opp-table is already parsed */
381                         if (!IS_ERR(required_opp_tables[i]))
382                                 continue;
383
384                         /* required_np can't be invalid here */
385                         required_np = of_parse_required_opp(opp_np, i);
386                         required_table_np = of_get_parent(required_np);
387
388                         of_node_put(required_table_np);
389                         of_node_put(required_np);
390
391                         /*
392                          * Newly added table isn't the required opp-table for
393                          * opp_table.
394                          */
395                         if (required_table_np != new_table->np) {
396                                 lazy = true;
397                                 continue;
398                         }
399
400                         required_opp_tables[i] = new_table;
401                         _get_opp_table_kref(new_table);
402
403                         /* Link OPPs now */
404                         ret = lazy_link_required_opps(opp_table, new_table, i);
405                         if (ret) {
406                                 /* The OPPs will be marked unusable */
407                                 lazy = false;
408                                 break;
409                         }
410                 }
411
412                 of_node_put(opp_np);
413
414                 /* All required opp-tables found, remove from lazy list */
415                 if (!lazy) {
416                         _update_set_required_opps(opp_table);
417                         list_del_init(&opp_table->lazy);
418
419                         list_for_each_entry(opp, &opp_table->opp_list, node)
420                                 _required_opps_available(opp, opp_table->required_opp_count);
421                 }
422         }
423
424         mutex_unlock(&opp_table_lock);
425 }
426
427 static int _bandwidth_supported(struct device *dev, struct opp_table *opp_table)
428 {
429         struct device_node *np, *opp_np;
430         struct property *prop;
431
432         if (!opp_table) {
433                 np = of_node_get(dev->of_node);
434                 if (!np)
435                         return -ENODEV;
436
437                 opp_np = _opp_of_get_opp_desc_node(np, 0);
438                 of_node_put(np);
439         } else {
440                 opp_np = of_node_get(opp_table->np);
441         }
442
443         /* Lets not fail in case we are parsing opp-v1 bindings */
444         if (!opp_np)
445                 return 0;
446
447         /* Checking only first OPP is sufficient */
448         np = of_get_next_available_child(opp_np, NULL);
449         of_node_put(opp_np);
450         if (!np) {
451                 dev_err(dev, "OPP table empty\n");
452                 return -EINVAL;
453         }
454
455         prop = of_find_property(np, "opp-peak-kBps", NULL);
456         of_node_put(np);
457
458         if (!prop || !prop->length)
459                 return 0;
460
461         return 1;
462 }
463
464 int dev_pm_opp_of_find_icc_paths(struct device *dev,
465                                  struct opp_table *opp_table)
466 {
467         struct device_node *np;
468         int ret, i, count, num_paths;
469         struct icc_path **paths;
470
471         ret = _bandwidth_supported(dev, opp_table);
472         if (ret == -EINVAL)
473                 return 0; /* Empty OPP table is a valid corner-case, let's not fail */
474         else if (ret <= 0)
475                 return ret;
476
477         ret = 0;
478
479         np = of_node_get(dev->of_node);
480         if (!np)
481                 return 0;
482
483         count = of_count_phandle_with_args(np, "interconnects",
484                                            "#interconnect-cells");
485         of_node_put(np);
486         if (count < 0)
487                 return 0;
488
489         /* two phandles when #interconnect-cells = <1> */
490         if (count % 2) {
491                 dev_err(dev, "%s: Invalid interconnects values\n", __func__);
492                 return -EINVAL;
493         }
494
495         num_paths = count / 2;
496         paths = kcalloc(num_paths, sizeof(*paths), GFP_KERNEL);
497         if (!paths)
498                 return -ENOMEM;
499
500         for (i = 0; i < num_paths; i++) {
501                 paths[i] = of_icc_get_by_index(dev, i);
502                 if (IS_ERR(paths[i])) {
503                         ret = PTR_ERR(paths[i]);
504                         if (ret != -EPROBE_DEFER) {
505                                 dev_err(dev, "%s: Unable to get path%d: %d\n",
506                                         __func__, i, ret);
507                         }
508                         goto err;
509                 }
510         }
511
512         if (opp_table) {
513                 opp_table->paths = paths;
514                 opp_table->path_count = num_paths;
515                 return 0;
516         }
517
518 err:
519         while (i--)
520                 icc_put(paths[i]);
521
522         kfree(paths);
523
524         return ret;
525 }
526 EXPORT_SYMBOL_GPL(dev_pm_opp_of_find_icc_paths);
527
528 static bool _opp_is_supported(struct device *dev, struct opp_table *opp_table,
529                               struct device_node *np)
530 {
531         unsigned int levels = opp_table->supported_hw_count;
532         int count, versions, ret, i, j;
533         u32 val;
534
535         if (!opp_table->supported_hw) {
536                 /*
537                  * In the case that no supported_hw has been set by the
538                  * platform but there is an opp-supported-hw value set for
539                  * an OPP then the OPP should not be enabled as there is
540                  * no way to see if the hardware supports it.
541                  */
542                 if (of_property_present(np, "opp-supported-hw"))
543                         return false;
544                 else
545                         return true;
546         }
547
548         count = of_property_count_u32_elems(np, "opp-supported-hw");
549         if (count <= 0 || count % levels) {
550                 dev_err(dev, "%s: Invalid opp-supported-hw property (%d)\n",
551                         __func__, count);
552                 return false;
553         }
554
555         versions = count / levels;
556
557         /* All levels in at least one of the versions should match */
558         for (i = 0; i < versions; i++) {
559                 bool supported = true;
560
561                 for (j = 0; j < levels; j++) {
562                         ret = of_property_read_u32_index(np, "opp-supported-hw",
563                                                          i * levels + j, &val);
564                         if (ret) {
565                                 dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n",
566                                          __func__, i * levels + j, ret);
567                                 return false;
568                         }
569
570                         /* Check if the level is supported */
571                         if (!(val & opp_table->supported_hw[j])) {
572                                 supported = false;
573                                 break;
574                         }
575                 }
576
577                 if (supported)
578                         return true;
579         }
580
581         return false;
582 }
583
584 static u32 *_parse_named_prop(struct dev_pm_opp *opp, struct device *dev,
585                               struct opp_table *opp_table,
586                               const char *prop_type, bool *triplet)
587 {
588         struct property *prop = NULL;
589         char name[NAME_MAX];
590         int count, ret;
591         u32 *out;
592
593         /* Search for "opp-<prop_type>-<name>" */
594         if (opp_table->prop_name) {
595                 snprintf(name, sizeof(name), "opp-%s-%s", prop_type,
596                          opp_table->prop_name);
597                 prop = of_find_property(opp->np, name, NULL);
598         }
599
600         if (!prop) {
601                 /* Search for "opp-<prop_type>" */
602                 snprintf(name, sizeof(name), "opp-%s", prop_type);
603                 prop = of_find_property(opp->np, name, NULL);
604                 if (!prop)
605                         return NULL;
606         }
607
608         count = of_property_count_u32_elems(opp->np, name);
609         if (count < 0) {
610                 dev_err(dev, "%s: Invalid %s property (%d)\n", __func__, name,
611                         count);
612                 return ERR_PTR(count);
613         }
614
615         /*
616          * Initialize regulator_count, if regulator information isn't provided
617          * by the platform. Now that one of the properties is available, fix the
618          * regulator_count to 1.
619          */
620         if (unlikely(opp_table->regulator_count == -1))
621                 opp_table->regulator_count = 1;
622
623         if (count != opp_table->regulator_count &&
624             (!triplet || count != opp_table->regulator_count * 3)) {
625                 dev_err(dev, "%s: Invalid number of elements in %s property (%u) with supplies (%d)\n",
626                         __func__, prop_type, count, opp_table->regulator_count);
627                 return ERR_PTR(-EINVAL);
628         }
629
630         out = kmalloc_array(count, sizeof(*out), GFP_KERNEL);
631         if (!out)
632                 return ERR_PTR(-EINVAL);
633
634         ret = of_property_read_u32_array(opp->np, name, out, count);
635         if (ret) {
636                 dev_err(dev, "%s: error parsing %s: %d\n", __func__, name, ret);
637                 kfree(out);
638                 return ERR_PTR(-EINVAL);
639         }
640
641         if (triplet)
642                 *triplet = count != opp_table->regulator_count;
643
644         return out;
645 }
646
647 static u32 *opp_parse_microvolt(struct dev_pm_opp *opp, struct device *dev,
648                                 struct opp_table *opp_table, bool *triplet)
649 {
650         u32 *microvolt;
651
652         microvolt = _parse_named_prop(opp, dev, opp_table, "microvolt", triplet);
653         if (IS_ERR(microvolt))
654                 return microvolt;
655
656         if (!microvolt) {
657                 /*
658                  * Missing property isn't a problem, but an invalid
659                  * entry is. This property isn't optional if regulator
660                  * information is provided. Check only for the first OPP, as
661                  * regulator_count may get initialized after that to a valid
662                  * value.
663                  */
664                 if (list_empty(&opp_table->opp_list) &&
665                     opp_table->regulator_count > 0) {
666                         dev_err(dev, "%s: opp-microvolt missing although OPP managing regulators\n",
667                                 __func__);
668                         return ERR_PTR(-EINVAL);
669                 }
670         }
671
672         return microvolt;
673 }
674
675 static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
676                               struct opp_table *opp_table)
677 {
678         u32 *microvolt, *microamp, *microwatt;
679         int ret = 0, i, j;
680         bool triplet;
681
682         microvolt = opp_parse_microvolt(opp, dev, opp_table, &triplet);
683         if (IS_ERR(microvolt))
684                 return PTR_ERR(microvolt);
685
686         microamp = _parse_named_prop(opp, dev, opp_table, "microamp", NULL);
687         if (IS_ERR(microamp)) {
688                 ret = PTR_ERR(microamp);
689                 goto free_microvolt;
690         }
691
692         microwatt = _parse_named_prop(opp, dev, opp_table, "microwatt", NULL);
693         if (IS_ERR(microwatt)) {
694                 ret = PTR_ERR(microwatt);
695                 goto free_microamp;
696         }
697
698         /*
699          * Initialize regulator_count if it is uninitialized and no properties
700          * are found.
701          */
702         if (unlikely(opp_table->regulator_count == -1)) {
703                 opp_table->regulator_count = 0;
704                 return 0;
705         }
706
707         for (i = 0, j = 0; i < opp_table->regulator_count; i++) {
708                 if (microvolt) {
709                         opp->supplies[i].u_volt = microvolt[j++];
710
711                         if (triplet) {
712                                 opp->supplies[i].u_volt_min = microvolt[j++];
713                                 opp->supplies[i].u_volt_max = microvolt[j++];
714                         } else {
715                                 opp->supplies[i].u_volt_min = opp->supplies[i].u_volt;
716                                 opp->supplies[i].u_volt_max = opp->supplies[i].u_volt;
717                         }
718                 }
719
720                 if (microamp)
721                         opp->supplies[i].u_amp = microamp[i];
722
723                 if (microwatt)
724                         opp->supplies[i].u_watt = microwatt[i];
725         }
726
727         kfree(microwatt);
728 free_microamp:
729         kfree(microamp);
730 free_microvolt:
731         kfree(microvolt);
732
733         return ret;
734 }
735
736 /**
737  * dev_pm_opp_of_remove_table() - Free OPP table entries created from static DT
738  *                                entries
739  * @dev:        device pointer used to lookup OPP table.
740  *
741  * Free OPPs created using static entries present in DT.
742  */
743 void dev_pm_opp_of_remove_table(struct device *dev)
744 {
745         dev_pm_opp_remove_table(dev);
746 }
747 EXPORT_SYMBOL_GPL(dev_pm_opp_of_remove_table);
748
749 static int _read_rate(struct dev_pm_opp *new_opp, struct opp_table *opp_table,
750                       struct device_node *np)
751 {
752         struct property *prop;
753         int i, count, ret;
754         u64 *rates;
755
756         prop = of_find_property(np, "opp-hz", NULL);
757         if (!prop)
758                 return -ENODEV;
759
760         count = prop->length / sizeof(u64);
761         if (opp_table->clk_count != count) {
762                 pr_err("%s: Count mismatch between opp-hz and clk_count (%d %d)\n",
763                        __func__, count, opp_table->clk_count);
764                 return -EINVAL;
765         }
766
767         rates = kmalloc_array(count, sizeof(*rates), GFP_KERNEL);
768         if (!rates)
769                 return -ENOMEM;
770
771         ret = of_property_read_u64_array(np, "opp-hz", rates, count);
772         if (ret) {
773                 pr_err("%s: Error parsing opp-hz: %d\n", __func__, ret);
774         } else {
775                 /*
776                  * Rate is defined as an unsigned long in clk API, and so
777                  * casting explicitly to its type. Must be fixed once rate is 64
778                  * bit guaranteed in clk API.
779                  */
780                 for (i = 0; i < count; i++) {
781                         new_opp->rates[i] = (unsigned long)rates[i];
782
783                         /* This will happen for frequencies > 4.29 GHz */
784                         WARN_ON(new_opp->rates[i] != rates[i]);
785                 }
786         }
787
788         kfree(rates);
789
790         return ret;
791 }
792
793 static int _read_bw(struct dev_pm_opp *new_opp, struct opp_table *opp_table,
794                     struct device_node *np, bool peak)
795 {
796         const char *name = peak ? "opp-peak-kBps" : "opp-avg-kBps";
797         struct property *prop;
798         int i, count, ret;
799         u32 *bw;
800
801         prop = of_find_property(np, name, NULL);
802         if (!prop)
803                 return -ENODEV;
804
805         count = prop->length / sizeof(u32);
806         if (opp_table->path_count != count) {
807                 pr_err("%s: Mismatch between %s and paths (%d %d)\n",
808                                 __func__, name, count, opp_table->path_count);
809                 return -EINVAL;
810         }
811
812         bw = kmalloc_array(count, sizeof(*bw), GFP_KERNEL);
813         if (!bw)
814                 return -ENOMEM;
815
816         ret = of_property_read_u32_array(np, name, bw, count);
817         if (ret) {
818                 pr_err("%s: Error parsing %s: %d\n", __func__, name, ret);
819                 goto out;
820         }
821
822         for (i = 0; i < count; i++) {
823                 if (peak)
824                         new_opp->bandwidth[i].peak = kBps_to_icc(bw[i]);
825                 else
826                         new_opp->bandwidth[i].avg = kBps_to_icc(bw[i]);
827         }
828
829 out:
830         kfree(bw);
831         return ret;
832 }
833
834 static int _read_opp_key(struct dev_pm_opp *new_opp,
835                          struct opp_table *opp_table, struct device_node *np)
836 {
837         bool found = false;
838         int ret;
839
840         ret = _read_rate(new_opp, opp_table, np);
841         if (!ret)
842                 found = true;
843         else if (ret != -ENODEV)
844                 return ret;
845
846         /*
847          * Bandwidth consists of peak and average (optional) values:
848          * opp-peak-kBps = <path1_value path2_value>;
849          * opp-avg-kBps = <path1_value path2_value>;
850          */
851         ret = _read_bw(new_opp, opp_table, np, true);
852         if (!ret) {
853                 found = true;
854                 ret = _read_bw(new_opp, opp_table, np, false);
855         }
856
857         /* The properties were found but we failed to parse them */
858         if (ret && ret != -ENODEV)
859                 return ret;
860
861         if (!of_property_read_u32(np, "opp-level", &new_opp->level))
862                 found = true;
863
864         if (found)
865                 return 0;
866
867         return ret;
868 }
869
870 /**
871  * _opp_add_static_v2() - Allocate static OPPs (As per 'v2' DT bindings)
872  * @opp_table:  OPP table
873  * @dev:        device for which we do this operation
874  * @np:         device node
875  *
876  * This function adds an opp definition to the opp table and returns status. The
877  * opp can be controlled using dev_pm_opp_enable/disable functions and may be
878  * removed by dev_pm_opp_remove.
879  *
880  * Return:
881  * Valid OPP pointer:
882  *              On success
883  * NULL:
884  *              Duplicate OPPs (both freq and volt are same) and opp->available
885  *              OR if the OPP is not supported by hardware.
886  * ERR_PTR(-EEXIST):
887  *              Freq are same and volt are different OR
888  *              Duplicate OPPs (both freq and volt are same) and !opp->available
889  * ERR_PTR(-ENOMEM):
890  *              Memory allocation failure
891  * ERR_PTR(-EINVAL):
892  *              Failed parsing the OPP node
893  */
894 static struct dev_pm_opp *_opp_add_static_v2(struct opp_table *opp_table,
895                 struct device *dev, struct device_node *np)
896 {
897         struct dev_pm_opp *new_opp;
898         u32 val;
899         int ret;
900
901         new_opp = _opp_allocate(opp_table);
902         if (!new_opp)
903                 return ERR_PTR(-ENOMEM);
904
905         ret = _read_opp_key(new_opp, opp_table, np);
906         if (ret < 0) {
907                 dev_err(dev, "%s: opp key field not found\n", __func__);
908                 goto free_opp;
909         }
910
911         /* Check if the OPP supports hardware's hierarchy of versions or not */
912         if (!_opp_is_supported(dev, opp_table, np)) {
913                 dev_dbg(dev, "OPP not supported by hardware: %s\n",
914                         of_node_full_name(np));
915                 goto free_opp;
916         }
917
918         new_opp->turbo = of_property_read_bool(np, "turbo-mode");
919
920         new_opp->np = of_node_get(np);
921         new_opp->dynamic = false;
922         new_opp->available = true;
923
924         ret = _of_opp_alloc_required_opps(opp_table, new_opp);
925         if (ret)
926                 goto free_opp;
927
928         if (!of_property_read_u32(np, "clock-latency-ns", &val))
929                 new_opp->clock_latency_ns = val;
930
931         ret = opp_parse_supplies(new_opp, dev, opp_table);
932         if (ret)
933                 goto free_required_opps;
934
935         if (opp_table->is_genpd)
936                 new_opp->pstate = pm_genpd_opp_to_performance_state(dev, new_opp);
937
938         ret = _opp_add(dev, new_opp, opp_table);
939         if (ret) {
940                 /* Don't return error for duplicate OPPs */
941                 if (ret == -EBUSY)
942                         ret = 0;
943                 goto free_required_opps;
944         }
945
946         /* OPP to select on device suspend */
947         if (of_property_read_bool(np, "opp-suspend")) {
948                 if (opp_table->suspend_opp) {
949                         /* Pick the OPP with higher rate/bw/level as suspend OPP */
950                         if (_opp_compare_key(opp_table, new_opp, opp_table->suspend_opp) == 1) {
951                                 opp_table->suspend_opp->suspend = false;
952                                 new_opp->suspend = true;
953                                 opp_table->suspend_opp = new_opp;
954                         }
955                 } else {
956                         new_opp->suspend = true;
957                         opp_table->suspend_opp = new_opp;
958                 }
959         }
960
961         if (new_opp->clock_latency_ns > opp_table->clock_latency_ns_max)
962                 opp_table->clock_latency_ns_max = new_opp->clock_latency_ns;
963
964         pr_debug("%s: turbo:%d rate:%lu uv:%lu uvmin:%lu uvmax:%lu latency:%lu level:%u\n",
965                  __func__, new_opp->turbo, new_opp->rates[0],
966                  new_opp->supplies[0].u_volt, new_opp->supplies[0].u_volt_min,
967                  new_opp->supplies[0].u_volt_max, new_opp->clock_latency_ns,
968                  new_opp->level);
969
970         /*
971          * Notify the changes in the availability of the operable
972          * frequency/voltage list.
973          */
974         blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_ADD, new_opp);
975         return new_opp;
976
977 free_required_opps:
978         _of_opp_free_required_opps(opp_table, new_opp);
979 free_opp:
980         _opp_free(new_opp);
981
982         return ret ? ERR_PTR(ret) : NULL;
983 }
984
985 /* Initializes OPP tables based on new bindings */
986 static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table)
987 {
988         struct device_node *np;
989         int ret, count = 0;
990         struct dev_pm_opp *opp;
991
992         /* OPP table is already initialized for the device */
993         mutex_lock(&opp_table->lock);
994         if (opp_table->parsed_static_opps) {
995                 opp_table->parsed_static_opps++;
996                 mutex_unlock(&opp_table->lock);
997                 return 0;
998         }
999
1000         opp_table->parsed_static_opps = 1;
1001         mutex_unlock(&opp_table->lock);
1002
1003         /* We have opp-table node now, iterate over it and add OPPs */
1004         for_each_available_child_of_node(opp_table->np, np) {
1005                 opp = _opp_add_static_v2(opp_table, dev, np);
1006                 if (IS_ERR(opp)) {
1007                         ret = PTR_ERR(opp);
1008                         dev_err(dev, "%s: Failed to add OPP, %d\n", __func__,
1009                                 ret);
1010                         of_node_put(np);
1011                         goto remove_static_opp;
1012                 } else if (opp) {
1013                         count++;
1014                 }
1015         }
1016
1017         /* There should be one or more OPPs defined */
1018         if (!count) {
1019                 dev_err(dev, "%s: no supported OPPs", __func__);
1020                 ret = -ENOENT;
1021                 goto remove_static_opp;
1022         }
1023
1024         list_for_each_entry(opp, &opp_table->opp_list, node) {
1025                 /* Any non-zero performance state would enable the feature */
1026                 if (opp->pstate) {
1027                         opp_table->genpd_performance_state = true;
1028                         break;
1029                 }
1030         }
1031
1032         lazy_link_required_opp_table(opp_table);
1033
1034         return 0;
1035
1036 remove_static_opp:
1037         _opp_remove_all_static(opp_table);
1038
1039         return ret;
1040 }
1041
1042 /* Initializes OPP tables based on old-deprecated bindings */
1043 static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table)
1044 {
1045         const struct property *prop;
1046         const __be32 *val;
1047         int nr, ret = 0;
1048
1049         mutex_lock(&opp_table->lock);
1050         if (opp_table->parsed_static_opps) {
1051                 opp_table->parsed_static_opps++;
1052                 mutex_unlock(&opp_table->lock);
1053                 return 0;
1054         }
1055
1056         opp_table->parsed_static_opps = 1;
1057         mutex_unlock(&opp_table->lock);
1058
1059         prop = of_find_property(dev->of_node, "operating-points", NULL);
1060         if (!prop) {
1061                 ret = -ENODEV;
1062                 goto remove_static_opp;
1063         }
1064         if (!prop->value) {
1065                 ret = -ENODATA;
1066                 goto remove_static_opp;
1067         }
1068
1069         /*
1070          * Each OPP is a set of tuples consisting of frequency and
1071          * voltage like <freq-kHz vol-uV>.
1072          */
1073         nr = prop->length / sizeof(u32);
1074         if (nr % 2) {
1075                 dev_err(dev, "%s: Invalid OPP table\n", __func__);
1076                 ret = -EINVAL;
1077                 goto remove_static_opp;
1078         }
1079
1080         val = prop->value;
1081         while (nr) {
1082                 unsigned long freq = be32_to_cpup(val++) * 1000;
1083                 unsigned long volt = be32_to_cpup(val++);
1084
1085                 ret = _opp_add_v1(opp_table, dev, freq, volt, false);
1086                 if (ret) {
1087                         dev_err(dev, "%s: Failed to add OPP %ld (%d)\n",
1088                                 __func__, freq, ret);
1089                         goto remove_static_opp;
1090                 }
1091                 nr -= 2;
1092         }
1093
1094         return 0;
1095
1096 remove_static_opp:
1097         _opp_remove_all_static(opp_table);
1098
1099         return ret;
1100 }
1101
1102 static int _of_add_table_indexed(struct device *dev, int index)
1103 {
1104         struct opp_table *opp_table;
1105         int ret, count;
1106
1107         if (index) {
1108                 /*
1109                  * If only one phandle is present, then the same OPP table
1110                  * applies for all index requests.
1111                  */
1112                 count = of_count_phandle_with_args(dev->of_node,
1113                                                    "operating-points-v2", NULL);
1114                 if (count == 1)
1115                         index = 0;
1116         }
1117
1118         opp_table = _add_opp_table_indexed(dev, index, true);
1119         if (IS_ERR(opp_table))
1120                 return PTR_ERR(opp_table);
1121
1122         /*
1123          * OPPs have two version of bindings now. Also try the old (v1)
1124          * bindings for backward compatibility with older dtbs.
1125          */
1126         if (opp_table->np)
1127                 ret = _of_add_opp_table_v2(dev, opp_table);
1128         else
1129                 ret = _of_add_opp_table_v1(dev, opp_table);
1130
1131         if (ret)
1132                 dev_pm_opp_put_opp_table(opp_table);
1133
1134         return ret;
1135 }
1136
1137 static void devm_pm_opp_of_table_release(void *data)
1138 {
1139         dev_pm_opp_of_remove_table(data);
1140 }
1141
1142 static int _devm_of_add_table_indexed(struct device *dev, int index)
1143 {
1144         int ret;
1145
1146         ret = _of_add_table_indexed(dev, index);
1147         if (ret)
1148                 return ret;
1149
1150         return devm_add_action_or_reset(dev, devm_pm_opp_of_table_release, dev);
1151 }
1152
1153 /**
1154  * devm_pm_opp_of_add_table() - Initialize opp table from device tree
1155  * @dev:        device pointer used to lookup OPP table.
1156  *
1157  * Register the initial OPP table with the OPP library for given device.
1158  *
1159  * The opp_table structure will be freed after the device is destroyed.
1160  *
1161  * Return:
1162  * 0            On success OR
1163  *              Duplicate OPPs (both freq and volt are same) and opp->available
1164  * -EEXIST      Freq are same and volt are different OR
1165  *              Duplicate OPPs (both freq and volt are same) and !opp->available
1166  * -ENOMEM      Memory allocation failure
1167  * -ENODEV      when 'operating-points' property is not found or is invalid data
1168  *              in device node.
1169  * -ENODATA     when empty 'operating-points' property is found
1170  * -EINVAL      when invalid entries are found in opp-v2 table
1171  */
1172 int devm_pm_opp_of_add_table(struct device *dev)
1173 {
1174         return _devm_of_add_table_indexed(dev, 0);
1175 }
1176 EXPORT_SYMBOL_GPL(devm_pm_opp_of_add_table);
1177
1178 /**
1179  * dev_pm_opp_of_add_table() - Initialize opp table from device tree
1180  * @dev:        device pointer used to lookup OPP table.
1181  *
1182  * Register the initial OPP table with the OPP library for given device.
1183  *
1184  * Return:
1185  * 0            On success OR
1186  *              Duplicate OPPs (both freq and volt are same) and opp->available
1187  * -EEXIST      Freq are same and volt are different OR
1188  *              Duplicate OPPs (both freq and volt are same) and !opp->available
1189  * -ENOMEM      Memory allocation failure
1190  * -ENODEV      when 'operating-points' property is not found or is invalid data
1191  *              in device node.
1192  * -ENODATA     when empty 'operating-points' property is found
1193  * -EINVAL      when invalid entries are found in opp-v2 table
1194  */
1195 int dev_pm_opp_of_add_table(struct device *dev)
1196 {
1197         return _of_add_table_indexed(dev, 0);
1198 }
1199 EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table);
1200
1201 /**
1202  * dev_pm_opp_of_add_table_indexed() - Initialize indexed opp table from device tree
1203  * @dev:        device pointer used to lookup OPP table.
1204  * @index:      Index number.
1205  *
1206  * Register the initial OPP table with the OPP library for given device only
1207  * using the "operating-points-v2" property.
1208  *
1209  * Return: Refer to dev_pm_opp_of_add_table() for return values.
1210  */
1211 int dev_pm_opp_of_add_table_indexed(struct device *dev, int index)
1212 {
1213         return _of_add_table_indexed(dev, index);
1214 }
1215 EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table_indexed);
1216
1217 /**
1218  * devm_pm_opp_of_add_table_indexed() - Initialize indexed opp table from device tree
1219  * @dev:        device pointer used to lookup OPP table.
1220  * @index:      Index number.
1221  *
1222  * This is a resource-managed variant of dev_pm_opp_of_add_table_indexed().
1223  */
1224 int devm_pm_opp_of_add_table_indexed(struct device *dev, int index)
1225 {
1226         return _devm_of_add_table_indexed(dev, index);
1227 }
1228 EXPORT_SYMBOL_GPL(devm_pm_opp_of_add_table_indexed);
1229
1230 /* CPU device specific helpers */
1231
1232 /**
1233  * dev_pm_opp_of_cpumask_remove_table() - Removes OPP table for @cpumask
1234  * @cpumask:    cpumask for which OPP table needs to be removed
1235  *
1236  * This removes the OPP tables for CPUs present in the @cpumask.
1237  * This should be used only to remove static entries created from DT.
1238  */
1239 void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask)
1240 {
1241         _dev_pm_opp_cpumask_remove_table(cpumask, -1);
1242 }
1243 EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_remove_table);
1244
1245 /**
1246  * dev_pm_opp_of_cpumask_add_table() - Adds OPP table for @cpumask
1247  * @cpumask:    cpumask for which OPP table needs to be added.
1248  *
1249  * This adds the OPP tables for CPUs present in the @cpumask.
1250  */
1251 int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
1252 {
1253         struct device *cpu_dev;
1254         int cpu, ret;
1255
1256         if (WARN_ON(cpumask_empty(cpumask)))
1257                 return -ENODEV;
1258
1259         for_each_cpu(cpu, cpumask) {
1260                 cpu_dev = get_cpu_device(cpu);
1261                 if (!cpu_dev) {
1262                         pr_err("%s: failed to get cpu%d device\n", __func__,
1263                                cpu);
1264                         ret = -ENODEV;
1265                         goto remove_table;
1266                 }
1267
1268                 ret = dev_pm_opp_of_add_table(cpu_dev);
1269                 if (ret) {
1270                         /*
1271                          * OPP may get registered dynamically, don't print error
1272                          * message here.
1273                          */
1274                         pr_debug("%s: couldn't find opp table for cpu:%d, %d\n",
1275                                  __func__, cpu, ret);
1276
1277                         goto remove_table;
1278                 }
1279         }
1280
1281         return 0;
1282
1283 remove_table:
1284         /* Free all other OPPs */
1285         _dev_pm_opp_cpumask_remove_table(cpumask, cpu);
1286
1287         return ret;
1288 }
1289 EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_add_table);
1290
1291 /*
1292  * Works only for OPP v2 bindings.
1293  *
1294  * Returns -ENOENT if operating-points-v2 bindings aren't supported.
1295  */
1296 /**
1297  * dev_pm_opp_of_get_sharing_cpus() - Get cpumask of CPUs sharing OPPs with
1298  *                                    @cpu_dev using operating-points-v2
1299  *                                    bindings.
1300  *
1301  * @cpu_dev:    CPU device for which we do this operation
1302  * @cpumask:    cpumask to update with information of sharing CPUs
1303  *
1304  * This updates the @cpumask with CPUs that are sharing OPPs with @cpu_dev.
1305  *
1306  * Returns -ENOENT if operating-points-v2 isn't present for @cpu_dev.
1307  */
1308 int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev,
1309                                    struct cpumask *cpumask)
1310 {
1311         struct device_node *np, *tmp_np, *cpu_np;
1312         int cpu, ret = 0;
1313
1314         /* Get OPP descriptor node */
1315         np = dev_pm_opp_of_get_opp_desc_node(cpu_dev);
1316         if (!np) {
1317                 dev_dbg(cpu_dev, "%s: Couldn't find opp node.\n", __func__);
1318                 return -ENOENT;
1319         }
1320
1321         cpumask_set_cpu(cpu_dev->id, cpumask);
1322
1323         /* OPPs are shared ? */
1324         if (!of_property_read_bool(np, "opp-shared"))
1325                 goto put_cpu_node;
1326
1327         for_each_possible_cpu(cpu) {
1328                 if (cpu == cpu_dev->id)
1329                         continue;
1330
1331                 cpu_np = of_cpu_device_node_get(cpu);
1332                 if (!cpu_np) {
1333                         dev_err(cpu_dev, "%s: failed to get cpu%d node\n",
1334                                 __func__, cpu);
1335                         ret = -ENOENT;
1336                         goto put_cpu_node;
1337                 }
1338
1339                 /* Get OPP descriptor node */
1340                 tmp_np = _opp_of_get_opp_desc_node(cpu_np, 0);
1341                 of_node_put(cpu_np);
1342                 if (!tmp_np) {
1343                         pr_err("%pOF: Couldn't find opp node\n", cpu_np);
1344                         ret = -ENOENT;
1345                         goto put_cpu_node;
1346                 }
1347
1348                 /* CPUs are sharing opp node */
1349                 if (np == tmp_np)
1350                         cpumask_set_cpu(cpu, cpumask);
1351
1352                 of_node_put(tmp_np);
1353         }
1354
1355 put_cpu_node:
1356         of_node_put(np);
1357         return ret;
1358 }
1359 EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_sharing_cpus);
1360
1361 /**
1362  * of_get_required_opp_performance_state() - Search for required OPP and return its performance state.
1363  * @np: Node that contains the "required-opps" property.
1364  * @index: Index of the phandle to parse.
1365  *
1366  * Returns the performance state of the OPP pointed out by the "required-opps"
1367  * property at @index in @np.
1368  *
1369  * Return: Zero or positive performance state on success, otherwise negative
1370  * value on errors.
1371  */
1372 int of_get_required_opp_performance_state(struct device_node *np, int index)
1373 {
1374         struct dev_pm_opp *opp;
1375         struct device_node *required_np;
1376         struct opp_table *opp_table;
1377         int pstate = -EINVAL;
1378
1379         required_np = of_parse_required_opp(np, index);
1380         if (!required_np)
1381                 return -ENODEV;
1382
1383         opp_table = _find_table_of_opp_np(required_np);
1384         if (IS_ERR(opp_table)) {
1385                 pr_err("%s: Failed to find required OPP table %pOF: %ld\n",
1386                        __func__, np, PTR_ERR(opp_table));
1387                 goto put_required_np;
1388         }
1389
1390         opp = _find_opp_of_np(opp_table, required_np);
1391         if (opp) {
1392                 pstate = opp->pstate;
1393                 dev_pm_opp_put(opp);
1394         }
1395
1396         dev_pm_opp_put_opp_table(opp_table);
1397
1398 put_required_np:
1399         of_node_put(required_np);
1400
1401         return pstate;
1402 }
1403 EXPORT_SYMBOL_GPL(of_get_required_opp_performance_state);
1404
1405 /**
1406  * dev_pm_opp_get_of_node() - Gets the DT node corresponding to an opp
1407  * @opp:        opp for which DT node has to be returned for
1408  *
1409  * Return: DT node corresponding to the opp, else 0 on success.
1410  *
1411  * The caller needs to put the node with of_node_put() after using it.
1412  */
1413 struct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp)
1414 {
1415         if (IS_ERR_OR_NULL(opp)) {
1416                 pr_err("%s: Invalid parameters\n", __func__);
1417                 return NULL;
1418         }
1419
1420         return of_node_get(opp->np);
1421 }
1422 EXPORT_SYMBOL_GPL(dev_pm_opp_get_of_node);
1423
1424 /*
1425  * Callback function provided to the Energy Model framework upon registration.
1426  * It provides the power used by @dev at @kHz if it is the frequency of an
1427  * existing OPP, or at the frequency of the first OPP above @kHz otherwise
1428  * (see dev_pm_opp_find_freq_ceil()). This function updates @kHz to the ceiled
1429  * frequency and @uW to the associated power.
1430  *
1431  * Returns 0 on success or a proper -EINVAL value in case of error.
1432  */
1433 static int __maybe_unused
1434 _get_dt_power(struct device *dev, unsigned long *uW, unsigned long *kHz)
1435 {
1436         struct dev_pm_opp *opp;
1437         unsigned long opp_freq, opp_power;
1438
1439         /* Find the right frequency and related OPP */
1440         opp_freq = *kHz * 1000;
1441         opp = dev_pm_opp_find_freq_ceil(dev, &opp_freq);
1442         if (IS_ERR(opp))
1443                 return -EINVAL;
1444
1445         opp_power = dev_pm_opp_get_power(opp);
1446         dev_pm_opp_put(opp);
1447         if (!opp_power)
1448                 return -EINVAL;
1449
1450         *kHz = opp_freq / 1000;
1451         *uW = opp_power;
1452
1453         return 0;
1454 }
1455
1456 /*
1457  * Callback function provided to the Energy Model framework upon registration.
1458  * This computes the power estimated by @dev at @kHz if it is the frequency
1459  * of an existing OPP, or at the frequency of the first OPP above @kHz otherwise
1460  * (see dev_pm_opp_find_freq_ceil()). This function updates @kHz to the ceiled
1461  * frequency and @uW to the associated power. The power is estimated as
1462  * P = C * V^2 * f with C being the device's capacitance and V and f
1463  * respectively the voltage and frequency of the OPP.
1464  *
1465  * Returns -EINVAL if the power calculation failed because of missing
1466  * parameters, 0 otherwise.
1467  */
1468 static int __maybe_unused _get_power(struct device *dev, unsigned long *uW,
1469                                      unsigned long *kHz)
1470 {
1471         struct dev_pm_opp *opp;
1472         struct device_node *np;
1473         unsigned long mV, Hz;
1474         u32 cap;
1475         u64 tmp;
1476         int ret;
1477
1478         np = of_node_get(dev->of_node);
1479         if (!np)
1480                 return -EINVAL;
1481
1482         ret = of_property_read_u32(np, "dynamic-power-coefficient", &cap);
1483         of_node_put(np);
1484         if (ret)
1485                 return -EINVAL;
1486
1487         Hz = *kHz * 1000;
1488         opp = dev_pm_opp_find_freq_ceil(dev, &Hz);
1489         if (IS_ERR(opp))
1490                 return -EINVAL;
1491
1492         mV = dev_pm_opp_get_voltage(opp) / 1000;
1493         dev_pm_opp_put(opp);
1494         if (!mV)
1495                 return -EINVAL;
1496
1497         tmp = (u64)cap * mV * mV * (Hz / 1000000);
1498         /* Provide power in micro-Watts */
1499         do_div(tmp, 1000000);
1500
1501         *uW = (unsigned long)tmp;
1502         *kHz = Hz / 1000;
1503
1504         return 0;
1505 }
1506
1507 static bool _of_has_opp_microwatt_property(struct device *dev)
1508 {
1509         unsigned long power, freq = 0;
1510         struct dev_pm_opp *opp;
1511
1512         /* Check if at least one OPP has needed property */
1513         opp = dev_pm_opp_find_freq_ceil(dev, &freq);
1514         if (IS_ERR(opp))
1515                 return false;
1516
1517         power = dev_pm_opp_get_power(opp);
1518         dev_pm_opp_put(opp);
1519         if (!power)
1520                 return false;
1521
1522         return true;
1523 }
1524
1525 /**
1526  * dev_pm_opp_of_register_em() - Attempt to register an Energy Model
1527  * @dev         : Device for which an Energy Model has to be registered
1528  * @cpus        : CPUs for which an Energy Model has to be registered. For
1529  *              other type of devices it should be set to NULL.
1530  *
1531  * This checks whether the "dynamic-power-coefficient" devicetree property has
1532  * been specified, and tries to register an Energy Model with it if it has.
1533  * Having this property means the voltages are known for OPPs and the EM
1534  * might be calculated.
1535  */
1536 int dev_pm_opp_of_register_em(struct device *dev, struct cpumask *cpus)
1537 {
1538         struct em_data_callback em_cb;
1539         struct device_node *np;
1540         int ret, nr_opp;
1541         u32 cap;
1542
1543         if (IS_ERR_OR_NULL(dev)) {
1544                 ret = -EINVAL;
1545                 goto failed;
1546         }
1547
1548         nr_opp = dev_pm_opp_get_opp_count(dev);
1549         if (nr_opp <= 0) {
1550                 ret = -EINVAL;
1551                 goto failed;
1552         }
1553
1554         /* First, try to find more precised Energy Model in DT */
1555         if (_of_has_opp_microwatt_property(dev)) {
1556                 EM_SET_ACTIVE_POWER_CB(em_cb, _get_dt_power);
1557                 goto register_em;
1558         }
1559
1560         np = of_node_get(dev->of_node);
1561         if (!np) {
1562                 ret = -EINVAL;
1563                 goto failed;
1564         }
1565
1566         /*
1567          * Register an EM only if the 'dynamic-power-coefficient' property is
1568          * set in devicetree. It is assumed the voltage values are known if that
1569          * property is set since it is useless otherwise. If voltages are not
1570          * known, just let the EM registration fail with an error to alert the
1571          * user about the inconsistent configuration.
1572          */
1573         ret = of_property_read_u32(np, "dynamic-power-coefficient", &cap);
1574         of_node_put(np);
1575         if (ret || !cap) {
1576                 dev_dbg(dev, "Couldn't find proper 'dynamic-power-coefficient' in DT\n");
1577                 ret = -EINVAL;
1578                 goto failed;
1579         }
1580
1581         EM_SET_ACTIVE_POWER_CB(em_cb, _get_power);
1582
1583 register_em:
1584         ret = em_dev_register_perf_domain(dev, nr_opp, &em_cb, cpus, true);
1585         if (ret)
1586                 goto failed;
1587
1588         return 0;
1589
1590 failed:
1591         dev_dbg(dev, "Couldn't register Energy Model %d\n", ret);
1592         return ret;
1593 }
1594 EXPORT_SYMBOL_GPL(dev_pm_opp_of_register_em);