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