OPP: Rename and relocate of_genpd_opp_to_performance_state()
[linux-2.6-block.git] / drivers / opp / of.c
1 /*
2  * Generic OPP OF helpers
3  *
4  * Copyright (C) 2009-2010 Texas Instruments Incorporated.
5  *      Nishanth Menon
6  *      Romit Dasgupta
7  *      Kevin Hilman
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  */
13
14 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
15
16 #include <linux/cpu.h>
17 #include <linux/errno.h>
18 #include <linux/device.h>
19 #include <linux/of_device.h>
20 #include <linux/pm_domain.h>
21 #include <linux/slab.h>
22 #include <linux/export.h>
23
24 #include "opp.h"
25
26 /*
27  * Returns opp descriptor node for a device node, caller must
28  * do of_node_put().
29  */
30 static struct device_node *_opp_of_get_opp_desc_node(struct device_node *np,
31                                                      int index)
32 {
33         /* "operating-points-v2" can be an array for power domain providers */
34         return of_parse_phandle(np, "operating-points-v2", index);
35 }
36
37 /* Returns opp descriptor node for a device, caller must do of_node_put() */
38 struct device_node *dev_pm_opp_of_get_opp_desc_node(struct device *dev)
39 {
40         return _opp_of_get_opp_desc_node(dev->of_node, 0);
41 }
42 EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_opp_desc_node);
43
44 struct opp_table *_managed_opp(struct device *dev, int index)
45 {
46         struct opp_table *opp_table, *managed_table = NULL;
47         struct device_node *np;
48
49         np = _opp_of_get_opp_desc_node(dev->of_node, index);
50         if (!np)
51                 return NULL;
52
53         list_for_each_entry(opp_table, &opp_tables, node) {
54                 if (opp_table->np == np) {
55                         /*
56                          * Multiple devices can point to the same OPP table and
57                          * so will have same node-pointer, np.
58                          *
59                          * But the OPPs will be considered as shared only if the
60                          * OPP table contains a "opp-shared" property.
61                          */
62                         if (opp_table->shared_opp == OPP_TABLE_ACCESS_SHARED) {
63                                 _get_opp_table_kref(opp_table);
64                                 managed_table = opp_table;
65                         }
66
67                         break;
68                 }
69         }
70
71         of_node_put(np);
72
73         return managed_table;
74 }
75
76 /* The caller must call dev_pm_opp_put() after the OPP is used */
77 static struct dev_pm_opp *_find_opp_of_np(struct opp_table *opp_table,
78                                           struct device_node *opp_np)
79 {
80         struct dev_pm_opp *opp;
81
82         lockdep_assert_held(&opp_table_lock);
83
84         mutex_lock(&opp_table->lock);
85
86         list_for_each_entry(opp, &opp_table->opp_list, node) {
87                 if (opp->np == opp_np) {
88                         dev_pm_opp_get(opp);
89                         mutex_unlock(&opp_table->lock);
90                         return opp;
91                 }
92         }
93
94         mutex_unlock(&opp_table->lock);
95
96         return NULL;
97 }
98
99 static struct device_node *of_parse_required_opp(struct device_node *np,
100                                                  int index)
101 {
102         struct device_node *required_np;
103
104         required_np = of_parse_phandle(np, "required-opps", index);
105         if (unlikely(!required_np)) {
106                 pr_err("%s: Unable to parse required-opps: %pOF, index: %d\n",
107                        __func__, np, index);
108         }
109
110         return required_np;
111 }
112
113 /* The caller must call dev_pm_opp_put_opp_table() after the table is used */
114 static struct opp_table *_find_table_of_opp_np(struct device_node *opp_np)
115 {
116         struct opp_table *opp_table;
117         struct dev_pm_opp *opp;
118
119         lockdep_assert_held(&opp_table_lock);
120
121         list_for_each_entry(opp_table, &opp_tables, node) {
122                 opp = _find_opp_of_np(opp_table, opp_np);
123                 if (opp) {
124                         dev_pm_opp_put(opp);
125                         _get_opp_table_kref(opp_table);
126                         return opp_table;
127                 }
128         }
129
130         return ERR_PTR(-ENODEV);
131 }
132
133 /* Free resources previously acquired by _opp_table_alloc_required_tables() */
134 static void _opp_table_free_required_tables(struct opp_table *opp_table)
135 {
136         struct opp_table **required_opp_tables = opp_table->required_opp_tables;
137         struct device **genpd_virt_devs = opp_table->genpd_virt_devs;
138         int i;
139
140         if (!required_opp_tables)
141                 return;
142
143         for (i = 0; i < opp_table->required_opp_count; i++) {
144                 if (IS_ERR_OR_NULL(required_opp_tables[i]))
145                         break;
146
147                 dev_pm_opp_put_opp_table(required_opp_tables[i]);
148         }
149
150         kfree(required_opp_tables);
151         kfree(genpd_virt_devs);
152
153         opp_table->required_opp_count = 0;
154         opp_table->genpd_virt_devs = NULL;
155         opp_table->required_opp_tables = NULL;
156 }
157
158 /*
159  * Populate all devices and opp tables which are part of "required-opps" list.
160  * Checking only the first OPP node should be enough.
161  */
162 static void _opp_table_alloc_required_tables(struct opp_table *opp_table,
163                                              struct device *dev,
164                                              struct device_node *opp_np)
165 {
166         struct opp_table **required_opp_tables;
167         struct device **genpd_virt_devs = NULL;
168         struct device_node *required_np, *np;
169         int count, i;
170
171         /* Traversing the first OPP node is all we need */
172         np = of_get_next_available_child(opp_np, NULL);
173         if (!np) {
174                 dev_err(dev, "Empty OPP table\n");
175                 return;
176         }
177
178         count = of_count_phandle_with_args(np, "required-opps", NULL);
179         if (!count)
180                 goto put_np;
181
182         if (count > 1) {
183                 genpd_virt_devs = kcalloc(count, sizeof(*genpd_virt_devs),
184                                         GFP_KERNEL);
185                 if (!genpd_virt_devs)
186                         goto put_np;
187         }
188
189         required_opp_tables = kcalloc(count, sizeof(*required_opp_tables),
190                                       GFP_KERNEL);
191         if (!required_opp_tables) {
192                 kfree(genpd_virt_devs);
193                 goto put_np;
194         }
195
196         opp_table->genpd_virt_devs = genpd_virt_devs;
197         opp_table->required_opp_tables = required_opp_tables;
198         opp_table->required_opp_count = count;
199
200         for (i = 0; i < count; i++) {
201                 required_np = of_parse_required_opp(np, i);
202                 if (!required_np)
203                         goto free_required_tables;
204
205                 required_opp_tables[i] = _find_table_of_opp_np(required_np);
206                 of_node_put(required_np);
207
208                 if (IS_ERR(required_opp_tables[i]))
209                         goto free_required_tables;
210
211                 /*
212                  * We only support genpd's OPPs in the "required-opps" for now,
213                  * as we don't know how much about other cases. Error out if the
214                  * required OPP doesn't belong to a genpd.
215                  */
216                 if (!required_opp_tables[i]->is_genpd) {
217                         dev_err(dev, "required-opp doesn't belong to genpd: %pOF\n",
218                                 required_np);
219                         goto free_required_tables;
220                 }
221         }
222
223         goto put_np;
224
225 free_required_tables:
226         _opp_table_free_required_tables(opp_table);
227 put_np:
228         of_node_put(np);
229 }
230
231 void _of_init_opp_table(struct opp_table *opp_table, struct device *dev,
232                         int index)
233 {
234         struct device_node *np, *opp_np;
235         u32 val;
236
237         /*
238          * Only required for backward compatibility with v1 bindings, but isn't
239          * harmful for other cases. And so we do it unconditionally.
240          */
241         np = of_node_get(dev->of_node);
242         if (!np)
243                 return;
244
245         if (!of_property_read_u32(np, "clock-latency", &val))
246                 opp_table->clock_latency_ns_max = val;
247         of_property_read_u32(np, "voltage-tolerance",
248                              &opp_table->voltage_tolerance_v1);
249
250         if (of_find_property(np, "#power-domain-cells", NULL))
251                 opp_table->is_genpd = true;
252
253         /* Get OPP table node */
254         opp_np = _opp_of_get_opp_desc_node(np, index);
255         of_node_put(np);
256
257         if (!opp_np)
258                 return;
259
260         if (of_property_read_bool(opp_np, "opp-shared"))
261                 opp_table->shared_opp = OPP_TABLE_ACCESS_SHARED;
262         else
263                 opp_table->shared_opp = OPP_TABLE_ACCESS_EXCLUSIVE;
264
265         opp_table->np = opp_np;
266
267         _opp_table_alloc_required_tables(opp_table, dev, opp_np);
268         of_node_put(opp_np);
269 }
270
271 void _of_clear_opp_table(struct opp_table *opp_table)
272 {
273         _opp_table_free_required_tables(opp_table);
274 }
275
276 /*
277  * Release all resources previously acquired with a call to
278  * _of_opp_alloc_required_opps().
279  */
280 void _of_opp_free_required_opps(struct opp_table *opp_table,
281                                 struct dev_pm_opp *opp)
282 {
283         struct dev_pm_opp **required_opps = opp->required_opps;
284         int i;
285
286         if (!required_opps)
287                 return;
288
289         for (i = 0; i < opp_table->required_opp_count; i++) {
290                 if (!required_opps[i])
291                         break;
292
293                 /* Put the reference back */
294                 dev_pm_opp_put(required_opps[i]);
295         }
296
297         kfree(required_opps);
298         opp->required_opps = NULL;
299 }
300
301 /* Populate all required OPPs which are part of "required-opps" list */
302 static int _of_opp_alloc_required_opps(struct opp_table *opp_table,
303                                        struct dev_pm_opp *opp)
304 {
305         struct dev_pm_opp **required_opps;
306         struct opp_table *required_table;
307         struct device_node *np;
308         int i, ret, count = opp_table->required_opp_count;
309
310         if (!count)
311                 return 0;
312
313         required_opps = kcalloc(count, sizeof(*required_opps), GFP_KERNEL);
314         if (!required_opps)
315                 return -ENOMEM;
316
317         opp->required_opps = required_opps;
318
319         for (i = 0; i < count; i++) {
320                 required_table = opp_table->required_opp_tables[i];
321
322                 np = of_parse_required_opp(opp->np, i);
323                 if (unlikely(!np)) {
324                         ret = -ENODEV;
325                         goto free_required_opps;
326                 }
327
328                 required_opps[i] = _find_opp_of_np(required_table, np);
329                 of_node_put(np);
330
331                 if (!required_opps[i]) {
332                         pr_err("%s: Unable to find required OPP node: %pOF (%d)\n",
333                                __func__, opp->np, i);
334                         ret = -ENODEV;
335                         goto free_required_opps;
336                 }
337         }
338
339         return 0;
340
341 free_required_opps:
342         _of_opp_free_required_opps(opp_table, opp);
343
344         return ret;
345 }
346
347 static bool _opp_is_supported(struct device *dev, struct opp_table *opp_table,
348                               struct device_node *np)
349 {
350         unsigned int count = opp_table->supported_hw_count;
351         u32 version;
352         int ret;
353
354         if (!opp_table->supported_hw) {
355                 /*
356                  * In the case that no supported_hw has been set by the
357                  * platform but there is an opp-supported-hw value set for
358                  * an OPP then the OPP should not be enabled as there is
359                  * no way to see if the hardware supports it.
360                  */
361                 if (of_find_property(np, "opp-supported-hw", NULL))
362                         return false;
363                 else
364                         return true;
365         }
366
367         while (count--) {
368                 ret = of_property_read_u32_index(np, "opp-supported-hw", count,
369                                                  &version);
370                 if (ret) {
371                         dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n",
372                                  __func__, count, ret);
373                         return false;
374                 }
375
376                 /* Both of these are bitwise masks of the versions */
377                 if (!(version & opp_table->supported_hw[count]))
378                         return false;
379         }
380
381         return true;
382 }
383
384 static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
385                               struct opp_table *opp_table)
386 {
387         u32 *microvolt, *microamp = NULL;
388         int supplies, vcount, icount, ret, i, j;
389         struct property *prop = NULL;
390         char name[NAME_MAX];
391
392         supplies = opp_table->regulator_count ? opp_table->regulator_count : 1;
393
394         /* Search for "opp-microvolt-<name>" */
395         if (opp_table->prop_name) {
396                 snprintf(name, sizeof(name), "opp-microvolt-%s",
397                          opp_table->prop_name);
398                 prop = of_find_property(opp->np, name, NULL);
399         }
400
401         if (!prop) {
402                 /* Search for "opp-microvolt" */
403                 sprintf(name, "opp-microvolt");
404                 prop = of_find_property(opp->np, name, NULL);
405
406                 /* Missing property isn't a problem, but an invalid entry is */
407                 if (!prop) {
408                         if (!opp_table->regulator_count)
409                                 return 0;
410
411                         dev_err(dev, "%s: opp-microvolt missing although OPP managing regulators\n",
412                                 __func__);
413                         return -EINVAL;
414                 }
415         }
416
417         vcount = of_property_count_u32_elems(opp->np, name);
418         if (vcount < 0) {
419                 dev_err(dev, "%s: Invalid %s property (%d)\n",
420                         __func__, name, vcount);
421                 return vcount;
422         }
423
424         /* There can be one or three elements per supply */
425         if (vcount != supplies && vcount != supplies * 3) {
426                 dev_err(dev, "%s: Invalid number of elements in %s property (%d) with supplies (%d)\n",
427                         __func__, name, vcount, supplies);
428                 return -EINVAL;
429         }
430
431         microvolt = kmalloc_array(vcount, sizeof(*microvolt), GFP_KERNEL);
432         if (!microvolt)
433                 return -ENOMEM;
434
435         ret = of_property_read_u32_array(opp->np, name, microvolt, vcount);
436         if (ret) {
437                 dev_err(dev, "%s: error parsing %s: %d\n", __func__, name, ret);
438                 ret = -EINVAL;
439                 goto free_microvolt;
440         }
441
442         /* Search for "opp-microamp-<name>" */
443         prop = NULL;
444         if (opp_table->prop_name) {
445                 snprintf(name, sizeof(name), "opp-microamp-%s",
446                          opp_table->prop_name);
447                 prop = of_find_property(opp->np, name, NULL);
448         }
449
450         if (!prop) {
451                 /* Search for "opp-microamp" */
452                 sprintf(name, "opp-microamp");
453                 prop = of_find_property(opp->np, name, NULL);
454         }
455
456         if (prop) {
457                 icount = of_property_count_u32_elems(opp->np, name);
458                 if (icount < 0) {
459                         dev_err(dev, "%s: Invalid %s property (%d)\n", __func__,
460                                 name, icount);
461                         ret = icount;
462                         goto free_microvolt;
463                 }
464
465                 if (icount != supplies) {
466                         dev_err(dev, "%s: Invalid number of elements in %s property (%d) with supplies (%d)\n",
467                                 __func__, name, icount, supplies);
468                         ret = -EINVAL;
469                         goto free_microvolt;
470                 }
471
472                 microamp = kmalloc_array(icount, sizeof(*microamp), GFP_KERNEL);
473                 if (!microamp) {
474                         ret = -EINVAL;
475                         goto free_microvolt;
476                 }
477
478                 ret = of_property_read_u32_array(opp->np, name, microamp,
479                                                  icount);
480                 if (ret) {
481                         dev_err(dev, "%s: error parsing %s: %d\n", __func__,
482                                 name, ret);
483                         ret = -EINVAL;
484                         goto free_microamp;
485                 }
486         }
487
488         for (i = 0, j = 0; i < supplies; i++) {
489                 opp->supplies[i].u_volt = microvolt[j++];
490
491                 if (vcount == supplies) {
492                         opp->supplies[i].u_volt_min = opp->supplies[i].u_volt;
493                         opp->supplies[i].u_volt_max = opp->supplies[i].u_volt;
494                 } else {
495                         opp->supplies[i].u_volt_min = microvolt[j++];
496                         opp->supplies[i].u_volt_max = microvolt[j++];
497                 }
498
499                 if (microamp)
500                         opp->supplies[i].u_amp = microamp[i];
501         }
502
503 free_microamp:
504         kfree(microamp);
505 free_microvolt:
506         kfree(microvolt);
507
508         return ret;
509 }
510
511 /**
512  * dev_pm_opp_of_remove_table() - Free OPP table entries created from static DT
513  *                                entries
514  * @dev:        device pointer used to lookup OPP table.
515  *
516  * Free OPPs created using static entries present in DT.
517  */
518 void dev_pm_opp_of_remove_table(struct device *dev)
519 {
520         _dev_pm_opp_find_and_remove_table(dev);
521 }
522 EXPORT_SYMBOL_GPL(dev_pm_opp_of_remove_table);
523
524 /**
525  * _opp_add_static_v2() - Allocate static OPPs (As per 'v2' DT bindings)
526  * @opp_table:  OPP table
527  * @dev:        device for which we do this operation
528  * @np:         device node
529  *
530  * This function adds an opp definition to the opp table and returns status. The
531  * opp can be controlled using dev_pm_opp_enable/disable functions and may be
532  * removed by dev_pm_opp_remove.
533  *
534  * Return:
535  * Valid OPP pointer:
536  *              On success
537  * NULL:
538  *              Duplicate OPPs (both freq and volt are same) and opp->available
539  *              OR if the OPP is not supported by hardware.
540  * ERR_PTR(-EEXIST):
541  *              Freq are same and volt are different OR
542  *              Duplicate OPPs (both freq and volt are same) and !opp->available
543  * ERR_PTR(-ENOMEM):
544  *              Memory allocation failure
545  * ERR_PTR(-EINVAL):
546  *              Failed parsing the OPP node
547  */
548 static struct dev_pm_opp *_opp_add_static_v2(struct opp_table *opp_table,
549                 struct device *dev, struct device_node *np)
550 {
551         struct dev_pm_opp *new_opp;
552         u64 rate = 0;
553         u32 val;
554         int ret;
555         bool rate_not_available = false;
556
557         new_opp = _opp_allocate(opp_table);
558         if (!new_opp)
559                 return ERR_PTR(-ENOMEM);
560
561         ret = of_property_read_u64(np, "opp-hz", &rate);
562         if (ret < 0) {
563                 /* "opp-hz" is optional for devices like power domains. */
564                 if (!opp_table->is_genpd) {
565                         dev_err(dev, "%s: opp-hz not found\n", __func__);
566                         goto free_opp;
567                 }
568
569                 rate_not_available = true;
570         } else {
571                 /*
572                  * Rate is defined as an unsigned long in clk API, and so
573                  * casting explicitly to its type. Must be fixed once rate is 64
574                  * bit guaranteed in clk API.
575                  */
576                 new_opp->rate = (unsigned long)rate;
577         }
578
579         /* Check if the OPP supports hardware's hierarchy of versions or not */
580         if (!_opp_is_supported(dev, opp_table, np)) {
581                 dev_dbg(dev, "OPP not supported by hardware: %llu\n", rate);
582                 goto free_opp;
583         }
584
585         new_opp->turbo = of_property_read_bool(np, "turbo-mode");
586
587         new_opp->np = np;
588         new_opp->dynamic = false;
589         new_opp->available = true;
590
591         ret = _of_opp_alloc_required_opps(opp_table, new_opp);
592         if (ret)
593                 goto free_opp;
594
595         if (!of_property_read_u32(np, "clock-latency-ns", &val))
596                 new_opp->clock_latency_ns = val;
597
598         ret = opp_parse_supplies(new_opp, dev, opp_table);
599         if (ret)
600                 goto free_required_opps;
601
602         if (opp_table->is_genpd)
603                 new_opp->pstate = pm_genpd_opp_to_performance_state(dev, new_opp);
604
605         ret = _opp_add(dev, new_opp, opp_table, rate_not_available);
606         if (ret) {
607                 /* Don't return error for duplicate OPPs */
608                 if (ret == -EBUSY)
609                         ret = 0;
610                 goto free_required_opps;
611         }
612
613         /* OPP to select on device suspend */
614         if (of_property_read_bool(np, "opp-suspend")) {
615                 if (opp_table->suspend_opp) {
616                         dev_warn(dev, "%s: Multiple suspend OPPs found (%lu %lu)\n",
617                                  __func__, opp_table->suspend_opp->rate,
618                                  new_opp->rate);
619                 } else {
620                         new_opp->suspend = true;
621                         opp_table->suspend_opp = new_opp;
622                 }
623         }
624
625         if (new_opp->clock_latency_ns > opp_table->clock_latency_ns_max)
626                 opp_table->clock_latency_ns_max = new_opp->clock_latency_ns;
627
628         pr_debug("%s: turbo:%d rate:%lu uv:%lu uvmin:%lu uvmax:%lu latency:%lu\n",
629                  __func__, new_opp->turbo, new_opp->rate,
630                  new_opp->supplies[0].u_volt, new_opp->supplies[0].u_volt_min,
631                  new_opp->supplies[0].u_volt_max, new_opp->clock_latency_ns);
632
633         /*
634          * Notify the changes in the availability of the operable
635          * frequency/voltage list.
636          */
637         blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_ADD, new_opp);
638         return new_opp;
639
640 free_required_opps:
641         _of_opp_free_required_opps(opp_table, new_opp);
642 free_opp:
643         _opp_free(new_opp);
644
645         return ERR_PTR(ret);
646 }
647
648 /* Initializes OPP tables based on new bindings */
649 static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table)
650 {
651         struct device_node *np;
652         int ret, count = 0, pstate_count = 0;
653         struct dev_pm_opp *opp;
654
655         /* OPP table is already initialized for the device */
656         if (opp_table->parsed_static_opps) {
657                 kref_get(&opp_table->list_kref);
658                 return 0;
659         }
660
661         kref_init(&opp_table->list_kref);
662
663         /* We have opp-table node now, iterate over it and add OPPs */
664         for_each_available_child_of_node(opp_table->np, np) {
665                 opp = _opp_add_static_v2(opp_table, dev, np);
666                 if (IS_ERR(opp)) {
667                         ret = PTR_ERR(opp);
668                         dev_err(dev, "%s: Failed to add OPP, %d\n", __func__,
669                                 ret);
670                         of_node_put(np);
671                         goto put_list_kref;
672                 } else if (opp) {
673                         count++;
674                 }
675         }
676
677         /* There should be one of more OPP defined */
678         if (WARN_ON(!count)) {
679                 ret = -ENOENT;
680                 goto put_list_kref;
681         }
682
683         list_for_each_entry(opp, &opp_table->opp_list, node)
684                 pstate_count += !!opp->pstate;
685
686         /* Either all or none of the nodes shall have performance state set */
687         if (pstate_count && pstate_count != count) {
688                 dev_err(dev, "Not all nodes have performance state set (%d: %d)\n",
689                         count, pstate_count);
690                 ret = -ENOENT;
691                 goto put_list_kref;
692         }
693
694         if (pstate_count)
695                 opp_table->genpd_performance_state = true;
696
697         opp_table->parsed_static_opps = true;
698
699         return 0;
700
701 put_list_kref:
702         _put_opp_list_kref(opp_table);
703
704         return ret;
705 }
706
707 /* Initializes OPP tables based on old-deprecated bindings */
708 static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table)
709 {
710         const struct property *prop;
711         const __be32 *val;
712         int nr, ret = 0;
713
714         prop = of_find_property(dev->of_node, "operating-points", NULL);
715         if (!prop)
716                 return -ENODEV;
717         if (!prop->value)
718                 return -ENODATA;
719
720         /*
721          * Each OPP is a set of tuples consisting of frequency and
722          * voltage like <freq-kHz vol-uV>.
723          */
724         nr = prop->length / sizeof(u32);
725         if (nr % 2) {
726                 dev_err(dev, "%s: Invalid OPP table\n", __func__);
727                 return -EINVAL;
728         }
729
730         kref_init(&opp_table->list_kref);
731
732         val = prop->value;
733         while (nr) {
734                 unsigned long freq = be32_to_cpup(val++) * 1000;
735                 unsigned long volt = be32_to_cpup(val++);
736
737                 ret = _opp_add_v1(opp_table, dev, freq, volt, false);
738                 if (ret) {
739                         dev_err(dev, "%s: Failed to add OPP %ld (%d)\n",
740                                 __func__, freq, ret);
741                         _put_opp_list_kref(opp_table);
742                         return ret;
743                 }
744                 nr -= 2;
745         }
746
747         return ret;
748 }
749
750 /**
751  * dev_pm_opp_of_add_table() - Initialize opp table from device tree
752  * @dev:        device pointer used to lookup OPP table.
753  *
754  * Register the initial OPP table with the OPP library for given device.
755  *
756  * Return:
757  * 0            On success OR
758  *              Duplicate OPPs (both freq and volt are same) and opp->available
759  * -EEXIST      Freq are same and volt are different OR
760  *              Duplicate OPPs (both freq and volt are same) and !opp->available
761  * -ENOMEM      Memory allocation failure
762  * -ENODEV      when 'operating-points' property is not found or is invalid data
763  *              in device node.
764  * -ENODATA     when empty 'operating-points' property is found
765  * -EINVAL      when invalid entries are found in opp-v2 table
766  */
767 int dev_pm_opp_of_add_table(struct device *dev)
768 {
769         struct opp_table *opp_table;
770         int ret;
771
772         opp_table = dev_pm_opp_get_opp_table_indexed(dev, 0);
773         if (!opp_table)
774                 return -ENOMEM;
775
776         /*
777          * OPPs have two version of bindings now. Also try the old (v1)
778          * bindings for backward compatibility with older dtbs.
779          */
780         if (opp_table->np)
781                 ret = _of_add_opp_table_v2(dev, opp_table);
782         else
783                 ret = _of_add_opp_table_v1(dev, opp_table);
784
785         if (ret)
786                 dev_pm_opp_put_opp_table(opp_table);
787
788         return ret;
789 }
790 EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table);
791
792 /**
793  * dev_pm_opp_of_add_table_indexed() - Initialize indexed opp table from device tree
794  * @dev:        device pointer used to lookup OPP table.
795  * @index:      Index number.
796  *
797  * Register the initial OPP table with the OPP library for given device only
798  * using the "operating-points-v2" property.
799  *
800  * Return:
801  * 0            On success OR
802  *              Duplicate OPPs (both freq and volt are same) and opp->available
803  * -EEXIST      Freq are same and volt are different OR
804  *              Duplicate OPPs (both freq and volt are same) and !opp->available
805  * -ENOMEM      Memory allocation failure
806  * -ENODEV      when 'operating-points' property is not found or is invalid data
807  *              in device node.
808  * -ENODATA     when empty 'operating-points' property is found
809  * -EINVAL      when invalid entries are found in opp-v2 table
810  */
811 int dev_pm_opp_of_add_table_indexed(struct device *dev, int index)
812 {
813         struct opp_table *opp_table;
814         int ret, count;
815
816         if (index) {
817                 /*
818                  * If only one phandle is present, then the same OPP table
819                  * applies for all index requests.
820                  */
821                 count = of_count_phandle_with_args(dev->of_node,
822                                                    "operating-points-v2", NULL);
823                 if (count != 1)
824                         return -ENODEV;
825
826                 index = 0;
827         }
828
829         opp_table = dev_pm_opp_get_opp_table_indexed(dev, index);
830         if (!opp_table)
831                 return -ENOMEM;
832
833         ret = _of_add_opp_table_v2(dev, opp_table);
834         if (ret)
835                 dev_pm_opp_put_opp_table(opp_table);
836
837         return ret;
838 }
839 EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table_indexed);
840
841 /* CPU device specific helpers */
842
843 /**
844  * dev_pm_opp_of_cpumask_remove_table() - Removes OPP table for @cpumask
845  * @cpumask:    cpumask for which OPP table needs to be removed
846  *
847  * This removes the OPP tables for CPUs present in the @cpumask.
848  * This should be used only to remove static entries created from DT.
849  */
850 void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask)
851 {
852         _dev_pm_opp_cpumask_remove_table(cpumask, -1);
853 }
854 EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_remove_table);
855
856 /**
857  * dev_pm_opp_of_cpumask_add_table() - Adds OPP table for @cpumask
858  * @cpumask:    cpumask for which OPP table needs to be added.
859  *
860  * This adds the OPP tables for CPUs present in the @cpumask.
861  */
862 int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
863 {
864         struct device *cpu_dev;
865         int cpu, ret;
866
867         if (WARN_ON(cpumask_empty(cpumask)))
868                 return -ENODEV;
869
870         for_each_cpu(cpu, cpumask) {
871                 cpu_dev = get_cpu_device(cpu);
872                 if (!cpu_dev) {
873                         pr_err("%s: failed to get cpu%d device\n", __func__,
874                                cpu);
875                         ret = -ENODEV;
876                         goto remove_table;
877                 }
878
879                 ret = dev_pm_opp_of_add_table(cpu_dev);
880                 if (ret) {
881                         /*
882                          * OPP may get registered dynamically, don't print error
883                          * message here.
884                          */
885                         pr_debug("%s: couldn't find opp table for cpu:%d, %d\n",
886                                  __func__, cpu, ret);
887
888                         goto remove_table;
889                 }
890         }
891
892         return 0;
893
894 remove_table:
895         /* Free all other OPPs */
896         _dev_pm_opp_cpumask_remove_table(cpumask, cpu);
897
898         return ret;
899 }
900 EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_add_table);
901
902 /*
903  * Works only for OPP v2 bindings.
904  *
905  * Returns -ENOENT if operating-points-v2 bindings aren't supported.
906  */
907 /**
908  * dev_pm_opp_of_get_sharing_cpus() - Get cpumask of CPUs sharing OPPs with
909  *                                    @cpu_dev using operating-points-v2
910  *                                    bindings.
911  *
912  * @cpu_dev:    CPU device for which we do this operation
913  * @cpumask:    cpumask to update with information of sharing CPUs
914  *
915  * This updates the @cpumask with CPUs that are sharing OPPs with @cpu_dev.
916  *
917  * Returns -ENOENT if operating-points-v2 isn't present for @cpu_dev.
918  */
919 int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev,
920                                    struct cpumask *cpumask)
921 {
922         struct device_node *np, *tmp_np, *cpu_np;
923         int cpu, ret = 0;
924
925         /* Get OPP descriptor node */
926         np = dev_pm_opp_of_get_opp_desc_node(cpu_dev);
927         if (!np) {
928                 dev_dbg(cpu_dev, "%s: Couldn't find opp node.\n", __func__);
929                 return -ENOENT;
930         }
931
932         cpumask_set_cpu(cpu_dev->id, cpumask);
933
934         /* OPPs are shared ? */
935         if (!of_property_read_bool(np, "opp-shared"))
936                 goto put_cpu_node;
937
938         for_each_possible_cpu(cpu) {
939                 if (cpu == cpu_dev->id)
940                         continue;
941
942                 cpu_np = of_cpu_device_node_get(cpu);
943                 if (!cpu_np) {
944                         dev_err(cpu_dev, "%s: failed to get cpu%d node\n",
945                                 __func__, cpu);
946                         ret = -ENOENT;
947                         goto put_cpu_node;
948                 }
949
950                 /* Get OPP descriptor node */
951                 tmp_np = _opp_of_get_opp_desc_node(cpu_np, 0);
952                 of_node_put(cpu_np);
953                 if (!tmp_np) {
954                         pr_err("%pOF: Couldn't find opp node\n", cpu_np);
955                         ret = -ENOENT;
956                         goto put_cpu_node;
957                 }
958
959                 /* CPUs are sharing opp node */
960                 if (np == tmp_np)
961                         cpumask_set_cpu(cpu, cpumask);
962
963                 of_node_put(tmp_np);
964         }
965
966 put_cpu_node:
967         of_node_put(np);
968         return ret;
969 }
970 EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_sharing_cpus);
971
972 /**
973  * of_get_required_opp_performance_state() - Search for required OPP and return its performance state.
974  * @np: Node that contains the "required-opps" property.
975  * @index: Index of the phandle to parse.
976  *
977  * Returns the performance state of the OPP pointed out by the "required-opps"
978  * property at @index in @np.
979  *
980  * Return: Positive performance state on success, otherwise 0 on errors.
981  */
982 unsigned int of_get_required_opp_performance_state(struct device_node *np,
983                                                    int index)
984 {
985         struct dev_pm_opp *opp;
986         struct device_node *required_np;
987         struct opp_table *opp_table;
988         unsigned int pstate = 0;
989
990         required_np = of_parse_required_opp(np, index);
991         if (!required_np)
992                 return 0;
993
994         opp_table = _find_table_of_opp_np(required_np);
995         if (IS_ERR(opp_table)) {
996                 pr_err("%s: Failed to find required OPP table %pOF: %ld\n",
997                        __func__, np, PTR_ERR(opp_table));
998                 goto put_required_np;
999         }
1000
1001         opp = _find_opp_of_np(opp_table, required_np);
1002         if (opp) {
1003                 pstate = opp->pstate;
1004                 dev_pm_opp_put(opp);
1005         }
1006
1007         dev_pm_opp_put_opp_table(opp_table);
1008
1009 put_required_np:
1010         of_node_put(required_np);
1011
1012         return pstate;
1013 }
1014 EXPORT_SYMBOL_GPL(of_get_required_opp_performance_state);
1015
1016 /**
1017  * of_dev_pm_opp_find_required_opp() - Search for required OPP.
1018  * @dev: The device whose OPP node is referenced by the 'np' DT node.
1019  * @np: Node that contains the "required-opps" property.
1020  *
1021  * Returns the OPP of the device 'dev', whose phandle is present in the "np"
1022  * node. Although the "required-opps" property supports having multiple
1023  * phandles, this helper routine only parses the very first phandle in the list.
1024  *
1025  * Return: Matching opp, else returns ERR_PTR in case of error and should be
1026  * handled using IS_ERR.
1027  *
1028  * The callers are required to call dev_pm_opp_put() for the returned OPP after
1029  * use.
1030  */
1031 struct dev_pm_opp *of_dev_pm_opp_find_required_opp(struct device *dev,
1032                                                    struct device_node *np)
1033 {
1034         struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ENODEV);
1035         struct device_node *required_np;
1036         struct opp_table *opp_table;
1037
1038         opp_table = _find_opp_table(dev);
1039         if (IS_ERR(opp_table))
1040                 return ERR_CAST(opp_table);
1041
1042         required_np = of_parse_phandle(np, "required-opps", 0);
1043         if (unlikely(!required_np)) {
1044                 dev_err(dev, "Unable to parse required-opps\n");
1045                 goto put_opp_table;
1046         }
1047
1048         mutex_lock(&opp_table->lock);
1049
1050         list_for_each_entry(temp_opp, &opp_table->opp_list, node) {
1051                 if (temp_opp->available && temp_opp->np == required_np) {
1052                         opp = temp_opp;
1053
1054                         /* Increment the reference count of OPP */
1055                         dev_pm_opp_get(opp);
1056                         break;
1057                 }
1058         }
1059
1060         mutex_unlock(&opp_table->lock);
1061
1062         of_node_put(required_np);
1063 put_opp_table:
1064         dev_pm_opp_put_opp_table(opp_table);
1065
1066         return opp;
1067 }
1068 EXPORT_SYMBOL_GPL(of_dev_pm_opp_find_required_opp);
1069
1070 /**
1071  * dev_pm_opp_get_of_node() - Gets the DT node corresponding to an opp
1072  * @opp:        opp for which DT node has to be returned for
1073  *
1074  * Return: DT node corresponding to the opp, else 0 on success.
1075  *
1076  * The caller needs to put the node with of_node_put() after using it.
1077  */
1078 struct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp)
1079 {
1080         if (IS_ERR_OR_NULL(opp)) {
1081                 pr_err("%s: Invalid parameters\n", __func__);
1082                 return NULL;
1083         }
1084
1085         return of_node_get(opp->np);
1086 }
1087 EXPORT_SYMBOL_GPL(dev_pm_opp_get_of_node);