Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2010-2011 Canonical Ltd <jeremy.kerr@canonical.com>
4 * Copyright (C) 2011-2012 Linaro Ltd <mturquette@linaro.org>
5 *
6 * Standard functionality for the common clock API. See Documentation/driver-api/clk.rst
7 */
8
9#include <linux/clk.h>
10#include <linux/clk-provider.h>
11#include <linux/clk/clk-conf.h>
12#include <linux/module.h>
13#include <linux/mutex.h>
14#include <linux/spinlock.h>
15#include <linux/err.h>
16#include <linux/list.h>
17#include <linux/slab.h>
18#include <linux/of.h>
19#include <linux/device.h>
20#include <linux/init.h>
21#include <linux/pm_runtime.h>
22#include <linux/sched.h>
23#include <linux/clkdev.h>
24
25#include "clk.h"
26
27static DEFINE_SPINLOCK(enable_lock);
28static DEFINE_MUTEX(prepare_lock);
29
30static struct task_struct *prepare_owner;
31static struct task_struct *enable_owner;
32
33static int prepare_refcnt;
34static int enable_refcnt;
35
36static HLIST_HEAD(clk_root_list);
37static HLIST_HEAD(clk_orphan_list);
38static LIST_HEAD(clk_notifier_list);
39
40static const struct hlist_head *all_lists[] = {
41 &clk_root_list,
42 &clk_orphan_list,
43 NULL,
44};
45
46/*** private data structures ***/
47
48struct clk_parent_map {
49 const struct clk_hw *hw;
50 struct clk_core *core;
51 const char *fw_name;
52 const char *name;
53 int index;
54};
55
56struct clk_core {
57 const char *name;
58 const struct clk_ops *ops;
59 struct clk_hw *hw;
60 struct module *owner;
61 struct device *dev;
62 struct device_node *of_node;
63 struct clk_core *parent;
64 struct clk_parent_map *parents;
65 u8 num_parents;
66 u8 new_parent_index;
67 unsigned long rate;
68 unsigned long req_rate;
69 unsigned long new_rate;
70 struct clk_core *new_parent;
71 struct clk_core *new_child;
72 unsigned long flags;
73 bool orphan;
74 bool rpm_enabled;
75 unsigned int enable_count;
76 unsigned int prepare_count;
77 unsigned int protect_count;
78 unsigned long min_rate;
79 unsigned long max_rate;
80 unsigned long accuracy;
81 int phase;
82 struct clk_duty duty;
83 struct hlist_head children;
84 struct hlist_node child_node;
85 struct hlist_head clks;
86 unsigned int notifier_count;
87#ifdef CONFIG_DEBUG_FS
88 struct dentry *dentry;
89 struct hlist_node debug_node;
90#endif
91 struct kref ref;
92};
93
94#define CREATE_TRACE_POINTS
95#include <trace/events/clk.h>
96
97struct clk {
98 struct clk_core *core;
99 struct device *dev;
100 const char *dev_id;
101 const char *con_id;
102 unsigned long min_rate;
103 unsigned long max_rate;
104 unsigned int exclusive_count;
105 struct hlist_node clks_node;
106};
107
108/*** runtime pm ***/
109static int clk_pm_runtime_get(struct clk_core *core)
110{
111 if (!core->rpm_enabled)
112 return 0;
113
114 return pm_runtime_resume_and_get(core->dev);
115}
116
117static void clk_pm_runtime_put(struct clk_core *core)
118{
119 if (!core->rpm_enabled)
120 return;
121
122 pm_runtime_put_sync(core->dev);
123}
124
125/*** locking ***/
126static void clk_prepare_lock(void)
127{
128 if (!mutex_trylock(&prepare_lock)) {
129 if (prepare_owner == current) {
130 prepare_refcnt++;
131 return;
132 }
133 mutex_lock(&prepare_lock);
134 }
135 WARN_ON_ONCE(prepare_owner != NULL);
136 WARN_ON_ONCE(prepare_refcnt != 0);
137 prepare_owner = current;
138 prepare_refcnt = 1;
139}
140
141static void clk_prepare_unlock(void)
142{
143 WARN_ON_ONCE(prepare_owner != current);
144 WARN_ON_ONCE(prepare_refcnt == 0);
145
146 if (--prepare_refcnt)
147 return;
148 prepare_owner = NULL;
149 mutex_unlock(&prepare_lock);
150}
151
152static unsigned long clk_enable_lock(void)
153 __acquires(enable_lock)
154{
155 unsigned long flags;
156
157 /*
158 * On UP systems, spin_trylock_irqsave() always returns true, even if
159 * we already hold the lock. So, in that case, we rely only on
160 * reference counting.
161 */
162 if (!IS_ENABLED(CONFIG_SMP) ||
163 !spin_trylock_irqsave(&enable_lock, flags)) {
164 if (enable_owner == current) {
165 enable_refcnt++;
166 __acquire(enable_lock);
167 if (!IS_ENABLED(CONFIG_SMP))
168 local_save_flags(flags);
169 return flags;
170 }
171 spin_lock_irqsave(&enable_lock, flags);
172 }
173 WARN_ON_ONCE(enable_owner != NULL);
174 WARN_ON_ONCE(enable_refcnt != 0);
175 enable_owner = current;
176 enable_refcnt = 1;
177 return flags;
178}
179
180static void clk_enable_unlock(unsigned long flags)
181 __releases(enable_lock)
182{
183 WARN_ON_ONCE(enable_owner != current);
184 WARN_ON_ONCE(enable_refcnt == 0);
185
186 if (--enable_refcnt) {
187 __release(enable_lock);
188 return;
189 }
190 enable_owner = NULL;
191 spin_unlock_irqrestore(&enable_lock, flags);
192}
193
194static bool clk_core_rate_is_protected(struct clk_core *core)
195{
196 return core->protect_count;
197}
198
199static bool clk_core_is_prepared(struct clk_core *core)
200{
201 bool ret = false;
202
203 /*
204 * .is_prepared is optional for clocks that can prepare
205 * fall back to software usage counter if it is missing
206 */
207 if (!core->ops->is_prepared)
208 return core->prepare_count;
209
210 if (!clk_pm_runtime_get(core)) {
211 ret = core->ops->is_prepared(core->hw);
212 clk_pm_runtime_put(core);
213 }
214
215 return ret;
216}
217
218static bool clk_core_is_enabled(struct clk_core *core)
219{
220 bool ret = false;
221
222 /*
223 * .is_enabled is only mandatory for clocks that gate
224 * fall back to software usage counter if .is_enabled is missing
225 */
226 if (!core->ops->is_enabled)
227 return core->enable_count;
228
229 /*
230 * Check if clock controller's device is runtime active before
231 * calling .is_enabled callback. If not, assume that clock is
232 * disabled, because we might be called from atomic context, from
233 * which pm_runtime_get() is not allowed.
234 * This function is called mainly from clk_disable_unused_subtree,
235 * which ensures proper runtime pm activation of controller before
236 * taking enable spinlock, but the below check is needed if one tries
237 * to call it from other places.
238 */
239 if (core->rpm_enabled) {
240 pm_runtime_get_noresume(core->dev);
241 if (!pm_runtime_active(core->dev)) {
242 ret = false;
243 goto done;
244 }
245 }
246
247 ret = core->ops->is_enabled(core->hw);
248done:
249 if (core->rpm_enabled)
250 pm_runtime_put(core->dev);
251
252 return ret;
253}
254
255/*** helper functions ***/
256
257const char *__clk_get_name(const struct clk *clk)
258{
259 return !clk ? NULL : clk->core->name;
260}
261EXPORT_SYMBOL_GPL(__clk_get_name);
262
263const char *clk_hw_get_name(const struct clk_hw *hw)
264{
265 return hw->core->name;
266}
267EXPORT_SYMBOL_GPL(clk_hw_get_name);
268
269struct clk_hw *__clk_get_hw(struct clk *clk)
270{
271 return !clk ? NULL : clk->core->hw;
272}
273EXPORT_SYMBOL_GPL(__clk_get_hw);
274
275unsigned int clk_hw_get_num_parents(const struct clk_hw *hw)
276{
277 return hw->core->num_parents;
278}
279EXPORT_SYMBOL_GPL(clk_hw_get_num_parents);
280
281struct clk_hw *clk_hw_get_parent(const struct clk_hw *hw)
282{
283 return hw->core->parent ? hw->core->parent->hw : NULL;
284}
285EXPORT_SYMBOL_GPL(clk_hw_get_parent);
286
287static struct clk_core *__clk_lookup_subtree(const char *name,
288 struct clk_core *core)
289{
290 struct clk_core *child;
291 struct clk_core *ret;
292
293 if (!strcmp(core->name, name))
294 return core;
295
296 hlist_for_each_entry(child, &core->children, child_node) {
297 ret = __clk_lookup_subtree(name, child);
298 if (ret)
299 return ret;
300 }
301
302 return NULL;
303}
304
305static struct clk_core *clk_core_lookup(const char *name)
306{
307 struct clk_core *root_clk;
308 struct clk_core *ret;
309
310 if (!name)
311 return NULL;
312
313 /* search the 'proper' clk tree first */
314 hlist_for_each_entry(root_clk, &clk_root_list, child_node) {
315 ret = __clk_lookup_subtree(name, root_clk);
316 if (ret)
317 return ret;
318 }
319
320 /* if not found, then search the orphan tree */
321 hlist_for_each_entry(root_clk, &clk_orphan_list, child_node) {
322 ret = __clk_lookup_subtree(name, root_clk);
323 if (ret)
324 return ret;
325 }
326
327 return NULL;
328}
329
330#ifdef CONFIG_OF
331static int of_parse_clkspec(const struct device_node *np, int index,
332 const char *name, struct of_phandle_args *out_args);
333static struct clk_hw *
334of_clk_get_hw_from_clkspec(struct of_phandle_args *clkspec);
335#else
336static inline int of_parse_clkspec(const struct device_node *np, int index,
337 const char *name,
338 struct of_phandle_args *out_args)
339{
340 return -ENOENT;
341}
342static inline struct clk_hw *
343of_clk_get_hw_from_clkspec(struct of_phandle_args *clkspec)
344{
345 return ERR_PTR(-ENOENT);
346}
347#endif
348
349/**
350 * clk_core_get - Find the clk_core parent of a clk
351 * @core: clk to find parent of
352 * @p_index: parent index to search for
353 *
354 * This is the preferred method for clk providers to find the parent of a
355 * clk when that parent is external to the clk controller. The parent_names
356 * array is indexed and treated as a local name matching a string in the device
357 * node's 'clock-names' property or as the 'con_id' matching the device's
358 * dev_name() in a clk_lookup. This allows clk providers to use their own
359 * namespace instead of looking for a globally unique parent string.
360 *
361 * For example the following DT snippet would allow a clock registered by the
362 * clock-controller@c001 that has a clk_init_data::parent_data array
363 * with 'xtal' in the 'name' member to find the clock provided by the
364 * clock-controller@f00abcd without needing to get the globally unique name of
365 * the xtal clk.
366 *
367 * parent: clock-controller@f00abcd {
368 * reg = <0xf00abcd 0xabcd>;
369 * #clock-cells = <0>;
370 * };
371 *
372 * clock-controller@c001 {
373 * reg = <0xc001 0xf00d>;
374 * clocks = <&parent>;
375 * clock-names = "xtal";
376 * #clock-cells = <1>;
377 * };
378 *
379 * Returns: -ENOENT when the provider can't be found or the clk doesn't
380 * exist in the provider or the name can't be found in the DT node or
381 * in a clkdev lookup. NULL when the provider knows about the clk but it
382 * isn't provided on this system.
383 * A valid clk_core pointer when the clk can be found in the provider.
384 */
385static struct clk_core *clk_core_get(struct clk_core *core, u8 p_index)
386{
387 const char *name = core->parents[p_index].fw_name;
388 int index = core->parents[p_index].index;
389 struct clk_hw *hw = ERR_PTR(-ENOENT);
390 struct device *dev = core->dev;
391 const char *dev_id = dev ? dev_name(dev) : NULL;
392 struct device_node *np = core->of_node;
393 struct of_phandle_args clkspec;
394
395 if (np && (name || index >= 0) &&
396 !of_parse_clkspec(np, index, name, &clkspec)) {
397 hw = of_clk_get_hw_from_clkspec(&clkspec);
398 of_node_put(clkspec.np);
399 } else if (name) {
400 /*
401 * If the DT search above couldn't find the provider fallback to
402 * looking up via clkdev based clk_lookups.
403 */
404 hw = clk_find_hw(dev_id, name);
405 }
406
407 if (IS_ERR(hw))
408 return ERR_CAST(hw);
409
410 return hw->core;
411}
412
413static void clk_core_fill_parent_index(struct clk_core *core, u8 index)
414{
415 struct clk_parent_map *entry = &core->parents[index];
416 struct clk_core *parent;
417
418 if (entry->hw) {
419 parent = entry->hw->core;
420 } else {
421 parent = clk_core_get(core, index);
422 if (PTR_ERR(parent) == -ENOENT && entry->name)
423 parent = clk_core_lookup(entry->name);
424 }
425
426 /*
427 * We have a direct reference but it isn't registered yet?
428 * Orphan it and let clk_reparent() update the orphan status
429 * when the parent is registered.
430 */
431 if (!parent)
432 parent = ERR_PTR(-EPROBE_DEFER);
433
434 /* Only cache it if it's not an error */
435 if (!IS_ERR(parent))
436 entry->core = parent;
437}
438
439static struct clk_core *clk_core_get_parent_by_index(struct clk_core *core,
440 u8 index)
441{
442 if (!core || index >= core->num_parents || !core->parents)
443 return NULL;
444
445 if (!core->parents[index].core)
446 clk_core_fill_parent_index(core, index);
447
448 return core->parents[index].core;
449}
450
451struct clk_hw *
452clk_hw_get_parent_by_index(const struct clk_hw *hw, unsigned int index)
453{
454 struct clk_core *parent;
455
456 parent = clk_core_get_parent_by_index(hw->core, index);
457
458 return !parent ? NULL : parent->hw;
459}
460EXPORT_SYMBOL_GPL(clk_hw_get_parent_by_index);
461
462unsigned int __clk_get_enable_count(struct clk *clk)
463{
464 return !clk ? 0 : clk->core->enable_count;
465}
466
467static unsigned long clk_core_get_rate_nolock(struct clk_core *core)
468{
469 if (!core)
470 return 0;
471
472 if (!core->num_parents || core->parent)
473 return core->rate;
474
475 /*
476 * Clk must have a parent because num_parents > 0 but the parent isn't
477 * known yet. Best to return 0 as the rate of this clk until we can
478 * properly recalc the rate based on the parent's rate.
479 */
480 return 0;
481}
482
483unsigned long clk_hw_get_rate(const struct clk_hw *hw)
484{
485 return clk_core_get_rate_nolock(hw->core);
486}
487EXPORT_SYMBOL_GPL(clk_hw_get_rate);
488
489static unsigned long clk_core_get_accuracy_no_lock(struct clk_core *core)
490{
491 if (!core)
492 return 0;
493
494 return core->accuracy;
495}
496
497unsigned long clk_hw_get_flags(const struct clk_hw *hw)
498{
499 return hw->core->flags;
500}
501EXPORT_SYMBOL_GPL(clk_hw_get_flags);
502
503bool clk_hw_is_prepared(const struct clk_hw *hw)
504{
505 return clk_core_is_prepared(hw->core);
506}
507EXPORT_SYMBOL_GPL(clk_hw_is_prepared);
508
509bool clk_hw_rate_is_protected(const struct clk_hw *hw)
510{
511 return clk_core_rate_is_protected(hw->core);
512}
513EXPORT_SYMBOL_GPL(clk_hw_rate_is_protected);
514
515bool clk_hw_is_enabled(const struct clk_hw *hw)
516{
517 return clk_core_is_enabled(hw->core);
518}
519EXPORT_SYMBOL_GPL(clk_hw_is_enabled);
520
521bool __clk_is_enabled(struct clk *clk)
522{
523 if (!clk)
524 return false;
525
526 return clk_core_is_enabled(clk->core);
527}
528EXPORT_SYMBOL_GPL(__clk_is_enabled);
529
530static bool mux_is_better_rate(unsigned long rate, unsigned long now,
531 unsigned long best, unsigned long flags)
532{
533 if (flags & CLK_MUX_ROUND_CLOSEST)
534 return abs(now - rate) < abs(best - rate);
535
536 return now <= rate && now > best;
537}
538
539int clk_mux_determine_rate_flags(struct clk_hw *hw,
540 struct clk_rate_request *req,
541 unsigned long flags)
542{
543 struct clk_core *core = hw->core, *parent, *best_parent = NULL;
544 int i, num_parents, ret;
545 unsigned long best = 0;
546 struct clk_rate_request parent_req = *req;
547
548 /* if NO_REPARENT flag set, pass through to current parent */
549 if (core->flags & CLK_SET_RATE_NO_REPARENT) {
550 parent = core->parent;
551 if (core->flags & CLK_SET_RATE_PARENT) {
552 ret = __clk_determine_rate(parent ? parent->hw : NULL,
553 &parent_req);
554 if (ret)
555 return ret;
556
557 best = parent_req.rate;
558 } else if (parent) {
559 best = clk_core_get_rate_nolock(parent);
560 } else {
561 best = clk_core_get_rate_nolock(core);
562 }
563
564 goto out;
565 }
566
567 /* find the parent that can provide the fastest rate <= rate */
568 num_parents = core->num_parents;
569 for (i = 0; i < num_parents; i++) {
570 parent = clk_core_get_parent_by_index(core, i);
571 if (!parent)
572 continue;
573
574 if (core->flags & CLK_SET_RATE_PARENT) {
575 parent_req = *req;
576 ret = __clk_determine_rate(parent->hw, &parent_req);
577 if (ret)
578 continue;
579 } else {
580 parent_req.rate = clk_core_get_rate_nolock(parent);
581 }
582
583 if (mux_is_better_rate(req->rate, parent_req.rate,
584 best, flags)) {
585 best_parent = parent;
586 best = parent_req.rate;
587 }
588 }
589
590 if (!best_parent)
591 return -EINVAL;
592
593out:
594 if (best_parent)
595 req->best_parent_hw = best_parent->hw;
596 req->best_parent_rate = best;
597 req->rate = best;
598
599 return 0;
600}
601EXPORT_SYMBOL_GPL(clk_mux_determine_rate_flags);
602
603struct clk *__clk_lookup(const char *name)
604{
605 struct clk_core *core = clk_core_lookup(name);
606
607 return !core ? NULL : core->hw->clk;
608}
609
610static void clk_core_get_boundaries(struct clk_core *core,
611 unsigned long *min_rate,
612 unsigned long *max_rate)
613{
614 struct clk *clk_user;
615
616 lockdep_assert_held(&prepare_lock);
617
618 *min_rate = core->min_rate;
619 *max_rate = core->max_rate;
620
621 hlist_for_each_entry(clk_user, &core->clks, clks_node)
622 *min_rate = max(*min_rate, clk_user->min_rate);
623
624 hlist_for_each_entry(clk_user, &core->clks, clks_node)
625 *max_rate = min(*max_rate, clk_user->max_rate);
626}
627
628static bool clk_core_check_boundaries(struct clk_core *core,
629 unsigned long min_rate,
630 unsigned long max_rate)
631{
632 struct clk *user;
633
634 lockdep_assert_held(&prepare_lock);
635
636 if (min_rate > core->max_rate || max_rate < core->min_rate)
637 return false;
638
639 hlist_for_each_entry(user, &core->clks, clks_node)
640 if (min_rate > user->max_rate || max_rate < user->min_rate)
641 return false;
642
643 return true;
644}
645
646void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate,
647 unsigned long max_rate)
648{
649 hw->core->min_rate = min_rate;
650 hw->core->max_rate = max_rate;
651}
652EXPORT_SYMBOL_GPL(clk_hw_set_rate_range);
653
654/*
655 * __clk_mux_determine_rate - clk_ops::determine_rate implementation for a mux type clk
656 * @hw: mux type clk to determine rate on
657 * @req: rate request, also used to return preferred parent and frequencies
658 *
659 * Helper for finding best parent to provide a given frequency. This can be used
660 * directly as a determine_rate callback (e.g. for a mux), or from a more
661 * complex clock that may combine a mux with other operations.
662 *
663 * Returns: 0 on success, -EERROR value on error
664 */
665int __clk_mux_determine_rate(struct clk_hw *hw,
666 struct clk_rate_request *req)
667{
668 return clk_mux_determine_rate_flags(hw, req, 0);
669}
670EXPORT_SYMBOL_GPL(__clk_mux_determine_rate);
671
672int __clk_mux_determine_rate_closest(struct clk_hw *hw,
673 struct clk_rate_request *req)
674{
675 return clk_mux_determine_rate_flags(hw, req, CLK_MUX_ROUND_CLOSEST);
676}
677EXPORT_SYMBOL_GPL(__clk_mux_determine_rate_closest);
678
679/*** clk api ***/
680
681static void clk_core_rate_unprotect(struct clk_core *core)
682{
683 lockdep_assert_held(&prepare_lock);
684
685 if (!core)
686 return;
687
688 if (WARN(core->protect_count == 0,
689 "%s already unprotected\n", core->name))
690 return;
691
692 if (--core->protect_count > 0)
693 return;
694
695 clk_core_rate_unprotect(core->parent);
696}
697
698static int clk_core_rate_nuke_protect(struct clk_core *core)
699{
700 int ret;
701
702 lockdep_assert_held(&prepare_lock);
703
704 if (!core)
705 return -EINVAL;
706
707 if (core->protect_count == 0)
708 return 0;
709
710 ret = core->protect_count;
711 core->protect_count = 1;
712 clk_core_rate_unprotect(core);
713
714 return ret;
715}
716
717/**
718 * clk_rate_exclusive_put - release exclusivity over clock rate control
719 * @clk: the clk over which the exclusivity is released
720 *
721 * clk_rate_exclusive_put() completes a critical section during which a clock
722 * consumer cannot tolerate any other consumer making any operation on the
723 * clock which could result in a rate change or rate glitch. Exclusive clocks
724 * cannot have their rate changed, either directly or indirectly due to changes
725 * further up the parent chain of clocks. As a result, clocks up parent chain
726 * also get under exclusive control of the calling consumer.
727 *
728 * If exlusivity is claimed more than once on clock, even by the same consumer,
729 * the rate effectively gets locked as exclusivity can't be preempted.
730 *
731 * Calls to clk_rate_exclusive_put() must be balanced with calls to
732 * clk_rate_exclusive_get(). Calls to this function may sleep, and do not return
733 * error status.
734 */
735void clk_rate_exclusive_put(struct clk *clk)
736{
737 if (!clk)
738 return;
739
740 clk_prepare_lock();
741
742 /*
743 * if there is something wrong with this consumer protect count, stop
744 * here before messing with the provider
745 */
746 if (WARN_ON(clk->exclusive_count <= 0))
747 goto out;
748
749 clk_core_rate_unprotect(clk->core);
750 clk->exclusive_count--;
751out:
752 clk_prepare_unlock();
753}
754EXPORT_SYMBOL_GPL(clk_rate_exclusive_put);
755
756static void clk_core_rate_protect(struct clk_core *core)
757{
758 lockdep_assert_held(&prepare_lock);
759
760 if (!core)
761 return;
762
763 if (core->protect_count == 0)
764 clk_core_rate_protect(core->parent);
765
766 core->protect_count++;
767}
768
769static void clk_core_rate_restore_protect(struct clk_core *core, int count)
770{
771 lockdep_assert_held(&prepare_lock);
772
773 if (!core)
774 return;
775
776 if (count == 0)
777 return;
778
779 clk_core_rate_protect(core);
780 core->protect_count = count;
781}
782
783/**
784 * clk_rate_exclusive_get - get exclusivity over the clk rate control
785 * @clk: the clk over which the exclusity of rate control is requested
786 *
787 * clk_rate_exclusive_get() begins a critical section during which a clock
788 * consumer cannot tolerate any other consumer making any operation on the
789 * clock which could result in a rate change or rate glitch. Exclusive clocks
790 * cannot have their rate changed, either directly or indirectly due to changes
791 * further up the parent chain of clocks. As a result, clocks up parent chain
792 * also get under exclusive control of the calling consumer.
793 *
794 * If exlusivity is claimed more than once on clock, even by the same consumer,
795 * the rate effectively gets locked as exclusivity can't be preempted.
796 *
797 * Calls to clk_rate_exclusive_get() should be balanced with calls to
798 * clk_rate_exclusive_put(). Calls to this function may sleep.
799 * Returns 0 on success, -EERROR otherwise
800 */
801int clk_rate_exclusive_get(struct clk *clk)
802{
803 if (!clk)
804 return 0;
805
806 clk_prepare_lock();
807 clk_core_rate_protect(clk->core);
808 clk->exclusive_count++;
809 clk_prepare_unlock();
810
811 return 0;
812}
813EXPORT_SYMBOL_GPL(clk_rate_exclusive_get);
814
815static void clk_core_unprepare(struct clk_core *core)
816{
817 lockdep_assert_held(&prepare_lock);
818
819 if (!core)
820 return;
821
822 if (WARN(core->prepare_count == 0,
823 "%s already unprepared\n", core->name))
824 return;
825
826 if (WARN(core->prepare_count == 1 && core->flags & CLK_IS_CRITICAL,
827 "Unpreparing critical %s\n", core->name))
828 return;
829
830 if (core->flags & CLK_SET_RATE_GATE)
831 clk_core_rate_unprotect(core);
832
833 if (--core->prepare_count > 0)
834 return;
835
836 WARN(core->enable_count > 0, "Unpreparing enabled %s\n", core->name);
837
838 trace_clk_unprepare(core);
839
840 if (core->ops->unprepare)
841 core->ops->unprepare(core->hw);
842
843 clk_pm_runtime_put(core);
844
845 trace_clk_unprepare_complete(core);
846 clk_core_unprepare(core->parent);
847}
848
849static void clk_core_unprepare_lock(struct clk_core *core)
850{
851 clk_prepare_lock();
852 clk_core_unprepare(core);
853 clk_prepare_unlock();
854}
855
856/**
857 * clk_unprepare - undo preparation of a clock source
858 * @clk: the clk being unprepared
859 *
860 * clk_unprepare may sleep, which differentiates it from clk_disable. In a
861 * simple case, clk_unprepare can be used instead of clk_disable to gate a clk
862 * if the operation may sleep. One example is a clk which is accessed over
863 * I2c. In the complex case a clk gate operation may require a fast and a slow
864 * part. It is this reason that clk_unprepare and clk_disable are not mutually
865 * exclusive. In fact clk_disable must be called before clk_unprepare.
866 */
867void clk_unprepare(struct clk *clk)
868{
869 if (IS_ERR_OR_NULL(clk))
870 return;
871
872 clk_core_unprepare_lock(clk->core);
873}
874EXPORT_SYMBOL_GPL(clk_unprepare);
875
876static int clk_core_prepare(struct clk_core *core)
877{
878 int ret = 0;
879
880 lockdep_assert_held(&prepare_lock);
881
882 if (!core)
883 return 0;
884
885 if (core->prepare_count == 0) {
886 ret = clk_pm_runtime_get(core);
887 if (ret)
888 return ret;
889
890 ret = clk_core_prepare(core->parent);
891 if (ret)
892 goto runtime_put;
893
894 trace_clk_prepare(core);
895
896 if (core->ops->prepare)
897 ret = core->ops->prepare(core->hw);
898
899 trace_clk_prepare_complete(core);
900
901 if (ret)
902 goto unprepare;
903 }
904
905 core->prepare_count++;
906
907 /*
908 * CLK_SET_RATE_GATE is a special case of clock protection
909 * Instead of a consumer claiming exclusive rate control, it is
910 * actually the provider which prevents any consumer from making any
911 * operation which could result in a rate change or rate glitch while
912 * the clock is prepared.
913 */
914 if (core->flags & CLK_SET_RATE_GATE)
915 clk_core_rate_protect(core);
916
917 return 0;
918unprepare:
919 clk_core_unprepare(core->parent);
920runtime_put:
921 clk_pm_runtime_put(core);
922 return ret;
923}
924
925static int clk_core_prepare_lock(struct clk_core *core)
926{
927 int ret;
928
929 clk_prepare_lock();
930 ret = clk_core_prepare(core);
931 clk_prepare_unlock();
932
933 return ret;
934}
935
936/**
937 * clk_prepare - prepare a clock source
938 * @clk: the clk being prepared
939 *
940 * clk_prepare may sleep, which differentiates it from clk_enable. In a simple
941 * case, clk_prepare can be used instead of clk_enable to ungate a clk if the
942 * operation may sleep. One example is a clk which is accessed over I2c. In
943 * the complex case a clk ungate operation may require a fast and a slow part.
944 * It is this reason that clk_prepare and clk_enable are not mutually
945 * exclusive. In fact clk_prepare must be called before clk_enable.
946 * Returns 0 on success, -EERROR otherwise.
947 */
948int clk_prepare(struct clk *clk)
949{
950 if (!clk)
951 return 0;
952
953 return clk_core_prepare_lock(clk->core);
954}
955EXPORT_SYMBOL_GPL(clk_prepare);
956
957static void clk_core_disable(struct clk_core *core)
958{
959 lockdep_assert_held(&enable_lock);
960
961 if (!core)
962 return;
963
964 if (WARN(core->enable_count == 0, "%s already disabled\n", core->name))
965 return;
966
967 if (WARN(core->enable_count == 1 && core->flags & CLK_IS_CRITICAL,
968 "Disabling critical %s\n", core->name))
969 return;
970
971 if (--core->enable_count > 0)
972 return;
973
974 trace_clk_disable_rcuidle(core);
975
976 if (core->ops->disable)
977 core->ops->disable(core->hw);
978
979 trace_clk_disable_complete_rcuidle(core);
980
981 clk_core_disable(core->parent);
982}
983
984static void clk_core_disable_lock(struct clk_core *core)
985{
986 unsigned long flags;
987
988 flags = clk_enable_lock();
989 clk_core_disable(core);
990 clk_enable_unlock(flags);
991}
992
993/**
994 * clk_disable - gate a clock
995 * @clk: the clk being gated
996 *
997 * clk_disable must not sleep, which differentiates it from clk_unprepare. In
998 * a simple case, clk_disable can be used instead of clk_unprepare to gate a
999 * clk if the operation is fast and will never sleep. One example is a
1000 * SoC-internal clk which is controlled via simple register writes. In the
1001 * complex case a clk gate operation may require a fast and a slow part. It is
1002 * this reason that clk_unprepare and clk_disable are not mutually exclusive.
1003 * In fact clk_disable must be called before clk_unprepare.
1004 */
1005void clk_disable(struct clk *clk)
1006{
1007 if (IS_ERR_OR_NULL(clk))
1008 return;
1009
1010 clk_core_disable_lock(clk->core);
1011}
1012EXPORT_SYMBOL_GPL(clk_disable);
1013
1014static int clk_core_enable(struct clk_core *core)
1015{
1016 int ret = 0;
1017
1018 lockdep_assert_held(&enable_lock);
1019
1020 if (!core)
1021 return 0;
1022
1023 if (WARN(core->prepare_count == 0,
1024 "Enabling unprepared %s\n", core->name))
1025 return -ESHUTDOWN;
1026
1027 if (core->enable_count == 0) {
1028 ret = clk_core_enable(core->parent);
1029
1030 if (ret)
1031 return ret;
1032
1033 trace_clk_enable_rcuidle(core);
1034
1035 if (core->ops->enable)
1036 ret = core->ops->enable(core->hw);
1037
1038 trace_clk_enable_complete_rcuidle(core);
1039
1040 if (ret) {
1041 clk_core_disable(core->parent);
1042 return ret;
1043 }
1044 }
1045
1046 core->enable_count++;
1047 return 0;
1048}
1049
1050static int clk_core_enable_lock(struct clk_core *core)
1051{
1052 unsigned long flags;
1053 int ret;
1054
1055 flags = clk_enable_lock();
1056 ret = clk_core_enable(core);
1057 clk_enable_unlock(flags);
1058
1059 return ret;
1060}
1061
1062/**
1063 * clk_gate_restore_context - restore context for poweroff
1064 * @hw: the clk_hw pointer of clock whose state is to be restored
1065 *
1066 * The clock gate restore context function enables or disables
1067 * the gate clocks based on the enable_count. This is done in cases
1068 * where the clock context is lost and based on the enable_count
1069 * the clock either needs to be enabled/disabled. This
1070 * helps restore the state of gate clocks.
1071 */
1072void clk_gate_restore_context(struct clk_hw *hw)
1073{
1074 struct clk_core *core = hw->core;
1075
1076 if (core->enable_count)
1077 core->ops->enable(hw);
1078 else
1079 core->ops->disable(hw);
1080}
1081EXPORT_SYMBOL_GPL(clk_gate_restore_context);
1082
1083static int clk_core_save_context(struct clk_core *core)
1084{
1085 struct clk_core *child;
1086 int ret = 0;
1087
1088 hlist_for_each_entry(child, &core->children, child_node) {
1089 ret = clk_core_save_context(child);
1090 if (ret < 0)
1091 return ret;
1092 }
1093
1094 if (core->ops && core->ops->save_context)
1095 ret = core->ops->save_context(core->hw);
1096
1097 return ret;
1098}
1099
1100static void clk_core_restore_context(struct clk_core *core)
1101{
1102 struct clk_core *child;
1103
1104 if (core->ops && core->ops->restore_context)
1105 core->ops->restore_context(core->hw);
1106
1107 hlist_for_each_entry(child, &core->children, child_node)
1108 clk_core_restore_context(child);
1109}
1110
1111/**
1112 * clk_save_context - save clock context for poweroff
1113 *
1114 * Saves the context of the clock register for powerstates in which the
1115 * contents of the registers will be lost. Occurs deep within the suspend
1116 * code. Returns 0 on success.
1117 */
1118int clk_save_context(void)
1119{
1120 struct clk_core *clk;
1121 int ret;
1122
1123 hlist_for_each_entry(clk, &clk_root_list, child_node) {
1124 ret = clk_core_save_context(clk);
1125 if (ret < 0)
1126 return ret;
1127 }
1128
1129 hlist_for_each_entry(clk, &clk_orphan_list, child_node) {
1130 ret = clk_core_save_context(clk);
1131 if (ret < 0)
1132 return ret;
1133 }
1134
1135 return 0;
1136}
1137EXPORT_SYMBOL_GPL(clk_save_context);
1138
1139/**
1140 * clk_restore_context - restore clock context after poweroff
1141 *
1142 * Restore the saved clock context upon resume.
1143 *
1144 */
1145void clk_restore_context(void)
1146{
1147 struct clk_core *core;
1148
1149 hlist_for_each_entry(core, &clk_root_list, child_node)
1150 clk_core_restore_context(core);
1151
1152 hlist_for_each_entry(core, &clk_orphan_list, child_node)
1153 clk_core_restore_context(core);
1154}
1155EXPORT_SYMBOL_GPL(clk_restore_context);
1156
1157/**
1158 * clk_enable - ungate a clock
1159 * @clk: the clk being ungated
1160 *
1161 * clk_enable must not sleep, which differentiates it from clk_prepare. In a
1162 * simple case, clk_enable can be used instead of clk_prepare to ungate a clk
1163 * if the operation will never sleep. One example is a SoC-internal clk which
1164 * is controlled via simple register writes. In the complex case a clk ungate
1165 * operation may require a fast and a slow part. It is this reason that
1166 * clk_enable and clk_prepare are not mutually exclusive. In fact clk_prepare
1167 * must be called before clk_enable. Returns 0 on success, -EERROR
1168 * otherwise.
1169 */
1170int clk_enable(struct clk *clk)
1171{
1172 if (!clk)
1173 return 0;
1174
1175 return clk_core_enable_lock(clk->core);
1176}
1177EXPORT_SYMBOL_GPL(clk_enable);
1178
1179/**
1180 * clk_is_enabled_when_prepared - indicate if preparing a clock also enables it.
1181 * @clk: clock source
1182 *
1183 * Returns true if clk_prepare() implicitly enables the clock, effectively
1184 * making clk_enable()/clk_disable() no-ops, false otherwise.
1185 *
1186 * This is of interest mainly to power management code where actually
1187 * disabling the clock also requires unpreparing it to have any material
1188 * effect.
1189 *
1190 * Regardless of the value returned here, the caller must always invoke
1191 * clk_enable() or clk_prepare_enable() and counterparts for usage counts
1192 * to be right.
1193 */
1194bool clk_is_enabled_when_prepared(struct clk *clk)
1195{
1196 return clk && !(clk->core->ops->enable && clk->core->ops->disable);
1197}
1198EXPORT_SYMBOL_GPL(clk_is_enabled_when_prepared);
1199
1200static int clk_core_prepare_enable(struct clk_core *core)
1201{
1202 int ret;
1203
1204 ret = clk_core_prepare_lock(core);
1205 if (ret)
1206 return ret;
1207
1208 ret = clk_core_enable_lock(core);
1209 if (ret)
1210 clk_core_unprepare_lock(core);
1211
1212 return ret;
1213}
1214
1215static void clk_core_disable_unprepare(struct clk_core *core)
1216{
1217 clk_core_disable_lock(core);
1218 clk_core_unprepare_lock(core);
1219}
1220
1221static void __init clk_unprepare_unused_subtree(struct clk_core *core)
1222{
1223 struct clk_core *child;
1224
1225 lockdep_assert_held(&prepare_lock);
1226
1227 hlist_for_each_entry(child, &core->children, child_node)
1228 clk_unprepare_unused_subtree(child);
1229
1230 if (core->prepare_count)
1231 return;
1232
1233 if (core->flags & CLK_IGNORE_UNUSED)
1234 return;
1235
1236 if (clk_pm_runtime_get(core))
1237 return;
1238
1239 if (clk_core_is_prepared(core)) {
1240 trace_clk_unprepare(core);
1241 if (core->ops->unprepare_unused)
1242 core->ops->unprepare_unused(core->hw);
1243 else if (core->ops->unprepare)
1244 core->ops->unprepare(core->hw);
1245 trace_clk_unprepare_complete(core);
1246 }
1247
1248 clk_pm_runtime_put(core);
1249}
1250
1251static void __init clk_disable_unused_subtree(struct clk_core *core)
1252{
1253 struct clk_core *child;
1254 unsigned long flags;
1255
1256 lockdep_assert_held(&prepare_lock);
1257
1258 hlist_for_each_entry(child, &core->children, child_node)
1259 clk_disable_unused_subtree(child);
1260
1261 if (core->flags & CLK_OPS_PARENT_ENABLE)
1262 clk_core_prepare_enable(core->parent);
1263
1264 if (clk_pm_runtime_get(core))
1265 goto unprepare_out;
1266
1267 flags = clk_enable_lock();
1268
1269 if (core->enable_count)
1270 goto unlock_out;
1271
1272 if (core->flags & CLK_IGNORE_UNUSED)
1273 goto unlock_out;
1274
1275 /*
1276 * some gate clocks have special needs during the disable-unused
1277 * sequence. call .disable_unused if available, otherwise fall
1278 * back to .disable
1279 */
1280 if (clk_core_is_enabled(core)) {
1281 trace_clk_disable(core);
1282 if (core->ops->disable_unused)
1283 core->ops->disable_unused(core->hw);
1284 else if (core->ops->disable)
1285 core->ops->disable(core->hw);
1286 trace_clk_disable_complete(core);
1287 }
1288
1289unlock_out:
1290 clk_enable_unlock(flags);
1291 clk_pm_runtime_put(core);
1292unprepare_out:
1293 if (core->flags & CLK_OPS_PARENT_ENABLE)
1294 clk_core_disable_unprepare(core->parent);
1295}
1296
1297static bool clk_ignore_unused __initdata;
1298static int __init clk_ignore_unused_setup(char *__unused)
1299{
1300 clk_ignore_unused = true;
1301 return 1;
1302}
1303__setup("clk_ignore_unused", clk_ignore_unused_setup);
1304
1305static int __init clk_disable_unused(void)
1306{
1307 struct clk_core *core;
1308
1309 if (clk_ignore_unused) {
1310 pr_warn("clk: Not disabling unused clocks\n");
1311 return 0;
1312 }
1313
1314 clk_prepare_lock();
1315
1316 hlist_for_each_entry(core, &clk_root_list, child_node)
1317 clk_disable_unused_subtree(core);
1318
1319 hlist_for_each_entry(core, &clk_orphan_list, child_node)
1320 clk_disable_unused_subtree(core);
1321
1322 hlist_for_each_entry(core, &clk_root_list, child_node)
1323 clk_unprepare_unused_subtree(core);
1324
1325 hlist_for_each_entry(core, &clk_orphan_list, child_node)
1326 clk_unprepare_unused_subtree(core);
1327
1328 clk_prepare_unlock();
1329
1330 return 0;
1331}
1332late_initcall_sync(clk_disable_unused);
1333
1334static int clk_core_determine_round_nolock(struct clk_core *core,
1335 struct clk_rate_request *req)
1336{
1337 long rate;
1338
1339 lockdep_assert_held(&prepare_lock);
1340
1341 if (!core)
1342 return 0;
1343
1344 req->rate = clamp(req->rate, req->min_rate, req->max_rate);
1345
1346 /*
1347 * At this point, core protection will be disabled
1348 * - if the provider is not protected at all
1349 * - if the calling consumer is the only one which has exclusivity
1350 * over the provider
1351 */
1352 if (clk_core_rate_is_protected(core)) {
1353 req->rate = core->rate;
1354 } else if (core->ops->determine_rate) {
1355 return core->ops->determine_rate(core->hw, req);
1356 } else if (core->ops->round_rate) {
1357 rate = core->ops->round_rate(core->hw, req->rate,
1358 &req->best_parent_rate);
1359 if (rate < 0)
1360 return rate;
1361
1362 req->rate = rate;
1363 } else {
1364 return -EINVAL;
1365 }
1366
1367 return 0;
1368}
1369
1370static void clk_core_init_rate_req(struct clk_core * const core,
1371 struct clk_rate_request *req)
1372{
1373 struct clk_core *parent;
1374
1375 if (WARN_ON(!core || !req))
1376 return;
1377
1378 parent = core->parent;
1379 if (parent) {
1380 req->best_parent_hw = parent->hw;
1381 req->best_parent_rate = parent->rate;
1382 } else {
1383 req->best_parent_hw = NULL;
1384 req->best_parent_rate = 0;
1385 }
1386}
1387
1388static bool clk_core_can_round(struct clk_core * const core)
1389{
1390 return core->ops->determine_rate || core->ops->round_rate;
1391}
1392
1393static int clk_core_round_rate_nolock(struct clk_core *core,
1394 struct clk_rate_request *req)
1395{
1396 lockdep_assert_held(&prepare_lock);
1397
1398 if (!core) {
1399 req->rate = 0;
1400 return 0;
1401 }
1402
1403 clk_core_init_rate_req(core, req);
1404
1405 if (clk_core_can_round(core))
1406 return clk_core_determine_round_nolock(core, req);
1407 else if (core->flags & CLK_SET_RATE_PARENT)
1408 return clk_core_round_rate_nolock(core->parent, req);
1409
1410 req->rate = core->rate;
1411 return 0;
1412}
1413
1414/**
1415 * __clk_determine_rate - get the closest rate actually supported by a clock
1416 * @hw: determine the rate of this clock
1417 * @req: target rate request
1418 *
1419 * Useful for clk_ops such as .set_rate and .determine_rate.
1420 */
1421int __clk_determine_rate(struct clk_hw *hw, struct clk_rate_request *req)
1422{
1423 if (!hw) {
1424 req->rate = 0;
1425 return 0;
1426 }
1427
1428 return clk_core_round_rate_nolock(hw->core, req);
1429}
1430EXPORT_SYMBOL_GPL(__clk_determine_rate);
1431
1432/**
1433 * clk_hw_round_rate() - round the given rate for a hw clk
1434 * @hw: the hw clk for which we are rounding a rate
1435 * @rate: the rate which is to be rounded
1436 *
1437 * Takes in a rate as input and rounds it to a rate that the clk can actually
1438 * use.
1439 *
1440 * Context: prepare_lock must be held.
1441 * For clk providers to call from within clk_ops such as .round_rate,
1442 * .determine_rate.
1443 *
1444 * Return: returns rounded rate of hw clk if clk supports round_rate operation
1445 * else returns the parent rate.
1446 */
1447unsigned long clk_hw_round_rate(struct clk_hw *hw, unsigned long rate)
1448{
1449 int ret;
1450 struct clk_rate_request req;
1451
1452 clk_core_get_boundaries(hw->core, &req.min_rate, &req.max_rate);
1453 req.rate = rate;
1454
1455 ret = clk_core_round_rate_nolock(hw->core, &req);
1456 if (ret)
1457 return 0;
1458
1459 return req.rate;
1460}
1461EXPORT_SYMBOL_GPL(clk_hw_round_rate);
1462
1463/**
1464 * clk_round_rate - round the given rate for a clk
1465 * @clk: the clk for which we are rounding a rate
1466 * @rate: the rate which is to be rounded
1467 *
1468 * Takes in a rate as input and rounds it to a rate that the clk can actually
1469 * use which is then returned. If clk doesn't support round_rate operation
1470 * then the parent rate is returned.
1471 */
1472long clk_round_rate(struct clk *clk, unsigned long rate)
1473{
1474 struct clk_rate_request req;
1475 int ret;
1476
1477 if (!clk)
1478 return 0;
1479
1480 clk_prepare_lock();
1481
1482 if (clk->exclusive_count)
1483 clk_core_rate_unprotect(clk->core);
1484
1485 clk_core_get_boundaries(clk->core, &req.min_rate, &req.max_rate);
1486 req.rate = rate;
1487
1488 ret = clk_core_round_rate_nolock(clk->core, &req);
1489
1490 if (clk->exclusive_count)
1491 clk_core_rate_protect(clk->core);
1492
1493 clk_prepare_unlock();
1494
1495 if (ret)
1496 return ret;
1497
1498 return req.rate;
1499}
1500EXPORT_SYMBOL_GPL(clk_round_rate);
1501
1502/**
1503 * __clk_notify - call clk notifier chain
1504 * @core: clk that is changing rate
1505 * @msg: clk notifier type (see include/linux/clk.h)
1506 * @old_rate: old clk rate
1507 * @new_rate: new clk rate
1508 *
1509 * Triggers a notifier call chain on the clk rate-change notification
1510 * for 'clk'. Passes a pointer to the struct clk and the previous
1511 * and current rates to the notifier callback. Intended to be called by
1512 * internal clock code only. Returns NOTIFY_DONE from the last driver
1513 * called if all went well, or NOTIFY_STOP or NOTIFY_BAD immediately if
1514 * a driver returns that.
1515 */
1516static int __clk_notify(struct clk_core *core, unsigned long msg,
1517 unsigned long old_rate, unsigned long new_rate)
1518{
1519 struct clk_notifier *cn;
1520 struct clk_notifier_data cnd;
1521 int ret = NOTIFY_DONE;
1522
1523 cnd.old_rate = old_rate;
1524 cnd.new_rate = new_rate;
1525
1526 list_for_each_entry(cn, &clk_notifier_list, node) {
1527 if (cn->clk->core == core) {
1528 cnd.clk = cn->clk;
1529 ret = srcu_notifier_call_chain(&cn->notifier_head, msg,
1530 &cnd);
1531 if (ret & NOTIFY_STOP_MASK)
1532 return ret;
1533 }
1534 }
1535
1536 return ret;
1537}
1538
1539/**
1540 * __clk_recalc_accuracies
1541 * @core: first clk in the subtree
1542 *
1543 * Walks the subtree of clks starting with clk and recalculates accuracies as
1544 * it goes. Note that if a clk does not implement the .recalc_accuracy
1545 * callback then it is assumed that the clock will take on the accuracy of its
1546 * parent.
1547 */
1548static void __clk_recalc_accuracies(struct clk_core *core)
1549{
1550 unsigned long parent_accuracy = 0;
1551 struct clk_core *child;
1552
1553 lockdep_assert_held(&prepare_lock);
1554
1555 if (core->parent)
1556 parent_accuracy = core->parent->accuracy;
1557
1558 if (core->ops->recalc_accuracy)
1559 core->accuracy = core->ops->recalc_accuracy(core->hw,
1560 parent_accuracy);
1561 else
1562 core->accuracy = parent_accuracy;
1563
1564 hlist_for_each_entry(child, &core->children, child_node)
1565 __clk_recalc_accuracies(child);
1566}
1567
1568static long clk_core_get_accuracy_recalc(struct clk_core *core)
1569{
1570 if (core && (core->flags & CLK_GET_ACCURACY_NOCACHE))
1571 __clk_recalc_accuracies(core);
1572
1573 return clk_core_get_accuracy_no_lock(core);
1574}
1575
1576/**
1577 * clk_get_accuracy - return the accuracy of clk
1578 * @clk: the clk whose accuracy is being returned
1579 *
1580 * Simply returns the cached accuracy of the clk, unless
1581 * CLK_GET_ACCURACY_NOCACHE flag is set, which means a recalc_rate will be
1582 * issued.
1583 * If clk is NULL then returns 0.
1584 */
1585long clk_get_accuracy(struct clk *clk)
1586{
1587 long accuracy;
1588
1589 if (!clk)
1590 return 0;
1591
1592 clk_prepare_lock();
1593 accuracy = clk_core_get_accuracy_recalc(clk->core);
1594 clk_prepare_unlock();
1595
1596 return accuracy;
1597}
1598EXPORT_SYMBOL_GPL(clk_get_accuracy);
1599
1600static unsigned long clk_recalc(struct clk_core *core,
1601 unsigned long parent_rate)
1602{
1603 unsigned long rate = parent_rate;
1604
1605 if (core->ops->recalc_rate && !clk_pm_runtime_get(core)) {
1606 rate = core->ops->recalc_rate(core->hw, parent_rate);
1607 clk_pm_runtime_put(core);
1608 }
1609 return rate;
1610}
1611
1612/**
1613 * __clk_recalc_rates
1614 * @core: first clk in the subtree
1615 * @msg: notification type (see include/linux/clk.h)
1616 *
1617 * Walks the subtree of clks starting with clk and recalculates rates as it
1618 * goes. Note that if a clk does not implement the .recalc_rate callback then
1619 * it is assumed that the clock will take on the rate of its parent.
1620 *
1621 * clk_recalc_rates also propagates the POST_RATE_CHANGE notification,
1622 * if necessary.
1623 */
1624static void __clk_recalc_rates(struct clk_core *core, unsigned long msg)
1625{
1626 unsigned long old_rate;
1627 unsigned long parent_rate = 0;
1628 struct clk_core *child;
1629
1630 lockdep_assert_held(&prepare_lock);
1631
1632 old_rate = core->rate;
1633
1634 if (core->parent)
1635 parent_rate = core->parent->rate;
1636
1637 core->rate = clk_recalc(core, parent_rate);
1638
1639 /*
1640 * ignore NOTIFY_STOP and NOTIFY_BAD return values for POST_RATE_CHANGE
1641 * & ABORT_RATE_CHANGE notifiers
1642 */
1643 if (core->notifier_count && msg)
1644 __clk_notify(core, msg, old_rate, core->rate);
1645
1646 hlist_for_each_entry(child, &core->children, child_node)
1647 __clk_recalc_rates(child, msg);
1648}
1649
1650static unsigned long clk_core_get_rate_recalc(struct clk_core *core)
1651{
1652 if (core && (core->flags & CLK_GET_RATE_NOCACHE))
1653 __clk_recalc_rates(core, 0);
1654
1655 return clk_core_get_rate_nolock(core);
1656}
1657
1658/**
1659 * clk_get_rate - return the rate of clk
1660 * @clk: the clk whose rate is being returned
1661 *
1662 * Simply returns the cached rate of the clk, unless CLK_GET_RATE_NOCACHE flag
1663 * is set, which means a recalc_rate will be issued.
1664 * If clk is NULL then returns 0.
1665 */
1666unsigned long clk_get_rate(struct clk *clk)
1667{
1668 unsigned long rate;
1669
1670 if (!clk)
1671 return 0;
1672
1673 clk_prepare_lock();
1674 rate = clk_core_get_rate_recalc(clk->core);
1675 clk_prepare_unlock();
1676
1677 return rate;
1678}
1679EXPORT_SYMBOL_GPL(clk_get_rate);
1680
1681static int clk_fetch_parent_index(struct clk_core *core,
1682 struct clk_core *parent)
1683{
1684 int i;
1685
1686 if (!parent)
1687 return -EINVAL;
1688
1689 for (i = 0; i < core->num_parents; i++) {
1690 /* Found it first try! */
1691 if (core->parents[i].core == parent)
1692 return i;
1693
1694 /* Something else is here, so keep looking */
1695 if (core->parents[i].core)
1696 continue;
1697
1698 /* Maybe core hasn't been cached but the hw is all we know? */
1699 if (core->parents[i].hw) {
1700 if (core->parents[i].hw == parent->hw)
1701 break;
1702
1703 /* Didn't match, but we're expecting a clk_hw */
1704 continue;
1705 }
1706
1707 /* Maybe it hasn't been cached (clk_set_parent() path) */
1708 if (parent == clk_core_get(core, i))
1709 break;
1710
1711 /* Fallback to comparing globally unique names */
1712 if (core->parents[i].name &&
1713 !strcmp(parent->name, core->parents[i].name))
1714 break;
1715 }
1716
1717 if (i == core->num_parents)
1718 return -EINVAL;
1719
1720 core->parents[i].core = parent;
1721 return i;
1722}
1723
1724/**
1725 * clk_hw_get_parent_index - return the index of the parent clock
1726 * @hw: clk_hw associated with the clk being consumed
1727 *
1728 * Fetches and returns the index of parent clock. Returns -EINVAL if the given
1729 * clock does not have a current parent.
1730 */
1731int clk_hw_get_parent_index(struct clk_hw *hw)
1732{
1733 struct clk_hw *parent = clk_hw_get_parent(hw);
1734
1735 if (WARN_ON(parent == NULL))
1736 return -EINVAL;
1737
1738 return clk_fetch_parent_index(hw->core, parent->core);
1739}
1740EXPORT_SYMBOL_GPL(clk_hw_get_parent_index);
1741
1742/*
1743 * Update the orphan status of @core and all its children.
1744 */
1745static void clk_core_update_orphan_status(struct clk_core *core, bool is_orphan)
1746{
1747 struct clk_core *child;
1748
1749 core->orphan = is_orphan;
1750
1751 hlist_for_each_entry(child, &core->children, child_node)
1752 clk_core_update_orphan_status(child, is_orphan);
1753}
1754
1755static void clk_reparent(struct clk_core *core, struct clk_core *new_parent)
1756{
1757 bool was_orphan = core->orphan;
1758
1759 hlist_del(&core->child_node);
1760
1761 if (new_parent) {
1762 bool becomes_orphan = new_parent->orphan;
1763
1764 /* avoid duplicate POST_RATE_CHANGE notifications */
1765 if (new_parent->new_child == core)
1766 new_parent->new_child = NULL;
1767
1768 hlist_add_head(&core->child_node, &new_parent->children);
1769
1770 if (was_orphan != becomes_orphan)
1771 clk_core_update_orphan_status(core, becomes_orphan);
1772 } else {
1773 hlist_add_head(&core->child_node, &clk_orphan_list);
1774 if (!was_orphan)
1775 clk_core_update_orphan_status(core, true);
1776 }
1777
1778 core->parent = new_parent;
1779}
1780
1781static struct clk_core *__clk_set_parent_before(struct clk_core *core,
1782 struct clk_core *parent)
1783{
1784 unsigned long flags;
1785 struct clk_core *old_parent = core->parent;
1786
1787 /*
1788 * 1. enable parents for CLK_OPS_PARENT_ENABLE clock
1789 *
1790 * 2. Migrate prepare state between parents and prevent race with
1791 * clk_enable().
1792 *
1793 * If the clock is not prepared, then a race with
1794 * clk_enable/disable() is impossible since we already have the
1795 * prepare lock (future calls to clk_enable() need to be preceded by
1796 * a clk_prepare()).
1797 *
1798 * If the clock is prepared, migrate the prepared state to the new
1799 * parent and also protect against a race with clk_enable() by
1800 * forcing the clock and the new parent on. This ensures that all
1801 * future calls to clk_enable() are practically NOPs with respect to
1802 * hardware and software states.
1803 *
1804 * See also: Comment for clk_set_parent() below.
1805 */
1806
1807 /* enable old_parent & parent if CLK_OPS_PARENT_ENABLE is set */
1808 if (core->flags & CLK_OPS_PARENT_ENABLE) {
1809 clk_core_prepare_enable(old_parent);
1810 clk_core_prepare_enable(parent);
1811 }
1812
1813 /* migrate prepare count if > 0 */
1814 if (core->prepare_count) {
1815 clk_core_prepare_enable(parent);
1816 clk_core_enable_lock(core);
1817 }
1818
1819 /* update the clk tree topology */
1820 flags = clk_enable_lock();
1821 clk_reparent(core, parent);
1822 clk_enable_unlock(flags);
1823
1824 return old_parent;
1825}
1826
1827static void __clk_set_parent_after(struct clk_core *core,
1828 struct clk_core *parent,
1829 struct clk_core *old_parent)
1830{
1831 /*
1832 * Finish the migration of prepare state and undo the changes done
1833 * for preventing a race with clk_enable().
1834 */
1835 if (core->prepare_count) {
1836 clk_core_disable_lock(core);
1837 clk_core_disable_unprepare(old_parent);
1838 }
1839
1840 /* re-balance ref counting if CLK_OPS_PARENT_ENABLE is set */
1841 if (core->flags & CLK_OPS_PARENT_ENABLE) {
1842 clk_core_disable_unprepare(parent);
1843 clk_core_disable_unprepare(old_parent);
1844 }
1845}
1846
1847static int __clk_set_parent(struct clk_core *core, struct clk_core *parent,
1848 u8 p_index)
1849{
1850 unsigned long flags;
1851 int ret = 0;
1852 struct clk_core *old_parent;
1853
1854 old_parent = __clk_set_parent_before(core, parent);
1855
1856 trace_clk_set_parent(core, parent);
1857
1858 /* change clock input source */
1859 if (parent && core->ops->set_parent)
1860 ret = core->ops->set_parent(core->hw, p_index);
1861
1862 trace_clk_set_parent_complete(core, parent);
1863
1864 if (ret) {
1865 flags = clk_enable_lock();
1866 clk_reparent(core, old_parent);
1867 clk_enable_unlock(flags);
1868 __clk_set_parent_after(core, old_parent, parent);
1869
1870 return ret;
1871 }
1872
1873 __clk_set_parent_after(core, parent, old_parent);
1874
1875 return 0;
1876}
1877
1878/**
1879 * __clk_speculate_rates
1880 * @core: first clk in the subtree
1881 * @parent_rate: the "future" rate of clk's parent
1882 *
1883 * Walks the subtree of clks starting with clk, speculating rates as it
1884 * goes and firing off PRE_RATE_CHANGE notifications as necessary.
1885 *
1886 * Unlike clk_recalc_rates, clk_speculate_rates exists only for sending
1887 * pre-rate change notifications and returns early if no clks in the
1888 * subtree have subscribed to the notifications. Note that if a clk does not
1889 * implement the .recalc_rate callback then it is assumed that the clock will
1890 * take on the rate of its parent.
1891 */
1892static int __clk_speculate_rates(struct clk_core *core,
1893 unsigned long parent_rate)
1894{
1895 struct clk_core *child;
1896 unsigned long new_rate;
1897 int ret = NOTIFY_DONE;
1898
1899 lockdep_assert_held(&prepare_lock);
1900
1901 new_rate = clk_recalc(core, parent_rate);
1902
1903 /* abort rate change if a driver returns NOTIFY_BAD or NOTIFY_STOP */
1904 if (core->notifier_count)
1905 ret = __clk_notify(core, PRE_RATE_CHANGE, core->rate, new_rate);
1906
1907 if (ret & NOTIFY_STOP_MASK) {
1908 pr_debug("%s: clk notifier callback for clock %s aborted with error %d\n",
1909 __func__, core->name, ret);
1910 goto out;
1911 }
1912
1913 hlist_for_each_entry(child, &core->children, child_node) {
1914 ret = __clk_speculate_rates(child, new_rate);
1915 if (ret & NOTIFY_STOP_MASK)
1916 break;
1917 }
1918
1919out:
1920 return ret;
1921}
1922
1923static void clk_calc_subtree(struct clk_core *core, unsigned long new_rate,
1924 struct clk_core *new_parent, u8 p_index)
1925{
1926 struct clk_core *child;
1927
1928 core->new_rate = new_rate;
1929 core->new_parent = new_parent;
1930 core->new_parent_index = p_index;
1931 /* include clk in new parent's PRE_RATE_CHANGE notifications */
1932 core->new_child = NULL;
1933 if (new_parent && new_parent != core->parent)
1934 new_parent->new_child = core;
1935
1936 hlist_for_each_entry(child, &core->children, child_node) {
1937 child->new_rate = clk_recalc(child, new_rate);
1938 clk_calc_subtree(child, child->new_rate, NULL, 0);
1939 }
1940}
1941
1942/*
1943 * calculate the new rates returning the topmost clock that has to be
1944 * changed.
1945 */
1946static struct clk_core *clk_calc_new_rates(struct clk_core *core,
1947 unsigned long rate)
1948{
1949 struct clk_core *top = core;
1950 struct clk_core *old_parent, *parent;
1951 unsigned long best_parent_rate = 0;
1952 unsigned long new_rate;
1953 unsigned long min_rate;
1954 unsigned long max_rate;
1955 int p_index = 0;
1956 long ret;
1957
1958 /* sanity */
1959 if (IS_ERR_OR_NULL(core))
1960 return NULL;
1961
1962 /* save parent rate, if it exists */
1963 parent = old_parent = core->parent;
1964 if (parent)
1965 best_parent_rate = parent->rate;
1966
1967 clk_core_get_boundaries(core, &min_rate, &max_rate);
1968
1969 /* find the closest rate and parent clk/rate */
1970 if (clk_core_can_round(core)) {
1971 struct clk_rate_request req;
1972
1973 req.rate = rate;
1974 req.min_rate = min_rate;
1975 req.max_rate = max_rate;
1976
1977 clk_core_init_rate_req(core, &req);
1978
1979 ret = clk_core_determine_round_nolock(core, &req);
1980 if (ret < 0)
1981 return NULL;
1982
1983 best_parent_rate = req.best_parent_rate;
1984 new_rate = req.rate;
1985 parent = req.best_parent_hw ? req.best_parent_hw->core : NULL;
1986
1987 if (new_rate < min_rate || new_rate > max_rate)
1988 return NULL;
1989 } else if (!parent || !(core->flags & CLK_SET_RATE_PARENT)) {
1990 /* pass-through clock without adjustable parent */
1991 core->new_rate = core->rate;
1992 return NULL;
1993 } else {
1994 /* pass-through clock with adjustable parent */
1995 top = clk_calc_new_rates(parent, rate);
1996 new_rate = parent->new_rate;
1997 goto out;
1998 }
1999
2000 /* some clocks must be gated to change parent */
2001 if (parent != old_parent &&
2002 (core->flags & CLK_SET_PARENT_GATE) && core->prepare_count) {
2003 pr_debug("%s: %s not gated but wants to reparent\n",
2004 __func__, core->name);
2005 return NULL;
2006 }
2007
2008 /* try finding the new parent index */
2009 if (parent && core->num_parents > 1) {
2010 p_index = clk_fetch_parent_index(core, parent);
2011 if (p_index < 0) {
2012 pr_debug("%s: clk %s can not be parent of clk %s\n",
2013 __func__, parent->name, core->name);
2014 return NULL;
2015 }
2016 }
2017
2018 if ((core->flags & CLK_SET_RATE_PARENT) && parent &&
2019 best_parent_rate != parent->rate)
2020 top = clk_calc_new_rates(parent, best_parent_rate);
2021
2022out:
2023 clk_calc_subtree(core, new_rate, parent, p_index);
2024
2025 return top;
2026}
2027
2028/*
2029 * Notify about rate changes in a subtree. Always walk down the whole tree
2030 * so that in case of an error we can walk down the whole tree again and
2031 * abort the change.
2032 */
2033static struct clk_core *clk_propagate_rate_change(struct clk_core *core,
2034 unsigned long event)
2035{
2036 struct clk_core *child, *tmp_clk, *fail_clk = NULL;
2037 int ret = NOTIFY_DONE;
2038
2039 if (core->rate == core->new_rate)
2040 return NULL;
2041
2042 if (core->notifier_count) {
2043 ret = __clk_notify(core, event, core->rate, core->new_rate);
2044 if (ret & NOTIFY_STOP_MASK)
2045 fail_clk = core;
2046 }
2047
2048 hlist_for_each_entry(child, &core->children, child_node) {
2049 /* Skip children who will be reparented to another clock */
2050 if (child->new_parent && child->new_parent != core)
2051 continue;
2052 tmp_clk = clk_propagate_rate_change(child, event);
2053 if (tmp_clk)
2054 fail_clk = tmp_clk;
2055 }
2056
2057 /* handle the new child who might not be in core->children yet */
2058 if (core->new_child) {
2059 tmp_clk = clk_propagate_rate_change(core->new_child, event);
2060 if (tmp_clk)
2061 fail_clk = tmp_clk;
2062 }
2063
2064 return fail_clk;
2065}
2066
2067/*
2068 * walk down a subtree and set the new rates notifying the rate
2069 * change on the way
2070 */
2071static void clk_change_rate(struct clk_core *core)
2072{
2073 struct clk_core *child;
2074 struct hlist_node *tmp;
2075 unsigned long old_rate;
2076 unsigned long best_parent_rate = 0;
2077 bool skip_set_rate = false;
2078 struct clk_core *old_parent;
2079 struct clk_core *parent = NULL;
2080
2081 old_rate = core->rate;
2082
2083 if (core->new_parent) {
2084 parent = core->new_parent;
2085 best_parent_rate = core->new_parent->rate;
2086 } else if (core->parent) {
2087 parent = core->parent;
2088 best_parent_rate = core->parent->rate;
2089 }
2090
2091 if (clk_pm_runtime_get(core))
2092 return;
2093
2094 if (core->flags & CLK_SET_RATE_UNGATE) {
2095 clk_core_prepare(core);
2096 clk_core_enable_lock(core);
2097 }
2098
2099 if (core->new_parent && core->new_parent != core->parent) {
2100 old_parent = __clk_set_parent_before(core, core->new_parent);
2101 trace_clk_set_parent(core, core->new_parent);
2102
2103 if (core->ops->set_rate_and_parent) {
2104 skip_set_rate = true;
2105 core->ops->set_rate_and_parent(core->hw, core->new_rate,
2106 best_parent_rate,
2107 core->new_parent_index);
2108 } else if (core->ops->set_parent) {
2109 core->ops->set_parent(core->hw, core->new_parent_index);
2110 }
2111
2112 trace_clk_set_parent_complete(core, core->new_parent);
2113 __clk_set_parent_after(core, core->new_parent, old_parent);
2114 }
2115
2116 if (core->flags & CLK_OPS_PARENT_ENABLE)
2117 clk_core_prepare_enable(parent);
2118
2119 trace_clk_set_rate(core, core->new_rate);
2120
2121 if (!skip_set_rate && core->ops->set_rate)
2122 core->ops->set_rate(core->hw, core->new_rate, best_parent_rate);
2123
2124 trace_clk_set_rate_complete(core, core->new_rate);
2125
2126 core->rate = clk_recalc(core, best_parent_rate);
2127
2128 if (core->flags & CLK_SET_RATE_UNGATE) {
2129 clk_core_disable_lock(core);
2130 clk_core_unprepare(core);
2131 }
2132
2133 if (core->flags & CLK_OPS_PARENT_ENABLE)
2134 clk_core_disable_unprepare(parent);
2135
2136 if (core->notifier_count && old_rate != core->rate)
2137 __clk_notify(core, POST_RATE_CHANGE, old_rate, core->rate);
2138
2139 if (core->flags & CLK_RECALC_NEW_RATES)
2140 (void)clk_calc_new_rates(core, core->new_rate);
2141
2142 /*
2143 * Use safe iteration, as change_rate can actually swap parents
2144 * for certain clock types.
2145 */
2146 hlist_for_each_entry_safe(child, tmp, &core->children, child_node) {
2147 /* Skip children who will be reparented to another clock */
2148 if (child->new_parent && child->new_parent != core)
2149 continue;
2150 clk_change_rate(child);
2151 }
2152
2153 /* handle the new child who might not be in core->children yet */
2154 if (core->new_child)
2155 clk_change_rate(core->new_child);
2156
2157 clk_pm_runtime_put(core);
2158}
2159
2160static unsigned long clk_core_req_round_rate_nolock(struct clk_core *core,
2161 unsigned long req_rate)
2162{
2163 int ret, cnt;
2164 struct clk_rate_request req;
2165
2166 lockdep_assert_held(&prepare_lock);
2167
2168 if (!core)
2169 return 0;
2170
2171 /* simulate what the rate would be if it could be freely set */
2172 cnt = clk_core_rate_nuke_protect(core);
2173 if (cnt < 0)
2174 return cnt;
2175
2176 clk_core_get_boundaries(core, &req.min_rate, &req.max_rate);
2177 req.rate = req_rate;
2178
2179 ret = clk_core_round_rate_nolock(core, &req);
2180
2181 /* restore the protection */
2182 clk_core_rate_restore_protect(core, cnt);
2183
2184 return ret ? 0 : req.rate;
2185}
2186
2187static int clk_core_set_rate_nolock(struct clk_core *core,
2188 unsigned long req_rate)
2189{
2190 struct clk_core *top, *fail_clk;
2191 unsigned long rate;
2192 int ret = 0;
2193
2194 if (!core)
2195 return 0;
2196
2197 rate = clk_core_req_round_rate_nolock(core, req_rate);
2198
2199 /* bail early if nothing to do */
2200 if (rate == clk_core_get_rate_nolock(core))
2201 return 0;
2202
2203 /* fail on a direct rate set of a protected provider */
2204 if (clk_core_rate_is_protected(core))
2205 return -EBUSY;
2206
2207 /* calculate new rates and get the topmost changed clock */
2208 top = clk_calc_new_rates(core, req_rate);
2209 if (!top)
2210 return -EINVAL;
2211
2212 ret = clk_pm_runtime_get(core);
2213 if (ret)
2214 return ret;
2215
2216 /* notify that we are about to change rates */
2217 fail_clk = clk_propagate_rate_change(top, PRE_RATE_CHANGE);
2218 if (fail_clk) {
2219 pr_debug("%s: failed to set %s rate\n", __func__,
2220 fail_clk->name);
2221 clk_propagate_rate_change(top, ABORT_RATE_CHANGE);
2222 ret = -EBUSY;
2223 goto err;
2224 }
2225
2226 /* change the rates */
2227 clk_change_rate(top);
2228
2229 core->req_rate = req_rate;
2230err:
2231 clk_pm_runtime_put(core);
2232
2233 return ret;
2234}
2235
2236/**
2237 * clk_set_rate - specify a new rate for clk
2238 * @clk: the clk whose rate is being changed
2239 * @rate: the new rate for clk
2240 *
2241 * In the simplest case clk_set_rate will only adjust the rate of clk.
2242 *
2243 * Setting the CLK_SET_RATE_PARENT flag allows the rate change operation to
2244 * propagate up to clk's parent; whether or not this happens depends on the
2245 * outcome of clk's .round_rate implementation. If *parent_rate is unchanged
2246 * after calling .round_rate then upstream parent propagation is ignored. If
2247 * *parent_rate comes back with a new rate for clk's parent then we propagate
2248 * up to clk's parent and set its rate. Upward propagation will continue
2249 * until either a clk does not support the CLK_SET_RATE_PARENT flag or
2250 * .round_rate stops requesting changes to clk's parent_rate.
2251 *
2252 * Rate changes are accomplished via tree traversal that also recalculates the
2253 * rates for the clocks and fires off POST_RATE_CHANGE notifiers.
2254 *
2255 * Returns 0 on success, -EERROR otherwise.
2256 */
2257int clk_set_rate(struct clk *clk, unsigned long rate)
2258{
2259 int ret;
2260
2261 if (!clk)
2262 return 0;
2263
2264 /* prevent racing with updates to the clock topology */
2265 clk_prepare_lock();
2266
2267 if (clk->exclusive_count)
2268 clk_core_rate_unprotect(clk->core);
2269
2270 ret = clk_core_set_rate_nolock(clk->core, rate);
2271
2272 if (clk->exclusive_count)
2273 clk_core_rate_protect(clk->core);
2274
2275 clk_prepare_unlock();
2276
2277 return ret;
2278}
2279EXPORT_SYMBOL_GPL(clk_set_rate);
2280
2281/**
2282 * clk_set_rate_exclusive - specify a new rate and get exclusive control
2283 * @clk: the clk whose rate is being changed
2284 * @rate: the new rate for clk
2285 *
2286 * This is a combination of clk_set_rate() and clk_rate_exclusive_get()
2287 * within a critical section
2288 *
2289 * This can be used initially to ensure that at least 1 consumer is
2290 * satisfied when several consumers are competing for exclusivity over the
2291 * same clock provider.
2292 *
2293 * The exclusivity is not applied if setting the rate failed.
2294 *
2295 * Calls to clk_rate_exclusive_get() should be balanced with calls to
2296 * clk_rate_exclusive_put().
2297 *
2298 * Returns 0 on success, -EERROR otherwise.
2299 */
2300int clk_set_rate_exclusive(struct clk *clk, unsigned long rate)
2301{
2302 int ret;
2303
2304 if (!clk)
2305 return 0;
2306
2307 /* prevent racing with updates to the clock topology */
2308 clk_prepare_lock();
2309
2310 /*
2311 * The temporary protection removal is not here, on purpose
2312 * This function is meant to be used instead of clk_rate_protect,
2313 * so before the consumer code path protect the clock provider
2314 */
2315
2316 ret = clk_core_set_rate_nolock(clk->core, rate);
2317 if (!ret) {
2318 clk_core_rate_protect(clk->core);
2319 clk->exclusive_count++;
2320 }
2321
2322 clk_prepare_unlock();
2323
2324 return ret;
2325}
2326EXPORT_SYMBOL_GPL(clk_set_rate_exclusive);
2327
2328/**
2329 * clk_set_rate_range - set a rate range for a clock source
2330 * @clk: clock source
2331 * @min: desired minimum clock rate in Hz, inclusive
2332 * @max: desired maximum clock rate in Hz, inclusive
2333 *
2334 * Returns success (0) or negative errno.
2335 */
2336int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max)
2337{
2338 int ret = 0;
2339 unsigned long old_min, old_max, rate;
2340
2341 if (!clk)
2342 return 0;
2343
2344 trace_clk_set_rate_range(clk->core, min, max);
2345
2346 if (min > max) {
2347 pr_err("%s: clk %s dev %s con %s: invalid range [%lu, %lu]\n",
2348 __func__, clk->core->name, clk->dev_id, clk->con_id,
2349 min, max);
2350 return -EINVAL;
2351 }
2352
2353 clk_prepare_lock();
2354
2355 if (clk->exclusive_count)
2356 clk_core_rate_unprotect(clk->core);
2357
2358 /* Save the current values in case we need to rollback the change */
2359 old_min = clk->min_rate;
2360 old_max = clk->max_rate;
2361 clk->min_rate = min;
2362 clk->max_rate = max;
2363
2364 if (!clk_core_check_boundaries(clk->core, min, max)) {
2365 ret = -EINVAL;
2366 goto out;
2367 }
2368
2369 /*
2370 * Since the boundaries have been changed, let's give the
2371 * opportunity to the provider to adjust the clock rate based on
2372 * the new boundaries.
2373 *
2374 * We also need to handle the case where the clock is currently
2375 * outside of the boundaries. Clamping the last requested rate
2376 * to the current minimum and maximum will also handle this.
2377 *
2378 * FIXME:
2379 * There is a catch. It may fail for the usual reason (clock
2380 * broken, clock protected, etc) but also because:
2381 * - round_rate() was not favorable and fell on the wrong
2382 * side of the boundary
2383 * - the determine_rate() callback does not really check for
2384 * this corner case when determining the rate
2385 */
2386 rate = clamp(clk->core->req_rate, min, max);
2387 ret = clk_core_set_rate_nolock(clk->core, rate);
2388 if (ret) {
2389 /* rollback the changes */
2390 clk->min_rate = old_min;
2391 clk->max_rate = old_max;
2392 }
2393
2394out:
2395 if (clk->exclusive_count)
2396 clk_core_rate_protect(clk->core);
2397
2398 clk_prepare_unlock();
2399
2400 return ret;
2401}
2402EXPORT_SYMBOL_GPL(clk_set_rate_range);
2403
2404/**
2405 * clk_set_min_rate - set a minimum clock rate for a clock source
2406 * @clk: clock source
2407 * @rate: desired minimum clock rate in Hz, inclusive
2408 *
2409 * Returns success (0) or negative errno.
2410 */
2411int clk_set_min_rate(struct clk *clk, unsigned long rate)
2412{
2413 if (!clk)
2414 return 0;
2415
2416 trace_clk_set_min_rate(clk->core, rate);
2417
2418 return clk_set_rate_range(clk, rate, clk->max_rate);
2419}
2420EXPORT_SYMBOL_GPL(clk_set_min_rate);
2421
2422/**
2423 * clk_set_max_rate - set a maximum clock rate for a clock source
2424 * @clk: clock source
2425 * @rate: desired maximum clock rate in Hz, inclusive
2426 *
2427 * Returns success (0) or negative errno.
2428 */
2429int clk_set_max_rate(struct clk *clk, unsigned long rate)
2430{
2431 if (!clk)
2432 return 0;
2433
2434 trace_clk_set_max_rate(clk->core, rate);
2435
2436 return clk_set_rate_range(clk, clk->min_rate, rate);
2437}
2438EXPORT_SYMBOL_GPL(clk_set_max_rate);
2439
2440/**
2441 * clk_get_parent - return the parent of a clk
2442 * @clk: the clk whose parent gets returned
2443 *
2444 * Simply returns clk->parent. Returns NULL if clk is NULL.
2445 */
2446struct clk *clk_get_parent(struct clk *clk)
2447{
2448 struct clk *parent;
2449
2450 if (!clk)
2451 return NULL;
2452
2453 clk_prepare_lock();
2454 /* TODO: Create a per-user clk and change callers to call clk_put */
2455 parent = !clk->core->parent ? NULL : clk->core->parent->hw->clk;
2456 clk_prepare_unlock();
2457
2458 return parent;
2459}
2460EXPORT_SYMBOL_GPL(clk_get_parent);
2461
2462static struct clk_core *__clk_init_parent(struct clk_core *core)
2463{
2464 u8 index = 0;
2465
2466 if (core->num_parents > 1 && core->ops->get_parent)
2467 index = core->ops->get_parent(core->hw);
2468
2469 return clk_core_get_parent_by_index(core, index);
2470}
2471
2472static void clk_core_reparent(struct clk_core *core,
2473 struct clk_core *new_parent)
2474{
2475 clk_reparent(core, new_parent);
2476 __clk_recalc_accuracies(core);
2477 __clk_recalc_rates(core, POST_RATE_CHANGE);
2478}
2479
2480void clk_hw_reparent(struct clk_hw *hw, struct clk_hw *new_parent)
2481{
2482 if (!hw)
2483 return;
2484
2485 clk_core_reparent(hw->core, !new_parent ? NULL : new_parent->core);
2486}
2487
2488/**
2489 * clk_has_parent - check if a clock is a possible parent for another
2490 * @clk: clock source
2491 * @parent: parent clock source
2492 *
2493 * This function can be used in drivers that need to check that a clock can be
2494 * the parent of another without actually changing the parent.
2495 *
2496 * Returns true if @parent is a possible parent for @clk, false otherwise.
2497 */
2498bool clk_has_parent(struct clk *clk, struct clk *parent)
2499{
2500 struct clk_core *core, *parent_core;
2501 int i;
2502
2503 /* NULL clocks should be nops, so return success if either is NULL. */
2504 if (!clk || !parent)
2505 return true;
2506
2507 core = clk->core;
2508 parent_core = parent->core;
2509
2510 /* Optimize for the case where the parent is already the parent. */
2511 if (core->parent == parent_core)
2512 return true;
2513
2514 for (i = 0; i < core->num_parents; i++)
2515 if (!strcmp(core->parents[i].name, parent_core->name))
2516 return true;
2517
2518 return false;
2519}
2520EXPORT_SYMBOL_GPL(clk_has_parent);
2521
2522static int clk_core_set_parent_nolock(struct clk_core *core,
2523 struct clk_core *parent)
2524{
2525 int ret = 0;
2526 int p_index = 0;
2527 unsigned long p_rate = 0;
2528
2529 lockdep_assert_held(&prepare_lock);
2530
2531 if (!core)
2532 return 0;
2533
2534 if (core->parent == parent)
2535 return 0;
2536
2537 /* verify ops for multi-parent clks */
2538 if (core->num_parents > 1 && !core->ops->set_parent)
2539 return -EPERM;
2540
2541 /* check that we are allowed to re-parent if the clock is in use */
2542 if ((core->flags & CLK_SET_PARENT_GATE) && core->prepare_count)
2543 return -EBUSY;
2544
2545 if (clk_core_rate_is_protected(core))
2546 return -EBUSY;
2547
2548 /* try finding the new parent index */
2549 if (parent) {
2550 p_index = clk_fetch_parent_index(core, parent);
2551 if (p_index < 0) {
2552 pr_debug("%s: clk %s can not be parent of clk %s\n",
2553 __func__, parent->name, core->name);
2554 return p_index;
2555 }
2556 p_rate = parent->rate;
2557 }
2558
2559 ret = clk_pm_runtime_get(core);
2560 if (ret)
2561 return ret;
2562
2563 /* propagate PRE_RATE_CHANGE notifications */
2564 ret = __clk_speculate_rates(core, p_rate);
2565
2566 /* abort if a driver objects */
2567 if (ret & NOTIFY_STOP_MASK)
2568 goto runtime_put;
2569
2570 /* do the re-parent */
2571 ret = __clk_set_parent(core, parent, p_index);
2572
2573 /* propagate rate an accuracy recalculation accordingly */
2574 if (ret) {
2575 __clk_recalc_rates(core, ABORT_RATE_CHANGE);
2576 } else {
2577 __clk_recalc_rates(core, POST_RATE_CHANGE);
2578 __clk_recalc_accuracies(core);
2579 }
2580
2581runtime_put:
2582 clk_pm_runtime_put(core);
2583
2584 return ret;
2585}
2586
2587int clk_hw_set_parent(struct clk_hw *hw, struct clk_hw *parent)
2588{
2589 return clk_core_set_parent_nolock(hw->core, parent->core);
2590}
2591EXPORT_SYMBOL_GPL(clk_hw_set_parent);
2592
2593/**
2594 * clk_set_parent - switch the parent of a mux clk
2595 * @clk: the mux clk whose input we are switching
2596 * @parent: the new input to clk
2597 *
2598 * Re-parent clk to use parent as its new input source. If clk is in
2599 * prepared state, the clk will get enabled for the duration of this call. If
2600 * that's not acceptable for a specific clk (Eg: the consumer can't handle
2601 * that, the reparenting is glitchy in hardware, etc), use the
2602 * CLK_SET_PARENT_GATE flag to allow reparenting only when clk is unprepared.
2603 *
2604 * After successfully changing clk's parent clk_set_parent will update the
2605 * clk topology, sysfs topology and propagate rate recalculation via
2606 * __clk_recalc_rates.
2607 *
2608 * Returns 0 on success, -EERROR otherwise.
2609 */
2610int clk_set_parent(struct clk *clk, struct clk *parent)
2611{
2612 int ret;
2613
2614 if (!clk)
2615 return 0;
2616
2617 clk_prepare_lock();
2618
2619 if (clk->exclusive_count)
2620 clk_core_rate_unprotect(clk->core);
2621
2622 ret = clk_core_set_parent_nolock(clk->core,
2623 parent ? parent->core : NULL);
2624
2625 if (clk->exclusive_count)
2626 clk_core_rate_protect(clk->core);
2627
2628 clk_prepare_unlock();
2629
2630 return ret;
2631}
2632EXPORT_SYMBOL_GPL(clk_set_parent);
2633
2634static int clk_core_set_phase_nolock(struct clk_core *core, int degrees)
2635{
2636 int ret = -EINVAL;
2637
2638 lockdep_assert_held(&prepare_lock);
2639
2640 if (!core)
2641 return 0;
2642
2643 if (clk_core_rate_is_protected(core))
2644 return -EBUSY;
2645
2646 trace_clk_set_phase(core, degrees);
2647
2648 if (core->ops->set_phase) {
2649 ret = core->ops->set_phase(core->hw, degrees);
2650 if (!ret)
2651 core->phase = degrees;
2652 }
2653
2654 trace_clk_set_phase_complete(core, degrees);
2655
2656 return ret;
2657}
2658
2659/**
2660 * clk_set_phase - adjust the phase shift of a clock signal
2661 * @clk: clock signal source
2662 * @degrees: number of degrees the signal is shifted
2663 *
2664 * Shifts the phase of a clock signal by the specified
2665 * degrees. Returns 0 on success, -EERROR otherwise.
2666 *
2667 * This function makes no distinction about the input or reference
2668 * signal that we adjust the clock signal phase against. For example
2669 * phase locked-loop clock signal generators we may shift phase with
2670 * respect to feedback clock signal input, but for other cases the
2671 * clock phase may be shifted with respect to some other, unspecified
2672 * signal.
2673 *
2674 * Additionally the concept of phase shift does not propagate through
2675 * the clock tree hierarchy, which sets it apart from clock rates and
2676 * clock accuracy. A parent clock phase attribute does not have an
2677 * impact on the phase attribute of a child clock.
2678 */
2679int clk_set_phase(struct clk *clk, int degrees)
2680{
2681 int ret;
2682
2683 if (!clk)
2684 return 0;
2685
2686 /* sanity check degrees */
2687 degrees %= 360;
2688 if (degrees < 0)
2689 degrees += 360;
2690
2691 clk_prepare_lock();
2692
2693 if (clk->exclusive_count)
2694 clk_core_rate_unprotect(clk->core);
2695
2696 ret = clk_core_set_phase_nolock(clk->core, degrees);
2697
2698 if (clk->exclusive_count)
2699 clk_core_rate_protect(clk->core);
2700
2701 clk_prepare_unlock();
2702
2703 return ret;
2704}
2705EXPORT_SYMBOL_GPL(clk_set_phase);
2706
2707static int clk_core_get_phase(struct clk_core *core)
2708{
2709 int ret;
2710
2711 lockdep_assert_held(&prepare_lock);
2712 if (!core->ops->get_phase)
2713 return 0;
2714
2715 /* Always try to update cached phase if possible */
2716 ret = core->ops->get_phase(core->hw);
2717 if (ret >= 0)
2718 core->phase = ret;
2719
2720 return ret;
2721}
2722
2723/**
2724 * clk_get_phase - return the phase shift of a clock signal
2725 * @clk: clock signal source
2726 *
2727 * Returns the phase shift of a clock node in degrees, otherwise returns
2728 * -EERROR.
2729 */
2730int clk_get_phase(struct clk *clk)
2731{
2732 int ret;
2733
2734 if (!clk)
2735 return 0;
2736
2737 clk_prepare_lock();
2738 ret = clk_core_get_phase(clk->core);
2739 clk_prepare_unlock();
2740
2741 return ret;
2742}
2743EXPORT_SYMBOL_GPL(clk_get_phase);
2744
2745static void clk_core_reset_duty_cycle_nolock(struct clk_core *core)
2746{
2747 /* Assume a default value of 50% */
2748 core->duty.num = 1;
2749 core->duty.den = 2;
2750}
2751
2752static int clk_core_update_duty_cycle_parent_nolock(struct clk_core *core);
2753
2754static int clk_core_update_duty_cycle_nolock(struct clk_core *core)
2755{
2756 struct clk_duty *duty = &core->duty;
2757 int ret = 0;
2758
2759 if (!core->ops->get_duty_cycle)
2760 return clk_core_update_duty_cycle_parent_nolock(core);
2761
2762 ret = core->ops->get_duty_cycle(core->hw, duty);
2763 if (ret)
2764 goto reset;
2765
2766 /* Don't trust the clock provider too much */
2767 if (duty->den == 0 || duty->num > duty->den) {
2768 ret = -EINVAL;
2769 goto reset;
2770 }
2771
2772 return 0;
2773
2774reset:
2775 clk_core_reset_duty_cycle_nolock(core);
2776 return ret;
2777}
2778
2779static int clk_core_update_duty_cycle_parent_nolock(struct clk_core *core)
2780{
2781 int ret = 0;
2782
2783 if (core->parent &&
2784 core->flags & CLK_DUTY_CYCLE_PARENT) {
2785 ret = clk_core_update_duty_cycle_nolock(core->parent);
2786 memcpy(&core->duty, &core->parent->duty, sizeof(core->duty));
2787 } else {
2788 clk_core_reset_duty_cycle_nolock(core);
2789 }
2790
2791 return ret;
2792}
2793
2794static int clk_core_set_duty_cycle_parent_nolock(struct clk_core *core,
2795 struct clk_duty *duty);
2796
2797static int clk_core_set_duty_cycle_nolock(struct clk_core *core,
2798 struct clk_duty *duty)
2799{
2800 int ret;
2801
2802 lockdep_assert_held(&prepare_lock);
2803
2804 if (clk_core_rate_is_protected(core))
2805 return -EBUSY;
2806
2807 trace_clk_set_duty_cycle(core, duty);
2808
2809 if (!core->ops->set_duty_cycle)
2810 return clk_core_set_duty_cycle_parent_nolock(core, duty);
2811
2812 ret = core->ops->set_duty_cycle(core->hw, duty);
2813 if (!ret)
2814 memcpy(&core->duty, duty, sizeof(*duty));
2815
2816 trace_clk_set_duty_cycle_complete(core, duty);
2817
2818 return ret;
2819}
2820
2821static int clk_core_set_duty_cycle_parent_nolock(struct clk_core *core,
2822 struct clk_duty *duty)
2823{
2824 int ret = 0;
2825
2826 if (core->parent &&
2827 core->flags & (CLK_DUTY_CYCLE_PARENT | CLK_SET_RATE_PARENT)) {
2828 ret = clk_core_set_duty_cycle_nolock(core->parent, duty);
2829 memcpy(&core->duty, &core->parent->duty, sizeof(core->duty));
2830 }
2831
2832 return ret;
2833}
2834
2835/**
2836 * clk_set_duty_cycle - adjust the duty cycle ratio of a clock signal
2837 * @clk: clock signal source
2838 * @num: numerator of the duty cycle ratio to be applied
2839 * @den: denominator of the duty cycle ratio to be applied
2840 *
2841 * Apply the duty cycle ratio if the ratio is valid and the clock can
2842 * perform this operation
2843 *
2844 * Returns (0) on success, a negative errno otherwise.
2845 */
2846int clk_set_duty_cycle(struct clk *clk, unsigned int num, unsigned int den)
2847{
2848 int ret;
2849 struct clk_duty duty;
2850
2851 if (!clk)
2852 return 0;
2853
2854 /* sanity check the ratio */
2855 if (den == 0 || num > den)
2856 return -EINVAL;
2857
2858 duty.num = num;
2859 duty.den = den;
2860
2861 clk_prepare_lock();
2862
2863 if (clk->exclusive_count)
2864 clk_core_rate_unprotect(clk->core);
2865
2866 ret = clk_core_set_duty_cycle_nolock(clk->core, &duty);
2867
2868 if (clk->exclusive_count)
2869 clk_core_rate_protect(clk->core);
2870
2871 clk_prepare_unlock();
2872
2873 return ret;
2874}
2875EXPORT_SYMBOL_GPL(clk_set_duty_cycle);
2876
2877static int clk_core_get_scaled_duty_cycle(struct clk_core *core,
2878 unsigned int scale)
2879{
2880 struct clk_duty *duty = &core->duty;
2881 int ret;
2882
2883 clk_prepare_lock();
2884
2885 ret = clk_core_update_duty_cycle_nolock(core);
2886 if (!ret)
2887 ret = mult_frac(scale, duty->num, duty->den);
2888
2889 clk_prepare_unlock();
2890
2891 return ret;
2892}
2893
2894/**
2895 * clk_get_scaled_duty_cycle - return the duty cycle ratio of a clock signal
2896 * @clk: clock signal source
2897 * @scale: scaling factor to be applied to represent the ratio as an integer
2898 *
2899 * Returns the duty cycle ratio of a clock node multiplied by the provided
2900 * scaling factor, or negative errno on error.
2901 */
2902int clk_get_scaled_duty_cycle(struct clk *clk, unsigned int scale)
2903{
2904 if (!clk)
2905 return 0;
2906
2907 return clk_core_get_scaled_duty_cycle(clk->core, scale);
2908}
2909EXPORT_SYMBOL_GPL(clk_get_scaled_duty_cycle);
2910
2911/**
2912 * clk_is_match - check if two clk's point to the same hardware clock
2913 * @p: clk compared against q
2914 * @q: clk compared against p
2915 *
2916 * Returns true if the two struct clk pointers both point to the same hardware
2917 * clock node. Put differently, returns true if struct clk *p and struct clk *q
2918 * share the same struct clk_core object.
2919 *
2920 * Returns false otherwise. Note that two NULL clks are treated as matching.
2921 */
2922bool clk_is_match(const struct clk *p, const struct clk *q)
2923{
2924 /* trivial case: identical struct clk's or both NULL */
2925 if (p == q)
2926 return true;
2927
2928 /* true if clk->core pointers match. Avoid dereferencing garbage */
2929 if (!IS_ERR_OR_NULL(p) && !IS_ERR_OR_NULL(q))
2930 if (p->core == q->core)
2931 return true;
2932
2933 return false;
2934}
2935EXPORT_SYMBOL_GPL(clk_is_match);
2936
2937/*** debugfs support ***/
2938
2939#ifdef CONFIG_DEBUG_FS
2940#include <linux/debugfs.h>
2941
2942static struct dentry *rootdir;
2943static int inited = 0;
2944static DEFINE_MUTEX(clk_debug_lock);
2945static HLIST_HEAD(clk_debug_list);
2946
2947static struct hlist_head *orphan_list[] = {
2948 &clk_orphan_list,
2949 NULL,
2950};
2951
2952static void clk_summary_show_one(struct seq_file *s, struct clk_core *c,
2953 int level)
2954{
2955 int phase;
2956
2957 seq_printf(s, "%*s%-*s %7d %8d %8d %11lu %10lu ",
2958 level * 3 + 1, "",
2959 30 - level * 3, c->name,
2960 c->enable_count, c->prepare_count, c->protect_count,
2961 clk_core_get_rate_recalc(c),
2962 clk_core_get_accuracy_recalc(c));
2963
2964 phase = clk_core_get_phase(c);
2965 if (phase >= 0)
2966 seq_printf(s, "%5d", phase);
2967 else
2968 seq_puts(s, "-----");
2969
2970 seq_printf(s, " %6d", clk_core_get_scaled_duty_cycle(c, 100000));
2971
2972 if (c->ops->is_enabled)
2973 seq_printf(s, " %9c\n", clk_core_is_enabled(c) ? 'Y' : 'N');
2974 else if (!c->ops->enable)
2975 seq_printf(s, " %9c\n", 'Y');
2976 else
2977 seq_printf(s, " %9c\n", '?');
2978}
2979
2980static void clk_summary_show_subtree(struct seq_file *s, struct clk_core *c,
2981 int level)
2982{
2983 struct clk_core *child;
2984
2985 clk_pm_runtime_get(c);
2986 clk_summary_show_one(s, c, level);
2987 clk_pm_runtime_put(c);
2988
2989 hlist_for_each_entry(child, &c->children, child_node)
2990 clk_summary_show_subtree(s, child, level + 1);
2991}
2992
2993static int clk_summary_show(struct seq_file *s, void *data)
2994{
2995 struct clk_core *c;
2996 struct hlist_head **lists = (struct hlist_head **)s->private;
2997
2998 seq_puts(s, " enable prepare protect duty hardware\n");
2999 seq_puts(s, " clock count count count rate accuracy phase cycle enable\n");
3000 seq_puts(s, "-------------------------------------------------------------------------------------------------------\n");
3001
3002 clk_prepare_lock();
3003
3004 for (; *lists; lists++)
3005 hlist_for_each_entry(c, *lists, child_node)
3006 clk_summary_show_subtree(s, c, 0);
3007
3008 clk_prepare_unlock();
3009
3010 return 0;
3011}
3012DEFINE_SHOW_ATTRIBUTE(clk_summary);
3013
3014static void clk_dump_one(struct seq_file *s, struct clk_core *c, int level)
3015{
3016 int phase;
3017 unsigned long min_rate, max_rate;
3018
3019 clk_core_get_boundaries(c, &min_rate, &max_rate);
3020
3021 /* This should be JSON format, i.e. elements separated with a comma */
3022 seq_printf(s, "\"%s\": { ", c->name);
3023 seq_printf(s, "\"enable_count\": %d,", c->enable_count);
3024 seq_printf(s, "\"prepare_count\": %d,", c->prepare_count);
3025 seq_printf(s, "\"protect_count\": %d,", c->protect_count);
3026 seq_printf(s, "\"rate\": %lu,", clk_core_get_rate_recalc(c));
3027 seq_printf(s, "\"min_rate\": %lu,", min_rate);
3028 seq_printf(s, "\"max_rate\": %lu,", max_rate);
3029 seq_printf(s, "\"accuracy\": %lu,", clk_core_get_accuracy_recalc(c));
3030 phase = clk_core_get_phase(c);
3031 if (phase >= 0)
3032 seq_printf(s, "\"phase\": %d,", phase);
3033 seq_printf(s, "\"duty_cycle\": %u",
3034 clk_core_get_scaled_duty_cycle(c, 100000));
3035}
3036
3037static void clk_dump_subtree(struct seq_file *s, struct clk_core *c, int level)
3038{
3039 struct clk_core *child;
3040
3041 clk_dump_one(s, c, level);
3042
3043 hlist_for_each_entry(child, &c->children, child_node) {
3044 seq_putc(s, ',');
3045 clk_dump_subtree(s, child, level + 1);
3046 }
3047
3048 seq_putc(s, '}');
3049}
3050
3051static int clk_dump_show(struct seq_file *s, void *data)
3052{
3053 struct clk_core *c;
3054 bool first_node = true;
3055 struct hlist_head **lists = (struct hlist_head **)s->private;
3056
3057 seq_putc(s, '{');
3058 clk_prepare_lock();
3059
3060 for (; *lists; lists++) {
3061 hlist_for_each_entry(c, *lists, child_node) {
3062 if (!first_node)
3063 seq_putc(s, ',');
3064 first_node = false;
3065 clk_dump_subtree(s, c, 0);
3066 }
3067 }
3068
3069 clk_prepare_unlock();
3070
3071 seq_puts(s, "}\n");
3072 return 0;
3073}
3074DEFINE_SHOW_ATTRIBUTE(clk_dump);
3075
3076#undef CLOCK_ALLOW_WRITE_DEBUGFS
3077#ifdef CLOCK_ALLOW_WRITE_DEBUGFS
3078/*
3079 * This can be dangerous, therefore don't provide any real compile time
3080 * configuration option for this feature.
3081 * People who want to use this will need to modify the source code directly.
3082 */
3083static int clk_rate_set(void *data, u64 val)
3084{
3085 struct clk_core *core = data;
3086 int ret;
3087
3088 clk_prepare_lock();
3089 ret = clk_core_set_rate_nolock(core, val);
3090 clk_prepare_unlock();
3091
3092 return ret;
3093}
3094
3095#define clk_rate_mode 0644
3096
3097static int clk_prepare_enable_set(void *data, u64 val)
3098{
3099 struct clk_core *core = data;
3100 int ret = 0;
3101
3102 if (val)
3103 ret = clk_prepare_enable(core->hw->clk);
3104 else
3105 clk_disable_unprepare(core->hw->clk);
3106
3107 return ret;
3108}
3109
3110static int clk_prepare_enable_get(void *data, u64 *val)
3111{
3112 struct clk_core *core = data;
3113
3114 *val = core->enable_count && core->prepare_count;
3115 return 0;
3116}
3117
3118DEFINE_DEBUGFS_ATTRIBUTE(clk_prepare_enable_fops, clk_prepare_enable_get,
3119 clk_prepare_enable_set, "%llu\n");
3120
3121#else
3122#define clk_rate_set NULL
3123#define clk_rate_mode 0444
3124#endif
3125
3126static int clk_rate_get(void *data, u64 *val)
3127{
3128 struct clk_core *core = data;
3129
3130 clk_prepare_lock();
3131 *val = clk_core_get_rate_recalc(core);
3132 clk_prepare_unlock();
3133
3134 return 0;
3135}
3136
3137DEFINE_DEBUGFS_ATTRIBUTE(clk_rate_fops, clk_rate_get, clk_rate_set, "%llu\n");
3138
3139static const struct {
3140 unsigned long flag;
3141 const char *name;
3142} clk_flags[] = {
3143#define ENTRY(f) { f, #f }
3144 ENTRY(CLK_SET_RATE_GATE),
3145 ENTRY(CLK_SET_PARENT_GATE),
3146 ENTRY(CLK_SET_RATE_PARENT),
3147 ENTRY(CLK_IGNORE_UNUSED),
3148 ENTRY(CLK_GET_RATE_NOCACHE),
3149 ENTRY(CLK_SET_RATE_NO_REPARENT),
3150 ENTRY(CLK_GET_ACCURACY_NOCACHE),
3151 ENTRY(CLK_RECALC_NEW_RATES),
3152 ENTRY(CLK_SET_RATE_UNGATE),
3153 ENTRY(CLK_IS_CRITICAL),
3154 ENTRY(CLK_OPS_PARENT_ENABLE),
3155 ENTRY(CLK_DUTY_CYCLE_PARENT),
3156#undef ENTRY
3157};
3158
3159static int clk_flags_show(struct seq_file *s, void *data)
3160{
3161 struct clk_core *core = s->private;
3162 unsigned long flags = core->flags;
3163 unsigned int i;
3164
3165 for (i = 0; flags && i < ARRAY_SIZE(clk_flags); i++) {
3166 if (flags & clk_flags[i].flag) {
3167 seq_printf(s, "%s\n", clk_flags[i].name);
3168 flags &= ~clk_flags[i].flag;
3169 }
3170 }
3171 if (flags) {
3172 /* Unknown flags */
3173 seq_printf(s, "0x%lx\n", flags);
3174 }
3175
3176 return 0;
3177}
3178DEFINE_SHOW_ATTRIBUTE(clk_flags);
3179
3180static void possible_parent_show(struct seq_file *s, struct clk_core *core,
3181 unsigned int i, char terminator)
3182{
3183 struct clk_core *parent;
3184
3185 /*
3186 * Go through the following options to fetch a parent's name.
3187 *
3188 * 1. Fetch the registered parent clock and use its name
3189 * 2. Use the global (fallback) name if specified
3190 * 3. Use the local fw_name if provided
3191 * 4. Fetch parent clock's clock-output-name if DT index was set
3192 *
3193 * This may still fail in some cases, such as when the parent is
3194 * specified directly via a struct clk_hw pointer, but it isn't
3195 * registered (yet).
3196 */
3197 parent = clk_core_get_parent_by_index(core, i);
3198 if (parent)
3199 seq_puts(s, parent->name);
3200 else if (core->parents[i].name)
3201 seq_puts(s, core->parents[i].name);
3202 else if (core->parents[i].fw_name)
3203 seq_printf(s, "<%s>(fw)", core->parents[i].fw_name);
3204 else if (core->parents[i].index >= 0)
3205 seq_puts(s,
3206 of_clk_get_parent_name(core->of_node,
3207 core->parents[i].index));
3208 else
3209 seq_puts(s, "(missing)");
3210
3211 seq_putc(s, terminator);
3212}
3213
3214static int possible_parents_show(struct seq_file *s, void *data)
3215{
3216 struct clk_core *core = s->private;
3217 int i;
3218
3219 for (i = 0; i < core->num_parents - 1; i++)
3220 possible_parent_show(s, core, i, ' ');
3221
3222 possible_parent_show(s, core, i, '\n');
3223
3224 return 0;
3225}
3226DEFINE_SHOW_ATTRIBUTE(possible_parents);
3227
3228static int current_parent_show(struct seq_file *s, void *data)
3229{
3230 struct clk_core *core = s->private;
3231
3232 if (core->parent)
3233 seq_printf(s, "%s\n", core->parent->name);
3234
3235 return 0;
3236}
3237DEFINE_SHOW_ATTRIBUTE(current_parent);
3238
3239#ifdef CLOCK_ALLOW_WRITE_DEBUGFS
3240static ssize_t current_parent_write(struct file *file, const char __user *ubuf,
3241 size_t count, loff_t *ppos)
3242{
3243 struct seq_file *s = file->private_data;
3244 struct clk_core *core = s->private;
3245 struct clk_core *parent;
3246 u8 idx;
3247 int err;
3248
3249 err = kstrtou8_from_user(ubuf, count, 0, &idx);
3250 if (err < 0)
3251 return err;
3252
3253 parent = clk_core_get_parent_by_index(core, idx);
3254 if (!parent)
3255 return -ENOENT;
3256
3257 clk_prepare_lock();
3258 err = clk_core_set_parent_nolock(core, parent);
3259 clk_prepare_unlock();
3260 if (err)
3261 return err;
3262
3263 return count;
3264}
3265
3266static const struct file_operations current_parent_rw_fops = {
3267 .open = current_parent_open,
3268 .write = current_parent_write,
3269 .read = seq_read,
3270 .llseek = seq_lseek,
3271 .release = single_release,
3272};
3273#endif
3274
3275static int clk_duty_cycle_show(struct seq_file *s, void *data)
3276{
3277 struct clk_core *core = s->private;
3278 struct clk_duty *duty = &core->duty;
3279
3280 seq_printf(s, "%u/%u\n", duty->num, duty->den);
3281
3282 return 0;
3283}
3284DEFINE_SHOW_ATTRIBUTE(clk_duty_cycle);
3285
3286static int clk_min_rate_show(struct seq_file *s, void *data)
3287{
3288 struct clk_core *core = s->private;
3289 unsigned long min_rate, max_rate;
3290
3291 clk_prepare_lock();
3292 clk_core_get_boundaries(core, &min_rate, &max_rate);
3293 clk_prepare_unlock();
3294 seq_printf(s, "%lu\n", min_rate);
3295
3296 return 0;
3297}
3298DEFINE_SHOW_ATTRIBUTE(clk_min_rate);
3299
3300static int clk_max_rate_show(struct seq_file *s, void *data)
3301{
3302 struct clk_core *core = s->private;
3303 unsigned long min_rate, max_rate;
3304
3305 clk_prepare_lock();
3306 clk_core_get_boundaries(core, &min_rate, &max_rate);
3307 clk_prepare_unlock();
3308 seq_printf(s, "%lu\n", max_rate);
3309
3310 return 0;
3311}
3312DEFINE_SHOW_ATTRIBUTE(clk_max_rate);
3313
3314static void clk_debug_create_one(struct clk_core *core, struct dentry *pdentry)
3315{
3316 struct dentry *root;
3317
3318 if (!core || !pdentry)
3319 return;
3320
3321 root = debugfs_create_dir(core->name, pdentry);
3322 core->dentry = root;
3323
3324 debugfs_create_file("clk_rate", clk_rate_mode, root, core,
3325 &clk_rate_fops);
3326 debugfs_create_file("clk_min_rate", 0444, root, core, &clk_min_rate_fops);
3327 debugfs_create_file("clk_max_rate", 0444, root, core, &clk_max_rate_fops);
3328 debugfs_create_ulong("clk_accuracy", 0444, root, &core->accuracy);
3329 debugfs_create_u32("clk_phase", 0444, root, &core->phase);
3330 debugfs_create_file("clk_flags", 0444, root, core, &clk_flags_fops);
3331 debugfs_create_u32("clk_prepare_count", 0444, root, &core->prepare_count);
3332 debugfs_create_u32("clk_enable_count", 0444, root, &core->enable_count);
3333 debugfs_create_u32("clk_protect_count", 0444, root, &core->protect_count);
3334 debugfs_create_u32("clk_notifier_count", 0444, root, &core->notifier_count);
3335 debugfs_create_file("clk_duty_cycle", 0444, root, core,
3336 &clk_duty_cycle_fops);
3337#ifdef CLOCK_ALLOW_WRITE_DEBUGFS
3338 debugfs_create_file("clk_prepare_enable", 0644, root, core,
3339 &clk_prepare_enable_fops);
3340
3341 if (core->num_parents > 1)
3342 debugfs_create_file("clk_parent", 0644, root, core,
3343 ¤t_parent_rw_fops);
3344 else
3345#endif
3346 if (core->num_parents > 0)
3347 debugfs_create_file("clk_parent", 0444, root, core,
3348 ¤t_parent_fops);
3349
3350 if (core->num_parents > 1)
3351 debugfs_create_file("clk_possible_parents", 0444, root, core,
3352 &possible_parents_fops);
3353
3354 if (core->ops->debug_init)
3355 core->ops->debug_init(core->hw, core->dentry);
3356}
3357
3358/**
3359 * clk_debug_register - add a clk node to the debugfs clk directory
3360 * @core: the clk being added to the debugfs clk directory
3361 *
3362 * Dynamically adds a clk to the debugfs clk directory if debugfs has been
3363 * initialized. Otherwise it bails out early since the debugfs clk directory
3364 * will be created lazily by clk_debug_init as part of a late_initcall.
3365 */
3366static void clk_debug_register(struct clk_core *core)
3367{
3368 mutex_lock(&clk_debug_lock);
3369 hlist_add_head(&core->debug_node, &clk_debug_list);
3370 if (inited)
3371 clk_debug_create_one(core, rootdir);
3372 mutex_unlock(&clk_debug_lock);
3373}
3374
3375 /**
3376 * clk_debug_unregister - remove a clk node from the debugfs clk directory
3377 * @core: the clk being removed from the debugfs clk directory
3378 *
3379 * Dynamically removes a clk and all its child nodes from the
3380 * debugfs clk directory if clk->dentry points to debugfs created by
3381 * clk_debug_register in __clk_core_init.
3382 */
3383static void clk_debug_unregister(struct clk_core *core)
3384{
3385 mutex_lock(&clk_debug_lock);
3386 hlist_del_init(&core->debug_node);
3387 debugfs_remove_recursive(core->dentry);
3388 core->dentry = NULL;
3389 mutex_unlock(&clk_debug_lock);
3390}
3391
3392/**
3393 * clk_debug_init - lazily populate the debugfs clk directory
3394 *
3395 * clks are often initialized very early during boot before memory can be
3396 * dynamically allocated and well before debugfs is setup. This function
3397 * populates the debugfs clk directory once at boot-time when we know that
3398 * debugfs is setup. It should only be called once at boot-time, all other clks
3399 * added dynamically will be done so with clk_debug_register.
3400 */
3401static int __init clk_debug_init(void)
3402{
3403 struct clk_core *core;
3404
3405#ifdef CLOCK_ALLOW_WRITE_DEBUGFS
3406 pr_warn("\n");
3407 pr_warn("********************************************************************\n");
3408 pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
3409 pr_warn("** **\n");
3410 pr_warn("** WRITEABLE clk DebugFS SUPPORT HAS BEEN ENABLED IN THIS KERNEL **\n");
3411 pr_warn("** **\n");
3412 pr_warn("** This means that this kernel is built to expose clk operations **\n");
3413 pr_warn("** such as parent or rate setting, enabling, disabling, etc. **\n");
3414 pr_warn("** to userspace, which may compromise security on your system. **\n");
3415 pr_warn("** **\n");
3416 pr_warn("** If you see this message and you are not debugging the **\n");
3417 pr_warn("** kernel, report this immediately to your vendor! **\n");
3418 pr_warn("** **\n");
3419 pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
3420 pr_warn("********************************************************************\n");
3421#endif
3422
3423 rootdir = debugfs_create_dir("clk", NULL);
3424
3425 debugfs_create_file("clk_summary", 0444, rootdir, &all_lists,
3426 &clk_summary_fops);
3427 debugfs_create_file("clk_dump", 0444, rootdir, &all_lists,
3428 &clk_dump_fops);
3429 debugfs_create_file("clk_orphan_summary", 0444, rootdir, &orphan_list,
3430 &clk_summary_fops);
3431 debugfs_create_file("clk_orphan_dump", 0444, rootdir, &orphan_list,
3432 &clk_dump_fops);
3433
3434 mutex_lock(&clk_debug_lock);
3435 hlist_for_each_entry(core, &clk_debug_list, debug_node)
3436 clk_debug_create_one(core, rootdir);
3437
3438 inited = 1;
3439 mutex_unlock(&clk_debug_lock);
3440
3441 return 0;
3442}
3443late_initcall(clk_debug_init);
3444#else
3445static inline void clk_debug_register(struct clk_core *core) { }
3446static inline void clk_debug_unregister(struct clk_core *core)
3447{
3448}
3449#endif
3450
3451static void clk_core_reparent_orphans_nolock(void)
3452{
3453 struct clk_core *orphan;
3454 struct hlist_node *tmp2;
3455
3456 /*
3457 * walk the list of orphan clocks and reparent any that newly finds a
3458 * parent.
3459 */
3460 hlist_for_each_entry_safe(orphan, tmp2, &clk_orphan_list, child_node) {
3461 struct clk_core *parent = __clk_init_parent(orphan);
3462
3463 /*
3464 * We need to use __clk_set_parent_before() and _after() to
3465 * to properly migrate any prepare/enable count of the orphan
3466 * clock. This is important for CLK_IS_CRITICAL clocks, which
3467 * are enabled during init but might not have a parent yet.
3468 */
3469 if (parent) {
3470 /* update the clk tree topology */
3471 __clk_set_parent_before(orphan, parent);
3472 __clk_set_parent_after(orphan, parent, NULL);
3473 __clk_recalc_accuracies(orphan);
3474 __clk_recalc_rates(orphan, 0);
3475
3476 /*
3477 * __clk_init_parent() will set the initial req_rate to
3478 * 0 if the clock doesn't have clk_ops::recalc_rate and
3479 * is an orphan when it's registered.
3480 *
3481 * 'req_rate' is used by clk_set_rate_range() and
3482 * clk_put() to trigger a clk_set_rate() call whenever
3483 * the boundaries are modified. Let's make sure
3484 * 'req_rate' is set to something non-zero so that
3485 * clk_set_rate_range() doesn't drop the frequency.
3486 */
3487 orphan->req_rate = orphan->rate;
3488 }
3489 }
3490}
3491
3492/**
3493 * __clk_core_init - initialize the data structures in a struct clk_core
3494 * @core: clk_core being initialized
3495 *
3496 * Initializes the lists in struct clk_core, queries the hardware for the
3497 * parent and rate and sets them both.
3498 */
3499static int __clk_core_init(struct clk_core *core)
3500{
3501 int ret;
3502 struct clk_core *parent;
3503 unsigned long rate;
3504 int phase;
3505
3506 clk_prepare_lock();
3507
3508 /*
3509 * Set hw->core after grabbing the prepare_lock to synchronize with
3510 * callers of clk_core_fill_parent_index() where we treat hw->core
3511 * being NULL as the clk not being registered yet. This is crucial so
3512 * that clks aren't parented until their parent is fully registered.
3513 */
3514 core->hw->core = core;
3515
3516 ret = clk_pm_runtime_get(core);
3517 if (ret)
3518 goto unlock;
3519
3520 /* check to see if a clock with this name is already registered */
3521 if (clk_core_lookup(core->name)) {
3522 pr_debug("%s: clk %s already initialized\n",
3523 __func__, core->name);
3524 ret = -EEXIST;
3525 goto out;
3526 }
3527
3528 /* check that clk_ops are sane. See Documentation/driver-api/clk.rst */
3529 if (core->ops->set_rate &&
3530 !((core->ops->round_rate || core->ops->determine_rate) &&
3531 core->ops->recalc_rate)) {
3532 pr_err("%s: %s must implement .round_rate or .determine_rate in addition to .recalc_rate\n",
3533 __func__, core->name);
3534 ret = -EINVAL;
3535 goto out;
3536 }
3537
3538 if (core->ops->set_parent && !core->ops->get_parent) {
3539 pr_err("%s: %s must implement .get_parent & .set_parent\n",
3540 __func__, core->name);
3541 ret = -EINVAL;
3542 goto out;
3543 }
3544
3545 if (core->num_parents > 1 && !core->ops->get_parent) {
3546 pr_err("%s: %s must implement .get_parent as it has multi parents\n",
3547 __func__, core->name);
3548 ret = -EINVAL;
3549 goto out;
3550 }
3551
3552 if (core->ops->set_rate_and_parent &&
3553 !(core->ops->set_parent && core->ops->set_rate)) {
3554 pr_err("%s: %s must implement .set_parent & .set_rate\n",
3555 __func__, core->name);
3556 ret = -EINVAL;
3557 goto out;
3558 }
3559
3560 /*
3561 * optional platform-specific magic
3562 *
3563 * The .init callback is not used by any of the basic clock types, but
3564 * exists for weird hardware that must perform initialization magic for
3565 * CCF to get an accurate view of clock for any other callbacks. It may
3566 * also be used needs to perform dynamic allocations. Such allocation
3567 * must be freed in the terminate() callback.
3568 * This callback shall not be used to initialize the parameters state,
3569 * such as rate, parent, etc ...
3570 *
3571 * If it exist, this callback should called before any other callback of
3572 * the clock
3573 */
3574 if (core->ops->init) {
3575 ret = core->ops->init(core->hw);
3576 if (ret)
3577 goto out;
3578 }
3579
3580 parent = core->parent = __clk_init_parent(core);
3581
3582 /*
3583 * Populate core->parent if parent has already been clk_core_init'd. If
3584 * parent has not yet been clk_core_init'd then place clk in the orphan
3585 * list. If clk doesn't have any parents then place it in the root
3586 * clk list.
3587 *
3588 * Every time a new clk is clk_init'd then we walk the list of orphan
3589 * clocks and re-parent any that are children of the clock currently
3590 * being clk_init'd.
3591 */
3592 if (parent) {
3593 hlist_add_head(&core->child_node, &parent->children);
3594 core->orphan = parent->orphan;
3595 } else if (!core->num_parents) {
3596 hlist_add_head(&core->child_node, &clk_root_list);
3597 core->orphan = false;
3598 } else {
3599 hlist_add_head(&core->child_node, &clk_orphan_list);
3600 core->orphan = true;
3601 }
3602
3603 /*
3604 * Set clk's accuracy. The preferred method is to use
3605 * .recalc_accuracy. For simple clocks and lazy developers the default
3606 * fallback is to use the parent's accuracy. If a clock doesn't have a
3607 * parent (or is orphaned) then accuracy is set to zero (perfect
3608 * clock).
3609 */
3610 if (core->ops->recalc_accuracy)
3611 core->accuracy = core->ops->recalc_accuracy(core->hw,
3612 clk_core_get_accuracy_no_lock(parent));
3613 else if (parent)
3614 core->accuracy = parent->accuracy;
3615 else
3616 core->accuracy = 0;
3617
3618 /*
3619 * Set clk's phase by clk_core_get_phase() caching the phase.
3620 * Since a phase is by definition relative to its parent, just
3621 * query the current clock phase, or just assume it's in phase.
3622 */
3623 phase = clk_core_get_phase(core);
3624 if (phase < 0) {
3625 ret = phase;
3626 pr_warn("%s: Failed to get phase for clk '%s'\n", __func__,
3627 core->name);
3628 goto out;
3629 }
3630
3631 /*
3632 * Set clk's duty cycle.
3633 */
3634 clk_core_update_duty_cycle_nolock(core);
3635
3636 /*
3637 * Set clk's rate. The preferred method is to use .recalc_rate. For
3638 * simple clocks and lazy developers the default fallback is to use the
3639 * parent's rate. If a clock doesn't have a parent (or is orphaned)
3640 * then rate is set to zero.
3641 */
3642 if (core->ops->recalc_rate)
3643 rate = core->ops->recalc_rate(core->hw,
3644 clk_core_get_rate_nolock(parent));
3645 else if (parent)
3646 rate = parent->rate;
3647 else
3648 rate = 0;
3649 core->rate = core->req_rate = rate;
3650
3651 /*
3652 * Enable CLK_IS_CRITICAL clocks so newly added critical clocks
3653 * don't get accidentally disabled when walking the orphan tree and
3654 * reparenting clocks
3655 */
3656 if (core->flags & CLK_IS_CRITICAL) {
3657 ret = clk_core_prepare(core);
3658 if (ret) {
3659 pr_warn("%s: critical clk '%s' failed to prepare\n",
3660 __func__, core->name);
3661 goto out;
3662 }
3663
3664 ret = clk_core_enable_lock(core);
3665 if (ret) {
3666 pr_warn("%s: critical clk '%s' failed to enable\n",
3667 __func__, core->name);
3668 clk_core_unprepare(core);
3669 goto out;
3670 }
3671 }
3672
3673 clk_core_reparent_orphans_nolock();
3674
3675
3676 kref_init(&core->ref);
3677out:
3678 clk_pm_runtime_put(core);
3679unlock:
3680 if (ret) {
3681 hlist_del_init(&core->child_node);
3682 core->hw->core = NULL;
3683 }
3684
3685 clk_prepare_unlock();
3686
3687 if (!ret)
3688 clk_debug_register(core);
3689
3690 return ret;
3691}
3692
3693/**
3694 * clk_core_link_consumer - Add a clk consumer to the list of consumers in a clk_core
3695 * @core: clk to add consumer to
3696 * @clk: consumer to link to a clk
3697 */
3698static void clk_core_link_consumer(struct clk_core *core, struct clk *clk)
3699{
3700 clk_prepare_lock();
3701 hlist_add_head(&clk->clks_node, &core->clks);
3702 clk_prepare_unlock();
3703}
3704
3705/**
3706 * clk_core_unlink_consumer - Remove a clk consumer from the list of consumers in a clk_core
3707 * @clk: consumer to unlink
3708 */
3709static void clk_core_unlink_consumer(struct clk *clk)
3710{
3711 lockdep_assert_held(&prepare_lock);
3712 hlist_del(&clk->clks_node);
3713}
3714
3715/**
3716 * alloc_clk - Allocate a clk consumer, but leave it unlinked to the clk_core
3717 * @core: clk to allocate a consumer for
3718 * @dev_id: string describing device name
3719 * @con_id: connection ID string on device
3720 *
3721 * Returns: clk consumer left unlinked from the consumer list
3722 */
3723static struct clk *alloc_clk(struct clk_core *core, const char *dev_id,
3724 const char *con_id)
3725{
3726 struct clk *clk;
3727
3728 clk = kzalloc(sizeof(*clk), GFP_KERNEL);
3729 if (!clk)
3730 return ERR_PTR(-ENOMEM);
3731
3732 clk->core = core;
3733 clk->dev_id = dev_id;
3734 clk->con_id = kstrdup_const(con_id, GFP_KERNEL);
3735 clk->max_rate = ULONG_MAX;
3736
3737 return clk;
3738}
3739
3740/**
3741 * free_clk - Free a clk consumer
3742 * @clk: clk consumer to free
3743 *
3744 * Note, this assumes the clk has been unlinked from the clk_core consumer
3745 * list.
3746 */
3747static void free_clk(struct clk *clk)
3748{
3749 kfree_const(clk->con_id);
3750 kfree(clk);
3751}
3752
3753/**
3754 * clk_hw_create_clk: Allocate and link a clk consumer to a clk_core given
3755 * a clk_hw
3756 * @dev: clk consumer device
3757 * @hw: clk_hw associated with the clk being consumed
3758 * @dev_id: string describing device name
3759 * @con_id: connection ID string on device
3760 *
3761 * This is the main function used to create a clk pointer for use by clk
3762 * consumers. It connects a consumer to the clk_core and clk_hw structures
3763 * used by the framework and clk provider respectively.
3764 */
3765struct clk *clk_hw_create_clk(struct device *dev, struct clk_hw *hw,
3766 const char *dev_id, const char *con_id)
3767{
3768 struct clk *clk;
3769 struct clk_core *core;
3770
3771 /* This is to allow this function to be chained to others */
3772 if (IS_ERR_OR_NULL(hw))
3773 return ERR_CAST(hw);
3774
3775 core = hw->core;
3776 clk = alloc_clk(core, dev_id, con_id);
3777 if (IS_ERR(clk))
3778 return clk;
3779 clk->dev = dev;
3780
3781 if (!try_module_get(core->owner)) {
3782 free_clk(clk);
3783 return ERR_PTR(-ENOENT);
3784 }
3785
3786 kref_get(&core->ref);
3787 clk_core_link_consumer(core, clk);
3788
3789 return clk;
3790}
3791
3792/**
3793 * clk_hw_get_clk - get clk consumer given an clk_hw
3794 * @hw: clk_hw associated with the clk being consumed
3795 * @con_id: connection ID string on device
3796 *
3797 * Returns: new clk consumer
3798 * This is the function to be used by providers which need
3799 * to get a consumer clk and act on the clock element
3800 * Calls to this function must be balanced with calls clk_put()
3801 */
3802struct clk *clk_hw_get_clk(struct clk_hw *hw, const char *con_id)
3803{
3804 struct device *dev = hw->core->dev;
3805 const char *name = dev ? dev_name(dev) : NULL;
3806
3807 return clk_hw_create_clk(dev, hw, name, con_id);
3808}
3809EXPORT_SYMBOL(clk_hw_get_clk);
3810
3811static int clk_cpy_name(const char **dst_p, const char *src, bool must_exist)
3812{
3813 const char *dst;
3814
3815 if (!src) {
3816 if (must_exist)
3817 return -EINVAL;
3818 return 0;
3819 }
3820
3821 *dst_p = dst = kstrdup_const(src, GFP_KERNEL);
3822 if (!dst)
3823 return -ENOMEM;
3824
3825 return 0;
3826}
3827
3828static int clk_core_populate_parent_map(struct clk_core *core,
3829 const struct clk_init_data *init)
3830{
3831 u8 num_parents = init->num_parents;
3832 const char * const *parent_names = init->parent_names;
3833 const struct clk_hw **parent_hws = init->parent_hws;
3834 const struct clk_parent_data *parent_data = init->parent_data;
3835 int i, ret = 0;
3836 struct clk_parent_map *parents, *parent;
3837
3838 if (!num_parents)
3839 return 0;
3840
3841 /*
3842 * Avoid unnecessary string look-ups of clk_core's possible parents by
3843 * having a cache of names/clk_hw pointers to clk_core pointers.
3844 */
3845 parents = kcalloc(num_parents, sizeof(*parents), GFP_KERNEL);
3846 core->parents = parents;
3847 if (!parents)
3848 return -ENOMEM;
3849
3850 /* Copy everything over because it might be __initdata */
3851 for (i = 0, parent = parents; i < num_parents; i++, parent++) {
3852 parent->index = -1;
3853 if (parent_names) {
3854 /* throw a WARN if any entries are NULL */
3855 WARN(!parent_names[i],
3856 "%s: invalid NULL in %s's .parent_names\n",
3857 __func__, core->name);
3858 ret = clk_cpy_name(&parent->name, parent_names[i],
3859 true);
3860 } else if (parent_data) {
3861 parent->hw = parent_data[i].hw;
3862 parent->index = parent_data[i].index;
3863 ret = clk_cpy_name(&parent->fw_name,
3864 parent_data[i].fw_name, false);
3865 if (!ret)
3866 ret = clk_cpy_name(&parent->name,
3867 parent_data[i].name,
3868 false);
3869 } else if (parent_hws) {
3870 parent->hw = parent_hws[i];
3871 } else {
3872 ret = -EINVAL;
3873 WARN(1, "Must specify parents if num_parents > 0\n");
3874 }
3875
3876 if (ret) {
3877 do {
3878 kfree_const(parents[i].name);
3879 kfree_const(parents[i].fw_name);
3880 } while (--i >= 0);
3881 kfree(parents);
3882
3883 return ret;
3884 }
3885 }
3886
3887 return 0;
3888}
3889
3890static void clk_core_free_parent_map(struct clk_core *core)
3891{
3892 int i = core->num_parents;
3893
3894 if (!core->num_parents)
3895 return;
3896
3897 while (--i >= 0) {
3898 kfree_const(core->parents[i].name);
3899 kfree_const(core->parents[i].fw_name);
3900 }
3901
3902 kfree(core->parents);
3903}
3904
3905static struct clk *
3906__clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw)
3907{
3908 int ret;
3909 struct clk_core *core;
3910 const struct clk_init_data *init = hw->init;
3911
3912 /*
3913 * The init data is not supposed to be used outside of registration path.
3914 * Set it to NULL so that provider drivers can't use it either and so that
3915 * we catch use of hw->init early on in the core.
3916 */
3917 hw->init = NULL;
3918
3919 core = kzalloc(sizeof(*core), GFP_KERNEL);
3920 if (!core) {
3921 ret = -ENOMEM;
3922 goto fail_out;
3923 }
3924
3925 core->name = kstrdup_const(init->name, GFP_KERNEL);
3926 if (!core->name) {
3927 ret = -ENOMEM;
3928 goto fail_name;
3929 }
3930
3931 if (WARN_ON(!init->ops)) {
3932 ret = -EINVAL;
3933 goto fail_ops;
3934 }
3935 core->ops = init->ops;
3936
3937 if (dev && pm_runtime_enabled(dev))
3938 core->rpm_enabled = true;
3939 core->dev = dev;
3940 core->of_node = np;
3941 if (dev && dev->driver)
3942 core->owner = dev->driver->owner;
3943 core->hw = hw;
3944 core->flags = init->flags;
3945 core->num_parents = init->num_parents;
3946 core->min_rate = 0;
3947 core->max_rate = ULONG_MAX;
3948
3949 ret = clk_core_populate_parent_map(core, init);
3950 if (ret)
3951 goto fail_parents;
3952
3953 INIT_HLIST_HEAD(&core->clks);
3954
3955 /*
3956 * Don't call clk_hw_create_clk() here because that would pin the
3957 * provider module to itself and prevent it from ever being removed.
3958 */
3959 hw->clk = alloc_clk(core, NULL, NULL);
3960 if (IS_ERR(hw->clk)) {
3961 ret = PTR_ERR(hw->clk);
3962 goto fail_create_clk;
3963 }
3964
3965 clk_core_link_consumer(core, hw->clk);
3966
3967 ret = __clk_core_init(core);
3968 if (!ret)
3969 return hw->clk;
3970
3971 clk_prepare_lock();
3972 clk_core_unlink_consumer(hw->clk);
3973 clk_prepare_unlock();
3974
3975 free_clk(hw->clk);
3976 hw->clk = NULL;
3977
3978fail_create_clk:
3979 clk_core_free_parent_map(core);
3980fail_parents:
3981fail_ops:
3982 kfree_const(core->name);
3983fail_name:
3984 kfree(core);
3985fail_out:
3986 return ERR_PTR(ret);
3987}
3988
3989/**
3990 * dev_or_parent_of_node() - Get device node of @dev or @dev's parent
3991 * @dev: Device to get device node of
3992 *
3993 * Return: device node pointer of @dev, or the device node pointer of
3994 * @dev->parent if dev doesn't have a device node, or NULL if neither
3995 * @dev or @dev->parent have a device node.
3996 */
3997static struct device_node *dev_or_parent_of_node(struct device *dev)
3998{
3999 struct device_node *np;
4000
4001 if (!dev)
4002 return NULL;
4003
4004 np = dev_of_node(dev);
4005 if (!np)
4006 np = dev_of_node(dev->parent);
4007
4008 return np;
4009}
4010
4011/**
4012 * clk_register - allocate a new clock, register it and return an opaque cookie
4013 * @dev: device that is registering this clock
4014 * @hw: link to hardware-specific clock data
4015 *
4016 * clk_register is the *deprecated* interface for populating the clock tree with
4017 * new clock nodes. Use clk_hw_register() instead.
4018 *
4019 * Returns: a pointer to the newly allocated struct clk which
4020 * cannot be dereferenced by driver code but may be used in conjunction with the
4021 * rest of the clock API. In the event of an error clk_register will return an
4022 * error code; drivers must test for an error code after calling clk_register.
4023 */
4024struct clk *clk_register(struct device *dev, struct clk_hw *hw)
4025{
4026 return __clk_register(dev, dev_or_parent_of_node(dev), hw);
4027}
4028EXPORT_SYMBOL_GPL(clk_register);
4029
4030/**
4031 * clk_hw_register - register a clk_hw and return an error code
4032 * @dev: device that is registering this clock
4033 * @hw: link to hardware-specific clock data
4034 *
4035 * clk_hw_register is the primary interface for populating the clock tree with
4036 * new clock nodes. It returns an integer equal to zero indicating success or
4037 * less than zero indicating failure. Drivers must test for an error code after
4038 * calling clk_hw_register().
4039 */
4040int clk_hw_register(struct device *dev, struct clk_hw *hw)
4041{
4042 return PTR_ERR_OR_ZERO(__clk_register(dev, dev_or_parent_of_node(dev),
4043 hw));
4044}
4045EXPORT_SYMBOL_GPL(clk_hw_register);
4046
4047/*
4048 * of_clk_hw_register - register a clk_hw and return an error code
4049 * @node: device_node of device that is registering this clock
4050 * @hw: link to hardware-specific clock data
4051 *
4052 * of_clk_hw_register() is the primary interface for populating the clock tree
4053 * with new clock nodes when a struct device is not available, but a struct
4054 * device_node is. It returns an integer equal to zero indicating success or
4055 * less than zero indicating failure. Drivers must test for an error code after
4056 * calling of_clk_hw_register().
4057 */
4058int of_clk_hw_register(struct device_node *node, struct clk_hw *hw)
4059{
4060 return PTR_ERR_OR_ZERO(__clk_register(NULL, node, hw));
4061}
4062EXPORT_SYMBOL_GPL(of_clk_hw_register);
4063
4064/* Free memory allocated for a clock. */
4065static void __clk_release(struct kref *ref)
4066{
4067 struct clk_core *core = container_of(ref, struct clk_core, ref);
4068
4069 lockdep_assert_held(&prepare_lock);
4070
4071 clk_core_free_parent_map(core);
4072 kfree_const(core->name);
4073 kfree(core);
4074}
4075
4076/*
4077 * Empty clk_ops for unregistered clocks. These are used temporarily
4078 * after clk_unregister() was called on a clock and until last clock
4079 * consumer calls clk_put() and the struct clk object is freed.
4080 */
4081static int clk_nodrv_prepare_enable(struct clk_hw *hw)
4082{
4083 return -ENXIO;
4084}
4085
4086static void clk_nodrv_disable_unprepare(struct clk_hw *hw)
4087{
4088 WARN_ON_ONCE(1);
4089}
4090
4091static int clk_nodrv_set_rate(struct clk_hw *hw, unsigned long rate,
4092 unsigned long parent_rate)
4093{
4094 return -ENXIO;
4095}
4096
4097static int clk_nodrv_set_parent(struct clk_hw *hw, u8 index)
4098{
4099 return -ENXIO;
4100}
4101
4102static const struct clk_ops clk_nodrv_ops = {
4103 .enable = clk_nodrv_prepare_enable,
4104 .disable = clk_nodrv_disable_unprepare,
4105 .prepare = clk_nodrv_prepare_enable,
4106 .unprepare = clk_nodrv_disable_unprepare,
4107 .set_rate = clk_nodrv_set_rate,
4108 .set_parent = clk_nodrv_set_parent,
4109};
4110
4111static void clk_core_evict_parent_cache_subtree(struct clk_core *root,
4112 const struct clk_core *target)
4113{
4114 int i;
4115 struct clk_core *child;
4116
4117 for (i = 0; i < root->num_parents; i++)
4118 if (root->parents[i].core == target)
4119 root->parents[i].core = NULL;
4120
4121 hlist_for_each_entry(child, &root->children, child_node)
4122 clk_core_evict_parent_cache_subtree(child, target);
4123}
4124
4125/* Remove this clk from all parent caches */
4126static void clk_core_evict_parent_cache(struct clk_core *core)
4127{
4128 const struct hlist_head **lists;
4129 struct clk_core *root;
4130
4131 lockdep_assert_held(&prepare_lock);
4132
4133 for (lists = all_lists; *lists; lists++)
4134 hlist_for_each_entry(root, *lists, child_node)
4135 clk_core_evict_parent_cache_subtree(root, core);
4136
4137}
4138
4139/**
4140 * clk_unregister - unregister a currently registered clock
4141 * @clk: clock to unregister
4142 */
4143void clk_unregister(struct clk *clk)
4144{
4145 unsigned long flags;
4146 const struct clk_ops *ops;
4147
4148 if (!clk || WARN_ON_ONCE(IS_ERR(clk)))
4149 return;
4150
4151 clk_debug_unregister(clk->core);
4152
4153 clk_prepare_lock();
4154
4155 ops = clk->core->ops;
4156 if (ops == &clk_nodrv_ops) {
4157 pr_err("%s: unregistered clock: %s\n", __func__,
4158 clk->core->name);
4159 goto unlock;
4160 }
4161 /*
4162 * Assign empty clock ops for consumers that might still hold
4163 * a reference to this clock.
4164 */
4165 flags = clk_enable_lock();
4166 clk->core->ops = &clk_nodrv_ops;
4167 clk_enable_unlock(flags);
4168
4169 if (ops->terminate)
4170 ops->terminate(clk->core->hw);
4171
4172 if (!hlist_empty(&clk->core->children)) {
4173 struct clk_core *child;
4174 struct hlist_node *t;
4175
4176 /* Reparent all children to the orphan list. */
4177 hlist_for_each_entry_safe(child, t, &clk->core->children,
4178 child_node)
4179 clk_core_set_parent_nolock(child, NULL);
4180 }
4181
4182 clk_core_evict_parent_cache(clk->core);
4183
4184 hlist_del_init(&clk->core->child_node);
4185
4186 if (clk->core->prepare_count)
4187 pr_warn("%s: unregistering prepared clock: %s\n",
4188 __func__, clk->core->name);
4189
4190 if (clk->core->protect_count)
4191 pr_warn("%s: unregistering protected clock: %s\n",
4192 __func__, clk->core->name);
4193
4194 kref_put(&clk->core->ref, __clk_release);
4195 free_clk(clk);
4196unlock:
4197 clk_prepare_unlock();
4198}
4199EXPORT_SYMBOL_GPL(clk_unregister);
4200
4201/**
4202 * clk_hw_unregister - unregister a currently registered clk_hw
4203 * @hw: hardware-specific clock data to unregister
4204 */
4205void clk_hw_unregister(struct clk_hw *hw)
4206{
4207 clk_unregister(hw->clk);
4208}
4209EXPORT_SYMBOL_GPL(clk_hw_unregister);
4210
4211static void devm_clk_unregister_cb(struct device *dev, void *res)
4212{
4213 clk_unregister(*(struct clk **)res);
4214}
4215
4216static void devm_clk_hw_unregister_cb(struct device *dev, void *res)
4217{
4218 clk_hw_unregister(*(struct clk_hw **)res);
4219}
4220
4221/**
4222 * devm_clk_register - resource managed clk_register()
4223 * @dev: device that is registering this clock
4224 * @hw: link to hardware-specific clock data
4225 *
4226 * Managed clk_register(). This function is *deprecated*, use devm_clk_hw_register() instead.
4227 *
4228 * Clocks returned from this function are automatically clk_unregister()ed on
4229 * driver detach. See clk_register() for more information.
4230 */
4231struct clk *devm_clk_register(struct device *dev, struct clk_hw *hw)
4232{
4233 struct clk *clk;
4234 struct clk **clkp;
4235
4236 clkp = devres_alloc(devm_clk_unregister_cb, sizeof(*clkp), GFP_KERNEL);
4237 if (!clkp)
4238 return ERR_PTR(-ENOMEM);
4239
4240 clk = clk_register(dev, hw);
4241 if (!IS_ERR(clk)) {
4242 *clkp = clk;
4243 devres_add(dev, clkp);
4244 } else {
4245 devres_free(clkp);
4246 }
4247
4248 return clk;
4249}
4250EXPORT_SYMBOL_GPL(devm_clk_register);
4251
4252/**
4253 * devm_clk_hw_register - resource managed clk_hw_register()
4254 * @dev: device that is registering this clock
4255 * @hw: link to hardware-specific clock data
4256 *
4257 * Managed clk_hw_register(). Clocks registered by this function are
4258 * automatically clk_hw_unregister()ed on driver detach. See clk_hw_register()
4259 * for more information.
4260 */
4261int devm_clk_hw_register(struct device *dev, struct clk_hw *hw)
4262{
4263 struct clk_hw **hwp;
4264 int ret;
4265
4266 hwp = devres_alloc(devm_clk_hw_unregister_cb, sizeof(*hwp), GFP_KERNEL);
4267 if (!hwp)
4268 return -ENOMEM;
4269
4270 ret = clk_hw_register(dev, hw);
4271 if (!ret) {
4272 *hwp = hw;
4273 devres_add(dev, hwp);
4274 } else {
4275 devres_free(hwp);
4276 }
4277
4278 return ret;
4279}
4280EXPORT_SYMBOL_GPL(devm_clk_hw_register);
4281
4282static void devm_clk_release(struct device *dev, void *res)
4283{
4284 clk_put(*(struct clk **)res);
4285}
4286
4287/**
4288 * devm_clk_hw_get_clk - resource managed clk_hw_get_clk()
4289 * @dev: device that is registering this clock
4290 * @hw: clk_hw associated with the clk being consumed
4291 * @con_id: connection ID string on device
4292 *
4293 * Managed clk_hw_get_clk(). Clocks got with this function are
4294 * automatically clk_put() on driver detach. See clk_put()
4295 * for more information.
4296 */
4297struct clk *devm_clk_hw_get_clk(struct device *dev, struct clk_hw *hw,
4298 const char *con_id)
4299{
4300 struct clk *clk;
4301 struct clk **clkp;
4302
4303 /* This should not happen because it would mean we have drivers
4304 * passing around clk_hw pointers instead of having the caller use
4305 * proper clk_get() style APIs
4306 */
4307 WARN_ON_ONCE(dev != hw->core->dev);
4308
4309 clkp = devres_alloc(devm_clk_release, sizeof(*clkp), GFP_KERNEL);
4310 if (!clkp)
4311 return ERR_PTR(-ENOMEM);
4312
4313 clk = clk_hw_get_clk(hw, con_id);
4314 if (!IS_ERR(clk)) {
4315 *clkp = clk;
4316 devres_add(dev, clkp);
4317 } else {
4318 devres_free(clkp);
4319 }
4320
4321 return clk;
4322}
4323EXPORT_SYMBOL_GPL(devm_clk_hw_get_clk);
4324
4325/*
4326 * clkdev helpers
4327 */
4328
4329void __clk_put(struct clk *clk)
4330{
4331 struct module *owner;
4332
4333 if (!clk || WARN_ON_ONCE(IS_ERR(clk)))
4334 return;
4335
4336 clk_prepare_lock();
4337
4338 /*
4339 * Before calling clk_put, all calls to clk_rate_exclusive_get() from a
4340 * given user should be balanced with calls to clk_rate_exclusive_put()
4341 * and by that same consumer
4342 */
4343 if (WARN_ON(clk->exclusive_count)) {
4344 /* We voiced our concern, let's sanitize the situation */
4345 clk->core->protect_count -= (clk->exclusive_count - 1);
4346 clk_core_rate_unprotect(clk->core);
4347 clk->exclusive_count = 0;
4348 }
4349
4350 hlist_del(&clk->clks_node);
4351 if (clk->min_rate > clk->core->req_rate ||
4352 clk->max_rate < clk->core->req_rate)
4353 clk_core_set_rate_nolock(clk->core, clk->core->req_rate);
4354
4355 owner = clk->core->owner;
4356 kref_put(&clk->core->ref, __clk_release);
4357
4358 clk_prepare_unlock();
4359
4360 module_put(owner);
4361
4362 free_clk(clk);
4363}
4364
4365/*** clk rate change notifiers ***/
4366
4367/**
4368 * clk_notifier_register - add a clk rate change notifier
4369 * @clk: struct clk * to watch
4370 * @nb: struct notifier_block * with callback info
4371 *
4372 * Request notification when clk's rate changes. This uses an SRCU
4373 * notifier because we want it to block and notifier unregistrations are
4374 * uncommon. The callbacks associated with the notifier must not
4375 * re-enter into the clk framework by calling any top-level clk APIs;
4376 * this will cause a nested prepare_lock mutex.
4377 *
4378 * In all notification cases (pre, post and abort rate change) the original
4379 * clock rate is passed to the callback via struct clk_notifier_data.old_rate
4380 * and the new frequency is passed via struct clk_notifier_data.new_rate.
4381 *
4382 * clk_notifier_register() must be called from non-atomic context.
4383 * Returns -EINVAL if called with null arguments, -ENOMEM upon
4384 * allocation failure; otherwise, passes along the return value of
4385 * srcu_notifier_chain_register().
4386 */
4387int clk_notifier_register(struct clk *clk, struct notifier_block *nb)
4388{
4389 struct clk_notifier *cn;
4390 int ret = -ENOMEM;
4391
4392 if (!clk || !nb)
4393 return -EINVAL;
4394
4395 clk_prepare_lock();
4396
4397 /* search the list of notifiers for this clk */
4398 list_for_each_entry(cn, &clk_notifier_list, node)
4399 if (cn->clk == clk)
4400 goto found;
4401
4402 /* if clk wasn't in the notifier list, allocate new clk_notifier */
4403 cn = kzalloc(sizeof(*cn), GFP_KERNEL);
4404 if (!cn)
4405 goto out;
4406
4407 cn->clk = clk;
4408 srcu_init_notifier_head(&cn->notifier_head);
4409
4410 list_add(&cn->node, &clk_notifier_list);
4411
4412found:
4413 ret = srcu_notifier_chain_register(&cn->notifier_head, nb);
4414
4415 clk->core->notifier_count++;
4416
4417out:
4418 clk_prepare_unlock();
4419
4420 return ret;
4421}
4422EXPORT_SYMBOL_GPL(clk_notifier_register);
4423
4424/**
4425 * clk_notifier_unregister - remove a clk rate change notifier
4426 * @clk: struct clk *
4427 * @nb: struct notifier_block * with callback info
4428 *
4429 * Request no further notification for changes to 'clk' and frees memory
4430 * allocated in clk_notifier_register.
4431 *
4432 * Returns -EINVAL if called with null arguments; otherwise, passes
4433 * along the return value of srcu_notifier_chain_unregister().
4434 */
4435int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb)
4436{
4437 struct clk_notifier *cn;
4438 int ret = -ENOENT;
4439
4440 if (!clk || !nb)
4441 return -EINVAL;
4442
4443 clk_prepare_lock();
4444
4445 list_for_each_entry(cn, &clk_notifier_list, node) {
4446 if (cn->clk == clk) {
4447 ret = srcu_notifier_chain_unregister(&cn->notifier_head, nb);
4448
4449 clk->core->notifier_count--;
4450
4451 /* XXX the notifier code should handle this better */
4452 if (!cn->notifier_head.head) {
4453 srcu_cleanup_notifier_head(&cn->notifier_head);
4454 list_del(&cn->node);
4455 kfree(cn);
4456 }
4457 break;
4458 }
4459 }
4460
4461 clk_prepare_unlock();
4462
4463 return ret;
4464}
4465EXPORT_SYMBOL_GPL(clk_notifier_unregister);
4466
4467struct clk_notifier_devres {
4468 struct clk *clk;
4469 struct notifier_block *nb;
4470};
4471
4472static void devm_clk_notifier_release(struct device *dev, void *res)
4473{
4474 struct clk_notifier_devres *devres = res;
4475
4476 clk_notifier_unregister(devres->clk, devres->nb);
4477}
4478
4479int devm_clk_notifier_register(struct device *dev, struct clk *clk,
4480 struct notifier_block *nb)
4481{
4482 struct clk_notifier_devres *devres;
4483 int ret;
4484
4485 devres = devres_alloc(devm_clk_notifier_release,
4486 sizeof(*devres), GFP_KERNEL);
4487
4488 if (!devres)
4489 return -ENOMEM;
4490
4491 ret = clk_notifier_register(clk, nb);
4492 if (!ret) {
4493 devres->clk = clk;
4494 devres->nb = nb;
4495 } else {
4496 devres_free(devres);
4497 }
4498
4499 return ret;
4500}
4501EXPORT_SYMBOL_GPL(devm_clk_notifier_register);
4502
4503#ifdef CONFIG_OF
4504static void clk_core_reparent_orphans(void)
4505{
4506 clk_prepare_lock();
4507 clk_core_reparent_orphans_nolock();
4508 clk_prepare_unlock();
4509}
4510
4511/**
4512 * struct of_clk_provider - Clock provider registration structure
4513 * @link: Entry in global list of clock providers
4514 * @node: Pointer to device tree node of clock provider
4515 * @get: Get clock callback. Returns NULL or a struct clk for the
4516 * given clock specifier
4517 * @get_hw: Get clk_hw callback. Returns NULL, ERR_PTR or a
4518 * struct clk_hw for the given clock specifier
4519 * @data: context pointer to be passed into @get callback
4520 */
4521struct of_clk_provider {
4522 struct list_head link;
4523
4524 struct device_node *node;
4525 struct clk *(*get)(struct of_phandle_args *clkspec, void *data);
4526 struct clk_hw *(*get_hw)(struct of_phandle_args *clkspec, void *data);
4527 void *data;
4528};
4529
4530extern struct of_device_id __clk_of_table;
4531static const struct of_device_id __clk_of_table_sentinel
4532 __used __section("__clk_of_table_end");
4533
4534static LIST_HEAD(of_clk_providers);
4535static DEFINE_MUTEX(of_clk_mutex);
4536
4537struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec,
4538 void *data)
4539{
4540 return data;
4541}
4542EXPORT_SYMBOL_GPL(of_clk_src_simple_get);
4543
4544struct clk_hw *of_clk_hw_simple_get(struct of_phandle_args *clkspec, void *data)
4545{
4546 return data;
4547}
4548EXPORT_SYMBOL_GPL(of_clk_hw_simple_get);
4549
4550struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data)
4551{
4552 struct clk_onecell_data *clk_data = data;
4553 unsigned int idx = clkspec->args[0];
4554
4555 if (idx >= clk_data->clk_num) {
4556 pr_err("%s: invalid clock index %u\n", __func__, idx);
4557 return ERR_PTR(-EINVAL);
4558 }
4559
4560 return clk_data->clks[idx];
4561}
4562EXPORT_SYMBOL_GPL(of_clk_src_onecell_get);
4563
4564struct clk_hw *
4565of_clk_hw_onecell_get(struct of_phandle_args *clkspec, void *data)
4566{
4567 struct clk_hw_onecell_data *hw_data = data;
4568 unsigned int idx = clkspec->args[0];
4569
4570 if (idx >= hw_data->num) {
4571 pr_err("%s: invalid index %u\n", __func__, idx);
4572 return ERR_PTR(-EINVAL);
4573 }
4574
4575 return hw_data->hws[idx];
4576}
4577EXPORT_SYMBOL_GPL(of_clk_hw_onecell_get);
4578
4579/**
4580 * of_clk_add_provider() - Register a clock provider for a node
4581 * @np: Device node pointer associated with clock provider
4582 * @clk_src_get: callback for decoding clock
4583 * @data: context pointer for @clk_src_get callback.
4584 *
4585 * This function is *deprecated*. Use of_clk_add_hw_provider() instead.
4586 */
4587int of_clk_add_provider(struct device_node *np,
4588 struct clk *(*clk_src_get)(struct of_phandle_args *clkspec,
4589 void *data),
4590 void *data)
4591{
4592 struct of_clk_provider *cp;
4593 int ret;
4594
4595 if (!np)
4596 return 0;
4597
4598 cp = kzalloc(sizeof(*cp), GFP_KERNEL);
4599 if (!cp)
4600 return -ENOMEM;
4601
4602 cp->node = of_node_get(np);
4603 cp->data = data;
4604 cp->get = clk_src_get;
4605
4606 mutex_lock(&of_clk_mutex);
4607 list_add(&cp->link, &of_clk_providers);
4608 mutex_unlock(&of_clk_mutex);
4609 pr_debug("Added clock from %pOF\n", np);
4610
4611 clk_core_reparent_orphans();
4612
4613 ret = of_clk_set_defaults(np, true);
4614 if (ret < 0)
4615 of_clk_del_provider(np);
4616
4617 fwnode_dev_initialized(&np->fwnode, true);
4618
4619 return ret;
4620}
4621EXPORT_SYMBOL_GPL(of_clk_add_provider);
4622
4623/**
4624 * of_clk_add_hw_provider() - Register a clock provider for a node
4625 * @np: Device node pointer associated with clock provider
4626 * @get: callback for decoding clk_hw
4627 * @data: context pointer for @get callback.
4628 */
4629int of_clk_add_hw_provider(struct device_node *np,
4630 struct clk_hw *(*get)(struct of_phandle_args *clkspec,
4631 void *data),
4632 void *data)
4633{
4634 struct of_clk_provider *cp;
4635 int ret;
4636
4637 if (!np)
4638 return 0;
4639
4640 cp = kzalloc(sizeof(*cp), GFP_KERNEL);
4641 if (!cp)
4642 return -ENOMEM;
4643
4644 cp->node = of_node_get(np);
4645 cp->data = data;
4646 cp->get_hw = get;
4647
4648 mutex_lock(&of_clk_mutex);
4649 list_add(&cp->link, &of_clk_providers);
4650 mutex_unlock(&of_clk_mutex);
4651 pr_debug("Added clk_hw provider from %pOF\n", np);
4652
4653 clk_core_reparent_orphans();
4654
4655 ret = of_clk_set_defaults(np, true);
4656 if (ret < 0)
4657 of_clk_del_provider(np);
4658
4659 fwnode_dev_initialized(&np->fwnode, true);
4660
4661 return ret;
4662}
4663EXPORT_SYMBOL_GPL(of_clk_add_hw_provider);
4664
4665static void devm_of_clk_release_provider(struct device *dev, void *res)
4666{
4667 of_clk_del_provider(*(struct device_node **)res);
4668}
4669
4670/*
4671 * We allow a child device to use its parent device as the clock provider node
4672 * for cases like MFD sub-devices where the child device driver wants to use
4673 * devm_*() APIs but not list the device in DT as a sub-node.
4674 */
4675static struct device_node *get_clk_provider_node(struct device *dev)
4676{
4677 struct device_node *np, *parent_np;
4678
4679 np = dev->of_node;
4680 parent_np = dev->parent ? dev->parent->of_node : NULL;
4681
4682 if (!of_find_property(np, "#clock-cells", NULL))
4683 if (of_find_property(parent_np, "#clock-cells", NULL))
4684 np = parent_np;
4685
4686 return np;
4687}
4688
4689/**
4690 * devm_of_clk_add_hw_provider() - Managed clk provider node registration
4691 * @dev: Device acting as the clock provider (used for DT node and lifetime)
4692 * @get: callback for decoding clk_hw
4693 * @data: context pointer for @get callback
4694 *
4695 * Registers clock provider for given device's node. If the device has no DT
4696 * node or if the device node lacks of clock provider information (#clock-cells)
4697 * then the parent device's node is scanned for this information. If parent node
4698 * has the #clock-cells then it is used in registration. Provider is
4699 * automatically released at device exit.
4700 *
4701 * Return: 0 on success or an errno on failure.
4702 */
4703int devm_of_clk_add_hw_provider(struct device *dev,
4704 struct clk_hw *(*get)(struct of_phandle_args *clkspec,
4705 void *data),
4706 void *data)
4707{
4708 struct device_node **ptr, *np;
4709 int ret;
4710
4711 ptr = devres_alloc(devm_of_clk_release_provider, sizeof(*ptr),
4712 GFP_KERNEL);
4713 if (!ptr)
4714 return -ENOMEM;
4715
4716 np = get_clk_provider_node(dev);
4717 ret = of_clk_add_hw_provider(np, get, data);
4718 if (!ret) {
4719 *ptr = np;
4720 devres_add(dev, ptr);
4721 } else {
4722 devres_free(ptr);
4723 }
4724
4725 return ret;
4726}
4727EXPORT_SYMBOL_GPL(devm_of_clk_add_hw_provider);
4728
4729/**
4730 * of_clk_del_provider() - Remove a previously registered clock provider
4731 * @np: Device node pointer associated with clock provider
4732 */
4733void of_clk_del_provider(struct device_node *np)
4734{
4735 struct of_clk_provider *cp;
4736
4737 if (!np)
4738 return;
4739
4740 mutex_lock(&of_clk_mutex);
4741 list_for_each_entry(cp, &of_clk_providers, link) {
4742 if (cp->node == np) {
4743 list_del(&cp->link);
4744 fwnode_dev_initialized(&np->fwnode, false);
4745 of_node_put(cp->node);
4746 kfree(cp);
4747 break;
4748 }
4749 }
4750 mutex_unlock(&of_clk_mutex);
4751}
4752EXPORT_SYMBOL_GPL(of_clk_del_provider);
4753
4754static int devm_clk_provider_match(struct device *dev, void *res, void *data)
4755{
4756 struct device_node **np = res;
4757
4758 if (WARN_ON(!np || !*np))
4759 return 0;
4760
4761 return *np == data;
4762}
4763
4764/**
4765 * devm_of_clk_del_provider() - Remove clock provider registered using devm
4766 * @dev: Device to whose lifetime the clock provider was bound
4767 */
4768void devm_of_clk_del_provider(struct device *dev)
4769{
4770 int ret;
4771 struct device_node *np = get_clk_provider_node(dev);
4772
4773 ret = devres_release(dev, devm_of_clk_release_provider,
4774 devm_clk_provider_match, np);
4775
4776 WARN_ON(ret);
4777}
4778EXPORT_SYMBOL(devm_of_clk_del_provider);
4779
4780/**
4781 * of_parse_clkspec() - Parse a DT clock specifier for a given device node
4782 * @np: device node to parse clock specifier from
4783 * @index: index of phandle to parse clock out of. If index < 0, @name is used
4784 * @name: clock name to find and parse. If name is NULL, the index is used
4785 * @out_args: Result of parsing the clock specifier
4786 *
4787 * Parses a device node's "clocks" and "clock-names" properties to find the
4788 * phandle and cells for the index or name that is desired. The resulting clock
4789 * specifier is placed into @out_args, or an errno is returned when there's a
4790 * parsing error. The @index argument is ignored if @name is non-NULL.
4791 *
4792 * Example:
4793 *
4794 * phandle1: clock-controller@1 {
4795 * #clock-cells = <2>;
4796 * }
4797 *
4798 * phandle2: clock-controller@2 {
4799 * #clock-cells = <1>;
4800 * }
4801 *
4802 * clock-consumer@3 {
4803 * clocks = <&phandle1 1 2 &phandle2 3>;
4804 * clock-names = "name1", "name2";
4805 * }
4806 *
4807 * To get a device_node for `clock-controller@2' node you may call this
4808 * function a few different ways:
4809 *
4810 * of_parse_clkspec(clock-consumer@3, -1, "name2", &args);
4811 * of_parse_clkspec(clock-consumer@3, 1, NULL, &args);
4812 * of_parse_clkspec(clock-consumer@3, 1, "name2", &args);
4813 *
4814 * Return: 0 upon successfully parsing the clock specifier. Otherwise, -ENOENT
4815 * if @name is NULL or -EINVAL if @name is non-NULL and it can't be found in
4816 * the "clock-names" property of @np.
4817 */
4818static int of_parse_clkspec(const struct device_node *np, int index,
4819 const char *name, struct of_phandle_args *out_args)
4820{
4821 int ret = -ENOENT;
4822
4823 /* Walk up the tree of devices looking for a clock property that matches */
4824 while (np) {
4825 /*
4826 * For named clocks, first look up the name in the
4827 * "clock-names" property. If it cannot be found, then index
4828 * will be an error code and of_parse_phandle_with_args() will
4829 * return -EINVAL.
4830 */
4831 if (name)
4832 index = of_property_match_string(np, "clock-names", name);
4833 ret = of_parse_phandle_with_args(np, "clocks", "#clock-cells",
4834 index, out_args);
4835 if (!ret)
4836 break;
4837 if (name && index >= 0)
4838 break;
4839
4840 /*
4841 * No matching clock found on this node. If the parent node
4842 * has a "clock-ranges" property, then we can try one of its
4843 * clocks.
4844 */
4845 np = np->parent;
4846 if (np && !of_get_property(np, "clock-ranges", NULL))
4847 break;
4848 index = 0;
4849 }
4850
4851 return ret;
4852}
4853
4854static struct clk_hw *
4855__of_clk_get_hw_from_provider(struct of_clk_provider *provider,
4856 struct of_phandle_args *clkspec)
4857{
4858 struct clk *clk;
4859
4860 if (provider->get_hw)
4861 return provider->get_hw(clkspec, provider->data);
4862
4863 clk = provider->get(clkspec, provider->data);
4864 if (IS_ERR(clk))
4865 return ERR_CAST(clk);
4866 return __clk_get_hw(clk);
4867}
4868
4869static struct clk_hw *
4870of_clk_get_hw_from_clkspec(struct of_phandle_args *clkspec)
4871{
4872 struct of_clk_provider *provider;
4873 struct clk_hw *hw = ERR_PTR(-EPROBE_DEFER);
4874
4875 if (!clkspec)
4876 return ERR_PTR(-EINVAL);
4877
4878 mutex_lock(&of_clk_mutex);
4879 list_for_each_entry(provider, &of_clk_providers, link) {
4880 if (provider->node == clkspec->np) {
4881 hw = __of_clk_get_hw_from_provider(provider, clkspec);
4882 if (!IS_ERR(hw))
4883 break;
4884 }
4885 }
4886 mutex_unlock(&of_clk_mutex);
4887
4888 return hw;
4889}
4890
4891/**
4892 * of_clk_get_from_provider() - Lookup a clock from a clock provider
4893 * @clkspec: pointer to a clock specifier data structure
4894 *
4895 * This function looks up a struct clk from the registered list of clock
4896 * providers, an input is a clock specifier data structure as returned
4897 * from the of_parse_phandle_with_args() function call.
4898 */
4899struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec)
4900{
4901 struct clk_hw *hw = of_clk_get_hw_from_clkspec(clkspec);
4902
4903 return clk_hw_create_clk(NULL, hw, NULL, __func__);
4904}
4905EXPORT_SYMBOL_GPL(of_clk_get_from_provider);
4906
4907struct clk_hw *of_clk_get_hw(struct device_node *np, int index,
4908 const char *con_id)
4909{
4910 int ret;
4911 struct clk_hw *hw;
4912 struct of_phandle_args clkspec;
4913
4914 ret = of_parse_clkspec(np, index, con_id, &clkspec);
4915 if (ret)
4916 return ERR_PTR(ret);
4917
4918 hw = of_clk_get_hw_from_clkspec(&clkspec);
4919 of_node_put(clkspec.np);
4920
4921 return hw;
4922}
4923
4924static struct clk *__of_clk_get(struct device_node *np,
4925 int index, const char *dev_id,
4926 const char *con_id)
4927{
4928 struct clk_hw *hw = of_clk_get_hw(np, index, con_id);
4929
4930 return clk_hw_create_clk(NULL, hw, dev_id, con_id);
4931}
4932
4933struct clk *of_clk_get(struct device_node *np, int index)
4934{
4935 return __of_clk_get(np, index, np->full_name, NULL);
4936}
4937EXPORT_SYMBOL(of_clk_get);
4938
4939/**
4940 * of_clk_get_by_name() - Parse and lookup a clock referenced by a device node
4941 * @np: pointer to clock consumer node
4942 * @name: name of consumer's clock input, or NULL for the first clock reference
4943 *
4944 * This function parses the clocks and clock-names properties,
4945 * and uses them to look up the struct clk from the registered list of clock
4946 * providers.
4947 */
4948struct clk *of_clk_get_by_name(struct device_node *np, const char *name)
4949{
4950 if (!np)
4951 return ERR_PTR(-ENOENT);
4952
4953 return __of_clk_get(np, 0, np->full_name, name);
4954}
4955EXPORT_SYMBOL(of_clk_get_by_name);
4956
4957/**
4958 * of_clk_get_parent_count() - Count the number of clocks a device node has
4959 * @np: device node to count
4960 *
4961 * Returns: The number of clocks that are possible parents of this node
4962 */
4963unsigned int of_clk_get_parent_count(const struct device_node *np)
4964{
4965 int count;
4966
4967 count = of_count_phandle_with_args(np, "clocks", "#clock-cells");
4968 if (count < 0)
4969 return 0;
4970
4971 return count;
4972}
4973EXPORT_SYMBOL_GPL(of_clk_get_parent_count);
4974
4975const char *of_clk_get_parent_name(const struct device_node *np, int index)
4976{
4977 struct of_phandle_args clkspec;
4978 struct property *prop;
4979 const char *clk_name;
4980 const __be32 *vp;
4981 u32 pv;
4982 int rc;
4983 int count;
4984 struct clk *clk;
4985
4986 rc = of_parse_phandle_with_args(np, "clocks", "#clock-cells", index,
4987 &clkspec);
4988 if (rc)
4989 return NULL;
4990
4991 index = clkspec.args_count ? clkspec.args[0] : 0;
4992 count = 0;
4993
4994 /* if there is an indices property, use it to transfer the index
4995 * specified into an array offset for the clock-output-names property.
4996 */
4997 of_property_for_each_u32(clkspec.np, "clock-indices", prop, vp, pv) {
4998 if (index == pv) {
4999 index = count;
5000 break;
5001 }
5002 count++;
5003 }
5004 /* We went off the end of 'clock-indices' without finding it */
5005 if (prop && !vp)
5006 return NULL;
5007
5008 if (of_property_read_string_index(clkspec.np, "clock-output-names",
5009 index,
5010 &clk_name) < 0) {
5011 /*
5012 * Best effort to get the name if the clock has been
5013 * registered with the framework. If the clock isn't
5014 * registered, we return the node name as the name of
5015 * the clock as long as #clock-cells = 0.
5016 */
5017 clk = of_clk_get_from_provider(&clkspec);
5018 if (IS_ERR(clk)) {
5019 if (clkspec.args_count == 0)
5020 clk_name = clkspec.np->name;
5021 else
5022 clk_name = NULL;
5023 } else {
5024 clk_name = __clk_get_name(clk);
5025 clk_put(clk);
5026 }
5027 }
5028
5029
5030 of_node_put(clkspec.np);
5031 return clk_name;
5032}
5033EXPORT_SYMBOL_GPL(of_clk_get_parent_name);
5034
5035/**
5036 * of_clk_parent_fill() - Fill @parents with names of @np's parents and return
5037 * number of parents
5038 * @np: Device node pointer associated with clock provider
5039 * @parents: pointer to char array that hold the parents' names
5040 * @size: size of the @parents array
5041 *
5042 * Return: number of parents for the clock node.
5043 */
5044int of_clk_parent_fill(struct device_node *np, const char **parents,
5045 unsigned int size)
5046{
5047 unsigned int i = 0;
5048
5049 while (i < size && (parents[i] = of_clk_get_parent_name(np, i)) != NULL)
5050 i++;
5051
5052 return i;
5053}
5054EXPORT_SYMBOL_GPL(of_clk_parent_fill);
5055
5056struct clock_provider {
5057 void (*clk_init_cb)(struct device_node *);
5058 struct device_node *np;
5059 struct list_head node;
5060};
5061
5062/*
5063 * This function looks for a parent clock. If there is one, then it
5064 * checks that the provider for this parent clock was initialized, in
5065 * this case the parent clock will be ready.
5066 */
5067static int parent_ready(struct device_node *np)
5068{
5069 int i = 0;
5070
5071 while (true) {
5072 struct clk *clk = of_clk_get(np, i);
5073
5074 /* this parent is ready we can check the next one */
5075 if (!IS_ERR(clk)) {
5076 clk_put(clk);
5077 i++;
5078 continue;
5079 }
5080
5081 /* at least one parent is not ready, we exit now */
5082 if (PTR_ERR(clk) == -EPROBE_DEFER)
5083 return 0;
5084
5085 /*
5086 * Here we make assumption that the device tree is
5087 * written correctly. So an error means that there is
5088 * no more parent. As we didn't exit yet, then the
5089 * previous parent are ready. If there is no clock
5090 * parent, no need to wait for them, then we can
5091 * consider their absence as being ready
5092 */
5093 return 1;
5094 }
5095}
5096
5097/**
5098 * of_clk_detect_critical() - set CLK_IS_CRITICAL flag from Device Tree
5099 * @np: Device node pointer associated with clock provider
5100 * @index: clock index
5101 * @flags: pointer to top-level framework flags
5102 *
5103 * Detects if the clock-critical property exists and, if so, sets the
5104 * corresponding CLK_IS_CRITICAL flag.
5105 *
5106 * Do not use this function. It exists only for legacy Device Tree
5107 * bindings, such as the one-clock-per-node style that are outdated.
5108 * Those bindings typically put all clock data into .dts and the Linux
5109 * driver has no clock data, thus making it impossible to set this flag
5110 * correctly from the driver. Only those drivers may call
5111 * of_clk_detect_critical from their setup functions.
5112 *
5113 * Return: error code or zero on success
5114 */
5115int of_clk_detect_critical(struct device_node *np, int index,
5116 unsigned long *flags)
5117{
5118 struct property *prop;
5119 const __be32 *cur;
5120 uint32_t idx;
5121
5122 if (!np || !flags)
5123 return -EINVAL;
5124
5125 of_property_for_each_u32(np, "clock-critical", prop, cur, idx)
5126 if (index == idx)
5127 *flags |= CLK_IS_CRITICAL;
5128
5129 return 0;
5130}
5131
5132/**
5133 * of_clk_init() - Scan and init clock providers from the DT
5134 * @matches: array of compatible values and init functions for providers.
5135 *
5136 * This function scans the device tree for matching clock providers
5137 * and calls their initialization functions. It also does it by trying
5138 * to follow the dependencies.
5139 */
5140void __init of_clk_init(const struct of_device_id *matches)
5141{
5142 const struct of_device_id *match;
5143 struct device_node *np;
5144 struct clock_provider *clk_provider, *next;
5145 bool is_init_done;
5146 bool force = false;
5147 LIST_HEAD(clk_provider_list);
5148
5149 if (!matches)
5150 matches = &__clk_of_table;
5151
5152 /* First prepare the list of the clocks providers */
5153 for_each_matching_node_and_match(np, matches, &match) {
5154 struct clock_provider *parent;
5155
5156 if (!of_device_is_available(np))
5157 continue;
5158
5159 parent = kzalloc(sizeof(*parent), GFP_KERNEL);
5160 if (!parent) {
5161 list_for_each_entry_safe(clk_provider, next,
5162 &clk_provider_list, node) {
5163 list_del(&clk_provider->node);
5164 of_node_put(clk_provider->np);
5165 kfree(clk_provider);
5166 }
5167 of_node_put(np);
5168 return;
5169 }
5170
5171 parent->clk_init_cb = match->data;
5172 parent->np = of_node_get(np);
5173 list_add_tail(&parent->node, &clk_provider_list);
5174 }
5175
5176 while (!list_empty(&clk_provider_list)) {
5177 is_init_done = false;
5178 list_for_each_entry_safe(clk_provider, next,
5179 &clk_provider_list, node) {
5180 if (force || parent_ready(clk_provider->np)) {
5181
5182 /* Don't populate platform devices */
5183 of_node_set_flag(clk_provider->np,
5184 OF_POPULATED);
5185
5186 clk_provider->clk_init_cb(clk_provider->np);
5187 of_clk_set_defaults(clk_provider->np, true);
5188
5189 list_del(&clk_provider->node);
5190 of_node_put(clk_provider->np);
5191 kfree(clk_provider);
5192 is_init_done = true;
5193 }
5194 }
5195
5196 /*
5197 * We didn't manage to initialize any of the
5198 * remaining providers during the last loop, so now we
5199 * initialize all the remaining ones unconditionally
5200 * in case the clock parent was not mandatory
5201 */
5202 if (!is_init_done)
5203 force = true;
5204 }
5205}
5206#endif