clk: Silence warnings about lock imbalances
[cascardo/linux.git] / drivers / clk / clk.c
1 /*
2  * Copyright (C) 2010-2011 Canonical Ltd <jeremy.kerr@canonical.com>
3  * Copyright (C) 2011-2012 Linaro Ltd <mturquette@linaro.org>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  *
9  * Standard functionality for the common clock API.  See Documentation/clk.txt
10  */
11
12 #include <linux/clk.h>
13 #include <linux/clk-provider.h>
14 #include <linux/clk/clk-conf.h>
15 #include <linux/module.h>
16 #include <linux/mutex.h>
17 #include <linux/spinlock.h>
18 #include <linux/err.h>
19 #include <linux/list.h>
20 #include <linux/slab.h>
21 #include <linux/of.h>
22 #include <linux/device.h>
23 #include <linux/init.h>
24 #include <linux/sched.h>
25 #include <linux/clkdev.h>
26
27 #include "clk.h"
28
29 static DEFINE_SPINLOCK(enable_lock);
30 static DEFINE_MUTEX(prepare_lock);
31
32 static struct task_struct *prepare_owner;
33 static struct task_struct *enable_owner;
34
35 static int prepare_refcnt;
36 static int enable_refcnt;
37
38 static HLIST_HEAD(clk_root_list);
39 static HLIST_HEAD(clk_orphan_list);
40 static LIST_HEAD(clk_notifier_list);
41
42 /***    private data structures    ***/
43
44 struct clk_core {
45         const char              *name;
46         const struct clk_ops    *ops;
47         struct clk_hw           *hw;
48         struct module           *owner;
49         struct clk_core         *parent;
50         const char              **parent_names;
51         struct clk_core         **parents;
52         u8                      num_parents;
53         u8                      new_parent_index;
54         unsigned long           rate;
55         unsigned long           req_rate;
56         unsigned long           new_rate;
57         struct clk_core         *new_parent;
58         struct clk_core         *new_child;
59         unsigned long           flags;
60         unsigned int            enable_count;
61         unsigned int            prepare_count;
62         unsigned long           min_rate;
63         unsigned long           max_rate;
64         unsigned long           accuracy;
65         int                     phase;
66         struct hlist_head       children;
67         struct hlist_node       child_node;
68         struct hlist_head       clks;
69         unsigned int            notifier_count;
70 #ifdef CONFIG_DEBUG_FS
71         struct dentry           *dentry;
72         struct hlist_node       debug_node;
73 #endif
74         struct kref             ref;
75 };
76
77 #define CREATE_TRACE_POINTS
78 #include <trace/events/clk.h>
79
80 struct clk {
81         struct clk_core *core;
82         const char *dev_id;
83         const char *con_id;
84         unsigned long min_rate;
85         unsigned long max_rate;
86         struct hlist_node clks_node;
87 };
88
89 /***           locking             ***/
90 static void clk_prepare_lock(void)
91 {
92         if (!mutex_trylock(&prepare_lock)) {
93                 if (prepare_owner == current) {
94                         prepare_refcnt++;
95                         return;
96                 }
97                 mutex_lock(&prepare_lock);
98         }
99         WARN_ON_ONCE(prepare_owner != NULL);
100         WARN_ON_ONCE(prepare_refcnt != 0);
101         prepare_owner = current;
102         prepare_refcnt = 1;
103 }
104
105 static void clk_prepare_unlock(void)
106 {
107         WARN_ON_ONCE(prepare_owner != current);
108         WARN_ON_ONCE(prepare_refcnt == 0);
109
110         if (--prepare_refcnt)
111                 return;
112         prepare_owner = NULL;
113         mutex_unlock(&prepare_lock);
114 }
115
116 static unsigned long clk_enable_lock(void)
117         __acquires(enable_lock)
118 {
119         unsigned long flags;
120
121         if (!spin_trylock_irqsave(&enable_lock, flags)) {
122                 if (enable_owner == current) {
123                         enable_refcnt++;
124                         __acquire(enable_lock);
125                         return flags;
126                 }
127                 spin_lock_irqsave(&enable_lock, flags);
128         }
129         WARN_ON_ONCE(enable_owner != NULL);
130         WARN_ON_ONCE(enable_refcnt != 0);
131         enable_owner = current;
132         enable_refcnt = 1;
133         return flags;
134 }
135
136 static void clk_enable_unlock(unsigned long flags)
137         __releases(enable_lock)
138 {
139         WARN_ON_ONCE(enable_owner != current);
140         WARN_ON_ONCE(enable_refcnt == 0);
141
142         if (--enable_refcnt) {
143                 __release(enable_lock);
144                 return;
145         }
146         enable_owner = NULL;
147         spin_unlock_irqrestore(&enable_lock, flags);
148 }
149
150 static bool clk_core_is_prepared(struct clk_core *core)
151 {
152         /*
153          * .is_prepared is optional for clocks that can prepare
154          * fall back to software usage counter if it is missing
155          */
156         if (!core->ops->is_prepared)
157                 return core->prepare_count;
158
159         return core->ops->is_prepared(core->hw);
160 }
161
162 static bool clk_core_is_enabled(struct clk_core *core)
163 {
164         /*
165          * .is_enabled is only mandatory for clocks that gate
166          * fall back to software usage counter if .is_enabled is missing
167          */
168         if (!core->ops->is_enabled)
169                 return core->enable_count;
170
171         return core->ops->is_enabled(core->hw);
172 }
173
174 static void clk_unprepare_unused_subtree(struct clk_core *core)
175 {
176         struct clk_core *child;
177
178         lockdep_assert_held(&prepare_lock);
179
180         hlist_for_each_entry(child, &core->children, child_node)
181                 clk_unprepare_unused_subtree(child);
182
183         if (core->prepare_count)
184                 return;
185
186         if (core->flags & CLK_IGNORE_UNUSED)
187                 return;
188
189         if (clk_core_is_prepared(core)) {
190                 trace_clk_unprepare(core);
191                 if (core->ops->unprepare_unused)
192                         core->ops->unprepare_unused(core->hw);
193                 else if (core->ops->unprepare)
194                         core->ops->unprepare(core->hw);
195                 trace_clk_unprepare_complete(core);
196         }
197 }
198
199 static void clk_disable_unused_subtree(struct clk_core *core)
200 {
201         struct clk_core *child;
202         unsigned long flags;
203
204         lockdep_assert_held(&prepare_lock);
205
206         hlist_for_each_entry(child, &core->children, child_node)
207                 clk_disable_unused_subtree(child);
208
209         flags = clk_enable_lock();
210
211         if (core->enable_count)
212                 goto unlock_out;
213
214         if (core->flags & CLK_IGNORE_UNUSED)
215                 goto unlock_out;
216
217         /*
218          * some gate clocks have special needs during the disable-unused
219          * sequence.  call .disable_unused if available, otherwise fall
220          * back to .disable
221          */
222         if (clk_core_is_enabled(core)) {
223                 trace_clk_disable(core);
224                 if (core->ops->disable_unused)
225                         core->ops->disable_unused(core->hw);
226                 else if (core->ops->disable)
227                         core->ops->disable(core->hw);
228                 trace_clk_disable_complete(core);
229         }
230
231 unlock_out:
232         clk_enable_unlock(flags);
233 }
234
235 static bool clk_ignore_unused;
236 static int __init clk_ignore_unused_setup(char *__unused)
237 {
238         clk_ignore_unused = true;
239         return 1;
240 }
241 __setup("clk_ignore_unused", clk_ignore_unused_setup);
242
243 static int clk_disable_unused(void)
244 {
245         struct clk_core *core;
246
247         if (clk_ignore_unused) {
248                 pr_warn("clk: Not disabling unused clocks\n");
249                 return 0;
250         }
251
252         clk_prepare_lock();
253
254         hlist_for_each_entry(core, &clk_root_list, child_node)
255                 clk_disable_unused_subtree(core);
256
257         hlist_for_each_entry(core, &clk_orphan_list, child_node)
258                 clk_disable_unused_subtree(core);
259
260         hlist_for_each_entry(core, &clk_root_list, child_node)
261                 clk_unprepare_unused_subtree(core);
262
263         hlist_for_each_entry(core, &clk_orphan_list, child_node)
264                 clk_unprepare_unused_subtree(core);
265
266         clk_prepare_unlock();
267
268         return 0;
269 }
270 late_initcall_sync(clk_disable_unused);
271
272 /***    helper functions   ***/
273
274 const char *__clk_get_name(struct clk *clk)
275 {
276         return !clk ? NULL : clk->core->name;
277 }
278 EXPORT_SYMBOL_GPL(__clk_get_name);
279
280 struct clk_hw *__clk_get_hw(struct clk *clk)
281 {
282         return !clk ? NULL : clk->core->hw;
283 }
284 EXPORT_SYMBOL_GPL(__clk_get_hw);
285
286 u8 __clk_get_num_parents(struct clk *clk)
287 {
288         return !clk ? 0 : clk->core->num_parents;
289 }
290 EXPORT_SYMBOL_GPL(__clk_get_num_parents);
291
292 struct clk *__clk_get_parent(struct clk *clk)
293 {
294         if (!clk)
295                 return NULL;
296
297         /* TODO: Create a per-user clk and change callers to call clk_put */
298         return !clk->core->parent ? NULL : clk->core->parent->hw->clk;
299 }
300 EXPORT_SYMBOL_GPL(__clk_get_parent);
301
302 static struct clk_core *__clk_lookup_subtree(const char *name,
303                                              struct clk_core *core)
304 {
305         struct clk_core *child;
306         struct clk_core *ret;
307
308         if (!strcmp(core->name, name))
309                 return core;
310
311         hlist_for_each_entry(child, &core->children, child_node) {
312                 ret = __clk_lookup_subtree(name, child);
313                 if (ret)
314                         return ret;
315         }
316
317         return NULL;
318 }
319
320 static struct clk_core *clk_core_lookup(const char *name)
321 {
322         struct clk_core *root_clk;
323         struct clk_core *ret;
324
325         if (!name)
326                 return NULL;
327
328         /* search the 'proper' clk tree first */
329         hlist_for_each_entry(root_clk, &clk_root_list, child_node) {
330                 ret = __clk_lookup_subtree(name, root_clk);
331                 if (ret)
332                         return ret;
333         }
334
335         /* if not found, then search the orphan tree */
336         hlist_for_each_entry(root_clk, &clk_orphan_list, child_node) {
337                 ret = __clk_lookup_subtree(name, root_clk);
338                 if (ret)
339                         return ret;
340         }
341
342         return NULL;
343 }
344
345 static struct clk_core *clk_core_get_parent_by_index(struct clk_core *core,
346                                                          u8 index)
347 {
348         if (!core || index >= core->num_parents)
349                 return NULL;
350         else if (!core->parents)
351                 return clk_core_lookup(core->parent_names[index]);
352         else if (!core->parents[index])
353                 return core->parents[index] =
354                         clk_core_lookup(core->parent_names[index]);
355         else
356                 return core->parents[index];
357 }
358
359 struct clk *clk_get_parent_by_index(struct clk *clk, u8 index)
360 {
361         struct clk_core *parent;
362
363         if (!clk)
364                 return NULL;
365
366         parent = clk_core_get_parent_by_index(clk->core, index);
367
368         return !parent ? NULL : parent->hw->clk;
369 }
370 EXPORT_SYMBOL_GPL(clk_get_parent_by_index);
371
372 unsigned int __clk_get_enable_count(struct clk *clk)
373 {
374         return !clk ? 0 : clk->core->enable_count;
375 }
376
377 static unsigned long clk_core_get_rate_nolock(struct clk_core *core)
378 {
379         unsigned long ret;
380
381         if (!core) {
382                 ret = 0;
383                 goto out;
384         }
385
386         ret = core->rate;
387
388         if (core->flags & CLK_IS_ROOT)
389                 goto out;
390
391         if (!core->parent)
392                 ret = 0;
393
394 out:
395         return ret;
396 }
397
398 unsigned long __clk_get_rate(struct clk *clk)
399 {
400         if (!clk)
401                 return 0;
402
403         return clk_core_get_rate_nolock(clk->core);
404 }
405 EXPORT_SYMBOL_GPL(__clk_get_rate);
406
407 static unsigned long __clk_get_accuracy(struct clk_core *core)
408 {
409         if (!core)
410                 return 0;
411
412         return core->accuracy;
413 }
414
415 unsigned long __clk_get_flags(struct clk *clk)
416 {
417         return !clk ? 0 : clk->core->flags;
418 }
419 EXPORT_SYMBOL_GPL(__clk_get_flags);
420
421 bool __clk_is_prepared(struct clk *clk)
422 {
423         if (!clk)
424                 return false;
425
426         return clk_core_is_prepared(clk->core);
427 }
428
429 bool __clk_is_enabled(struct clk *clk)
430 {
431         if (!clk)
432                 return false;
433
434         return clk_core_is_enabled(clk->core);
435 }
436 EXPORT_SYMBOL_GPL(__clk_is_enabled);
437
438 static bool mux_is_better_rate(unsigned long rate, unsigned long now,
439                            unsigned long best, unsigned long flags)
440 {
441         if (flags & CLK_MUX_ROUND_CLOSEST)
442                 return abs(now - rate) < abs(best - rate);
443
444         return now <= rate && now > best;
445 }
446
447 static int
448 clk_mux_determine_rate_flags(struct clk_hw *hw, struct clk_rate_request *req,
449                              unsigned long flags)
450 {
451         struct clk_core *core = hw->core, *parent, *best_parent = NULL;
452         int i, num_parents, ret;
453         unsigned long best = 0;
454         struct clk_rate_request parent_req = *req;
455
456         /* if NO_REPARENT flag set, pass through to current parent */
457         if (core->flags & CLK_SET_RATE_NO_REPARENT) {
458                 parent = core->parent;
459                 if (core->flags & CLK_SET_RATE_PARENT) {
460                         ret = __clk_determine_rate(parent ? parent->hw : NULL,
461                                                    &parent_req);
462                         if (ret)
463                                 return ret;
464
465                         best = parent_req.rate;
466                 } else if (parent) {
467                         best = clk_core_get_rate_nolock(parent);
468                 } else {
469                         best = clk_core_get_rate_nolock(core);
470                 }
471
472                 goto out;
473         }
474
475         /* find the parent that can provide the fastest rate <= rate */
476         num_parents = core->num_parents;
477         for (i = 0; i < num_parents; i++) {
478                 parent = clk_core_get_parent_by_index(core, i);
479                 if (!parent)
480                         continue;
481
482                 if (core->flags & CLK_SET_RATE_PARENT) {
483                         parent_req = *req;
484                         ret = __clk_determine_rate(parent->hw, &parent_req);
485                         if (ret)
486                                 continue;
487                 } else {
488                         parent_req.rate = clk_core_get_rate_nolock(parent);
489                 }
490
491                 if (mux_is_better_rate(req->rate, parent_req.rate,
492                                        best, flags)) {
493                         best_parent = parent;
494                         best = parent_req.rate;
495                 }
496         }
497
498         if (!best_parent)
499                 return -EINVAL;
500
501 out:
502         if (best_parent)
503                 req->best_parent_hw = best_parent->hw;
504         req->best_parent_rate = best;
505         req->rate = best;
506
507         return 0;
508 }
509
510 struct clk *__clk_lookup(const char *name)
511 {
512         struct clk_core *core = clk_core_lookup(name);
513
514         return !core ? NULL : core->hw->clk;
515 }
516
517 static void clk_core_get_boundaries(struct clk_core *core,
518                                     unsigned long *min_rate,
519                                     unsigned long *max_rate)
520 {
521         struct clk *clk_user;
522
523         *min_rate = core->min_rate;
524         *max_rate = core->max_rate;
525
526         hlist_for_each_entry(clk_user, &core->clks, clks_node)
527                 *min_rate = max(*min_rate, clk_user->min_rate);
528
529         hlist_for_each_entry(clk_user, &core->clks, clks_node)
530                 *max_rate = min(*max_rate, clk_user->max_rate);
531 }
532
533 void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate,
534                            unsigned long max_rate)
535 {
536         hw->core->min_rate = min_rate;
537         hw->core->max_rate = max_rate;
538 }
539 EXPORT_SYMBOL_GPL(clk_hw_set_rate_range);
540
541 /*
542  * Helper for finding best parent to provide a given frequency. This can be used
543  * directly as a determine_rate callback (e.g. for a mux), or from a more
544  * complex clock that may combine a mux with other operations.
545  */
546 int __clk_mux_determine_rate(struct clk_hw *hw,
547                              struct clk_rate_request *req)
548 {
549         return clk_mux_determine_rate_flags(hw, req, 0);
550 }
551 EXPORT_SYMBOL_GPL(__clk_mux_determine_rate);
552
553 int __clk_mux_determine_rate_closest(struct clk_hw *hw,
554                                      struct clk_rate_request *req)
555 {
556         return clk_mux_determine_rate_flags(hw, req, CLK_MUX_ROUND_CLOSEST);
557 }
558 EXPORT_SYMBOL_GPL(__clk_mux_determine_rate_closest);
559
560 /***        clk api        ***/
561
562 static void clk_core_unprepare(struct clk_core *core)
563 {
564         lockdep_assert_held(&prepare_lock);
565
566         if (!core)
567                 return;
568
569         if (WARN_ON(core->prepare_count == 0))
570                 return;
571
572         if (--core->prepare_count > 0)
573                 return;
574
575         WARN_ON(core->enable_count > 0);
576
577         trace_clk_unprepare(core);
578
579         if (core->ops->unprepare)
580                 core->ops->unprepare(core->hw);
581
582         trace_clk_unprepare_complete(core);
583         clk_core_unprepare(core->parent);
584 }
585
586 /**
587  * clk_unprepare - undo preparation of a clock source
588  * @clk: the clk being unprepared
589  *
590  * clk_unprepare may sleep, which differentiates it from clk_disable.  In a
591  * simple case, clk_unprepare can be used instead of clk_disable to gate a clk
592  * if the operation may sleep.  One example is a clk which is accessed over
593  * I2c.  In the complex case a clk gate operation may require a fast and a slow
594  * part.  It is this reason that clk_unprepare and clk_disable are not mutually
595  * exclusive.  In fact clk_disable must be called before clk_unprepare.
596  */
597 void clk_unprepare(struct clk *clk)
598 {
599         if (IS_ERR_OR_NULL(clk))
600                 return;
601
602         clk_prepare_lock();
603         clk_core_unprepare(clk->core);
604         clk_prepare_unlock();
605 }
606 EXPORT_SYMBOL_GPL(clk_unprepare);
607
608 static int clk_core_prepare(struct clk_core *core)
609 {
610         int ret = 0;
611
612         lockdep_assert_held(&prepare_lock);
613
614         if (!core)
615                 return 0;
616
617         if (core->prepare_count == 0) {
618                 ret = clk_core_prepare(core->parent);
619                 if (ret)
620                         return ret;
621
622                 trace_clk_prepare(core);
623
624                 if (core->ops->prepare)
625                         ret = core->ops->prepare(core->hw);
626
627                 trace_clk_prepare_complete(core);
628
629                 if (ret) {
630                         clk_core_unprepare(core->parent);
631                         return ret;
632                 }
633         }
634
635         core->prepare_count++;
636
637         return 0;
638 }
639
640 /**
641  * clk_prepare - prepare a clock source
642  * @clk: the clk being prepared
643  *
644  * clk_prepare may sleep, which differentiates it from clk_enable.  In a simple
645  * case, clk_prepare can be used instead of clk_enable to ungate a clk if the
646  * operation may sleep.  One example is a clk which is accessed over I2c.  In
647  * the complex case a clk ungate operation may require a fast and a slow part.
648  * It is this reason that clk_prepare and clk_enable are not mutually
649  * exclusive.  In fact clk_prepare must be called before clk_enable.
650  * Returns 0 on success, -EERROR otherwise.
651  */
652 int clk_prepare(struct clk *clk)
653 {
654         int ret;
655
656         if (!clk)
657                 return 0;
658
659         clk_prepare_lock();
660         ret = clk_core_prepare(clk->core);
661         clk_prepare_unlock();
662
663         return ret;
664 }
665 EXPORT_SYMBOL_GPL(clk_prepare);
666
667 static void clk_core_disable(struct clk_core *core)
668 {
669         lockdep_assert_held(&enable_lock);
670
671         if (!core)
672                 return;
673
674         if (WARN_ON(core->enable_count == 0))
675                 return;
676
677         if (--core->enable_count > 0)
678                 return;
679
680         trace_clk_disable(core);
681
682         if (core->ops->disable)
683                 core->ops->disable(core->hw);
684
685         trace_clk_disable_complete(core);
686
687         clk_core_disable(core->parent);
688 }
689
690 /**
691  * clk_disable - gate a clock
692  * @clk: the clk being gated
693  *
694  * clk_disable must not sleep, which differentiates it from clk_unprepare.  In
695  * a simple case, clk_disable can be used instead of clk_unprepare to gate a
696  * clk if the operation is fast and will never sleep.  One example is a
697  * SoC-internal clk which is controlled via simple register writes.  In the
698  * complex case a clk gate operation may require a fast and a slow part.  It is
699  * this reason that clk_unprepare and clk_disable are not mutually exclusive.
700  * In fact clk_disable must be called before clk_unprepare.
701  */
702 void clk_disable(struct clk *clk)
703 {
704         unsigned long flags;
705
706         if (IS_ERR_OR_NULL(clk))
707                 return;
708
709         flags = clk_enable_lock();
710         clk_core_disable(clk->core);
711         clk_enable_unlock(flags);
712 }
713 EXPORT_SYMBOL_GPL(clk_disable);
714
715 static int clk_core_enable(struct clk_core *core)
716 {
717         int ret = 0;
718
719         lockdep_assert_held(&enable_lock);
720
721         if (!core)
722                 return 0;
723
724         if (WARN_ON(core->prepare_count == 0))
725                 return -ESHUTDOWN;
726
727         if (core->enable_count == 0) {
728                 ret = clk_core_enable(core->parent);
729
730                 if (ret)
731                         return ret;
732
733                 trace_clk_enable(core);
734
735                 if (core->ops->enable)
736                         ret = core->ops->enable(core->hw);
737
738                 trace_clk_enable_complete(core);
739
740                 if (ret) {
741                         clk_core_disable(core->parent);
742                         return ret;
743                 }
744         }
745
746         core->enable_count++;
747         return 0;
748 }
749
750 /**
751  * clk_enable - ungate a clock
752  * @clk: the clk being ungated
753  *
754  * clk_enable must not sleep, which differentiates it from clk_prepare.  In a
755  * simple case, clk_enable can be used instead of clk_prepare to ungate a clk
756  * if the operation will never sleep.  One example is a SoC-internal clk which
757  * is controlled via simple register writes.  In the complex case a clk ungate
758  * operation may require a fast and a slow part.  It is this reason that
759  * clk_enable and clk_prepare are not mutually exclusive.  In fact clk_prepare
760  * must be called before clk_enable.  Returns 0 on success, -EERROR
761  * otherwise.
762  */
763 int clk_enable(struct clk *clk)
764 {
765         unsigned long flags;
766         int ret;
767
768         if (!clk)
769                 return 0;
770
771         flags = clk_enable_lock();
772         ret = clk_core_enable(clk->core);
773         clk_enable_unlock(flags);
774
775         return ret;
776 }
777 EXPORT_SYMBOL_GPL(clk_enable);
778
779 static int clk_core_round_rate_nolock(struct clk_core *core,
780                                       struct clk_rate_request *req)
781 {
782         struct clk_core *parent;
783         long rate;
784
785         lockdep_assert_held(&prepare_lock);
786
787         if (!core)
788                 return 0;
789
790         parent = core->parent;
791         if (parent) {
792                 req->best_parent_hw = parent->hw;
793                 req->best_parent_rate = parent->rate;
794         } else {
795                 req->best_parent_hw = NULL;
796                 req->best_parent_rate = 0;
797         }
798
799         if (core->ops->determine_rate) {
800                 return core->ops->determine_rate(core->hw, req);
801         } else if (core->ops->round_rate) {
802                 rate = core->ops->round_rate(core->hw, req->rate,
803                                              &req->best_parent_rate);
804                 if (rate < 0)
805                         return rate;
806
807                 req->rate = rate;
808         } else if (core->flags & CLK_SET_RATE_PARENT) {
809                 return clk_core_round_rate_nolock(parent, req);
810         } else {
811                 req->rate = core->rate;
812         }
813
814         return 0;
815 }
816
817 /**
818  * __clk_determine_rate - get the closest rate actually supported by a clock
819  * @hw: determine the rate of this clock
820  * @rate: target rate
821  * @min_rate: returned rate must be greater than this rate
822  * @max_rate: returned rate must be less than this rate
823  *
824  * Useful for clk_ops such as .set_rate and .determine_rate.
825  */
826 int __clk_determine_rate(struct clk_hw *hw, struct clk_rate_request *req)
827 {
828         if (!hw) {
829                 req->rate = 0;
830                 return 0;
831         }
832
833         return clk_core_round_rate_nolock(hw->core, req);
834 }
835 EXPORT_SYMBOL_GPL(__clk_determine_rate);
836
837 /**
838  * __clk_round_rate - round the given rate for a clk
839  * @clk: round the rate of this clock
840  * @rate: the rate which is to be rounded
841  *
842  * Useful for clk_ops such as .set_rate
843  */
844 unsigned long __clk_round_rate(struct clk *clk, unsigned long rate)
845 {
846         struct clk_rate_request req;
847         int ret;
848
849         if (!clk)
850                 return 0;
851
852         clk_core_get_boundaries(clk->core, &req.min_rate, &req.max_rate);
853         req.rate = rate;
854
855         ret = clk_core_round_rate_nolock(clk->core, &req);
856         if (ret)
857                 return 0;
858
859         return req.rate;
860 }
861 EXPORT_SYMBOL_GPL(__clk_round_rate);
862
863 /**
864  * clk_round_rate - round the given rate for a clk
865  * @clk: the clk for which we are rounding a rate
866  * @rate: the rate which is to be rounded
867  *
868  * Takes in a rate as input and rounds it to a rate that the clk can actually
869  * use which is then returned.  If clk doesn't support round_rate operation
870  * then the parent rate is returned.
871  */
872 long clk_round_rate(struct clk *clk, unsigned long rate)
873 {
874         unsigned long ret;
875
876         if (!clk)
877                 return 0;
878
879         clk_prepare_lock();
880         ret = __clk_round_rate(clk, rate);
881         clk_prepare_unlock();
882
883         return ret;
884 }
885 EXPORT_SYMBOL_GPL(clk_round_rate);
886
887 /**
888  * __clk_notify - call clk notifier chain
889  * @core: clk that is changing rate
890  * @msg: clk notifier type (see include/linux/clk.h)
891  * @old_rate: old clk rate
892  * @new_rate: new clk rate
893  *
894  * Triggers a notifier call chain on the clk rate-change notification
895  * for 'clk'.  Passes a pointer to the struct clk and the previous
896  * and current rates to the notifier callback.  Intended to be called by
897  * internal clock code only.  Returns NOTIFY_DONE from the last driver
898  * called if all went well, or NOTIFY_STOP or NOTIFY_BAD immediately if
899  * a driver returns that.
900  */
901 static int __clk_notify(struct clk_core *core, unsigned long msg,
902                 unsigned long old_rate, unsigned long new_rate)
903 {
904         struct clk_notifier *cn;
905         struct clk_notifier_data cnd;
906         int ret = NOTIFY_DONE;
907
908         cnd.old_rate = old_rate;
909         cnd.new_rate = new_rate;
910
911         list_for_each_entry(cn, &clk_notifier_list, node) {
912                 if (cn->clk->core == core) {
913                         cnd.clk = cn->clk;
914                         ret = srcu_notifier_call_chain(&cn->notifier_head, msg,
915                                         &cnd);
916                 }
917         }
918
919         return ret;
920 }
921
922 /**
923  * __clk_recalc_accuracies
924  * @core: first clk in the subtree
925  *
926  * Walks the subtree of clks starting with clk and recalculates accuracies as
927  * it goes.  Note that if a clk does not implement the .recalc_accuracy
928  * callback then it is assumed that the clock will take on the accuracy of its
929  * parent.
930  */
931 static void __clk_recalc_accuracies(struct clk_core *core)
932 {
933         unsigned long parent_accuracy = 0;
934         struct clk_core *child;
935
936         lockdep_assert_held(&prepare_lock);
937
938         if (core->parent)
939                 parent_accuracy = core->parent->accuracy;
940
941         if (core->ops->recalc_accuracy)
942                 core->accuracy = core->ops->recalc_accuracy(core->hw,
943                                                           parent_accuracy);
944         else
945                 core->accuracy = parent_accuracy;
946
947         hlist_for_each_entry(child, &core->children, child_node)
948                 __clk_recalc_accuracies(child);
949 }
950
951 static long clk_core_get_accuracy(struct clk_core *core)
952 {
953         unsigned long accuracy;
954
955         clk_prepare_lock();
956         if (core && (core->flags & CLK_GET_ACCURACY_NOCACHE))
957                 __clk_recalc_accuracies(core);
958
959         accuracy = __clk_get_accuracy(core);
960         clk_prepare_unlock();
961
962         return accuracy;
963 }
964
965 /**
966  * clk_get_accuracy - return the accuracy of clk
967  * @clk: the clk whose accuracy is being returned
968  *
969  * Simply returns the cached accuracy of the clk, unless
970  * CLK_GET_ACCURACY_NOCACHE flag is set, which means a recalc_rate will be
971  * issued.
972  * If clk is NULL then returns 0.
973  */
974 long clk_get_accuracy(struct clk *clk)
975 {
976         if (!clk)
977                 return 0;
978
979         return clk_core_get_accuracy(clk->core);
980 }
981 EXPORT_SYMBOL_GPL(clk_get_accuracy);
982
983 static unsigned long clk_recalc(struct clk_core *core,
984                                 unsigned long parent_rate)
985 {
986         if (core->ops->recalc_rate)
987                 return core->ops->recalc_rate(core->hw, parent_rate);
988         return parent_rate;
989 }
990
991 /**
992  * __clk_recalc_rates
993  * @core: first clk in the subtree
994  * @msg: notification type (see include/linux/clk.h)
995  *
996  * Walks the subtree of clks starting with clk and recalculates rates as it
997  * goes.  Note that if a clk does not implement the .recalc_rate callback then
998  * it is assumed that the clock will take on the rate of its parent.
999  *
1000  * clk_recalc_rates also propagates the POST_RATE_CHANGE notification,
1001  * if necessary.
1002  */
1003 static void __clk_recalc_rates(struct clk_core *core, unsigned long msg)
1004 {
1005         unsigned long old_rate;
1006         unsigned long parent_rate = 0;
1007         struct clk_core *child;
1008
1009         lockdep_assert_held(&prepare_lock);
1010
1011         old_rate = core->rate;
1012
1013         if (core->parent)
1014                 parent_rate = core->parent->rate;
1015
1016         core->rate = clk_recalc(core, parent_rate);
1017
1018         /*
1019          * ignore NOTIFY_STOP and NOTIFY_BAD return values for POST_RATE_CHANGE
1020          * & ABORT_RATE_CHANGE notifiers
1021          */
1022         if (core->notifier_count && msg)
1023                 __clk_notify(core, msg, old_rate, core->rate);
1024
1025         hlist_for_each_entry(child, &core->children, child_node)
1026                 __clk_recalc_rates(child, msg);
1027 }
1028
1029 static unsigned long clk_core_get_rate(struct clk_core *core)
1030 {
1031         unsigned long rate;
1032
1033         clk_prepare_lock();
1034
1035         if (core && (core->flags & CLK_GET_RATE_NOCACHE))
1036                 __clk_recalc_rates(core, 0);
1037
1038         rate = clk_core_get_rate_nolock(core);
1039         clk_prepare_unlock();
1040
1041         return rate;
1042 }
1043
1044 /**
1045  * clk_get_rate - return the rate of clk
1046  * @clk: the clk whose rate is being returned
1047  *
1048  * Simply returns the cached rate of the clk, unless CLK_GET_RATE_NOCACHE flag
1049  * is set, which means a recalc_rate will be issued.
1050  * If clk is NULL then returns 0.
1051  */
1052 unsigned long clk_get_rate(struct clk *clk)
1053 {
1054         if (!clk)
1055                 return 0;
1056
1057         return clk_core_get_rate(clk->core);
1058 }
1059 EXPORT_SYMBOL_GPL(clk_get_rate);
1060
1061 static int clk_fetch_parent_index(struct clk_core *core,
1062                                   struct clk_core *parent)
1063 {
1064         int i;
1065
1066         if (!core->parents) {
1067                 core->parents = kcalloc(core->num_parents,
1068                                         sizeof(struct clk *), GFP_KERNEL);
1069                 if (!core->parents)
1070                         return -ENOMEM;
1071         }
1072
1073         /*
1074          * find index of new parent clock using cached parent ptrs,
1075          * or if not yet cached, use string name comparison and cache
1076          * them now to avoid future calls to clk_core_lookup.
1077          */
1078         for (i = 0; i < core->num_parents; i++) {
1079                 if (core->parents[i] == parent)
1080                         return i;
1081
1082                 if (core->parents[i])
1083                         continue;
1084
1085                 if (!strcmp(core->parent_names[i], parent->name)) {
1086                         core->parents[i] = clk_core_lookup(parent->name);
1087                         return i;
1088                 }
1089         }
1090
1091         return -EINVAL;
1092 }
1093
1094 static void clk_reparent(struct clk_core *core, struct clk_core *new_parent)
1095 {
1096         hlist_del(&core->child_node);
1097
1098         if (new_parent) {
1099                 /* avoid duplicate POST_RATE_CHANGE notifications */
1100                 if (new_parent->new_child == core)
1101                         new_parent->new_child = NULL;
1102
1103                 hlist_add_head(&core->child_node, &new_parent->children);
1104         } else {
1105                 hlist_add_head(&core->child_node, &clk_orphan_list);
1106         }
1107
1108         core->parent = new_parent;
1109 }
1110
1111 static struct clk_core *__clk_set_parent_before(struct clk_core *core,
1112                                            struct clk_core *parent)
1113 {
1114         unsigned long flags;
1115         struct clk_core *old_parent = core->parent;
1116
1117         /*
1118          * Migrate prepare state between parents and prevent race with
1119          * clk_enable().
1120          *
1121          * If the clock is not prepared, then a race with
1122          * clk_enable/disable() is impossible since we already have the
1123          * prepare lock (future calls to clk_enable() need to be preceded by
1124          * a clk_prepare()).
1125          *
1126          * If the clock is prepared, migrate the prepared state to the new
1127          * parent and also protect against a race with clk_enable() by
1128          * forcing the clock and the new parent on.  This ensures that all
1129          * future calls to clk_enable() are practically NOPs with respect to
1130          * hardware and software states.
1131          *
1132          * See also: Comment for clk_set_parent() below.
1133          */
1134         if (core->prepare_count) {
1135                 clk_core_prepare(parent);
1136                 flags = clk_enable_lock();
1137                 clk_core_enable(parent);
1138                 clk_core_enable(core);
1139                 clk_enable_unlock(flags);
1140         }
1141
1142         /* update the clk tree topology */
1143         flags = clk_enable_lock();
1144         clk_reparent(core, parent);
1145         clk_enable_unlock(flags);
1146
1147         return old_parent;
1148 }
1149
1150 static void __clk_set_parent_after(struct clk_core *core,
1151                                    struct clk_core *parent,
1152                                    struct clk_core *old_parent)
1153 {
1154         unsigned long flags;
1155
1156         /*
1157          * Finish the migration of prepare state and undo the changes done
1158          * for preventing a race with clk_enable().
1159          */
1160         if (core->prepare_count) {
1161                 flags = clk_enable_lock();
1162                 clk_core_disable(core);
1163                 clk_core_disable(old_parent);
1164                 clk_enable_unlock(flags);
1165                 clk_core_unprepare(old_parent);
1166         }
1167 }
1168
1169 static int __clk_set_parent(struct clk_core *core, struct clk_core *parent,
1170                             u8 p_index)
1171 {
1172         unsigned long flags;
1173         int ret = 0;
1174         struct clk_core *old_parent;
1175
1176         old_parent = __clk_set_parent_before(core, parent);
1177
1178         trace_clk_set_parent(core, parent);
1179
1180         /* change clock input source */
1181         if (parent && core->ops->set_parent)
1182                 ret = core->ops->set_parent(core->hw, p_index);
1183
1184         trace_clk_set_parent_complete(core, parent);
1185
1186         if (ret) {
1187                 flags = clk_enable_lock();
1188                 clk_reparent(core, old_parent);
1189                 clk_enable_unlock(flags);
1190
1191                 if (core->prepare_count) {
1192                         flags = clk_enable_lock();
1193                         clk_core_disable(core);
1194                         clk_core_disable(parent);
1195                         clk_enable_unlock(flags);
1196                         clk_core_unprepare(parent);
1197                 }
1198                 return ret;
1199         }
1200
1201         __clk_set_parent_after(core, parent, old_parent);
1202
1203         return 0;
1204 }
1205
1206 /**
1207  * __clk_speculate_rates
1208  * @core: first clk in the subtree
1209  * @parent_rate: the "future" rate of clk's parent
1210  *
1211  * Walks the subtree of clks starting with clk, speculating rates as it
1212  * goes and firing off PRE_RATE_CHANGE notifications as necessary.
1213  *
1214  * Unlike clk_recalc_rates, clk_speculate_rates exists only for sending
1215  * pre-rate change notifications and returns early if no clks in the
1216  * subtree have subscribed to the notifications.  Note that if a clk does not
1217  * implement the .recalc_rate callback then it is assumed that the clock will
1218  * take on the rate of its parent.
1219  */
1220 static int __clk_speculate_rates(struct clk_core *core,
1221                                  unsigned long parent_rate)
1222 {
1223         struct clk_core *child;
1224         unsigned long new_rate;
1225         int ret = NOTIFY_DONE;
1226
1227         lockdep_assert_held(&prepare_lock);
1228
1229         new_rate = clk_recalc(core, parent_rate);
1230
1231         /* abort rate change if a driver returns NOTIFY_BAD or NOTIFY_STOP */
1232         if (core->notifier_count)
1233                 ret = __clk_notify(core, PRE_RATE_CHANGE, core->rate, new_rate);
1234
1235         if (ret & NOTIFY_STOP_MASK) {
1236                 pr_debug("%s: clk notifier callback for clock %s aborted with error %d\n",
1237                                 __func__, core->name, ret);
1238                 goto out;
1239         }
1240
1241         hlist_for_each_entry(child, &core->children, child_node) {
1242                 ret = __clk_speculate_rates(child, new_rate);
1243                 if (ret & NOTIFY_STOP_MASK)
1244                         break;
1245         }
1246
1247 out:
1248         return ret;
1249 }
1250
1251 static void clk_calc_subtree(struct clk_core *core, unsigned long new_rate,
1252                              struct clk_core *new_parent, u8 p_index)
1253 {
1254         struct clk_core *child;
1255
1256         core->new_rate = new_rate;
1257         core->new_parent = new_parent;
1258         core->new_parent_index = p_index;
1259         /* include clk in new parent's PRE_RATE_CHANGE notifications */
1260         core->new_child = NULL;
1261         if (new_parent && new_parent != core->parent)
1262                 new_parent->new_child = core;
1263
1264         hlist_for_each_entry(child, &core->children, child_node) {
1265                 child->new_rate = clk_recalc(child, new_rate);
1266                 clk_calc_subtree(child, child->new_rate, NULL, 0);
1267         }
1268 }
1269
1270 /*
1271  * calculate the new rates returning the topmost clock that has to be
1272  * changed.
1273  */
1274 static struct clk_core *clk_calc_new_rates(struct clk_core *core,
1275                                            unsigned long rate)
1276 {
1277         struct clk_core *top = core;
1278         struct clk_core *old_parent, *parent;
1279         unsigned long best_parent_rate = 0;
1280         unsigned long new_rate;
1281         unsigned long min_rate;
1282         unsigned long max_rate;
1283         int p_index = 0;
1284         long ret;
1285
1286         /* sanity */
1287         if (IS_ERR_OR_NULL(core))
1288                 return NULL;
1289
1290         /* save parent rate, if it exists */
1291         parent = old_parent = core->parent;
1292         if (parent)
1293                 best_parent_rate = parent->rate;
1294
1295         clk_core_get_boundaries(core, &min_rate, &max_rate);
1296
1297         /* find the closest rate and parent clk/rate */
1298         if (core->ops->determine_rate) {
1299                 struct clk_rate_request req;
1300
1301                 req.rate = rate;
1302                 req.min_rate = min_rate;
1303                 req.max_rate = max_rate;
1304                 if (parent) {
1305                         req.best_parent_hw = parent->hw;
1306                         req.best_parent_rate = parent->rate;
1307                 } else {
1308                         req.best_parent_hw = NULL;
1309                         req.best_parent_rate = 0;
1310                 }
1311
1312                 ret = core->ops->determine_rate(core->hw, &req);
1313                 if (ret < 0)
1314                         return NULL;
1315
1316                 best_parent_rate = req.best_parent_rate;
1317                 new_rate = req.rate;
1318                 parent = req.best_parent_hw ? req.best_parent_hw->core : NULL;
1319         } else if (core->ops->round_rate) {
1320                 ret = core->ops->round_rate(core->hw, rate,
1321                                             &best_parent_rate);
1322                 if (ret < 0)
1323                         return NULL;
1324
1325                 new_rate = ret;
1326                 if (new_rate < min_rate || new_rate > max_rate)
1327                         return NULL;
1328         } else if (!parent || !(core->flags & CLK_SET_RATE_PARENT)) {
1329                 /* pass-through clock without adjustable parent */
1330                 core->new_rate = core->rate;
1331                 return NULL;
1332         } else {
1333                 /* pass-through clock with adjustable parent */
1334                 top = clk_calc_new_rates(parent, rate);
1335                 new_rate = parent->new_rate;
1336                 goto out;
1337         }
1338
1339         /* some clocks must be gated to change parent */
1340         if (parent != old_parent &&
1341             (core->flags & CLK_SET_PARENT_GATE) && core->prepare_count) {
1342                 pr_debug("%s: %s not gated but wants to reparent\n",
1343                          __func__, core->name);
1344                 return NULL;
1345         }
1346
1347         /* try finding the new parent index */
1348         if (parent && core->num_parents > 1) {
1349                 p_index = clk_fetch_parent_index(core, parent);
1350                 if (p_index < 0) {
1351                         pr_debug("%s: clk %s can not be parent of clk %s\n",
1352                                  __func__, parent->name, core->name);
1353                         return NULL;
1354                 }
1355         }
1356
1357         if ((core->flags & CLK_SET_RATE_PARENT) && parent &&
1358             best_parent_rate != parent->rate)
1359                 top = clk_calc_new_rates(parent, best_parent_rate);
1360
1361 out:
1362         clk_calc_subtree(core, new_rate, parent, p_index);
1363
1364         return top;
1365 }
1366
1367 /*
1368  * Notify about rate changes in a subtree. Always walk down the whole tree
1369  * so that in case of an error we can walk down the whole tree again and
1370  * abort the change.
1371  */
1372 static struct clk_core *clk_propagate_rate_change(struct clk_core *core,
1373                                                   unsigned long event)
1374 {
1375         struct clk_core *child, *tmp_clk, *fail_clk = NULL;
1376         int ret = NOTIFY_DONE;
1377
1378         if (core->rate == core->new_rate)
1379                 return NULL;
1380
1381         if (core->notifier_count) {
1382                 ret = __clk_notify(core, event, core->rate, core->new_rate);
1383                 if (ret & NOTIFY_STOP_MASK)
1384                         fail_clk = core;
1385         }
1386
1387         hlist_for_each_entry(child, &core->children, child_node) {
1388                 /* Skip children who will be reparented to another clock */
1389                 if (child->new_parent && child->new_parent != core)
1390                         continue;
1391                 tmp_clk = clk_propagate_rate_change(child, event);
1392                 if (tmp_clk)
1393                         fail_clk = tmp_clk;
1394         }
1395
1396         /* handle the new child who might not be in core->children yet */
1397         if (core->new_child) {
1398                 tmp_clk = clk_propagate_rate_change(core->new_child, event);
1399                 if (tmp_clk)
1400                         fail_clk = tmp_clk;
1401         }
1402
1403         return fail_clk;
1404 }
1405
1406 /*
1407  * walk down a subtree and set the new rates notifying the rate
1408  * change on the way
1409  */
1410 static void clk_change_rate(struct clk_core *core)
1411 {
1412         struct clk_core *child;
1413         struct hlist_node *tmp;
1414         unsigned long old_rate;
1415         unsigned long best_parent_rate = 0;
1416         bool skip_set_rate = false;
1417         struct clk_core *old_parent;
1418
1419         old_rate = core->rate;
1420
1421         if (core->new_parent)
1422                 best_parent_rate = core->new_parent->rate;
1423         else if (core->parent)
1424                 best_parent_rate = core->parent->rate;
1425
1426         if (core->new_parent && core->new_parent != core->parent) {
1427                 old_parent = __clk_set_parent_before(core, core->new_parent);
1428                 trace_clk_set_parent(core, core->new_parent);
1429
1430                 if (core->ops->set_rate_and_parent) {
1431                         skip_set_rate = true;
1432                         core->ops->set_rate_and_parent(core->hw, core->new_rate,
1433                                         best_parent_rate,
1434                                         core->new_parent_index);
1435                 } else if (core->ops->set_parent) {
1436                         core->ops->set_parent(core->hw, core->new_parent_index);
1437                 }
1438
1439                 trace_clk_set_parent_complete(core, core->new_parent);
1440                 __clk_set_parent_after(core, core->new_parent, old_parent);
1441         }
1442
1443         trace_clk_set_rate(core, core->new_rate);
1444
1445         if (!skip_set_rate && core->ops->set_rate)
1446                 core->ops->set_rate(core->hw, core->new_rate, best_parent_rate);
1447
1448         trace_clk_set_rate_complete(core, core->new_rate);
1449
1450         core->rate = clk_recalc(core, best_parent_rate);
1451
1452         if (core->notifier_count && old_rate != core->rate)
1453                 __clk_notify(core, POST_RATE_CHANGE, old_rate, core->rate);
1454
1455         if (core->flags & CLK_RECALC_NEW_RATES)
1456                 (void)clk_calc_new_rates(core, core->new_rate);
1457
1458         /*
1459          * Use safe iteration, as change_rate can actually swap parents
1460          * for certain clock types.
1461          */
1462         hlist_for_each_entry_safe(child, tmp, &core->children, child_node) {
1463                 /* Skip children who will be reparented to another clock */
1464                 if (child->new_parent && child->new_parent != core)
1465                         continue;
1466                 clk_change_rate(child);
1467         }
1468
1469         /* handle the new child who might not be in core->children yet */
1470         if (core->new_child)
1471                 clk_change_rate(core->new_child);
1472 }
1473
1474 static int clk_core_set_rate_nolock(struct clk_core *core,
1475                                     unsigned long req_rate)
1476 {
1477         struct clk_core *top, *fail_clk;
1478         unsigned long rate = req_rate;
1479         int ret = 0;
1480
1481         if (!core)
1482                 return 0;
1483
1484         /* bail early if nothing to do */
1485         if (rate == clk_core_get_rate_nolock(core))
1486                 return 0;
1487
1488         if ((core->flags & CLK_SET_RATE_GATE) && core->prepare_count)
1489                 return -EBUSY;
1490
1491         /* calculate new rates and get the topmost changed clock */
1492         top = clk_calc_new_rates(core, rate);
1493         if (!top)
1494                 return -EINVAL;
1495
1496         /* notify that we are about to change rates */
1497         fail_clk = clk_propagate_rate_change(top, PRE_RATE_CHANGE);
1498         if (fail_clk) {
1499                 pr_debug("%s: failed to set %s rate\n", __func__,
1500                                 fail_clk->name);
1501                 clk_propagate_rate_change(top, ABORT_RATE_CHANGE);
1502                 return -EBUSY;
1503         }
1504
1505         /* change the rates */
1506         clk_change_rate(top);
1507
1508         core->req_rate = req_rate;
1509
1510         return ret;
1511 }
1512
1513 /**
1514  * clk_set_rate - specify a new rate for clk
1515  * @clk: the clk whose rate is being changed
1516  * @rate: the new rate for clk
1517  *
1518  * In the simplest case clk_set_rate will only adjust the rate of clk.
1519  *
1520  * Setting the CLK_SET_RATE_PARENT flag allows the rate change operation to
1521  * propagate up to clk's parent; whether or not this happens depends on the
1522  * outcome of clk's .round_rate implementation.  If *parent_rate is unchanged
1523  * after calling .round_rate then upstream parent propagation is ignored.  If
1524  * *parent_rate comes back with a new rate for clk's parent then we propagate
1525  * up to clk's parent and set its rate.  Upward propagation will continue
1526  * until either a clk does not support the CLK_SET_RATE_PARENT flag or
1527  * .round_rate stops requesting changes to clk's parent_rate.
1528  *
1529  * Rate changes are accomplished via tree traversal that also recalculates the
1530  * rates for the clocks and fires off POST_RATE_CHANGE notifiers.
1531  *
1532  * Returns 0 on success, -EERROR otherwise.
1533  */
1534 int clk_set_rate(struct clk *clk, unsigned long rate)
1535 {
1536         int ret;
1537
1538         if (!clk)
1539                 return 0;
1540
1541         /* prevent racing with updates to the clock topology */
1542         clk_prepare_lock();
1543
1544         ret = clk_core_set_rate_nolock(clk->core, rate);
1545
1546         clk_prepare_unlock();
1547
1548         return ret;
1549 }
1550 EXPORT_SYMBOL_GPL(clk_set_rate);
1551
1552 /**
1553  * clk_set_rate_range - set a rate range for a clock source
1554  * @clk: clock source
1555  * @min: desired minimum clock rate in Hz, inclusive
1556  * @max: desired maximum clock rate in Hz, inclusive
1557  *
1558  * Returns success (0) or negative errno.
1559  */
1560 int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max)
1561 {
1562         int ret = 0;
1563
1564         if (!clk)
1565                 return 0;
1566
1567         if (min > max) {
1568                 pr_err("%s: clk %s dev %s con %s: invalid range [%lu, %lu]\n",
1569                        __func__, clk->core->name, clk->dev_id, clk->con_id,
1570                        min, max);
1571                 return -EINVAL;
1572         }
1573
1574         clk_prepare_lock();
1575
1576         if (min != clk->min_rate || max != clk->max_rate) {
1577                 clk->min_rate = min;
1578                 clk->max_rate = max;
1579                 ret = clk_core_set_rate_nolock(clk->core, clk->core->req_rate);
1580         }
1581
1582         clk_prepare_unlock();
1583
1584         return ret;
1585 }
1586 EXPORT_SYMBOL_GPL(clk_set_rate_range);
1587
1588 /**
1589  * clk_set_min_rate - set a minimum clock rate for a clock source
1590  * @clk: clock source
1591  * @rate: desired minimum clock rate in Hz, inclusive
1592  *
1593  * Returns success (0) or negative errno.
1594  */
1595 int clk_set_min_rate(struct clk *clk, unsigned long rate)
1596 {
1597         if (!clk)
1598                 return 0;
1599
1600         return clk_set_rate_range(clk, rate, clk->max_rate);
1601 }
1602 EXPORT_SYMBOL_GPL(clk_set_min_rate);
1603
1604 /**
1605  * clk_set_max_rate - set a maximum clock rate for a clock source
1606  * @clk: clock source
1607  * @rate: desired maximum clock rate in Hz, inclusive
1608  *
1609  * Returns success (0) or negative errno.
1610  */
1611 int clk_set_max_rate(struct clk *clk, unsigned long rate)
1612 {
1613         if (!clk)
1614                 return 0;
1615
1616         return clk_set_rate_range(clk, clk->min_rate, rate);
1617 }
1618 EXPORT_SYMBOL_GPL(clk_set_max_rate);
1619
1620 /**
1621  * clk_get_parent - return the parent of a clk
1622  * @clk: the clk whose parent gets returned
1623  *
1624  * Simply returns clk->parent.  Returns NULL if clk is NULL.
1625  */
1626 struct clk *clk_get_parent(struct clk *clk)
1627 {
1628         struct clk *parent;
1629
1630         clk_prepare_lock();
1631         parent = __clk_get_parent(clk);
1632         clk_prepare_unlock();
1633
1634         return parent;
1635 }
1636 EXPORT_SYMBOL_GPL(clk_get_parent);
1637
1638 /*
1639  * .get_parent is mandatory for clocks with multiple possible parents.  It is
1640  * optional for single-parent clocks.  Always call .get_parent if it is
1641  * available and WARN if it is missing for multi-parent clocks.
1642  *
1643  * For single-parent clocks without .get_parent, first check to see if the
1644  * .parents array exists, and if so use it to avoid an expensive tree
1645  * traversal.  If .parents does not exist then walk the tree.
1646  */
1647 static struct clk_core *__clk_init_parent(struct clk_core *core)
1648 {
1649         struct clk_core *ret = NULL;
1650         u8 index;
1651
1652         /* handle the trivial cases */
1653
1654         if (!core->num_parents)
1655                 goto out;
1656
1657         if (core->num_parents == 1) {
1658                 if (IS_ERR_OR_NULL(core->parent))
1659                         core->parent = clk_core_lookup(core->parent_names[0]);
1660                 ret = core->parent;
1661                 goto out;
1662         }
1663
1664         if (!core->ops->get_parent) {
1665                 WARN(!core->ops->get_parent,
1666                         "%s: multi-parent clocks must implement .get_parent\n",
1667                         __func__);
1668                 goto out;
1669         };
1670
1671         /*
1672          * Do our best to cache parent clocks in core->parents.  This prevents
1673          * unnecessary and expensive lookups.  We don't set core->parent here;
1674          * that is done by the calling function.
1675          */
1676
1677         index = core->ops->get_parent(core->hw);
1678
1679         if (!core->parents)
1680                 core->parents =
1681                         kcalloc(core->num_parents, sizeof(struct clk *),
1682                                         GFP_KERNEL);
1683
1684         ret = clk_core_get_parent_by_index(core, index);
1685
1686 out:
1687         return ret;
1688 }
1689
1690 static void clk_core_reparent(struct clk_core *core,
1691                                   struct clk_core *new_parent)
1692 {
1693         clk_reparent(core, new_parent);
1694         __clk_recalc_accuracies(core);
1695         __clk_recalc_rates(core, POST_RATE_CHANGE);
1696 }
1697
1698 void clk_hw_reparent(struct clk_hw *hw, struct clk_hw *new_parent)
1699 {
1700         if (!hw)
1701                 return;
1702
1703         clk_core_reparent(hw->core, !new_parent ? NULL : new_parent->core);
1704 }
1705
1706 /**
1707  * clk_has_parent - check if a clock is a possible parent for another
1708  * @clk: clock source
1709  * @parent: parent clock source
1710  *
1711  * This function can be used in drivers that need to check that a clock can be
1712  * the parent of another without actually changing the parent.
1713  *
1714  * Returns true if @parent is a possible parent for @clk, false otherwise.
1715  */
1716 bool clk_has_parent(struct clk *clk, struct clk *parent)
1717 {
1718         struct clk_core *core, *parent_core;
1719         unsigned int i;
1720
1721         /* NULL clocks should be nops, so return success if either is NULL. */
1722         if (!clk || !parent)
1723                 return true;
1724
1725         core = clk->core;
1726         parent_core = parent->core;
1727
1728         /* Optimize for the case where the parent is already the parent. */
1729         if (core->parent == parent_core)
1730                 return true;
1731
1732         for (i = 0; i < core->num_parents; i++)
1733                 if (strcmp(core->parent_names[i], parent_core->name) == 0)
1734                         return true;
1735
1736         return false;
1737 }
1738 EXPORT_SYMBOL_GPL(clk_has_parent);
1739
1740 static int clk_core_set_parent(struct clk_core *core, struct clk_core *parent)
1741 {
1742         int ret = 0;
1743         int p_index = 0;
1744         unsigned long p_rate = 0;
1745
1746         if (!core)
1747                 return 0;
1748
1749         /* prevent racing with updates to the clock topology */
1750         clk_prepare_lock();
1751
1752         if (core->parent == parent)
1753                 goto out;
1754
1755         /* verify ops for for multi-parent clks */
1756         if ((core->num_parents > 1) && (!core->ops->set_parent)) {
1757                 ret = -ENOSYS;
1758                 goto out;
1759         }
1760
1761         /* check that we are allowed to re-parent if the clock is in use */
1762         if ((core->flags & CLK_SET_PARENT_GATE) && core->prepare_count) {
1763                 ret = -EBUSY;
1764                 goto out;
1765         }
1766
1767         /* try finding the new parent index */
1768         if (parent) {
1769                 p_index = clk_fetch_parent_index(core, parent);
1770                 p_rate = parent->rate;
1771                 if (p_index < 0) {
1772                         pr_debug("%s: clk %s can not be parent of clk %s\n",
1773                                         __func__, parent->name, core->name);
1774                         ret = p_index;
1775                         goto out;
1776                 }
1777         }
1778
1779         /* propagate PRE_RATE_CHANGE notifications */
1780         ret = __clk_speculate_rates(core, p_rate);
1781
1782         /* abort if a driver objects */
1783         if (ret & NOTIFY_STOP_MASK)
1784                 goto out;
1785
1786         /* do the re-parent */
1787         ret = __clk_set_parent(core, parent, p_index);
1788
1789         /* propagate rate an accuracy recalculation accordingly */
1790         if (ret) {
1791                 __clk_recalc_rates(core, ABORT_RATE_CHANGE);
1792         } else {
1793                 __clk_recalc_rates(core, POST_RATE_CHANGE);
1794                 __clk_recalc_accuracies(core);
1795         }
1796
1797 out:
1798         clk_prepare_unlock();
1799
1800         return ret;
1801 }
1802
1803 /**
1804  * clk_set_parent - switch the parent of a mux clk
1805  * @clk: the mux clk whose input we are switching
1806  * @parent: the new input to clk
1807  *
1808  * Re-parent clk to use parent as its new input source.  If clk is in
1809  * prepared state, the clk will get enabled for the duration of this call. If
1810  * that's not acceptable for a specific clk (Eg: the consumer can't handle
1811  * that, the reparenting is glitchy in hardware, etc), use the
1812  * CLK_SET_PARENT_GATE flag to allow reparenting only when clk is unprepared.
1813  *
1814  * After successfully changing clk's parent clk_set_parent will update the
1815  * clk topology, sysfs topology and propagate rate recalculation via
1816  * __clk_recalc_rates.
1817  *
1818  * Returns 0 on success, -EERROR otherwise.
1819  */
1820 int clk_set_parent(struct clk *clk, struct clk *parent)
1821 {
1822         if (!clk)
1823                 return 0;
1824
1825         return clk_core_set_parent(clk->core, parent ? parent->core : NULL);
1826 }
1827 EXPORT_SYMBOL_GPL(clk_set_parent);
1828
1829 /**
1830  * clk_set_phase - adjust the phase shift of a clock signal
1831  * @clk: clock signal source
1832  * @degrees: number of degrees the signal is shifted
1833  *
1834  * Shifts the phase of a clock signal by the specified
1835  * degrees. Returns 0 on success, -EERROR otherwise.
1836  *
1837  * This function makes no distinction about the input or reference
1838  * signal that we adjust the clock signal phase against. For example
1839  * phase locked-loop clock signal generators we may shift phase with
1840  * respect to feedback clock signal input, but for other cases the
1841  * clock phase may be shifted with respect to some other, unspecified
1842  * signal.
1843  *
1844  * Additionally the concept of phase shift does not propagate through
1845  * the clock tree hierarchy, which sets it apart from clock rates and
1846  * clock accuracy. A parent clock phase attribute does not have an
1847  * impact on the phase attribute of a child clock.
1848  */
1849 int clk_set_phase(struct clk *clk, int degrees)
1850 {
1851         int ret = -EINVAL;
1852
1853         if (!clk)
1854                 return 0;
1855
1856         /* sanity check degrees */
1857         degrees %= 360;
1858         if (degrees < 0)
1859                 degrees += 360;
1860
1861         clk_prepare_lock();
1862
1863         trace_clk_set_phase(clk->core, degrees);
1864
1865         if (clk->core->ops->set_phase)
1866                 ret = clk->core->ops->set_phase(clk->core->hw, degrees);
1867
1868         trace_clk_set_phase_complete(clk->core, degrees);
1869
1870         if (!ret)
1871                 clk->core->phase = degrees;
1872
1873         clk_prepare_unlock();
1874
1875         return ret;
1876 }
1877 EXPORT_SYMBOL_GPL(clk_set_phase);
1878
1879 static int clk_core_get_phase(struct clk_core *core)
1880 {
1881         int ret;
1882
1883         clk_prepare_lock();
1884         ret = core->phase;
1885         clk_prepare_unlock();
1886
1887         return ret;
1888 }
1889
1890 /**
1891  * clk_get_phase - return the phase shift of a clock signal
1892  * @clk: clock signal source
1893  *
1894  * Returns the phase shift of a clock node in degrees, otherwise returns
1895  * -EERROR.
1896  */
1897 int clk_get_phase(struct clk *clk)
1898 {
1899         if (!clk)
1900                 return 0;
1901
1902         return clk_core_get_phase(clk->core);
1903 }
1904 EXPORT_SYMBOL_GPL(clk_get_phase);
1905
1906 /**
1907  * clk_is_match - check if two clk's point to the same hardware clock
1908  * @p: clk compared against q
1909  * @q: clk compared against p
1910  *
1911  * Returns true if the two struct clk pointers both point to the same hardware
1912  * clock node. Put differently, returns true if struct clk *p and struct clk *q
1913  * share the same struct clk_core object.
1914  *
1915  * Returns false otherwise. Note that two NULL clks are treated as matching.
1916  */
1917 bool clk_is_match(const struct clk *p, const struct clk *q)
1918 {
1919         /* trivial case: identical struct clk's or both NULL */
1920         if (p == q)
1921                 return true;
1922
1923         /* true if clk->core pointers match. Avoid derefing garbage */
1924         if (!IS_ERR_OR_NULL(p) && !IS_ERR_OR_NULL(q))
1925                 if (p->core == q->core)
1926                         return true;
1927
1928         return false;
1929 }
1930 EXPORT_SYMBOL_GPL(clk_is_match);
1931
1932 /***        debugfs support        ***/
1933
1934 #ifdef CONFIG_DEBUG_FS
1935 #include <linux/debugfs.h>
1936
1937 static struct dentry *rootdir;
1938 static int inited = 0;
1939 static DEFINE_MUTEX(clk_debug_lock);
1940 static HLIST_HEAD(clk_debug_list);
1941
1942 static struct hlist_head *all_lists[] = {
1943         &clk_root_list,
1944         &clk_orphan_list,
1945         NULL,
1946 };
1947
1948 static struct hlist_head *orphan_list[] = {
1949         &clk_orphan_list,
1950         NULL,
1951 };
1952
1953 static void clk_summary_show_one(struct seq_file *s, struct clk_core *c,
1954                                  int level)
1955 {
1956         if (!c)
1957                 return;
1958
1959         seq_printf(s, "%*s%-*s %11d %12d %11lu %10lu %-3d\n",
1960                    level * 3 + 1, "",
1961                    30 - level * 3, c->name,
1962                    c->enable_count, c->prepare_count, clk_core_get_rate(c),
1963                    clk_core_get_accuracy(c), clk_core_get_phase(c));
1964 }
1965
1966 static void clk_summary_show_subtree(struct seq_file *s, struct clk_core *c,
1967                                      int level)
1968 {
1969         struct clk_core *child;
1970
1971         if (!c)
1972                 return;
1973
1974         clk_summary_show_one(s, c, level);
1975
1976         hlist_for_each_entry(child, &c->children, child_node)
1977                 clk_summary_show_subtree(s, child, level + 1);
1978 }
1979
1980 static int clk_summary_show(struct seq_file *s, void *data)
1981 {
1982         struct clk_core *c;
1983         struct hlist_head **lists = (struct hlist_head **)s->private;
1984
1985         seq_puts(s, "   clock                         enable_cnt  prepare_cnt        rate   accuracy   phase\n");
1986         seq_puts(s, "----------------------------------------------------------------------------------------\n");
1987
1988         clk_prepare_lock();
1989
1990         for (; *lists; lists++)
1991                 hlist_for_each_entry(c, *lists, child_node)
1992                         clk_summary_show_subtree(s, c, 0);
1993
1994         clk_prepare_unlock();
1995
1996         return 0;
1997 }
1998
1999
2000 static int clk_summary_open(struct inode *inode, struct file *file)
2001 {
2002         return single_open(file, clk_summary_show, inode->i_private);
2003 }
2004
2005 static const struct file_operations clk_summary_fops = {
2006         .open           = clk_summary_open,
2007         .read           = seq_read,
2008         .llseek         = seq_lseek,
2009         .release        = single_release,
2010 };
2011
2012 static void clk_dump_one(struct seq_file *s, struct clk_core *c, int level)
2013 {
2014         if (!c)
2015                 return;
2016
2017         /* This should be JSON format, i.e. elements separated with a comma */
2018         seq_printf(s, "\"%s\": { ", c->name);
2019         seq_printf(s, "\"enable_count\": %d,", c->enable_count);
2020         seq_printf(s, "\"prepare_count\": %d,", c->prepare_count);
2021         seq_printf(s, "\"rate\": %lu,", clk_core_get_rate(c));
2022         seq_printf(s, "\"accuracy\": %lu,", clk_core_get_accuracy(c));
2023         seq_printf(s, "\"phase\": %d", clk_core_get_phase(c));
2024 }
2025
2026 static void clk_dump_subtree(struct seq_file *s, struct clk_core *c, int level)
2027 {
2028         struct clk_core *child;
2029
2030         if (!c)
2031                 return;
2032
2033         clk_dump_one(s, c, level);
2034
2035         hlist_for_each_entry(child, &c->children, child_node) {
2036                 seq_printf(s, ",");
2037                 clk_dump_subtree(s, child, level + 1);
2038         }
2039
2040         seq_printf(s, "}");
2041 }
2042
2043 static int clk_dump(struct seq_file *s, void *data)
2044 {
2045         struct clk_core *c;
2046         bool first_node = true;
2047         struct hlist_head **lists = (struct hlist_head **)s->private;
2048
2049         seq_printf(s, "{");
2050
2051         clk_prepare_lock();
2052
2053         for (; *lists; lists++) {
2054                 hlist_for_each_entry(c, *lists, child_node) {
2055                         if (!first_node)
2056                                 seq_puts(s, ",");
2057                         first_node = false;
2058                         clk_dump_subtree(s, c, 0);
2059                 }
2060         }
2061
2062         clk_prepare_unlock();
2063
2064         seq_puts(s, "}\n");
2065         return 0;
2066 }
2067
2068
2069 static int clk_dump_open(struct inode *inode, struct file *file)
2070 {
2071         return single_open(file, clk_dump, inode->i_private);
2072 }
2073
2074 static const struct file_operations clk_dump_fops = {
2075         .open           = clk_dump_open,
2076         .read           = seq_read,
2077         .llseek         = seq_lseek,
2078         .release        = single_release,
2079 };
2080
2081 static int clk_debug_create_one(struct clk_core *core, struct dentry *pdentry)
2082 {
2083         struct dentry *d;
2084         int ret = -ENOMEM;
2085
2086         if (!core || !pdentry) {
2087                 ret = -EINVAL;
2088                 goto out;
2089         }
2090
2091         d = debugfs_create_dir(core->name, pdentry);
2092         if (!d)
2093                 goto out;
2094
2095         core->dentry = d;
2096
2097         d = debugfs_create_u32("clk_rate", S_IRUGO, core->dentry,
2098                         (u32 *)&core->rate);
2099         if (!d)
2100                 goto err_out;
2101
2102         d = debugfs_create_u32("clk_accuracy", S_IRUGO, core->dentry,
2103                         (u32 *)&core->accuracy);
2104         if (!d)
2105                 goto err_out;
2106
2107         d = debugfs_create_u32("clk_phase", S_IRUGO, core->dentry,
2108                         (u32 *)&core->phase);
2109         if (!d)
2110                 goto err_out;
2111
2112         d = debugfs_create_x32("clk_flags", S_IRUGO, core->dentry,
2113                         (u32 *)&core->flags);
2114         if (!d)
2115                 goto err_out;
2116
2117         d = debugfs_create_u32("clk_prepare_count", S_IRUGO, core->dentry,
2118                         (u32 *)&core->prepare_count);
2119         if (!d)
2120                 goto err_out;
2121
2122         d = debugfs_create_u32("clk_enable_count", S_IRUGO, core->dentry,
2123                         (u32 *)&core->enable_count);
2124         if (!d)
2125                 goto err_out;
2126
2127         d = debugfs_create_u32("clk_notifier_count", S_IRUGO, core->dentry,
2128                         (u32 *)&core->notifier_count);
2129         if (!d)
2130                 goto err_out;
2131
2132         if (core->ops->debug_init) {
2133                 ret = core->ops->debug_init(core->hw, core->dentry);
2134                 if (ret)
2135                         goto err_out;
2136         }
2137
2138         ret = 0;
2139         goto out;
2140
2141 err_out:
2142         debugfs_remove_recursive(core->dentry);
2143         core->dentry = NULL;
2144 out:
2145         return ret;
2146 }
2147
2148 /**
2149  * clk_debug_register - add a clk node to the debugfs clk directory
2150  * @core: the clk being added to the debugfs clk directory
2151  *
2152  * Dynamically adds a clk to the debugfs clk directory if debugfs has been
2153  * initialized.  Otherwise it bails out early since the debugfs clk directory
2154  * will be created lazily by clk_debug_init as part of a late_initcall.
2155  */
2156 static int clk_debug_register(struct clk_core *core)
2157 {
2158         int ret = 0;
2159
2160         mutex_lock(&clk_debug_lock);
2161         hlist_add_head(&core->debug_node, &clk_debug_list);
2162
2163         if (!inited)
2164                 goto unlock;
2165
2166         ret = clk_debug_create_one(core, rootdir);
2167 unlock:
2168         mutex_unlock(&clk_debug_lock);
2169
2170         return ret;
2171 }
2172
2173  /**
2174  * clk_debug_unregister - remove a clk node from the debugfs clk directory
2175  * @core: the clk being removed from the debugfs clk directory
2176  *
2177  * Dynamically removes a clk and all its child nodes from the
2178  * debugfs clk directory if clk->dentry points to debugfs created by
2179  * clk_debug_register in __clk_init.
2180  */
2181 static void clk_debug_unregister(struct clk_core *core)
2182 {
2183         mutex_lock(&clk_debug_lock);
2184         hlist_del_init(&core->debug_node);
2185         debugfs_remove_recursive(core->dentry);
2186         core->dentry = NULL;
2187         mutex_unlock(&clk_debug_lock);
2188 }
2189
2190 struct dentry *clk_debugfs_add_file(struct clk_hw *hw, char *name, umode_t mode,
2191                                 void *data, const struct file_operations *fops)
2192 {
2193         struct dentry *d = NULL;
2194
2195         if (hw->core->dentry)
2196                 d = debugfs_create_file(name, mode, hw->core->dentry, data,
2197                                         fops);
2198
2199         return d;
2200 }
2201 EXPORT_SYMBOL_GPL(clk_debugfs_add_file);
2202
2203 /**
2204  * clk_debug_init - lazily populate the debugfs clk directory
2205  *
2206  * clks are often initialized very early during boot before memory can be
2207  * dynamically allocated and well before debugfs is setup. This function
2208  * populates the debugfs clk directory once at boot-time when we know that
2209  * debugfs is setup. It should only be called once at boot-time, all other clks
2210  * added dynamically will be done so with clk_debug_register.
2211  */
2212 static int __init clk_debug_init(void)
2213 {
2214         struct clk_core *core;
2215         struct dentry *d;
2216
2217         rootdir = debugfs_create_dir("clk", NULL);
2218
2219         if (!rootdir)
2220                 return -ENOMEM;
2221
2222         d = debugfs_create_file("clk_summary", S_IRUGO, rootdir, &all_lists,
2223                                 &clk_summary_fops);
2224         if (!d)
2225                 return -ENOMEM;
2226
2227         d = debugfs_create_file("clk_dump", S_IRUGO, rootdir, &all_lists,
2228                                 &clk_dump_fops);
2229         if (!d)
2230                 return -ENOMEM;
2231
2232         d = debugfs_create_file("clk_orphan_summary", S_IRUGO, rootdir,
2233                                 &orphan_list, &clk_summary_fops);
2234         if (!d)
2235                 return -ENOMEM;
2236
2237         d = debugfs_create_file("clk_orphan_dump", S_IRUGO, rootdir,
2238                                 &orphan_list, &clk_dump_fops);
2239         if (!d)
2240                 return -ENOMEM;
2241
2242         mutex_lock(&clk_debug_lock);
2243         hlist_for_each_entry(core, &clk_debug_list, debug_node)
2244                 clk_debug_create_one(core, rootdir);
2245
2246         inited = 1;
2247         mutex_unlock(&clk_debug_lock);
2248
2249         return 0;
2250 }
2251 late_initcall(clk_debug_init);
2252 #else
2253 static inline int clk_debug_register(struct clk_core *core) { return 0; }
2254 static inline void clk_debug_reparent(struct clk_core *core,
2255                                       struct clk_core *new_parent)
2256 {
2257 }
2258 static inline void clk_debug_unregister(struct clk_core *core)
2259 {
2260 }
2261 #endif
2262
2263 /**
2264  * __clk_init - initialize the data structures in a struct clk
2265  * @dev:        device initializing this clk, placeholder for now
2266  * @clk:        clk being initialized
2267  *
2268  * Initializes the lists in struct clk_core, queries the hardware for the
2269  * parent and rate and sets them both.
2270  */
2271 static int __clk_init(struct device *dev, struct clk *clk_user)
2272 {
2273         int i, ret = 0;
2274         struct clk_core *orphan;
2275         struct hlist_node *tmp2;
2276         struct clk_core *core;
2277         unsigned long rate;
2278
2279         if (!clk_user)
2280                 return -EINVAL;
2281
2282         core = clk_user->core;
2283
2284         clk_prepare_lock();
2285
2286         /* check to see if a clock with this name is already registered */
2287         if (clk_core_lookup(core->name)) {
2288                 pr_debug("%s: clk %s already initialized\n",
2289                                 __func__, core->name);
2290                 ret = -EEXIST;
2291                 goto out;
2292         }
2293
2294         /* check that clk_ops are sane.  See Documentation/clk.txt */
2295         if (core->ops->set_rate &&
2296             !((core->ops->round_rate || core->ops->determine_rate) &&
2297               core->ops->recalc_rate)) {
2298                 pr_warning("%s: %s must implement .round_rate or .determine_rate in addition to .recalc_rate\n",
2299                                 __func__, core->name);
2300                 ret = -EINVAL;
2301                 goto out;
2302         }
2303
2304         if (core->ops->set_parent && !core->ops->get_parent) {
2305                 pr_warning("%s: %s must implement .get_parent & .set_parent\n",
2306                                 __func__, core->name);
2307                 ret = -EINVAL;
2308                 goto out;
2309         }
2310
2311         if (core->ops->set_rate_and_parent &&
2312                         !(core->ops->set_parent && core->ops->set_rate)) {
2313                 pr_warn("%s: %s must implement .set_parent & .set_rate\n",
2314                                 __func__, core->name);
2315                 ret = -EINVAL;
2316                 goto out;
2317         }
2318
2319         /* throw a WARN if any entries in parent_names are NULL */
2320         for (i = 0; i < core->num_parents; i++)
2321                 WARN(!core->parent_names[i],
2322                                 "%s: invalid NULL in %s's .parent_names\n",
2323                                 __func__, core->name);
2324
2325         /*
2326          * Allocate an array of struct clk *'s to avoid unnecessary string
2327          * look-ups of clk's possible parents.  This can fail for clocks passed
2328          * in to clk_init during early boot; thus any access to core->parents[]
2329          * must always check for a NULL pointer and try to populate it if
2330          * necessary.
2331          *
2332          * If core->parents is not NULL we skip this entire block.  This allows
2333          * for clock drivers to statically initialize core->parents.
2334          */
2335         if (core->num_parents > 1 && !core->parents) {
2336                 core->parents = kcalloc(core->num_parents, sizeof(struct clk *),
2337                                         GFP_KERNEL);
2338                 /*
2339                  * clk_core_lookup returns NULL for parents that have not been
2340                  * clk_init'd; thus any access to clk->parents[] must check
2341                  * for a NULL pointer.  We can always perform lazy lookups for
2342                  * missing parents later on.
2343                  */
2344                 if (core->parents)
2345                         for (i = 0; i < core->num_parents; i++)
2346                                 core->parents[i] =
2347                                         clk_core_lookup(core->parent_names[i]);
2348         }
2349
2350         core->parent = __clk_init_parent(core);
2351
2352         /*
2353          * Populate core->parent if parent has already been __clk_init'd.  If
2354          * parent has not yet been __clk_init'd then place clk in the orphan
2355          * list.  If clk has set the CLK_IS_ROOT flag then place it in the root
2356          * clk list.
2357          *
2358          * Every time a new clk is clk_init'd then we walk the list of orphan
2359          * clocks and re-parent any that are children of the clock currently
2360          * being clk_init'd.
2361          */
2362         if (core->parent)
2363                 hlist_add_head(&core->child_node,
2364                                 &core->parent->children);
2365         else if (core->flags & CLK_IS_ROOT)
2366                 hlist_add_head(&core->child_node, &clk_root_list);
2367         else
2368                 hlist_add_head(&core->child_node, &clk_orphan_list);
2369
2370         /*
2371          * Set clk's accuracy.  The preferred method is to use
2372          * .recalc_accuracy. For simple clocks and lazy developers the default
2373          * fallback is to use the parent's accuracy.  If a clock doesn't have a
2374          * parent (or is orphaned) then accuracy is set to zero (perfect
2375          * clock).
2376          */
2377         if (core->ops->recalc_accuracy)
2378                 core->accuracy = core->ops->recalc_accuracy(core->hw,
2379                                         __clk_get_accuracy(core->parent));
2380         else if (core->parent)
2381                 core->accuracy = core->parent->accuracy;
2382         else
2383                 core->accuracy = 0;
2384
2385         /*
2386          * Set clk's phase.
2387          * Since a phase is by definition relative to its parent, just
2388          * query the current clock phase, or just assume it's in phase.
2389          */
2390         if (core->ops->get_phase)
2391                 core->phase = core->ops->get_phase(core->hw);
2392         else
2393                 core->phase = 0;
2394
2395         /*
2396          * Set clk's rate.  The preferred method is to use .recalc_rate.  For
2397          * simple clocks and lazy developers the default fallback is to use the
2398          * parent's rate.  If a clock doesn't have a parent (or is orphaned)
2399          * then rate is set to zero.
2400          */
2401         if (core->ops->recalc_rate)
2402                 rate = core->ops->recalc_rate(core->hw,
2403                                 clk_core_get_rate_nolock(core->parent));
2404         else if (core->parent)
2405                 rate = core->parent->rate;
2406         else
2407                 rate = 0;
2408         core->rate = core->req_rate = rate;
2409
2410         /*
2411          * walk the list of orphan clocks and reparent any that are children of
2412          * this clock
2413          */
2414         hlist_for_each_entry_safe(orphan, tmp2, &clk_orphan_list, child_node) {
2415                 if (orphan->num_parents && orphan->ops->get_parent) {
2416                         i = orphan->ops->get_parent(orphan->hw);
2417                         if (!strcmp(core->name, orphan->parent_names[i]))
2418                                 clk_core_reparent(orphan, core);
2419                         continue;
2420                 }
2421
2422                 for (i = 0; i < orphan->num_parents; i++)
2423                         if (!strcmp(core->name, orphan->parent_names[i])) {
2424                                 clk_core_reparent(orphan, core);
2425                                 break;
2426                         }
2427          }
2428
2429         /*
2430          * optional platform-specific magic
2431          *
2432          * The .init callback is not used by any of the basic clock types, but
2433          * exists for weird hardware that must perform initialization magic.
2434          * Please consider other ways of solving initialization problems before
2435          * using this callback, as its use is discouraged.
2436          */
2437         if (core->ops->init)
2438                 core->ops->init(core->hw);
2439
2440         kref_init(&core->ref);
2441 out:
2442         clk_prepare_unlock();
2443
2444         if (!ret)
2445                 clk_debug_register(core);
2446
2447         return ret;
2448 }
2449
2450 struct clk *__clk_create_clk(struct clk_hw *hw, const char *dev_id,
2451                              const char *con_id)
2452 {
2453         struct clk *clk;
2454
2455         /* This is to allow this function to be chained to others */
2456         if (!hw || IS_ERR(hw))
2457                 return (struct clk *) hw;
2458
2459         clk = kzalloc(sizeof(*clk), GFP_KERNEL);
2460         if (!clk)
2461                 return ERR_PTR(-ENOMEM);
2462
2463         clk->core = hw->core;
2464         clk->dev_id = dev_id;
2465         clk->con_id = con_id;
2466         clk->max_rate = ULONG_MAX;
2467
2468         clk_prepare_lock();
2469         hlist_add_head(&clk->clks_node, &hw->core->clks);
2470         clk_prepare_unlock();
2471
2472         return clk;
2473 }
2474
2475 void __clk_free_clk(struct clk *clk)
2476 {
2477         clk_prepare_lock();
2478         hlist_del(&clk->clks_node);
2479         clk_prepare_unlock();
2480
2481         kfree(clk);
2482 }
2483
2484 /**
2485  * clk_register - allocate a new clock, register it and return an opaque cookie
2486  * @dev: device that is registering this clock
2487  * @hw: link to hardware-specific clock data
2488  *
2489  * clk_register is the primary interface for populating the clock tree with new
2490  * clock nodes.  It returns a pointer to the newly allocated struct clk which
2491  * cannot be dereferenced by driver code but may be used in conjunction with the
2492  * rest of the clock API.  In the event of an error clk_register will return an
2493  * error code; drivers must test for an error code after calling clk_register.
2494  */
2495 struct clk *clk_register(struct device *dev, struct clk_hw *hw)
2496 {
2497         int i, ret;
2498         struct clk_core *core;
2499
2500         core = kzalloc(sizeof(*core), GFP_KERNEL);
2501         if (!core) {
2502                 ret = -ENOMEM;
2503                 goto fail_out;
2504         }
2505
2506         core->name = kstrdup_const(hw->init->name, GFP_KERNEL);
2507         if (!core->name) {
2508                 ret = -ENOMEM;
2509                 goto fail_name;
2510         }
2511         core->ops = hw->init->ops;
2512         if (dev && dev->driver)
2513                 core->owner = dev->driver->owner;
2514         core->hw = hw;
2515         core->flags = hw->init->flags;
2516         core->num_parents = hw->init->num_parents;
2517         core->min_rate = 0;
2518         core->max_rate = ULONG_MAX;
2519         hw->core = core;
2520
2521         /* allocate local copy in case parent_names is __initdata */
2522         core->parent_names = kcalloc(core->num_parents, sizeof(char *),
2523                                         GFP_KERNEL);
2524
2525         if (!core->parent_names) {
2526                 ret = -ENOMEM;
2527                 goto fail_parent_names;
2528         }
2529
2530
2531         /* copy each string name in case parent_names is __initdata */
2532         for (i = 0; i < core->num_parents; i++) {
2533                 core->parent_names[i] = kstrdup_const(hw->init->parent_names[i],
2534                                                 GFP_KERNEL);
2535                 if (!core->parent_names[i]) {
2536                         ret = -ENOMEM;
2537                         goto fail_parent_names_copy;
2538                 }
2539         }
2540
2541         INIT_HLIST_HEAD(&core->clks);
2542
2543         hw->clk = __clk_create_clk(hw, NULL, NULL);
2544         if (IS_ERR(hw->clk)) {
2545                 ret = PTR_ERR(hw->clk);
2546                 goto fail_parent_names_copy;
2547         }
2548
2549         ret = __clk_init(dev, hw->clk);
2550         if (!ret)
2551                 return hw->clk;
2552
2553         __clk_free_clk(hw->clk);
2554         hw->clk = NULL;
2555
2556 fail_parent_names_copy:
2557         while (--i >= 0)
2558                 kfree_const(core->parent_names[i]);
2559         kfree(core->parent_names);
2560 fail_parent_names:
2561         kfree_const(core->name);
2562 fail_name:
2563         kfree(core);
2564 fail_out:
2565         return ERR_PTR(ret);
2566 }
2567 EXPORT_SYMBOL_GPL(clk_register);
2568
2569 /* Free memory allocated for a clock. */
2570 static void __clk_release(struct kref *ref)
2571 {
2572         struct clk_core *core = container_of(ref, struct clk_core, ref);
2573         int i = core->num_parents;
2574
2575         lockdep_assert_held(&prepare_lock);
2576
2577         kfree(core->parents);
2578         while (--i >= 0)
2579                 kfree_const(core->parent_names[i]);
2580
2581         kfree(core->parent_names);
2582         kfree_const(core->name);
2583         kfree(core);
2584 }
2585
2586 /*
2587  * Empty clk_ops for unregistered clocks. These are used temporarily
2588  * after clk_unregister() was called on a clock and until last clock
2589  * consumer calls clk_put() and the struct clk object is freed.
2590  */
2591 static int clk_nodrv_prepare_enable(struct clk_hw *hw)
2592 {
2593         return -ENXIO;
2594 }
2595
2596 static void clk_nodrv_disable_unprepare(struct clk_hw *hw)
2597 {
2598         WARN_ON_ONCE(1);
2599 }
2600
2601 static int clk_nodrv_set_rate(struct clk_hw *hw, unsigned long rate,
2602                                         unsigned long parent_rate)
2603 {
2604         return -ENXIO;
2605 }
2606
2607 static int clk_nodrv_set_parent(struct clk_hw *hw, u8 index)
2608 {
2609         return -ENXIO;
2610 }
2611
2612 static const struct clk_ops clk_nodrv_ops = {
2613         .enable         = clk_nodrv_prepare_enable,
2614         .disable        = clk_nodrv_disable_unprepare,
2615         .prepare        = clk_nodrv_prepare_enable,
2616         .unprepare      = clk_nodrv_disable_unprepare,
2617         .set_rate       = clk_nodrv_set_rate,
2618         .set_parent     = clk_nodrv_set_parent,
2619 };
2620
2621 /**
2622  * clk_unregister - unregister a currently registered clock
2623  * @clk: clock to unregister
2624  */
2625 void clk_unregister(struct clk *clk)
2626 {
2627         unsigned long flags;
2628
2629         if (!clk || WARN_ON_ONCE(IS_ERR(clk)))
2630                 return;
2631
2632         clk_debug_unregister(clk->core);
2633
2634         clk_prepare_lock();
2635
2636         if (clk->core->ops == &clk_nodrv_ops) {
2637                 pr_err("%s: unregistered clock: %s\n", __func__,
2638                        clk->core->name);
2639                 return;
2640         }
2641         /*
2642          * Assign empty clock ops for consumers that might still hold
2643          * a reference to this clock.
2644          */
2645         flags = clk_enable_lock();
2646         clk->core->ops = &clk_nodrv_ops;
2647         clk_enable_unlock(flags);
2648
2649         if (!hlist_empty(&clk->core->children)) {
2650                 struct clk_core *child;
2651                 struct hlist_node *t;
2652
2653                 /* Reparent all children to the orphan list. */
2654                 hlist_for_each_entry_safe(child, t, &clk->core->children,
2655                                           child_node)
2656                         clk_core_set_parent(child, NULL);
2657         }
2658
2659         hlist_del_init(&clk->core->child_node);
2660
2661         if (clk->core->prepare_count)
2662                 pr_warn("%s: unregistering prepared clock: %s\n",
2663                                         __func__, clk->core->name);
2664         kref_put(&clk->core->ref, __clk_release);
2665
2666         clk_prepare_unlock();
2667 }
2668 EXPORT_SYMBOL_GPL(clk_unregister);
2669
2670 static void devm_clk_release(struct device *dev, void *res)
2671 {
2672         clk_unregister(*(struct clk **)res);
2673 }
2674
2675 /**
2676  * devm_clk_register - resource managed clk_register()
2677  * @dev: device that is registering this clock
2678  * @hw: link to hardware-specific clock data
2679  *
2680  * Managed clk_register(). Clocks returned from this function are
2681  * automatically clk_unregister()ed on driver detach. See clk_register() for
2682  * more information.
2683  */
2684 struct clk *devm_clk_register(struct device *dev, struct clk_hw *hw)
2685 {
2686         struct clk *clk;
2687         struct clk **clkp;
2688
2689         clkp = devres_alloc(devm_clk_release, sizeof(*clkp), GFP_KERNEL);
2690         if (!clkp)
2691                 return ERR_PTR(-ENOMEM);
2692
2693         clk = clk_register(dev, hw);
2694         if (!IS_ERR(clk)) {
2695                 *clkp = clk;
2696                 devres_add(dev, clkp);
2697         } else {
2698                 devres_free(clkp);
2699         }
2700
2701         return clk;
2702 }
2703 EXPORT_SYMBOL_GPL(devm_clk_register);
2704
2705 static int devm_clk_match(struct device *dev, void *res, void *data)
2706 {
2707         struct clk *c = res;
2708         if (WARN_ON(!c))
2709                 return 0;
2710         return c == data;
2711 }
2712
2713 /**
2714  * devm_clk_unregister - resource managed clk_unregister()
2715  * @clk: clock to unregister
2716  *
2717  * Deallocate a clock allocated with devm_clk_register(). Normally
2718  * this function will not need to be called and the resource management
2719  * code will ensure that the resource is freed.
2720  */
2721 void devm_clk_unregister(struct device *dev, struct clk *clk)
2722 {
2723         WARN_ON(devres_release(dev, devm_clk_release, devm_clk_match, clk));
2724 }
2725 EXPORT_SYMBOL_GPL(devm_clk_unregister);
2726
2727 /*
2728  * clkdev helpers
2729  */
2730 int __clk_get(struct clk *clk)
2731 {
2732         struct clk_core *core = !clk ? NULL : clk->core;
2733
2734         if (core) {
2735                 if (!try_module_get(core->owner))
2736                         return 0;
2737
2738                 kref_get(&core->ref);
2739         }
2740         return 1;
2741 }
2742
2743 void __clk_put(struct clk *clk)
2744 {
2745         struct module *owner;
2746
2747         if (!clk || WARN_ON_ONCE(IS_ERR(clk)))
2748                 return;
2749
2750         clk_prepare_lock();
2751
2752         hlist_del(&clk->clks_node);
2753         if (clk->min_rate > clk->core->req_rate ||
2754             clk->max_rate < clk->core->req_rate)
2755                 clk_core_set_rate_nolock(clk->core, clk->core->req_rate);
2756
2757         owner = clk->core->owner;
2758         kref_put(&clk->core->ref, __clk_release);
2759
2760         clk_prepare_unlock();
2761
2762         module_put(owner);
2763
2764         kfree(clk);
2765 }
2766
2767 /***        clk rate change notifiers        ***/
2768
2769 /**
2770  * clk_notifier_register - add a clk rate change notifier
2771  * @clk: struct clk * to watch
2772  * @nb: struct notifier_block * with callback info
2773  *
2774  * Request notification when clk's rate changes.  This uses an SRCU
2775  * notifier because we want it to block and notifier unregistrations are
2776  * uncommon.  The callbacks associated with the notifier must not
2777  * re-enter into the clk framework by calling any top-level clk APIs;
2778  * this will cause a nested prepare_lock mutex.
2779  *
2780  * In all notification cases cases (pre, post and abort rate change) the
2781  * original clock rate is passed to the callback via struct
2782  * clk_notifier_data.old_rate and the new frequency is passed via struct
2783  * clk_notifier_data.new_rate.
2784  *
2785  * clk_notifier_register() must be called from non-atomic context.
2786  * Returns -EINVAL if called with null arguments, -ENOMEM upon
2787  * allocation failure; otherwise, passes along the return value of
2788  * srcu_notifier_chain_register().
2789  */
2790 int clk_notifier_register(struct clk *clk, struct notifier_block *nb)
2791 {
2792         struct clk_notifier *cn;
2793         int ret = -ENOMEM;
2794
2795         if (!clk || !nb)
2796                 return -EINVAL;
2797
2798         clk_prepare_lock();
2799
2800         /* search the list of notifiers for this clk */
2801         list_for_each_entry(cn, &clk_notifier_list, node)
2802                 if (cn->clk == clk)
2803                         break;
2804
2805         /* if clk wasn't in the notifier list, allocate new clk_notifier */
2806         if (cn->clk != clk) {
2807                 cn = kzalloc(sizeof(struct clk_notifier), GFP_KERNEL);
2808                 if (!cn)
2809                         goto out;
2810
2811                 cn->clk = clk;
2812                 srcu_init_notifier_head(&cn->notifier_head);
2813
2814                 list_add(&cn->node, &clk_notifier_list);
2815         }
2816
2817         ret = srcu_notifier_chain_register(&cn->notifier_head, nb);
2818
2819         clk->core->notifier_count++;
2820
2821 out:
2822         clk_prepare_unlock();
2823
2824         return ret;
2825 }
2826 EXPORT_SYMBOL_GPL(clk_notifier_register);
2827
2828 /**
2829  * clk_notifier_unregister - remove a clk rate change notifier
2830  * @clk: struct clk *
2831  * @nb: struct notifier_block * with callback info
2832  *
2833  * Request no further notification for changes to 'clk' and frees memory
2834  * allocated in clk_notifier_register.
2835  *
2836  * Returns -EINVAL if called with null arguments; otherwise, passes
2837  * along the return value of srcu_notifier_chain_unregister().
2838  */
2839 int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb)
2840 {
2841         struct clk_notifier *cn = NULL;
2842         int ret = -EINVAL;
2843
2844         if (!clk || !nb)
2845                 return -EINVAL;
2846
2847         clk_prepare_lock();
2848
2849         list_for_each_entry(cn, &clk_notifier_list, node)
2850                 if (cn->clk == clk)
2851                         break;
2852
2853         if (cn->clk == clk) {
2854                 ret = srcu_notifier_chain_unregister(&cn->notifier_head, nb);
2855
2856                 clk->core->notifier_count--;
2857
2858                 /* XXX the notifier code should handle this better */
2859                 if (!cn->notifier_head.head) {
2860                         srcu_cleanup_notifier_head(&cn->notifier_head);
2861                         list_del(&cn->node);
2862                         kfree(cn);
2863                 }
2864
2865         } else {
2866                 ret = -ENOENT;
2867         }
2868
2869         clk_prepare_unlock();
2870
2871         return ret;
2872 }
2873 EXPORT_SYMBOL_GPL(clk_notifier_unregister);
2874
2875 #ifdef CONFIG_OF
2876 /**
2877  * struct of_clk_provider - Clock provider registration structure
2878  * @link: Entry in global list of clock providers
2879  * @node: Pointer to device tree node of clock provider
2880  * @get: Get clock callback.  Returns NULL or a struct clk for the
2881  *       given clock specifier
2882  * @data: context pointer to be passed into @get callback
2883  */
2884 struct of_clk_provider {
2885         struct list_head link;
2886
2887         struct device_node *node;
2888         struct clk *(*get)(struct of_phandle_args *clkspec, void *data);
2889         void *data;
2890 };
2891
2892 static const struct of_device_id __clk_of_table_sentinel
2893         __used __section(__clk_of_table_end);
2894
2895 static LIST_HEAD(of_clk_providers);
2896 static DEFINE_MUTEX(of_clk_mutex);
2897
2898 struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec,
2899                                      void *data)
2900 {
2901         return data;
2902 }
2903 EXPORT_SYMBOL_GPL(of_clk_src_simple_get);
2904
2905 struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data)
2906 {
2907         struct clk_onecell_data *clk_data = data;
2908         unsigned int idx = clkspec->args[0];
2909
2910         if (idx >= clk_data->clk_num) {
2911                 pr_err("%s: invalid clock index %d\n", __func__, idx);
2912                 return ERR_PTR(-EINVAL);
2913         }
2914
2915         return clk_data->clks[idx];
2916 }
2917 EXPORT_SYMBOL_GPL(of_clk_src_onecell_get);
2918
2919 /**
2920  * of_clk_add_provider() - Register a clock provider for a node
2921  * @np: Device node pointer associated with clock provider
2922  * @clk_src_get: callback for decoding clock
2923  * @data: context pointer for @clk_src_get callback.
2924  */
2925 int of_clk_add_provider(struct device_node *np,
2926                         struct clk *(*clk_src_get)(struct of_phandle_args *clkspec,
2927                                                    void *data),
2928                         void *data)
2929 {
2930         struct of_clk_provider *cp;
2931         int ret;
2932
2933         cp = kzalloc(sizeof(struct of_clk_provider), GFP_KERNEL);
2934         if (!cp)
2935                 return -ENOMEM;
2936
2937         cp->node = of_node_get(np);
2938         cp->data = data;
2939         cp->get = clk_src_get;
2940
2941         mutex_lock(&of_clk_mutex);
2942         list_add(&cp->link, &of_clk_providers);
2943         mutex_unlock(&of_clk_mutex);
2944         pr_debug("Added clock from %s\n", np->full_name);
2945
2946         ret = of_clk_set_defaults(np, true);
2947         if (ret < 0)
2948                 of_clk_del_provider(np);
2949
2950         return ret;
2951 }
2952 EXPORT_SYMBOL_GPL(of_clk_add_provider);
2953
2954 /**
2955  * of_clk_del_provider() - Remove a previously registered clock provider
2956  * @np: Device node pointer associated with clock provider
2957  */
2958 void of_clk_del_provider(struct device_node *np)
2959 {
2960         struct of_clk_provider *cp;
2961
2962         mutex_lock(&of_clk_mutex);
2963         list_for_each_entry(cp, &of_clk_providers, link) {
2964                 if (cp->node == np) {
2965                         list_del(&cp->link);
2966                         of_node_put(cp->node);
2967                         kfree(cp);
2968                         break;
2969                 }
2970         }
2971         mutex_unlock(&of_clk_mutex);
2972 }
2973 EXPORT_SYMBOL_GPL(of_clk_del_provider);
2974
2975 struct clk *__of_clk_get_from_provider(struct of_phandle_args *clkspec,
2976                                        const char *dev_id, const char *con_id)
2977 {
2978         struct of_clk_provider *provider;
2979         struct clk *clk = ERR_PTR(-EPROBE_DEFER);
2980
2981         if (!clkspec)
2982                 return ERR_PTR(-EINVAL);
2983
2984         /* Check if we have such a provider in our array */
2985         mutex_lock(&of_clk_mutex);
2986         list_for_each_entry(provider, &of_clk_providers, link) {
2987                 if (provider->node == clkspec->np)
2988                         clk = provider->get(clkspec, provider->data);
2989                 if (!IS_ERR(clk)) {
2990                         clk = __clk_create_clk(__clk_get_hw(clk), dev_id,
2991                                                con_id);
2992
2993                         if (!IS_ERR(clk) && !__clk_get(clk)) {
2994                                 __clk_free_clk(clk);
2995                                 clk = ERR_PTR(-ENOENT);
2996                         }
2997
2998                         break;
2999                 }
3000         }
3001         mutex_unlock(&of_clk_mutex);
3002
3003         return clk;
3004 }
3005
3006 /**
3007  * of_clk_get_from_provider() - Lookup a clock from a clock provider
3008  * @clkspec: pointer to a clock specifier data structure
3009  *
3010  * This function looks up a struct clk from the registered list of clock
3011  * providers, an input is a clock specifier data structure as returned
3012  * from the of_parse_phandle_with_args() function call.
3013  */
3014 struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec)
3015 {
3016         return __of_clk_get_from_provider(clkspec, NULL, __func__);
3017 }
3018
3019 int of_clk_get_parent_count(struct device_node *np)
3020 {
3021         return of_count_phandle_with_args(np, "clocks", "#clock-cells");
3022 }
3023 EXPORT_SYMBOL_GPL(of_clk_get_parent_count);
3024
3025 const char *of_clk_get_parent_name(struct device_node *np, int index)
3026 {
3027         struct of_phandle_args clkspec;
3028         struct property *prop;
3029         const char *clk_name;
3030         const __be32 *vp;
3031         u32 pv;
3032         int rc;
3033         int count;
3034
3035         if (index < 0)
3036                 return NULL;
3037
3038         rc = of_parse_phandle_with_args(np, "clocks", "#clock-cells", index,
3039                                         &clkspec);
3040         if (rc)
3041                 return NULL;
3042
3043         index = clkspec.args_count ? clkspec.args[0] : 0;
3044         count = 0;
3045
3046         /* if there is an indices property, use it to transfer the index
3047          * specified into an array offset for the clock-output-names property.
3048          */
3049         of_property_for_each_u32(clkspec.np, "clock-indices", prop, vp, pv) {
3050                 if (index == pv) {
3051                         index = count;
3052                         break;
3053                 }
3054                 count++;
3055         }
3056
3057         if (of_property_read_string_index(clkspec.np, "clock-output-names",
3058                                           index,
3059                                           &clk_name) < 0)
3060                 clk_name = clkspec.np->name;
3061
3062         of_node_put(clkspec.np);
3063         return clk_name;
3064 }
3065 EXPORT_SYMBOL_GPL(of_clk_get_parent_name);
3066
3067 /**
3068  * of_clk_parent_fill() - Fill @parents with names of @np's parents and return
3069  * number of parents
3070  * @np: Device node pointer associated with clock provider
3071  * @parents: pointer to char array that hold the parents' names
3072  * @size: size of the @parents array
3073  *
3074  * Return: number of parents for the clock node.
3075  */
3076 int of_clk_parent_fill(struct device_node *np, const char **parents,
3077                        unsigned int size)
3078 {
3079         unsigned int i = 0;
3080
3081         while (i < size && (parents[i] = of_clk_get_parent_name(np, i)) != NULL)
3082                 i++;
3083
3084         return i;
3085 }
3086 EXPORT_SYMBOL_GPL(of_clk_parent_fill);
3087
3088 struct clock_provider {
3089         of_clk_init_cb_t clk_init_cb;
3090         struct device_node *np;
3091         struct list_head node;
3092 };
3093
3094 /*
3095  * This function looks for a parent clock. If there is one, then it
3096  * checks that the provider for this parent clock was initialized, in
3097  * this case the parent clock will be ready.
3098  */
3099 static int parent_ready(struct device_node *np)
3100 {
3101         int i = 0;
3102
3103         while (true) {
3104                 struct clk *clk = of_clk_get(np, i);
3105
3106                 /* this parent is ready we can check the next one */
3107                 if (!IS_ERR(clk)) {
3108                         clk_put(clk);
3109                         i++;
3110                         continue;
3111                 }
3112
3113                 /* at least one parent is not ready, we exit now */
3114                 if (PTR_ERR(clk) == -EPROBE_DEFER)
3115                         return 0;
3116
3117                 /*
3118                  * Here we make assumption that the device tree is
3119                  * written correctly. So an error means that there is
3120                  * no more parent. As we didn't exit yet, then the
3121                  * previous parent are ready. If there is no clock
3122                  * parent, no need to wait for them, then we can
3123                  * consider their absence as being ready
3124                  */
3125                 return 1;
3126         }
3127 }
3128
3129 /**
3130  * of_clk_init() - Scan and init clock providers from the DT
3131  * @matches: array of compatible values and init functions for providers.
3132  *
3133  * This function scans the device tree for matching clock providers
3134  * and calls their initialization functions. It also does it by trying
3135  * to follow the dependencies.
3136  */
3137 void __init of_clk_init(const struct of_device_id *matches)
3138 {
3139         const struct of_device_id *match;
3140         struct device_node *np;
3141         struct clock_provider *clk_provider, *next;
3142         bool is_init_done;
3143         bool force = false;
3144         LIST_HEAD(clk_provider_list);
3145
3146         if (!matches)
3147                 matches = &__clk_of_table;
3148
3149         /* First prepare the list of the clocks providers */
3150         for_each_matching_node_and_match(np, matches, &match) {
3151                 struct clock_provider *parent;
3152
3153                 parent = kzalloc(sizeof(*parent), GFP_KERNEL);
3154                 if (!parent) {
3155                         list_for_each_entry_safe(clk_provider, next,
3156                                                  &clk_provider_list, node) {
3157                                 list_del(&clk_provider->node);
3158                                 kfree(clk_provider);
3159                         }
3160                         return;
3161                 }
3162
3163                 parent->clk_init_cb = match->data;
3164                 parent->np = np;
3165                 list_add_tail(&parent->node, &clk_provider_list);
3166         }
3167
3168         while (!list_empty(&clk_provider_list)) {
3169                 is_init_done = false;
3170                 list_for_each_entry_safe(clk_provider, next,
3171                                         &clk_provider_list, node) {
3172                         if (force || parent_ready(clk_provider->np)) {
3173
3174                                 clk_provider->clk_init_cb(clk_provider->np);
3175                                 of_clk_set_defaults(clk_provider->np, true);
3176
3177                                 list_del(&clk_provider->node);
3178                                 kfree(clk_provider);
3179                                 is_init_done = true;
3180                         }
3181                 }
3182
3183                 /*
3184                  * We didn't manage to initialize any of the
3185                  * remaining providers during the last loop, so now we
3186                  * initialize all the remaining ones unconditionally
3187                  * in case the clock parent was not mandatory
3188                  */
3189                 if (!is_init_done)
3190                         force = true;
3191         }
3192 }
3193 #endif