xref: /openbmc/linux/drivers/clk/bcm/clk-kona-setup.c (revision afb46f79)
1 /*
2  * Copyright (C) 2013 Broadcom Corporation
3  * Copyright 2013 Linaro Limited
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation version 2.
8  *
9  * This program is distributed "as is" WITHOUT ANY WARRANTY of any
10  * kind, whether express or implied; without even the implied warranty
11  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14 
15 #include <linux/io.h>
16 #include <linux/of_address.h>
17 
18 #include "clk-kona.h"
19 
20 /* These are used when a selector or trigger is found to be unneeded */
21 #define selector_clear_exists(sel)	((sel)->width = 0)
22 #define trigger_clear_exists(trig)	FLAG_CLEAR(trig, TRIG, EXISTS)
23 
24 LIST_HEAD(ccu_list);	/* The list of set up CCUs */
25 
26 /* Validity checking */
27 
28 static bool clk_requires_trigger(struct kona_clk *bcm_clk)
29 {
30 	struct peri_clk_data *peri = bcm_clk->peri;
31 	struct bcm_clk_sel *sel;
32 	struct bcm_clk_div *div;
33 
34 	if (bcm_clk->type != bcm_clk_peri)
35 		return false;
36 
37 	sel = &peri->sel;
38 	if (sel->parent_count && selector_exists(sel))
39 		return true;
40 
41 	div = &peri->div;
42 	if (!divider_exists(div))
43 		return false;
44 
45 	/* Fixed dividers don't need triggers */
46 	if (!divider_is_fixed(div))
47 		return true;
48 
49 	div = &peri->pre_div;
50 
51 	return divider_exists(div) && !divider_is_fixed(div);
52 }
53 
54 static bool peri_clk_data_offsets_valid(struct kona_clk *bcm_clk)
55 {
56 	struct peri_clk_data *peri;
57 	struct bcm_clk_gate *gate;
58 	struct bcm_clk_div *div;
59 	struct bcm_clk_sel *sel;
60 	struct bcm_clk_trig *trig;
61 	const char *name;
62 	u32 range;
63 	u32 limit;
64 
65 	BUG_ON(bcm_clk->type != bcm_clk_peri);
66 	peri = bcm_clk->peri;
67 	name = bcm_clk->name;
68 	range = bcm_clk->ccu->range;
69 
70 	limit = range - sizeof(u32);
71 	limit = round_down(limit, sizeof(u32));
72 
73 	gate = &peri->gate;
74 	if (gate_exists(gate)) {
75 		if (gate->offset > limit) {
76 			pr_err("%s: bad gate offset for %s (%u > %u)\n",
77 				__func__, name, gate->offset, limit);
78 			return false;
79 		}
80 	}
81 
82 	div = &peri->div;
83 	if (divider_exists(div)) {
84 		if (div->offset > limit) {
85 			pr_err("%s: bad divider offset for %s (%u > %u)\n",
86 				__func__, name, div->offset, limit);
87 			return false;
88 		}
89 	}
90 
91 	div = &peri->pre_div;
92 	if (divider_exists(div)) {
93 		if (div->offset > limit) {
94 			pr_err("%s: bad pre-divider offset for %s "
95 					"(%u > %u)\n",
96 				__func__, name, div->offset, limit);
97 			return false;
98 		}
99 	}
100 
101 	sel = &peri->sel;
102 	if (selector_exists(sel)) {
103 		if (sel->offset > limit) {
104 			pr_err("%s: bad selector offset for %s (%u > %u)\n",
105 				__func__, name, sel->offset, limit);
106 			return false;
107 		}
108 	}
109 
110 	trig = &peri->trig;
111 	if (trigger_exists(trig)) {
112 		if (trig->offset > limit) {
113 			pr_err("%s: bad trigger offset for %s (%u > %u)\n",
114 				__func__, name, trig->offset, limit);
115 			return false;
116 		}
117 	}
118 
119 	trig = &peri->pre_trig;
120 	if (trigger_exists(trig)) {
121 		if (trig->offset > limit) {
122 			pr_err("%s: bad pre-trigger offset for %s (%u > %u)\n",
123 				__func__, name, trig->offset, limit);
124 			return false;
125 		}
126 	}
127 
128 	return true;
129 }
130 
131 /* A bit position must be less than the number of bits in a 32-bit register. */
132 static bool bit_posn_valid(u32 bit_posn, const char *field_name,
133 			const char *clock_name)
134 {
135 	u32 limit = BITS_PER_BYTE * sizeof(u32) - 1;
136 
137 	if (bit_posn > limit) {
138 		pr_err("%s: bad %s bit for %s (%u > %u)\n", __func__,
139 			field_name, clock_name, bit_posn, limit);
140 		return false;
141 	}
142 	return true;
143 }
144 
145 /*
146  * A bitfield must be at least 1 bit wide.  Both the low-order and
147  * high-order bits must lie within a 32-bit register.  We require
148  * fields to be less than 32 bits wide, mainly because we use
149  * shifting to produce field masks, and shifting a full word width
150  * is not well-defined by the C standard.
151  */
152 static bool bitfield_valid(u32 shift, u32 width, const char *field_name,
153 			const char *clock_name)
154 {
155 	u32 limit = BITS_PER_BYTE * sizeof(u32);
156 
157 	if (!width) {
158 		pr_err("%s: bad %s field width 0 for %s\n", __func__,
159 			field_name, clock_name);
160 		return false;
161 	}
162 	if (shift + width > limit) {
163 		pr_err("%s: bad %s for %s (%u + %u > %u)\n", __func__,
164 			field_name, clock_name, shift, width, limit);
165 		return false;
166 	}
167 	return true;
168 }
169 
170 /*
171  * All gates, if defined, have a status bit, and for hardware-only
172  * gates, that's it.  Gates that can be software controlled also
173  * have an enable bit.  And a gate that can be hardware or software
174  * controlled will have a hardware/software select bit.
175  */
176 static bool gate_valid(struct bcm_clk_gate *gate, const char *field_name,
177 			const char *clock_name)
178 {
179 	if (!bit_posn_valid(gate->status_bit, "gate status", clock_name))
180 		return false;
181 
182 	if (gate_is_sw_controllable(gate)) {
183 		if (!bit_posn_valid(gate->en_bit, "gate enable", clock_name))
184 			return false;
185 
186 		if (gate_is_hw_controllable(gate)) {
187 			if (!bit_posn_valid(gate->hw_sw_sel_bit,
188 						"gate hw/sw select",
189 						clock_name))
190 				return false;
191 		}
192 	} else {
193 		BUG_ON(!gate_is_hw_controllable(gate));
194 	}
195 
196 	return true;
197 }
198 
199 /*
200  * A selector bitfield must be valid.  Its parent_sel array must
201  * also be reasonable for the field.
202  */
203 static bool sel_valid(struct bcm_clk_sel *sel, const char *field_name,
204 			const char *clock_name)
205 {
206 	if (!bitfield_valid(sel->shift, sel->width, field_name, clock_name))
207 		return false;
208 
209 	if (sel->parent_count) {
210 		u32 max_sel;
211 		u32 limit;
212 
213 		/*
214 		 * Make sure the selector field can hold all the
215 		 * selector values we expect to be able to use.  A
216 		 * clock only needs to have a selector defined if it
217 		 * has more than one parent.  And in that case the
218 		 * highest selector value will be in the last entry
219 		 * in the array.
220 		 */
221 		max_sel = sel->parent_sel[sel->parent_count - 1];
222 		limit = (1 << sel->width) - 1;
223 		if (max_sel > limit) {
224 			pr_err("%s: bad selector for %s "
225 					"(%u needs > %u bits)\n",
226 				__func__, clock_name, max_sel,
227 				sel->width);
228 			return false;
229 		}
230 	} else {
231 		pr_warn("%s: ignoring selector for %s (no parents)\n",
232 			__func__, clock_name);
233 		selector_clear_exists(sel);
234 		kfree(sel->parent_sel);
235 		sel->parent_sel = NULL;
236 	}
237 
238 	return true;
239 }
240 
241 /*
242  * A fixed divider just needs to be non-zero.  A variable divider
243  * has to have a valid divider bitfield, and if it has a fraction,
244  * the width of the fraction must not be no more than the width of
245  * the divider as a whole.
246  */
247 static bool div_valid(struct bcm_clk_div *div, const char *field_name,
248 			const char *clock_name)
249 {
250 	if (divider_is_fixed(div)) {
251 		/* Any fixed divider value but 0 is OK */
252 		if (div->fixed == 0) {
253 			pr_err("%s: bad %s fixed value 0 for %s\n", __func__,
254 				field_name, clock_name);
255 			return false;
256 		}
257 		return true;
258 	}
259 	if (!bitfield_valid(div->shift, div->width, field_name, clock_name))
260 		return false;
261 
262 	if (divider_has_fraction(div))
263 		if (div->frac_width > div->width) {
264 			pr_warn("%s: bad %s fraction width for %s (%u > %u)\n",
265 				__func__, field_name, clock_name,
266 				div->frac_width, div->width);
267 			return false;
268 		}
269 
270 	return true;
271 }
272 
273 /*
274  * If a clock has two dividers, the combined number of fractional
275  * bits must be representable in a 32-bit unsigned value.  This
276  * is because we scale up a dividend using both dividers before
277  * dividing to improve accuracy, and we need to avoid overflow.
278  */
279 static bool kona_dividers_valid(struct kona_clk *bcm_clk)
280 {
281 	struct peri_clk_data *peri = bcm_clk->peri;
282 	struct bcm_clk_div *div;
283 	struct bcm_clk_div *pre_div;
284 	u32 limit;
285 
286 	BUG_ON(bcm_clk->type != bcm_clk_peri);
287 
288 	if (!divider_exists(&peri->div) || !divider_exists(&peri->pre_div))
289 		return true;
290 
291 	div = &peri->div;
292 	pre_div = &peri->pre_div;
293 	if (divider_is_fixed(div) || divider_is_fixed(pre_div))
294 		return true;
295 
296 	limit = BITS_PER_BYTE * sizeof(u32);
297 
298 	return div->frac_width + pre_div->frac_width <= limit;
299 }
300 
301 
302 /* A trigger just needs to represent a valid bit position */
303 static bool trig_valid(struct bcm_clk_trig *trig, const char *field_name,
304 			const char *clock_name)
305 {
306 	return bit_posn_valid(trig->bit, field_name, clock_name);
307 }
308 
309 /* Determine whether the set of peripheral clock registers are valid. */
310 static bool
311 peri_clk_data_valid(struct kona_clk *bcm_clk)
312 {
313 	struct peri_clk_data *peri;
314 	struct bcm_clk_gate *gate;
315 	struct bcm_clk_sel *sel;
316 	struct bcm_clk_div *div;
317 	struct bcm_clk_div *pre_div;
318 	struct bcm_clk_trig *trig;
319 	const char *name;
320 
321 	BUG_ON(bcm_clk->type != bcm_clk_peri);
322 
323 	/*
324 	 * First validate register offsets.  This is the only place
325 	 * where we need something from the ccu, so we do these
326 	 * together.
327 	 */
328 	if (!peri_clk_data_offsets_valid(bcm_clk))
329 		return false;
330 
331 	peri = bcm_clk->peri;
332 	name = bcm_clk->name;
333 	gate = &peri->gate;
334 	if (gate_exists(gate) && !gate_valid(gate, "gate", name))
335 		return false;
336 
337 	sel = &peri->sel;
338 	if (selector_exists(sel)) {
339 		if (!sel_valid(sel, "selector", name))
340 			return false;
341 
342 	} else if (sel->parent_count > 1) {
343 		pr_err("%s: multiple parents but no selector for %s\n",
344 			__func__, name);
345 
346 		return false;
347 	}
348 
349 	div = &peri->div;
350 	pre_div = &peri->pre_div;
351 	if (divider_exists(div)) {
352 		if (!div_valid(div, "divider", name))
353 			return false;
354 
355 		if (divider_exists(pre_div))
356 			if (!div_valid(pre_div, "pre-divider", name))
357 				return false;
358 	} else if (divider_exists(pre_div)) {
359 		pr_err("%s: pre-divider but no divider for %s\n", __func__,
360 			name);
361 		return false;
362 	}
363 
364 	trig = &peri->trig;
365 	if (trigger_exists(trig)) {
366 		if (!trig_valid(trig, "trigger", name))
367 			return false;
368 
369 		if (trigger_exists(&peri->pre_trig)) {
370 			if (!trig_valid(trig, "pre-trigger", name)) {
371 				return false;
372 			}
373 		}
374 		if (!clk_requires_trigger(bcm_clk)) {
375 			pr_warn("%s: ignoring trigger for %s (not needed)\n",
376 				__func__, name);
377 			trigger_clear_exists(trig);
378 		}
379 	} else if (trigger_exists(&peri->pre_trig)) {
380 		pr_err("%s: pre-trigger but no trigger for %s\n", __func__,
381 			name);
382 		return false;
383 	} else if (clk_requires_trigger(bcm_clk)) {
384 		pr_err("%s: required trigger missing for %s\n", __func__,
385 			name);
386 		return false;
387 	}
388 
389 	return kona_dividers_valid(bcm_clk);
390 }
391 
392 static bool kona_clk_valid(struct kona_clk *bcm_clk)
393 {
394 	switch (bcm_clk->type) {
395 	case bcm_clk_peri:
396 		if (!peri_clk_data_valid(bcm_clk))
397 			return false;
398 		break;
399 	default:
400 		pr_err("%s: unrecognized clock type (%d)\n", __func__,
401 			(int)bcm_clk->type);
402 		return false;
403 	}
404 	return true;
405 }
406 
407 /*
408  * Scan an array of parent clock names to determine whether there
409  * are any entries containing BAD_CLK_NAME.  Such entries are
410  * placeholders for non-supported clocks.  Keep track of the
411  * position of each clock name in the original array.
412  *
413  * Allocates an array of pointers to to hold the names of all
414  * non-null entries in the original array, and returns a pointer to
415  * that array in *names.  This will be used for registering the
416  * clock with the common clock code.  On successful return,
417  * *count indicates how many entries are in that names array.
418  *
419  * If there is more than one entry in the resulting names array,
420  * another array is allocated to record the parent selector value
421  * for each (defined) parent clock.  This is the value that
422  * represents this parent clock in the clock's source selector
423  * register.  The position of the clock in the original parent array
424  * defines that selector value.  The number of entries in this array
425  * is the same as the number of entries in the parent names array.
426  *
427  * The array of selector values is returned.  If the clock has no
428  * parents, no selector is required and a null pointer is returned.
429  *
430  * Returns a null pointer if the clock names array supplied was
431  * null.  (This is not an error.)
432  *
433  * Returns a pointer-coded error if an error occurs.
434  */
435 static u32 *parent_process(const char *clocks[],
436 			u32 *count, const char ***names)
437 {
438 	static const char **parent_names;
439 	static u32 *parent_sel;
440 	const char **clock;
441 	u32 parent_count;
442 	u32 bad_count = 0;
443 	u32 orig_count;
444 	u32 i;
445 	u32 j;
446 
447 	*count = 0;	/* In case of early return */
448 	*names = NULL;
449 	if (!clocks)
450 		return NULL;
451 
452 	/*
453 	 * Count the number of names in the null-terminated array,
454 	 * and find out how many of those are actually clock names.
455 	 */
456 	for (clock = clocks; *clock; clock++)
457 		if (*clock == BAD_CLK_NAME)
458 			bad_count++;
459 	orig_count = (u32)(clock - clocks);
460 	parent_count = orig_count - bad_count;
461 
462 	/* If all clocks are unsupported, we treat it as no clock */
463 	if (!parent_count)
464 		return NULL;
465 
466 	/* Avoid exceeding our parent clock limit */
467 	if (parent_count > PARENT_COUNT_MAX) {
468 		pr_err("%s: too many parents (%u > %u)\n", __func__,
469 			parent_count, PARENT_COUNT_MAX);
470 		return ERR_PTR(-EINVAL);
471 	}
472 
473 	/*
474 	 * There is one parent name for each defined parent clock.
475 	 * We also maintain an array containing the selector value
476 	 * for each defined clock.  If there's only one clock, the
477 	 * selector is not required, but we allocate space for the
478 	 * array anyway to keep things simple.
479 	 */
480 	parent_names = kmalloc(parent_count * sizeof(parent_names), GFP_KERNEL);
481 	if (!parent_names) {
482 		pr_err("%s: error allocating %u parent names\n", __func__,
483 				parent_count);
484 		return ERR_PTR(-ENOMEM);
485 	}
486 
487 	/* There is at least one parent, so allocate a selector array */
488 
489 	parent_sel = kmalloc(parent_count * sizeof(*parent_sel), GFP_KERNEL);
490 	if (!parent_sel) {
491 		pr_err("%s: error allocating %u parent selectors\n", __func__,
492 				parent_count);
493 		kfree(parent_names);
494 
495 		return ERR_PTR(-ENOMEM);
496 	}
497 
498 	/* Now fill in the parent names and selector arrays */
499 	for (i = 0, j = 0; i < orig_count; i++) {
500 		if (clocks[i] != BAD_CLK_NAME) {
501 			parent_names[j] = clocks[i];
502 			parent_sel[j] = i;
503 			j++;
504 		}
505 	}
506 	*names = parent_names;
507 	*count = parent_count;
508 
509 	return parent_sel;
510 }
511 
512 static int
513 clk_sel_setup(const char **clocks, struct bcm_clk_sel *sel,
514 		struct clk_init_data *init_data)
515 {
516 	const char **parent_names = NULL;
517 	u32 parent_count = 0;
518 	u32 *parent_sel;
519 
520 	/*
521 	 * If a peripheral clock has multiple parents, the value
522 	 * used by the hardware to select that parent is represented
523 	 * by the parent clock's position in the "clocks" list.  Some
524 	 * values don't have defined or supported clocks; these will
525 	 * have BAD_CLK_NAME entries in the parents[] array.  The
526 	 * list is terminated by a NULL entry.
527 	 *
528 	 * We need to supply (only) the names of defined parent
529 	 * clocks when registering a clock though, so we use an
530 	 * array of parent selector values to map between the
531 	 * indexes the common clock code uses and the selector
532 	 * values we need.
533 	 */
534 	parent_sel = parent_process(clocks, &parent_count, &parent_names);
535 	if (IS_ERR(parent_sel)) {
536 		int ret = PTR_ERR(parent_sel);
537 
538 		pr_err("%s: error processing parent clocks for %s (%d)\n",
539 			__func__, init_data->name, ret);
540 
541 		return ret;
542 	}
543 
544 	init_data->parent_names = parent_names;
545 	init_data->num_parents = parent_count;
546 
547 	sel->parent_count = parent_count;
548 	sel->parent_sel = parent_sel;
549 
550 	return 0;
551 }
552 
553 static void clk_sel_teardown(struct bcm_clk_sel *sel,
554 		struct clk_init_data *init_data)
555 {
556 	kfree(sel->parent_sel);
557 	sel->parent_sel = NULL;
558 	sel->parent_count = 0;
559 
560 	init_data->num_parents = 0;
561 	kfree(init_data->parent_names);
562 	init_data->parent_names = NULL;
563 }
564 
565 static void peri_clk_teardown(struct peri_clk_data *data,
566 				struct clk_init_data *init_data)
567 {
568 	clk_sel_teardown(&data->sel, init_data);
569 	init_data->ops = NULL;
570 }
571 
572 /*
573  * Caller is responsible for freeing the parent_names[] and
574  * parent_sel[] arrays in the peripheral clock's "data" structure
575  * that can be assigned if the clock has one or more parent clocks
576  * associated with it.
577  */
578 static int peri_clk_setup(struct ccu_data *ccu, struct peri_clk_data *data,
579 			struct clk_init_data *init_data)
580 {
581 	init_data->ops = &kona_peri_clk_ops;
582 	init_data->flags = CLK_IGNORE_UNUSED;
583 
584 	return clk_sel_setup(data->clocks, &data->sel, init_data);
585 }
586 
587 static void bcm_clk_teardown(struct kona_clk *bcm_clk)
588 {
589 	switch (bcm_clk->type) {
590 	case bcm_clk_peri:
591 		peri_clk_teardown(bcm_clk->data, &bcm_clk->init_data);
592 		break;
593 	default:
594 		break;
595 	}
596 	bcm_clk->data = NULL;
597 	bcm_clk->type = bcm_clk_none;
598 }
599 
600 static void kona_clk_teardown(struct clk *clk)
601 {
602 	struct clk_hw *hw;
603 	struct kona_clk *bcm_clk;
604 
605 	if (!clk)
606 		return;
607 
608 	hw = __clk_get_hw(clk);
609 	if (!hw) {
610 		pr_err("%s: clk %p has null hw pointer\n", __func__, clk);
611 		return;
612 	}
613 	clk_unregister(clk);
614 
615 	bcm_clk = to_kona_clk(hw);
616 	bcm_clk_teardown(bcm_clk);
617 }
618 
619 struct clk *kona_clk_setup(struct ccu_data *ccu, const char *name,
620 			enum bcm_clk_type type, void *data)
621 {
622 	struct kona_clk *bcm_clk;
623 	struct clk_init_data *init_data;
624 	struct clk *clk = NULL;
625 
626 	bcm_clk = kzalloc(sizeof(*bcm_clk), GFP_KERNEL);
627 	if (!bcm_clk) {
628 		pr_err("%s: failed to allocate bcm_clk for %s\n", __func__,
629 			name);
630 		return NULL;
631 	}
632 	bcm_clk->ccu = ccu;
633 	bcm_clk->name = name;
634 
635 	init_data = &bcm_clk->init_data;
636 	init_data->name = name;
637 	switch (type) {
638 	case bcm_clk_peri:
639 		if (peri_clk_setup(ccu, data, init_data))
640 			goto out_free;
641 		break;
642 	default:
643 		data = NULL;
644 		break;
645 	}
646 	bcm_clk->type = type;
647 	bcm_clk->data = data;
648 
649 	/* Make sure everything makes sense before we set it up */
650 	if (!kona_clk_valid(bcm_clk)) {
651 		pr_err("%s: clock data invalid for %s\n", __func__, name);
652 		goto out_teardown;
653 	}
654 
655 	bcm_clk->hw.init = init_data;
656 	clk = clk_register(NULL, &bcm_clk->hw);
657 	if (IS_ERR(clk)) {
658 		pr_err("%s: error registering clock %s (%ld)\n", __func__,
659 				name, PTR_ERR(clk));
660 		goto out_teardown;
661 	}
662 	BUG_ON(!clk);
663 
664 	return clk;
665 out_teardown:
666 	bcm_clk_teardown(bcm_clk);
667 out_free:
668 	kfree(bcm_clk);
669 
670 	return NULL;
671 }
672 
673 static void ccu_clks_teardown(struct ccu_data *ccu)
674 {
675 	u32 i;
676 
677 	for (i = 0; i < ccu->data.clk_num; i++)
678 		kona_clk_teardown(ccu->data.clks[i]);
679 	kfree(ccu->data.clks);
680 }
681 
682 static void kona_ccu_teardown(struct ccu_data *ccu)
683 {
684 	if (!ccu)
685 		return;
686 
687 	if (!ccu->base)
688 		goto done;
689 
690 	of_clk_del_provider(ccu->node);	/* safe if never added */
691 	ccu_clks_teardown(ccu);
692 	list_del(&ccu->links);
693 	of_node_put(ccu->node);
694 	iounmap(ccu->base);
695 done:
696 	kfree(ccu->name);
697 	kfree(ccu);
698 }
699 
700 /*
701  * Set up a CCU.  Call the provided ccu_clks_setup callback to
702  * initialize the array of clocks provided by the CCU.
703  */
704 void __init kona_dt_ccu_setup(struct device_node *node,
705 			int (*ccu_clks_setup)(struct ccu_data *))
706 {
707 	struct ccu_data *ccu;
708 	struct resource res = { 0 };
709 	resource_size_t range;
710 	int ret;
711 
712 	ccu = kzalloc(sizeof(*ccu), GFP_KERNEL);
713 	if (ccu)
714 		ccu->name = kstrdup(node->name, GFP_KERNEL);
715 	if (!ccu || !ccu->name) {
716 		pr_err("%s: unable to allocate CCU struct for %s\n",
717 			__func__, node->name);
718 		kfree(ccu);
719 
720 		return;
721 	}
722 
723 	ret = of_address_to_resource(node, 0, &res);
724 	if (ret) {
725 		pr_err("%s: no valid CCU registers found for %s\n", __func__,
726 			node->name);
727 		goto out_err;
728 	}
729 
730 	range = resource_size(&res);
731 	if (range > (resource_size_t)U32_MAX) {
732 		pr_err("%s: address range too large for %s\n", __func__,
733 			node->name);
734 		goto out_err;
735 	}
736 
737 	ccu->range = (u32)range;
738 	ccu->base = ioremap(res.start, ccu->range);
739 	if (!ccu->base) {
740 		pr_err("%s: unable to map CCU registers for %s\n", __func__,
741 			node->name);
742 		goto out_err;
743 	}
744 
745 	spin_lock_init(&ccu->lock);
746 	INIT_LIST_HEAD(&ccu->links);
747 	ccu->node = of_node_get(node);
748 
749 	list_add_tail(&ccu->links, &ccu_list);
750 
751 	/* Set up clocks array (in ccu->data) */
752 	if (ccu_clks_setup(ccu))
753 		goto out_err;
754 
755 	ret = of_clk_add_provider(node, of_clk_src_onecell_get, &ccu->data);
756 	if (ret) {
757 		pr_err("%s: error adding ccu %s as provider (%d)\n", __func__,
758 				node->name, ret);
759 		goto out_err;
760 	}
761 
762 	if (!kona_ccu_init(ccu))
763 		pr_err("Broadcom %s initialization had errors\n", node->name);
764 
765 	return;
766 out_err:
767 	kona_ccu_teardown(ccu);
768 	pr_err("Broadcom %s setup aborted\n", node->name);
769 }
770