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