xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8660.c (revision db181ce0)
1 /*
2  * Copyright (c) 2013, The Linux Foundation. All rights reserved.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13 
14 #include <linux/kernel.h>
15 #include <linux/bitops.h>
16 #include <linux/err.h>
17 #include <linux/platform_device.h>
18 #include <linux/module.h>
19 #include <linux/of.h>
20 #include <linux/of_device.h>
21 #include <linux/clk-provider.h>
22 #include <linux/regmap.h>
23 #include <linux/reset-controller.h>
24 
25 #include <dt-bindings/clock/qcom,gcc-msm8660.h>
26 #include <dt-bindings/reset/qcom,gcc-msm8660.h>
27 
28 #include "common.h"
29 #include "clk-regmap.h"
30 #include "clk-pll.h"
31 #include "clk-rcg.h"
32 #include "clk-branch.h"
33 #include "reset.h"
34 
35 static struct clk_pll pll8 = {
36 	.l_reg = 0x3144,
37 	.m_reg = 0x3148,
38 	.n_reg = 0x314c,
39 	.config_reg = 0x3154,
40 	.mode_reg = 0x3140,
41 	.status_reg = 0x3158,
42 	.status_bit = 16,
43 	.clkr.hw.init = &(struct clk_init_data){
44 		.name = "pll8",
45 		.parent_names = (const char *[]){ "pxo" },
46 		.num_parents = 1,
47 		.ops = &clk_pll_ops,
48 	},
49 };
50 
51 static struct clk_regmap pll8_vote = {
52 	.enable_reg = 0x34c0,
53 	.enable_mask = BIT(8),
54 	.hw.init = &(struct clk_init_data){
55 		.name = "pll8_vote",
56 		.parent_names = (const char *[]){ "pll8" },
57 		.num_parents = 1,
58 		.ops = &clk_pll_vote_ops,
59 	},
60 };
61 
62 #define P_PXO	0
63 #define P_PLL8	1
64 #define P_CXO	2
65 
66 static const u8 gcc_pxo_pll8_map[] = {
67 	[P_PXO]		= 0,
68 	[P_PLL8]	= 3,
69 };
70 
71 static const char *gcc_pxo_pll8[] = {
72 	"pxo",
73 	"pll8_vote",
74 };
75 
76 static const u8 gcc_pxo_pll8_cxo_map[] = {
77 	[P_PXO]		= 0,
78 	[P_PLL8]	= 3,
79 	[P_CXO]		= 5,
80 };
81 
82 static const char *gcc_pxo_pll8_cxo[] = {
83 	"pxo",
84 	"pll8_vote",
85 	"cxo",
86 };
87 
88 static struct freq_tbl clk_tbl_gsbi_uart[] = {
89 	{  1843200, P_PLL8, 2,  6, 625 },
90 	{  3686400, P_PLL8, 2, 12, 625 },
91 	{  7372800, P_PLL8, 2, 24, 625 },
92 	{ 14745600, P_PLL8, 2, 48, 625 },
93 	{ 16000000, P_PLL8, 4,  1,   6 },
94 	{ 24000000, P_PLL8, 4,  1,   4 },
95 	{ 32000000, P_PLL8, 4,  1,   3 },
96 	{ 40000000, P_PLL8, 1,  5,  48 },
97 	{ 46400000, P_PLL8, 1, 29, 240 },
98 	{ 48000000, P_PLL8, 4,  1,   2 },
99 	{ 51200000, P_PLL8, 1,  2,  15 },
100 	{ 56000000, P_PLL8, 1,  7,  48 },
101 	{ 58982400, P_PLL8, 1, 96, 625 },
102 	{ 64000000, P_PLL8, 2,  1,   3 },
103 	{ }
104 };
105 
106 static struct clk_rcg gsbi1_uart_src = {
107 	.ns_reg = 0x29d4,
108 	.md_reg = 0x29d0,
109 	.mn = {
110 		.mnctr_en_bit = 8,
111 		.mnctr_reset_bit = 7,
112 		.mnctr_mode_shift = 5,
113 		.n_val_shift = 16,
114 		.m_val_shift = 16,
115 		.width = 16,
116 	},
117 	.p = {
118 		.pre_div_shift = 3,
119 		.pre_div_width = 2,
120 	},
121 	.s = {
122 		.src_sel_shift = 0,
123 		.parent_map = gcc_pxo_pll8_map,
124 	},
125 	.freq_tbl = clk_tbl_gsbi_uart,
126 	.clkr = {
127 		.enable_reg = 0x29d4,
128 		.enable_mask = BIT(11),
129 		.hw.init = &(struct clk_init_data){
130 			.name = "gsbi1_uart_src",
131 			.parent_names = gcc_pxo_pll8,
132 			.num_parents = 2,
133 			.ops = &clk_rcg_ops,
134 			.flags = CLK_SET_PARENT_GATE,
135 		},
136 	},
137 };
138 
139 static struct clk_branch gsbi1_uart_clk = {
140 	.halt_reg = 0x2fcc,
141 	.halt_bit = 10,
142 	.clkr = {
143 		.enable_reg = 0x29d4,
144 		.enable_mask = BIT(9),
145 		.hw.init = &(struct clk_init_data){
146 			.name = "gsbi1_uart_clk",
147 			.parent_names = (const char *[]){
148 				"gsbi1_uart_src",
149 			},
150 			.num_parents = 1,
151 			.ops = &clk_branch_ops,
152 			.flags = CLK_SET_RATE_PARENT,
153 		},
154 	},
155 };
156 
157 static struct clk_rcg gsbi2_uart_src = {
158 	.ns_reg = 0x29f4,
159 	.md_reg = 0x29f0,
160 	.mn = {
161 		.mnctr_en_bit = 8,
162 		.mnctr_reset_bit = 7,
163 		.mnctr_mode_shift = 5,
164 		.n_val_shift = 16,
165 		.m_val_shift = 16,
166 		.width = 16,
167 	},
168 	.p = {
169 		.pre_div_shift = 3,
170 		.pre_div_width = 2,
171 	},
172 	.s = {
173 		.src_sel_shift = 0,
174 		.parent_map = gcc_pxo_pll8_map,
175 	},
176 	.freq_tbl = clk_tbl_gsbi_uart,
177 	.clkr = {
178 		.enable_reg = 0x29f4,
179 		.enable_mask = BIT(11),
180 		.hw.init = &(struct clk_init_data){
181 			.name = "gsbi2_uart_src",
182 			.parent_names = gcc_pxo_pll8,
183 			.num_parents = 2,
184 			.ops = &clk_rcg_ops,
185 			.flags = CLK_SET_PARENT_GATE,
186 		},
187 	},
188 };
189 
190 static struct clk_branch gsbi2_uart_clk = {
191 	.halt_reg = 0x2fcc,
192 	.halt_bit = 6,
193 	.clkr = {
194 		.enable_reg = 0x29f4,
195 		.enable_mask = BIT(9),
196 		.hw.init = &(struct clk_init_data){
197 			.name = "gsbi2_uart_clk",
198 			.parent_names = (const char *[]){
199 				"gsbi2_uart_src",
200 			},
201 			.num_parents = 1,
202 			.ops = &clk_branch_ops,
203 			.flags = CLK_SET_RATE_PARENT,
204 		},
205 	},
206 };
207 
208 static struct clk_rcg gsbi3_uart_src = {
209 	.ns_reg = 0x2a14,
210 	.md_reg = 0x2a10,
211 	.mn = {
212 		.mnctr_en_bit = 8,
213 		.mnctr_reset_bit = 7,
214 		.mnctr_mode_shift = 5,
215 		.n_val_shift = 16,
216 		.m_val_shift = 16,
217 		.width = 16,
218 	},
219 	.p = {
220 		.pre_div_shift = 3,
221 		.pre_div_width = 2,
222 	},
223 	.s = {
224 		.src_sel_shift = 0,
225 		.parent_map = gcc_pxo_pll8_map,
226 	},
227 	.freq_tbl = clk_tbl_gsbi_uart,
228 	.clkr = {
229 		.enable_reg = 0x2a14,
230 		.enable_mask = BIT(11),
231 		.hw.init = &(struct clk_init_data){
232 			.name = "gsbi3_uart_src",
233 			.parent_names = gcc_pxo_pll8,
234 			.num_parents = 2,
235 			.ops = &clk_rcg_ops,
236 			.flags = CLK_SET_PARENT_GATE,
237 		},
238 	},
239 };
240 
241 static struct clk_branch gsbi3_uart_clk = {
242 	.halt_reg = 0x2fcc,
243 	.halt_bit = 2,
244 	.clkr = {
245 		.enable_reg = 0x2a14,
246 		.enable_mask = BIT(9),
247 		.hw.init = &(struct clk_init_data){
248 			.name = "gsbi3_uart_clk",
249 			.parent_names = (const char *[]){
250 				"gsbi3_uart_src",
251 			},
252 			.num_parents = 1,
253 			.ops = &clk_branch_ops,
254 			.flags = CLK_SET_RATE_PARENT,
255 		},
256 	},
257 };
258 
259 static struct clk_rcg gsbi4_uart_src = {
260 	.ns_reg = 0x2a34,
261 	.md_reg = 0x2a30,
262 	.mn = {
263 		.mnctr_en_bit = 8,
264 		.mnctr_reset_bit = 7,
265 		.mnctr_mode_shift = 5,
266 		.n_val_shift = 16,
267 		.m_val_shift = 16,
268 		.width = 16,
269 	},
270 	.p = {
271 		.pre_div_shift = 3,
272 		.pre_div_width = 2,
273 	},
274 	.s = {
275 		.src_sel_shift = 0,
276 		.parent_map = gcc_pxo_pll8_map,
277 	},
278 	.freq_tbl = clk_tbl_gsbi_uart,
279 	.clkr = {
280 		.enable_reg = 0x2a34,
281 		.enable_mask = BIT(11),
282 		.hw.init = &(struct clk_init_data){
283 			.name = "gsbi4_uart_src",
284 			.parent_names = gcc_pxo_pll8,
285 			.num_parents = 2,
286 			.ops = &clk_rcg_ops,
287 			.flags = CLK_SET_PARENT_GATE,
288 		},
289 	},
290 };
291 
292 static struct clk_branch gsbi4_uart_clk = {
293 	.halt_reg = 0x2fd0,
294 	.halt_bit = 26,
295 	.clkr = {
296 		.enable_reg = 0x2a34,
297 		.enable_mask = BIT(9),
298 		.hw.init = &(struct clk_init_data){
299 			.name = "gsbi4_uart_clk",
300 			.parent_names = (const char *[]){
301 				"gsbi4_uart_src",
302 			},
303 			.num_parents = 1,
304 			.ops = &clk_branch_ops,
305 			.flags = CLK_SET_RATE_PARENT,
306 		},
307 	},
308 };
309 
310 static struct clk_rcg gsbi5_uart_src = {
311 	.ns_reg = 0x2a54,
312 	.md_reg = 0x2a50,
313 	.mn = {
314 		.mnctr_en_bit = 8,
315 		.mnctr_reset_bit = 7,
316 		.mnctr_mode_shift = 5,
317 		.n_val_shift = 16,
318 		.m_val_shift = 16,
319 		.width = 16,
320 	},
321 	.p = {
322 		.pre_div_shift = 3,
323 		.pre_div_width = 2,
324 	},
325 	.s = {
326 		.src_sel_shift = 0,
327 		.parent_map = gcc_pxo_pll8_map,
328 	},
329 	.freq_tbl = clk_tbl_gsbi_uart,
330 	.clkr = {
331 		.enable_reg = 0x2a54,
332 		.enable_mask = BIT(11),
333 		.hw.init = &(struct clk_init_data){
334 			.name = "gsbi5_uart_src",
335 			.parent_names = gcc_pxo_pll8,
336 			.num_parents = 2,
337 			.ops = &clk_rcg_ops,
338 			.flags = CLK_SET_PARENT_GATE,
339 		},
340 	},
341 };
342 
343 static struct clk_branch gsbi5_uart_clk = {
344 	.halt_reg = 0x2fd0,
345 	.halt_bit = 22,
346 	.clkr = {
347 		.enable_reg = 0x2a54,
348 		.enable_mask = BIT(9),
349 		.hw.init = &(struct clk_init_data){
350 			.name = "gsbi5_uart_clk",
351 			.parent_names = (const char *[]){
352 				"gsbi5_uart_src",
353 			},
354 			.num_parents = 1,
355 			.ops = &clk_branch_ops,
356 			.flags = CLK_SET_RATE_PARENT,
357 		},
358 	},
359 };
360 
361 static struct clk_rcg gsbi6_uart_src = {
362 	.ns_reg = 0x2a74,
363 	.md_reg = 0x2a70,
364 	.mn = {
365 		.mnctr_en_bit = 8,
366 		.mnctr_reset_bit = 7,
367 		.mnctr_mode_shift = 5,
368 		.n_val_shift = 16,
369 		.m_val_shift = 16,
370 		.width = 16,
371 	},
372 	.p = {
373 		.pre_div_shift = 3,
374 		.pre_div_width = 2,
375 	},
376 	.s = {
377 		.src_sel_shift = 0,
378 		.parent_map = gcc_pxo_pll8_map,
379 	},
380 	.freq_tbl = clk_tbl_gsbi_uart,
381 	.clkr = {
382 		.enable_reg = 0x2a74,
383 		.enable_mask = BIT(11),
384 		.hw.init = &(struct clk_init_data){
385 			.name = "gsbi6_uart_src",
386 			.parent_names = gcc_pxo_pll8,
387 			.num_parents = 2,
388 			.ops = &clk_rcg_ops,
389 			.flags = CLK_SET_PARENT_GATE,
390 		},
391 	},
392 };
393 
394 static struct clk_branch gsbi6_uart_clk = {
395 	.halt_reg = 0x2fd0,
396 	.halt_bit = 18,
397 	.clkr = {
398 		.enable_reg = 0x2a74,
399 		.enable_mask = BIT(9),
400 		.hw.init = &(struct clk_init_data){
401 			.name = "gsbi6_uart_clk",
402 			.parent_names = (const char *[]){
403 				"gsbi6_uart_src",
404 			},
405 			.num_parents = 1,
406 			.ops = &clk_branch_ops,
407 			.flags = CLK_SET_RATE_PARENT,
408 		},
409 	},
410 };
411 
412 static struct clk_rcg gsbi7_uart_src = {
413 	.ns_reg = 0x2a94,
414 	.md_reg = 0x2a90,
415 	.mn = {
416 		.mnctr_en_bit = 8,
417 		.mnctr_reset_bit = 7,
418 		.mnctr_mode_shift = 5,
419 		.n_val_shift = 16,
420 		.m_val_shift = 16,
421 		.width = 16,
422 	},
423 	.p = {
424 		.pre_div_shift = 3,
425 		.pre_div_width = 2,
426 	},
427 	.s = {
428 		.src_sel_shift = 0,
429 		.parent_map = gcc_pxo_pll8_map,
430 	},
431 	.freq_tbl = clk_tbl_gsbi_uart,
432 	.clkr = {
433 		.enable_reg = 0x2a94,
434 		.enable_mask = BIT(11),
435 		.hw.init = &(struct clk_init_data){
436 			.name = "gsbi7_uart_src",
437 			.parent_names = gcc_pxo_pll8,
438 			.num_parents = 2,
439 			.ops = &clk_rcg_ops,
440 			.flags = CLK_SET_PARENT_GATE,
441 		},
442 	},
443 };
444 
445 static struct clk_branch gsbi7_uart_clk = {
446 	.halt_reg = 0x2fd0,
447 	.halt_bit = 14,
448 	.clkr = {
449 		.enable_reg = 0x2a94,
450 		.enable_mask = BIT(9),
451 		.hw.init = &(struct clk_init_data){
452 			.name = "gsbi7_uart_clk",
453 			.parent_names = (const char *[]){
454 				"gsbi7_uart_src",
455 			},
456 			.num_parents = 1,
457 			.ops = &clk_branch_ops,
458 			.flags = CLK_SET_RATE_PARENT,
459 		},
460 	},
461 };
462 
463 static struct clk_rcg gsbi8_uart_src = {
464 	.ns_reg = 0x2ab4,
465 	.md_reg = 0x2ab0,
466 	.mn = {
467 		.mnctr_en_bit = 8,
468 		.mnctr_reset_bit = 7,
469 		.mnctr_mode_shift = 5,
470 		.n_val_shift = 16,
471 		.m_val_shift = 16,
472 		.width = 16,
473 	},
474 	.p = {
475 		.pre_div_shift = 3,
476 		.pre_div_width = 2,
477 	},
478 	.s = {
479 		.src_sel_shift = 0,
480 		.parent_map = gcc_pxo_pll8_map,
481 	},
482 	.freq_tbl = clk_tbl_gsbi_uart,
483 	.clkr = {
484 		.enable_reg = 0x2ab4,
485 		.enable_mask = BIT(11),
486 		.hw.init = &(struct clk_init_data){
487 			.name = "gsbi8_uart_src",
488 			.parent_names = gcc_pxo_pll8,
489 			.num_parents = 2,
490 			.ops = &clk_rcg_ops,
491 			.flags = CLK_SET_PARENT_GATE,
492 		},
493 	},
494 };
495 
496 static struct clk_branch gsbi8_uart_clk = {
497 	.halt_reg = 0x2fd0,
498 	.halt_bit = 10,
499 	.clkr = {
500 		.enable_reg = 0x2ab4,
501 		.enable_mask = BIT(9),
502 		.hw.init = &(struct clk_init_data){
503 			.name = "gsbi8_uart_clk",
504 			.parent_names = (const char *[]){ "gsbi8_uart_src" },
505 			.num_parents = 1,
506 			.ops = &clk_branch_ops,
507 			.flags = CLK_SET_RATE_PARENT,
508 		},
509 	},
510 };
511 
512 static struct clk_rcg gsbi9_uart_src = {
513 	.ns_reg = 0x2ad4,
514 	.md_reg = 0x2ad0,
515 	.mn = {
516 		.mnctr_en_bit = 8,
517 		.mnctr_reset_bit = 7,
518 		.mnctr_mode_shift = 5,
519 		.n_val_shift = 16,
520 		.m_val_shift = 16,
521 		.width = 16,
522 	},
523 	.p = {
524 		.pre_div_shift = 3,
525 		.pre_div_width = 2,
526 	},
527 	.s = {
528 		.src_sel_shift = 0,
529 		.parent_map = gcc_pxo_pll8_map,
530 	},
531 	.freq_tbl = clk_tbl_gsbi_uart,
532 	.clkr = {
533 		.enable_reg = 0x2ad4,
534 		.enable_mask = BIT(11),
535 		.hw.init = &(struct clk_init_data){
536 			.name = "gsbi9_uart_src",
537 			.parent_names = gcc_pxo_pll8,
538 			.num_parents = 2,
539 			.ops = &clk_rcg_ops,
540 			.flags = CLK_SET_PARENT_GATE,
541 		},
542 	},
543 };
544 
545 static struct clk_branch gsbi9_uart_clk = {
546 	.halt_reg = 0x2fd0,
547 	.halt_bit = 6,
548 	.clkr = {
549 		.enable_reg = 0x2ad4,
550 		.enable_mask = BIT(9),
551 		.hw.init = &(struct clk_init_data){
552 			.name = "gsbi9_uart_clk",
553 			.parent_names = (const char *[]){ "gsbi9_uart_src" },
554 			.num_parents = 1,
555 			.ops = &clk_branch_ops,
556 			.flags = CLK_SET_RATE_PARENT,
557 		},
558 	},
559 };
560 
561 static struct clk_rcg gsbi10_uart_src = {
562 	.ns_reg = 0x2af4,
563 	.md_reg = 0x2af0,
564 	.mn = {
565 		.mnctr_en_bit = 8,
566 		.mnctr_reset_bit = 7,
567 		.mnctr_mode_shift = 5,
568 		.n_val_shift = 16,
569 		.m_val_shift = 16,
570 		.width = 16,
571 	},
572 	.p = {
573 		.pre_div_shift = 3,
574 		.pre_div_width = 2,
575 	},
576 	.s = {
577 		.src_sel_shift = 0,
578 		.parent_map = gcc_pxo_pll8_map,
579 	},
580 	.freq_tbl = clk_tbl_gsbi_uart,
581 	.clkr = {
582 		.enable_reg = 0x2af4,
583 		.enable_mask = BIT(11),
584 		.hw.init = &(struct clk_init_data){
585 			.name = "gsbi10_uart_src",
586 			.parent_names = gcc_pxo_pll8,
587 			.num_parents = 2,
588 			.ops = &clk_rcg_ops,
589 			.flags = CLK_SET_PARENT_GATE,
590 		},
591 	},
592 };
593 
594 static struct clk_branch gsbi10_uart_clk = {
595 	.halt_reg = 0x2fd0,
596 	.halt_bit = 2,
597 	.clkr = {
598 		.enable_reg = 0x2af4,
599 		.enable_mask = BIT(9),
600 		.hw.init = &(struct clk_init_data){
601 			.name = "gsbi10_uart_clk",
602 			.parent_names = (const char *[]){ "gsbi10_uart_src" },
603 			.num_parents = 1,
604 			.ops = &clk_branch_ops,
605 			.flags = CLK_SET_RATE_PARENT,
606 		},
607 	},
608 };
609 
610 static struct clk_rcg gsbi11_uart_src = {
611 	.ns_reg = 0x2b14,
612 	.md_reg = 0x2b10,
613 	.mn = {
614 		.mnctr_en_bit = 8,
615 		.mnctr_reset_bit = 7,
616 		.mnctr_mode_shift = 5,
617 		.n_val_shift = 16,
618 		.m_val_shift = 16,
619 		.width = 16,
620 	},
621 	.p = {
622 		.pre_div_shift = 3,
623 		.pre_div_width = 2,
624 	},
625 	.s = {
626 		.src_sel_shift = 0,
627 		.parent_map = gcc_pxo_pll8_map,
628 	},
629 	.freq_tbl = clk_tbl_gsbi_uart,
630 	.clkr = {
631 		.enable_reg = 0x2b14,
632 		.enable_mask = BIT(11),
633 		.hw.init = &(struct clk_init_data){
634 			.name = "gsbi11_uart_src",
635 			.parent_names = gcc_pxo_pll8,
636 			.num_parents = 2,
637 			.ops = &clk_rcg_ops,
638 			.flags = CLK_SET_PARENT_GATE,
639 		},
640 	},
641 };
642 
643 static struct clk_branch gsbi11_uart_clk = {
644 	.halt_reg = 0x2fd4,
645 	.halt_bit = 17,
646 	.clkr = {
647 		.enable_reg = 0x2b14,
648 		.enable_mask = BIT(9),
649 		.hw.init = &(struct clk_init_data){
650 			.name = "gsbi11_uart_clk",
651 			.parent_names = (const char *[]){ "gsbi11_uart_src" },
652 			.num_parents = 1,
653 			.ops = &clk_branch_ops,
654 			.flags = CLK_SET_RATE_PARENT,
655 		},
656 	},
657 };
658 
659 static struct clk_rcg gsbi12_uart_src = {
660 	.ns_reg = 0x2b34,
661 	.md_reg = 0x2b30,
662 	.mn = {
663 		.mnctr_en_bit = 8,
664 		.mnctr_reset_bit = 7,
665 		.mnctr_mode_shift = 5,
666 		.n_val_shift = 16,
667 		.m_val_shift = 16,
668 		.width = 16,
669 	},
670 	.p = {
671 		.pre_div_shift = 3,
672 		.pre_div_width = 2,
673 	},
674 	.s = {
675 		.src_sel_shift = 0,
676 		.parent_map = gcc_pxo_pll8_map,
677 	},
678 	.freq_tbl = clk_tbl_gsbi_uart,
679 	.clkr = {
680 		.enable_reg = 0x2b34,
681 		.enable_mask = BIT(11),
682 		.hw.init = &(struct clk_init_data){
683 			.name = "gsbi12_uart_src",
684 			.parent_names = gcc_pxo_pll8,
685 			.num_parents = 2,
686 			.ops = &clk_rcg_ops,
687 			.flags = CLK_SET_PARENT_GATE,
688 		},
689 	},
690 };
691 
692 static struct clk_branch gsbi12_uart_clk = {
693 	.halt_reg = 0x2fd4,
694 	.halt_bit = 13,
695 	.clkr = {
696 		.enable_reg = 0x2b34,
697 		.enable_mask = BIT(9),
698 		.hw.init = &(struct clk_init_data){
699 			.name = "gsbi12_uart_clk",
700 			.parent_names = (const char *[]){ "gsbi12_uart_src" },
701 			.num_parents = 1,
702 			.ops = &clk_branch_ops,
703 			.flags = CLK_SET_RATE_PARENT,
704 		},
705 	},
706 };
707 
708 static struct freq_tbl clk_tbl_gsbi_qup[] = {
709 	{  1100000, P_PXO,  1, 2, 49 },
710 	{  5400000, P_PXO,  1, 1,  5 },
711 	{ 10800000, P_PXO,  1, 2,  5 },
712 	{ 15060000, P_PLL8, 1, 2, 51 },
713 	{ 24000000, P_PLL8, 4, 1,  4 },
714 	{ 25600000, P_PLL8, 1, 1, 15 },
715 	{ 27000000, P_PXO,  1, 0,  0 },
716 	{ 48000000, P_PLL8, 4, 1,  2 },
717 	{ 51200000, P_PLL8, 1, 2, 15 },
718 	{ }
719 };
720 
721 static struct clk_rcg gsbi1_qup_src = {
722 	.ns_reg = 0x29cc,
723 	.md_reg = 0x29c8,
724 	.mn = {
725 		.mnctr_en_bit = 8,
726 		.mnctr_reset_bit = 7,
727 		.mnctr_mode_shift = 5,
728 		.n_val_shift = 16,
729 		.m_val_shift = 16,
730 		.width = 8,
731 	},
732 	.p = {
733 		.pre_div_shift = 3,
734 		.pre_div_width = 2,
735 	},
736 	.s = {
737 		.src_sel_shift = 0,
738 		.parent_map = gcc_pxo_pll8_map,
739 	},
740 	.freq_tbl = clk_tbl_gsbi_qup,
741 	.clkr = {
742 		.enable_reg = 0x29cc,
743 		.enable_mask = BIT(11),
744 		.hw.init = &(struct clk_init_data){
745 			.name = "gsbi1_qup_src",
746 			.parent_names = gcc_pxo_pll8,
747 			.num_parents = 2,
748 			.ops = &clk_rcg_ops,
749 			.flags = CLK_SET_PARENT_GATE,
750 		},
751 	},
752 };
753 
754 static struct clk_branch gsbi1_qup_clk = {
755 	.halt_reg = 0x2fcc,
756 	.halt_bit = 9,
757 	.clkr = {
758 		.enable_reg = 0x29cc,
759 		.enable_mask = BIT(9),
760 		.hw.init = &(struct clk_init_data){
761 			.name = "gsbi1_qup_clk",
762 			.parent_names = (const char *[]){ "gsbi1_qup_src" },
763 			.num_parents = 1,
764 			.ops = &clk_branch_ops,
765 			.flags = CLK_SET_RATE_PARENT,
766 		},
767 	},
768 };
769 
770 static struct clk_rcg gsbi2_qup_src = {
771 	.ns_reg = 0x29ec,
772 	.md_reg = 0x29e8,
773 	.mn = {
774 		.mnctr_en_bit = 8,
775 		.mnctr_reset_bit = 7,
776 		.mnctr_mode_shift = 5,
777 		.n_val_shift = 16,
778 		.m_val_shift = 16,
779 		.width = 8,
780 	},
781 	.p = {
782 		.pre_div_shift = 3,
783 		.pre_div_width = 2,
784 	},
785 	.s = {
786 		.src_sel_shift = 0,
787 		.parent_map = gcc_pxo_pll8_map,
788 	},
789 	.freq_tbl = clk_tbl_gsbi_qup,
790 	.clkr = {
791 		.enable_reg = 0x29ec,
792 		.enable_mask = BIT(11),
793 		.hw.init = &(struct clk_init_data){
794 			.name = "gsbi2_qup_src",
795 			.parent_names = gcc_pxo_pll8,
796 			.num_parents = 2,
797 			.ops = &clk_rcg_ops,
798 			.flags = CLK_SET_PARENT_GATE,
799 		},
800 	},
801 };
802 
803 static struct clk_branch gsbi2_qup_clk = {
804 	.halt_reg = 0x2fcc,
805 	.halt_bit = 4,
806 	.clkr = {
807 		.enable_reg = 0x29ec,
808 		.enable_mask = BIT(9),
809 		.hw.init = &(struct clk_init_data){
810 			.name = "gsbi2_qup_clk",
811 			.parent_names = (const char *[]){ "gsbi2_qup_src" },
812 			.num_parents = 1,
813 			.ops = &clk_branch_ops,
814 			.flags = CLK_SET_RATE_PARENT,
815 		},
816 	},
817 };
818 
819 static struct clk_rcg gsbi3_qup_src = {
820 	.ns_reg = 0x2a0c,
821 	.md_reg = 0x2a08,
822 	.mn = {
823 		.mnctr_en_bit = 8,
824 		.mnctr_reset_bit = 7,
825 		.mnctr_mode_shift = 5,
826 		.n_val_shift = 16,
827 		.m_val_shift = 16,
828 		.width = 8,
829 	},
830 	.p = {
831 		.pre_div_shift = 3,
832 		.pre_div_width = 2,
833 	},
834 	.s = {
835 		.src_sel_shift = 0,
836 		.parent_map = gcc_pxo_pll8_map,
837 	},
838 	.freq_tbl = clk_tbl_gsbi_qup,
839 	.clkr = {
840 		.enable_reg = 0x2a0c,
841 		.enable_mask = BIT(11),
842 		.hw.init = &(struct clk_init_data){
843 			.name = "gsbi3_qup_src",
844 			.parent_names = gcc_pxo_pll8,
845 			.num_parents = 2,
846 			.ops = &clk_rcg_ops,
847 			.flags = CLK_SET_PARENT_GATE,
848 		},
849 	},
850 };
851 
852 static struct clk_branch gsbi3_qup_clk = {
853 	.halt_reg = 0x2fcc,
854 	.halt_bit = 0,
855 	.clkr = {
856 		.enable_reg = 0x2a0c,
857 		.enable_mask = BIT(9),
858 		.hw.init = &(struct clk_init_data){
859 			.name = "gsbi3_qup_clk",
860 			.parent_names = (const char *[]){ "gsbi3_qup_src" },
861 			.num_parents = 1,
862 			.ops = &clk_branch_ops,
863 			.flags = CLK_SET_RATE_PARENT,
864 		},
865 	},
866 };
867 
868 static struct clk_rcg gsbi4_qup_src = {
869 	.ns_reg = 0x2a2c,
870 	.md_reg = 0x2a28,
871 	.mn = {
872 		.mnctr_en_bit = 8,
873 		.mnctr_reset_bit = 7,
874 		.mnctr_mode_shift = 5,
875 		.n_val_shift = 16,
876 		.m_val_shift = 16,
877 		.width = 8,
878 	},
879 	.p = {
880 		.pre_div_shift = 3,
881 		.pre_div_width = 2,
882 	},
883 	.s = {
884 		.src_sel_shift = 0,
885 		.parent_map = gcc_pxo_pll8_map,
886 	},
887 	.freq_tbl = clk_tbl_gsbi_qup,
888 	.clkr = {
889 		.enable_reg = 0x2a2c,
890 		.enable_mask = BIT(11),
891 		.hw.init = &(struct clk_init_data){
892 			.name = "gsbi4_qup_src",
893 			.parent_names = gcc_pxo_pll8,
894 			.num_parents = 2,
895 			.ops = &clk_rcg_ops,
896 			.flags = CLK_SET_PARENT_GATE,
897 		},
898 	},
899 };
900 
901 static struct clk_branch gsbi4_qup_clk = {
902 	.halt_reg = 0x2fd0,
903 	.halt_bit = 24,
904 	.clkr = {
905 		.enable_reg = 0x2a2c,
906 		.enable_mask = BIT(9),
907 		.hw.init = &(struct clk_init_data){
908 			.name = "gsbi4_qup_clk",
909 			.parent_names = (const char *[]){ "gsbi4_qup_src" },
910 			.num_parents = 1,
911 			.ops = &clk_branch_ops,
912 			.flags = CLK_SET_RATE_PARENT,
913 		},
914 	},
915 };
916 
917 static struct clk_rcg gsbi5_qup_src = {
918 	.ns_reg = 0x2a4c,
919 	.md_reg = 0x2a48,
920 	.mn = {
921 		.mnctr_en_bit = 8,
922 		.mnctr_reset_bit = 7,
923 		.mnctr_mode_shift = 5,
924 		.n_val_shift = 16,
925 		.m_val_shift = 16,
926 		.width = 8,
927 	},
928 	.p = {
929 		.pre_div_shift = 3,
930 		.pre_div_width = 2,
931 	},
932 	.s = {
933 		.src_sel_shift = 0,
934 		.parent_map = gcc_pxo_pll8_map,
935 	},
936 	.freq_tbl = clk_tbl_gsbi_qup,
937 	.clkr = {
938 		.enable_reg = 0x2a4c,
939 		.enable_mask = BIT(11),
940 		.hw.init = &(struct clk_init_data){
941 			.name = "gsbi5_qup_src",
942 			.parent_names = gcc_pxo_pll8,
943 			.num_parents = 2,
944 			.ops = &clk_rcg_ops,
945 			.flags = CLK_SET_PARENT_GATE,
946 		},
947 	},
948 };
949 
950 static struct clk_branch gsbi5_qup_clk = {
951 	.halt_reg = 0x2fd0,
952 	.halt_bit = 20,
953 	.clkr = {
954 		.enable_reg = 0x2a4c,
955 		.enable_mask = BIT(9),
956 		.hw.init = &(struct clk_init_data){
957 			.name = "gsbi5_qup_clk",
958 			.parent_names = (const char *[]){ "gsbi5_qup_src" },
959 			.num_parents = 1,
960 			.ops = &clk_branch_ops,
961 			.flags = CLK_SET_RATE_PARENT,
962 		},
963 	},
964 };
965 
966 static struct clk_rcg gsbi6_qup_src = {
967 	.ns_reg = 0x2a6c,
968 	.md_reg = 0x2a68,
969 	.mn = {
970 		.mnctr_en_bit = 8,
971 		.mnctr_reset_bit = 7,
972 		.mnctr_mode_shift = 5,
973 		.n_val_shift = 16,
974 		.m_val_shift = 16,
975 		.width = 8,
976 	},
977 	.p = {
978 		.pre_div_shift = 3,
979 		.pre_div_width = 2,
980 	},
981 	.s = {
982 		.src_sel_shift = 0,
983 		.parent_map = gcc_pxo_pll8_map,
984 	},
985 	.freq_tbl = clk_tbl_gsbi_qup,
986 	.clkr = {
987 		.enable_reg = 0x2a6c,
988 		.enable_mask = BIT(11),
989 		.hw.init = &(struct clk_init_data){
990 			.name = "gsbi6_qup_src",
991 			.parent_names = gcc_pxo_pll8,
992 			.num_parents = 2,
993 			.ops = &clk_rcg_ops,
994 			.flags = CLK_SET_PARENT_GATE,
995 		},
996 	},
997 };
998 
999 static struct clk_branch gsbi6_qup_clk = {
1000 	.halt_reg = 0x2fd0,
1001 	.halt_bit = 16,
1002 	.clkr = {
1003 		.enable_reg = 0x2a6c,
1004 		.enable_mask = BIT(9),
1005 		.hw.init = &(struct clk_init_data){
1006 			.name = "gsbi6_qup_clk",
1007 			.parent_names = (const char *[]){ "gsbi6_qup_src" },
1008 			.num_parents = 1,
1009 			.ops = &clk_branch_ops,
1010 			.flags = CLK_SET_RATE_PARENT,
1011 		},
1012 	},
1013 };
1014 
1015 static struct clk_rcg gsbi7_qup_src = {
1016 	.ns_reg = 0x2a8c,
1017 	.md_reg = 0x2a88,
1018 	.mn = {
1019 		.mnctr_en_bit = 8,
1020 		.mnctr_reset_bit = 7,
1021 		.mnctr_mode_shift = 5,
1022 		.n_val_shift = 16,
1023 		.m_val_shift = 16,
1024 		.width = 8,
1025 	},
1026 	.p = {
1027 		.pre_div_shift = 3,
1028 		.pre_div_width = 2,
1029 	},
1030 	.s = {
1031 		.src_sel_shift = 0,
1032 		.parent_map = gcc_pxo_pll8_map,
1033 	},
1034 	.freq_tbl = clk_tbl_gsbi_qup,
1035 	.clkr = {
1036 		.enable_reg = 0x2a8c,
1037 		.enable_mask = BIT(11),
1038 		.hw.init = &(struct clk_init_data){
1039 			.name = "gsbi7_qup_src",
1040 			.parent_names = gcc_pxo_pll8,
1041 			.num_parents = 2,
1042 			.ops = &clk_rcg_ops,
1043 			.flags = CLK_SET_PARENT_GATE,
1044 		},
1045 	},
1046 };
1047 
1048 static struct clk_branch gsbi7_qup_clk = {
1049 	.halt_reg = 0x2fd0,
1050 	.halt_bit = 12,
1051 	.clkr = {
1052 		.enable_reg = 0x2a8c,
1053 		.enable_mask = BIT(9),
1054 		.hw.init = &(struct clk_init_data){
1055 			.name = "gsbi7_qup_clk",
1056 			.parent_names = (const char *[]){ "gsbi7_qup_src" },
1057 			.num_parents = 1,
1058 			.ops = &clk_branch_ops,
1059 			.flags = CLK_SET_RATE_PARENT,
1060 		},
1061 	},
1062 };
1063 
1064 static struct clk_rcg gsbi8_qup_src = {
1065 	.ns_reg = 0x2aac,
1066 	.md_reg = 0x2aa8,
1067 	.mn = {
1068 		.mnctr_en_bit = 8,
1069 		.mnctr_reset_bit = 7,
1070 		.mnctr_mode_shift = 5,
1071 		.n_val_shift = 16,
1072 		.m_val_shift = 16,
1073 		.width = 8,
1074 	},
1075 	.p = {
1076 		.pre_div_shift = 3,
1077 		.pre_div_width = 2,
1078 	},
1079 	.s = {
1080 		.src_sel_shift = 0,
1081 		.parent_map = gcc_pxo_pll8_map,
1082 	},
1083 	.freq_tbl = clk_tbl_gsbi_qup,
1084 	.clkr = {
1085 		.enable_reg = 0x2aac,
1086 		.enable_mask = BIT(11),
1087 		.hw.init = &(struct clk_init_data){
1088 			.name = "gsbi8_qup_src",
1089 			.parent_names = gcc_pxo_pll8,
1090 			.num_parents = 2,
1091 			.ops = &clk_rcg_ops,
1092 			.flags = CLK_SET_PARENT_GATE,
1093 		},
1094 	},
1095 };
1096 
1097 static struct clk_branch gsbi8_qup_clk = {
1098 	.halt_reg = 0x2fd0,
1099 	.halt_bit = 8,
1100 	.clkr = {
1101 		.enable_reg = 0x2aac,
1102 		.enable_mask = BIT(9),
1103 		.hw.init = &(struct clk_init_data){
1104 			.name = "gsbi8_qup_clk",
1105 			.parent_names = (const char *[]){ "gsbi8_qup_src" },
1106 			.num_parents = 1,
1107 			.ops = &clk_branch_ops,
1108 			.flags = CLK_SET_RATE_PARENT,
1109 		},
1110 	},
1111 };
1112 
1113 static struct clk_rcg gsbi9_qup_src = {
1114 	.ns_reg = 0x2acc,
1115 	.md_reg = 0x2ac8,
1116 	.mn = {
1117 		.mnctr_en_bit = 8,
1118 		.mnctr_reset_bit = 7,
1119 		.mnctr_mode_shift = 5,
1120 		.n_val_shift = 16,
1121 		.m_val_shift = 16,
1122 		.width = 8,
1123 	},
1124 	.p = {
1125 		.pre_div_shift = 3,
1126 		.pre_div_width = 2,
1127 	},
1128 	.s = {
1129 		.src_sel_shift = 0,
1130 		.parent_map = gcc_pxo_pll8_map,
1131 	},
1132 	.freq_tbl = clk_tbl_gsbi_qup,
1133 	.clkr = {
1134 		.enable_reg = 0x2acc,
1135 		.enable_mask = BIT(11),
1136 		.hw.init = &(struct clk_init_data){
1137 			.name = "gsbi9_qup_src",
1138 			.parent_names = gcc_pxo_pll8,
1139 			.num_parents = 2,
1140 			.ops = &clk_rcg_ops,
1141 			.flags = CLK_SET_PARENT_GATE,
1142 		},
1143 	},
1144 };
1145 
1146 static struct clk_branch gsbi9_qup_clk = {
1147 	.halt_reg = 0x2fd0,
1148 	.halt_bit = 4,
1149 	.clkr = {
1150 		.enable_reg = 0x2acc,
1151 		.enable_mask = BIT(9),
1152 		.hw.init = &(struct clk_init_data){
1153 			.name = "gsbi9_qup_clk",
1154 			.parent_names = (const char *[]){ "gsbi9_qup_src" },
1155 			.num_parents = 1,
1156 			.ops = &clk_branch_ops,
1157 			.flags = CLK_SET_RATE_PARENT,
1158 		},
1159 	},
1160 };
1161 
1162 static struct clk_rcg gsbi10_qup_src = {
1163 	.ns_reg = 0x2aec,
1164 	.md_reg = 0x2ae8,
1165 	.mn = {
1166 		.mnctr_en_bit = 8,
1167 		.mnctr_reset_bit = 7,
1168 		.mnctr_mode_shift = 5,
1169 		.n_val_shift = 16,
1170 		.m_val_shift = 16,
1171 		.width = 8,
1172 	},
1173 	.p = {
1174 		.pre_div_shift = 3,
1175 		.pre_div_width = 2,
1176 	},
1177 	.s = {
1178 		.src_sel_shift = 0,
1179 		.parent_map = gcc_pxo_pll8_map,
1180 	},
1181 	.freq_tbl = clk_tbl_gsbi_qup,
1182 	.clkr = {
1183 		.enable_reg = 0x2aec,
1184 		.enable_mask = BIT(11),
1185 		.hw.init = &(struct clk_init_data){
1186 			.name = "gsbi10_qup_src",
1187 			.parent_names = gcc_pxo_pll8,
1188 			.num_parents = 2,
1189 			.ops = &clk_rcg_ops,
1190 			.flags = CLK_SET_PARENT_GATE,
1191 		},
1192 	},
1193 };
1194 
1195 static struct clk_branch gsbi10_qup_clk = {
1196 	.halt_reg = 0x2fd0,
1197 	.halt_bit = 0,
1198 	.clkr = {
1199 		.enable_reg = 0x2aec,
1200 		.enable_mask = BIT(9),
1201 		.hw.init = &(struct clk_init_data){
1202 			.name = "gsbi10_qup_clk",
1203 			.parent_names = (const char *[]){ "gsbi10_qup_src" },
1204 			.num_parents = 1,
1205 			.ops = &clk_branch_ops,
1206 			.flags = CLK_SET_RATE_PARENT,
1207 		},
1208 	},
1209 };
1210 
1211 static struct clk_rcg gsbi11_qup_src = {
1212 	.ns_reg = 0x2b0c,
1213 	.md_reg = 0x2b08,
1214 	.mn = {
1215 		.mnctr_en_bit = 8,
1216 		.mnctr_reset_bit = 7,
1217 		.mnctr_mode_shift = 5,
1218 		.n_val_shift = 16,
1219 		.m_val_shift = 16,
1220 		.width = 8,
1221 	},
1222 	.p = {
1223 		.pre_div_shift = 3,
1224 		.pre_div_width = 2,
1225 	},
1226 	.s = {
1227 		.src_sel_shift = 0,
1228 		.parent_map = gcc_pxo_pll8_map,
1229 	},
1230 	.freq_tbl = clk_tbl_gsbi_qup,
1231 	.clkr = {
1232 		.enable_reg = 0x2b0c,
1233 		.enable_mask = BIT(11),
1234 		.hw.init = &(struct clk_init_data){
1235 			.name = "gsbi11_qup_src",
1236 			.parent_names = gcc_pxo_pll8,
1237 			.num_parents = 2,
1238 			.ops = &clk_rcg_ops,
1239 			.flags = CLK_SET_PARENT_GATE,
1240 		},
1241 	},
1242 };
1243 
1244 static struct clk_branch gsbi11_qup_clk = {
1245 	.halt_reg = 0x2fd4,
1246 	.halt_bit = 15,
1247 	.clkr = {
1248 		.enable_reg = 0x2b0c,
1249 		.enable_mask = BIT(9),
1250 		.hw.init = &(struct clk_init_data){
1251 			.name = "gsbi11_qup_clk",
1252 			.parent_names = (const char *[]){ "gsbi11_qup_src" },
1253 			.num_parents = 1,
1254 			.ops = &clk_branch_ops,
1255 			.flags = CLK_SET_RATE_PARENT,
1256 		},
1257 	},
1258 };
1259 
1260 static struct clk_rcg gsbi12_qup_src = {
1261 	.ns_reg = 0x2b2c,
1262 	.md_reg = 0x2b28,
1263 	.mn = {
1264 		.mnctr_en_bit = 8,
1265 		.mnctr_reset_bit = 7,
1266 		.mnctr_mode_shift = 5,
1267 		.n_val_shift = 16,
1268 		.m_val_shift = 16,
1269 		.width = 8,
1270 	},
1271 	.p = {
1272 		.pre_div_shift = 3,
1273 		.pre_div_width = 2,
1274 	},
1275 	.s = {
1276 		.src_sel_shift = 0,
1277 		.parent_map = gcc_pxo_pll8_map,
1278 	},
1279 	.freq_tbl = clk_tbl_gsbi_qup,
1280 	.clkr = {
1281 		.enable_reg = 0x2b2c,
1282 		.enable_mask = BIT(11),
1283 		.hw.init = &(struct clk_init_data){
1284 			.name = "gsbi12_qup_src",
1285 			.parent_names = gcc_pxo_pll8,
1286 			.num_parents = 2,
1287 			.ops = &clk_rcg_ops,
1288 			.flags = CLK_SET_PARENT_GATE,
1289 		},
1290 	},
1291 };
1292 
1293 static struct clk_branch gsbi12_qup_clk = {
1294 	.halt_reg = 0x2fd4,
1295 	.halt_bit = 11,
1296 	.clkr = {
1297 		.enable_reg = 0x2b2c,
1298 		.enable_mask = BIT(9),
1299 		.hw.init = &(struct clk_init_data){
1300 			.name = "gsbi12_qup_clk",
1301 			.parent_names = (const char *[]){ "gsbi12_qup_src" },
1302 			.num_parents = 1,
1303 			.ops = &clk_branch_ops,
1304 			.flags = CLK_SET_RATE_PARENT,
1305 		},
1306 	},
1307 };
1308 
1309 static const struct freq_tbl clk_tbl_gp[] = {
1310 	{ 9600000, P_CXO,  2, 0, 0 },
1311 	{ 13500000, P_PXO,  2, 0, 0 },
1312 	{ 19200000, P_CXO,  1, 0, 0 },
1313 	{ 27000000, P_PXO,  1, 0, 0 },
1314 	{ 64000000, P_PLL8, 2, 1, 3 },
1315 	{ 76800000, P_PLL8, 1, 1, 5 },
1316 	{ 96000000, P_PLL8, 4, 0, 0 },
1317 	{ 128000000, P_PLL8, 3, 0, 0 },
1318 	{ 192000000, P_PLL8, 2, 0, 0 },
1319 	{ }
1320 };
1321 
1322 static struct clk_rcg gp0_src = {
1323 	.ns_reg = 0x2d24,
1324 	.md_reg = 0x2d00,
1325 	.mn = {
1326 		.mnctr_en_bit = 8,
1327 		.mnctr_reset_bit = 7,
1328 		.mnctr_mode_shift = 5,
1329 		.n_val_shift = 16,
1330 		.m_val_shift = 16,
1331 		.width = 8,
1332 	},
1333 	.p = {
1334 		.pre_div_shift = 3,
1335 		.pre_div_width = 2,
1336 	},
1337 	.s = {
1338 		.src_sel_shift = 0,
1339 		.parent_map = gcc_pxo_pll8_cxo_map,
1340 	},
1341 	.freq_tbl = clk_tbl_gp,
1342 	.clkr = {
1343 		.enable_reg = 0x2d24,
1344 		.enable_mask = BIT(11),
1345 		.hw.init = &(struct clk_init_data){
1346 			.name = "gp0_src",
1347 			.parent_names = gcc_pxo_pll8_cxo,
1348 			.num_parents = 3,
1349 			.ops = &clk_rcg_ops,
1350 			.flags = CLK_SET_PARENT_GATE,
1351 		},
1352 	}
1353 };
1354 
1355 static struct clk_branch gp0_clk = {
1356 	.halt_reg = 0x2fd8,
1357 	.halt_bit = 7,
1358 	.clkr = {
1359 		.enable_reg = 0x2d24,
1360 		.enable_mask = BIT(9),
1361 		.hw.init = &(struct clk_init_data){
1362 			.name = "gp0_clk",
1363 			.parent_names = (const char *[]){ "gp0_src" },
1364 			.num_parents = 1,
1365 			.ops = &clk_branch_ops,
1366 			.flags = CLK_SET_RATE_PARENT,
1367 		},
1368 	},
1369 };
1370 
1371 static struct clk_rcg gp1_src = {
1372 	.ns_reg = 0x2d44,
1373 	.md_reg = 0x2d40,
1374 	.mn = {
1375 		.mnctr_en_bit = 8,
1376 		.mnctr_reset_bit = 7,
1377 		.mnctr_mode_shift = 5,
1378 		.n_val_shift = 16,
1379 		.m_val_shift = 16,
1380 		.width = 8,
1381 	},
1382 	.p = {
1383 		.pre_div_shift = 3,
1384 		.pre_div_width = 2,
1385 	},
1386 	.s = {
1387 		.src_sel_shift = 0,
1388 		.parent_map = gcc_pxo_pll8_cxo_map,
1389 	},
1390 	.freq_tbl = clk_tbl_gp,
1391 	.clkr = {
1392 		.enable_reg = 0x2d44,
1393 		.enable_mask = BIT(11),
1394 		.hw.init = &(struct clk_init_data){
1395 			.name = "gp1_src",
1396 			.parent_names = gcc_pxo_pll8_cxo,
1397 			.num_parents = 3,
1398 			.ops = &clk_rcg_ops,
1399 			.flags = CLK_SET_RATE_GATE,
1400 		},
1401 	}
1402 };
1403 
1404 static struct clk_branch gp1_clk = {
1405 	.halt_reg = 0x2fd8,
1406 	.halt_bit = 6,
1407 	.clkr = {
1408 		.enable_reg = 0x2d44,
1409 		.enable_mask = BIT(9),
1410 		.hw.init = &(struct clk_init_data){
1411 			.name = "gp1_clk",
1412 			.parent_names = (const char *[]){ "gp1_src" },
1413 			.num_parents = 1,
1414 			.ops = &clk_branch_ops,
1415 			.flags = CLK_SET_RATE_PARENT,
1416 		},
1417 	},
1418 };
1419 
1420 static struct clk_rcg gp2_src = {
1421 	.ns_reg = 0x2d64,
1422 	.md_reg = 0x2d60,
1423 	.mn = {
1424 		.mnctr_en_bit = 8,
1425 		.mnctr_reset_bit = 7,
1426 		.mnctr_mode_shift = 5,
1427 		.n_val_shift = 16,
1428 		.m_val_shift = 16,
1429 		.width = 8,
1430 	},
1431 	.p = {
1432 		.pre_div_shift = 3,
1433 		.pre_div_width = 2,
1434 	},
1435 	.s = {
1436 		.src_sel_shift = 0,
1437 		.parent_map = gcc_pxo_pll8_cxo_map,
1438 	},
1439 	.freq_tbl = clk_tbl_gp,
1440 	.clkr = {
1441 		.enable_reg = 0x2d64,
1442 		.enable_mask = BIT(11),
1443 		.hw.init = &(struct clk_init_data){
1444 			.name = "gp2_src",
1445 			.parent_names = gcc_pxo_pll8_cxo,
1446 			.num_parents = 3,
1447 			.ops = &clk_rcg_ops,
1448 			.flags = CLK_SET_RATE_GATE,
1449 		},
1450 	}
1451 };
1452 
1453 static struct clk_branch gp2_clk = {
1454 	.halt_reg = 0x2fd8,
1455 	.halt_bit = 5,
1456 	.clkr = {
1457 		.enable_reg = 0x2d64,
1458 		.enable_mask = BIT(9),
1459 		.hw.init = &(struct clk_init_data){
1460 			.name = "gp2_clk",
1461 			.parent_names = (const char *[]){ "gp2_src" },
1462 			.num_parents = 1,
1463 			.ops = &clk_branch_ops,
1464 			.flags = CLK_SET_RATE_PARENT,
1465 		},
1466 	},
1467 };
1468 
1469 static struct clk_branch pmem_clk = {
1470 	.hwcg_reg = 0x25a0,
1471 	.hwcg_bit = 6,
1472 	.halt_reg = 0x2fc8,
1473 	.halt_bit = 20,
1474 	.clkr = {
1475 		.enable_reg = 0x25a0,
1476 		.enable_mask = BIT(4),
1477 		.hw.init = &(struct clk_init_data){
1478 			.name = "pmem_clk",
1479 			.ops = &clk_branch_ops,
1480 			.flags = CLK_IS_ROOT,
1481 		},
1482 	},
1483 };
1484 
1485 static struct clk_rcg prng_src = {
1486 	.ns_reg = 0x2e80,
1487 	.p = {
1488 		.pre_div_shift = 3,
1489 		.pre_div_width = 4,
1490 	},
1491 	.s = {
1492 		.src_sel_shift = 0,
1493 		.parent_map = gcc_pxo_pll8_map,
1494 	},
1495 	.clkr.hw = {
1496 		.init = &(struct clk_init_data){
1497 			.name = "prng_src",
1498 			.parent_names = gcc_pxo_pll8,
1499 			.num_parents = 2,
1500 			.ops = &clk_rcg_ops,
1501 		},
1502 	},
1503 };
1504 
1505 static struct clk_branch prng_clk = {
1506 	.halt_reg = 0x2fd8,
1507 	.halt_check = BRANCH_HALT_VOTED,
1508 	.halt_bit = 10,
1509 	.clkr = {
1510 		.enable_reg = 0x3080,
1511 		.enable_mask = BIT(10),
1512 		.hw.init = &(struct clk_init_data){
1513 			.name = "prng_clk",
1514 			.parent_names = (const char *[]){ "prng_src" },
1515 			.num_parents = 1,
1516 			.ops = &clk_branch_ops,
1517 		},
1518 	},
1519 };
1520 
1521 static const struct freq_tbl clk_tbl_sdc[] = {
1522 	{    144000, P_PXO,   3, 2, 125 },
1523 	{    400000, P_PLL8,  4, 1, 240 },
1524 	{  16000000, P_PLL8,  4, 1,   6 },
1525 	{  17070000, P_PLL8,  1, 2,  45 },
1526 	{  20210000, P_PLL8,  1, 1,  19 },
1527 	{  24000000, P_PLL8,  4, 1,   4 },
1528 	{  48000000, P_PLL8,  4, 1,   2 },
1529 	{ }
1530 };
1531 
1532 static struct clk_rcg sdc1_src = {
1533 	.ns_reg = 0x282c,
1534 	.md_reg = 0x2828,
1535 	.mn = {
1536 		.mnctr_en_bit = 8,
1537 		.mnctr_reset_bit = 7,
1538 		.mnctr_mode_shift = 5,
1539 		.n_val_shift = 16,
1540 		.m_val_shift = 16,
1541 		.width = 8,
1542 	},
1543 	.p = {
1544 		.pre_div_shift = 3,
1545 		.pre_div_width = 2,
1546 	},
1547 	.s = {
1548 		.src_sel_shift = 0,
1549 		.parent_map = gcc_pxo_pll8_map,
1550 	},
1551 	.freq_tbl = clk_tbl_sdc,
1552 	.clkr = {
1553 		.enable_reg = 0x282c,
1554 		.enable_mask = BIT(11),
1555 		.hw.init = &(struct clk_init_data){
1556 			.name = "sdc1_src",
1557 			.parent_names = gcc_pxo_pll8,
1558 			.num_parents = 2,
1559 			.ops = &clk_rcg_ops,
1560 			.flags = CLK_SET_RATE_GATE,
1561 		},
1562 	}
1563 };
1564 
1565 static struct clk_branch sdc1_clk = {
1566 	.halt_reg = 0x2fc8,
1567 	.halt_bit = 6,
1568 	.clkr = {
1569 		.enable_reg = 0x282c,
1570 		.enable_mask = BIT(9),
1571 		.hw.init = &(struct clk_init_data){
1572 			.name = "sdc1_clk",
1573 			.parent_names = (const char *[]){ "sdc1_src" },
1574 			.num_parents = 1,
1575 			.ops = &clk_branch_ops,
1576 			.flags = CLK_SET_RATE_PARENT,
1577 		},
1578 	},
1579 };
1580 
1581 static struct clk_rcg sdc2_src = {
1582 	.ns_reg = 0x284c,
1583 	.md_reg = 0x2848,
1584 	.mn = {
1585 		.mnctr_en_bit = 8,
1586 		.mnctr_reset_bit = 7,
1587 		.mnctr_mode_shift = 5,
1588 		.n_val_shift = 16,
1589 		.m_val_shift = 16,
1590 		.width = 8,
1591 	},
1592 	.p = {
1593 		.pre_div_shift = 3,
1594 		.pre_div_width = 2,
1595 	},
1596 	.s = {
1597 		.src_sel_shift = 0,
1598 		.parent_map = gcc_pxo_pll8_map,
1599 	},
1600 	.freq_tbl = clk_tbl_sdc,
1601 	.clkr = {
1602 		.enable_reg = 0x284c,
1603 		.enable_mask = BIT(11),
1604 		.hw.init = &(struct clk_init_data){
1605 			.name = "sdc2_src",
1606 			.parent_names = gcc_pxo_pll8,
1607 			.num_parents = 2,
1608 			.ops = &clk_rcg_ops,
1609 			.flags = CLK_SET_RATE_GATE,
1610 		},
1611 	}
1612 };
1613 
1614 static struct clk_branch sdc2_clk = {
1615 	.halt_reg = 0x2fc8,
1616 	.halt_bit = 5,
1617 	.clkr = {
1618 		.enable_reg = 0x284c,
1619 		.enable_mask = BIT(9),
1620 		.hw.init = &(struct clk_init_data){
1621 			.name = "sdc2_clk",
1622 			.parent_names = (const char *[]){ "sdc2_src" },
1623 			.num_parents = 1,
1624 			.ops = &clk_branch_ops,
1625 			.flags = CLK_SET_RATE_PARENT,
1626 		},
1627 	},
1628 };
1629 
1630 static struct clk_rcg sdc3_src = {
1631 	.ns_reg = 0x286c,
1632 	.md_reg = 0x2868,
1633 	.mn = {
1634 		.mnctr_en_bit = 8,
1635 		.mnctr_reset_bit = 7,
1636 		.mnctr_mode_shift = 5,
1637 		.n_val_shift = 16,
1638 		.m_val_shift = 16,
1639 		.width = 8,
1640 	},
1641 	.p = {
1642 		.pre_div_shift = 3,
1643 		.pre_div_width = 2,
1644 	},
1645 	.s = {
1646 		.src_sel_shift = 0,
1647 		.parent_map = gcc_pxo_pll8_map,
1648 	},
1649 	.freq_tbl = clk_tbl_sdc,
1650 	.clkr = {
1651 		.enable_reg = 0x286c,
1652 		.enable_mask = BIT(11),
1653 		.hw.init = &(struct clk_init_data){
1654 			.name = "sdc3_src",
1655 			.parent_names = gcc_pxo_pll8,
1656 			.num_parents = 2,
1657 			.ops = &clk_rcg_ops,
1658 			.flags = CLK_SET_RATE_GATE,
1659 		},
1660 	}
1661 };
1662 
1663 static struct clk_branch sdc3_clk = {
1664 	.halt_reg = 0x2fc8,
1665 	.halt_bit = 4,
1666 	.clkr = {
1667 		.enable_reg = 0x286c,
1668 		.enable_mask = BIT(9),
1669 		.hw.init = &(struct clk_init_data){
1670 			.name = "sdc3_clk",
1671 			.parent_names = (const char *[]){ "sdc3_src" },
1672 			.num_parents = 1,
1673 			.ops = &clk_branch_ops,
1674 			.flags = CLK_SET_RATE_PARENT,
1675 		},
1676 	},
1677 };
1678 
1679 static struct clk_rcg sdc4_src = {
1680 	.ns_reg = 0x288c,
1681 	.md_reg = 0x2888,
1682 	.mn = {
1683 		.mnctr_en_bit = 8,
1684 		.mnctr_reset_bit = 7,
1685 		.mnctr_mode_shift = 5,
1686 		.n_val_shift = 16,
1687 		.m_val_shift = 16,
1688 		.width = 8,
1689 	},
1690 	.p = {
1691 		.pre_div_shift = 3,
1692 		.pre_div_width = 2,
1693 	},
1694 	.s = {
1695 		.src_sel_shift = 0,
1696 		.parent_map = gcc_pxo_pll8_map,
1697 	},
1698 	.freq_tbl = clk_tbl_sdc,
1699 	.clkr = {
1700 		.enable_reg = 0x288c,
1701 		.enable_mask = BIT(11),
1702 		.hw.init = &(struct clk_init_data){
1703 			.name = "sdc4_src",
1704 			.parent_names = gcc_pxo_pll8,
1705 			.num_parents = 2,
1706 			.ops = &clk_rcg_ops,
1707 			.flags = CLK_SET_RATE_GATE,
1708 		},
1709 	}
1710 };
1711 
1712 static struct clk_branch sdc4_clk = {
1713 	.halt_reg = 0x2fc8,
1714 	.halt_bit = 3,
1715 	.clkr = {
1716 		.enable_reg = 0x288c,
1717 		.enable_mask = BIT(9),
1718 		.hw.init = &(struct clk_init_data){
1719 			.name = "sdc4_clk",
1720 			.parent_names = (const char *[]){ "sdc4_src" },
1721 			.num_parents = 1,
1722 			.ops = &clk_branch_ops,
1723 			.flags = CLK_SET_RATE_PARENT,
1724 		},
1725 	},
1726 };
1727 
1728 static struct clk_rcg sdc5_src = {
1729 	.ns_reg = 0x28ac,
1730 	.md_reg = 0x28a8,
1731 	.mn = {
1732 		.mnctr_en_bit = 8,
1733 		.mnctr_reset_bit = 7,
1734 		.mnctr_mode_shift = 5,
1735 		.n_val_shift = 16,
1736 		.m_val_shift = 16,
1737 		.width = 8,
1738 	},
1739 	.p = {
1740 		.pre_div_shift = 3,
1741 		.pre_div_width = 2,
1742 	},
1743 	.s = {
1744 		.src_sel_shift = 0,
1745 		.parent_map = gcc_pxo_pll8_map,
1746 	},
1747 	.freq_tbl = clk_tbl_sdc,
1748 	.clkr = {
1749 		.enable_reg = 0x28ac,
1750 		.enable_mask = BIT(11),
1751 		.hw.init = &(struct clk_init_data){
1752 			.name = "sdc5_src",
1753 			.parent_names = gcc_pxo_pll8,
1754 			.num_parents = 2,
1755 			.ops = &clk_rcg_ops,
1756 			.flags = CLK_SET_RATE_GATE,
1757 		},
1758 	}
1759 };
1760 
1761 static struct clk_branch sdc5_clk = {
1762 	.halt_reg = 0x2fc8,
1763 	.halt_bit = 2,
1764 	.clkr = {
1765 		.enable_reg = 0x28ac,
1766 		.enable_mask = BIT(9),
1767 		.hw.init = &(struct clk_init_data){
1768 			.name = "sdc5_clk",
1769 			.parent_names = (const char *[]){ "sdc5_src" },
1770 			.num_parents = 1,
1771 			.ops = &clk_branch_ops,
1772 			.flags = CLK_SET_RATE_PARENT,
1773 		},
1774 	},
1775 };
1776 
1777 static const struct freq_tbl clk_tbl_tsif_ref[] = {
1778 	{ 105000, P_PXO,  1, 1, 256 },
1779 	{ }
1780 };
1781 
1782 static struct clk_rcg tsif_ref_src = {
1783 	.ns_reg = 0x2710,
1784 	.md_reg = 0x270c,
1785 	.mn = {
1786 		.mnctr_en_bit = 8,
1787 		.mnctr_reset_bit = 7,
1788 		.mnctr_mode_shift = 5,
1789 		.n_val_shift = 16,
1790 		.m_val_shift = 16,
1791 		.width = 16,
1792 	},
1793 	.p = {
1794 		.pre_div_shift = 3,
1795 		.pre_div_width = 2,
1796 	},
1797 	.s = {
1798 		.src_sel_shift = 0,
1799 		.parent_map = gcc_pxo_pll8_map,
1800 	},
1801 	.freq_tbl = clk_tbl_tsif_ref,
1802 	.clkr = {
1803 		.enable_reg = 0x2710,
1804 		.enable_mask = BIT(11),
1805 		.hw.init = &(struct clk_init_data){
1806 			.name = "tsif_ref_src",
1807 			.parent_names = gcc_pxo_pll8,
1808 			.num_parents = 2,
1809 			.ops = &clk_rcg_ops,
1810 			.flags = CLK_SET_RATE_GATE,
1811 		},
1812 	}
1813 };
1814 
1815 static struct clk_branch tsif_ref_clk = {
1816 	.halt_reg = 0x2fd4,
1817 	.halt_bit = 5,
1818 	.clkr = {
1819 		.enable_reg = 0x2710,
1820 		.enable_mask = BIT(9),
1821 		.hw.init = &(struct clk_init_data){
1822 			.name = "tsif_ref_clk",
1823 			.parent_names = (const char *[]){ "tsif_ref_src" },
1824 			.num_parents = 1,
1825 			.ops = &clk_branch_ops,
1826 			.flags = CLK_SET_RATE_PARENT,
1827 		},
1828 	},
1829 };
1830 
1831 static const struct freq_tbl clk_tbl_usb[] = {
1832 	{ 60000000, P_PLL8, 1, 5, 32 },
1833 	{ }
1834 };
1835 
1836 static struct clk_rcg usb_hs1_xcvr_src = {
1837 	.ns_reg = 0x290c,
1838 	.md_reg = 0x2908,
1839 	.mn = {
1840 		.mnctr_en_bit = 8,
1841 		.mnctr_reset_bit = 7,
1842 		.mnctr_mode_shift = 5,
1843 		.n_val_shift = 16,
1844 		.m_val_shift = 16,
1845 		.width = 8,
1846 	},
1847 	.p = {
1848 		.pre_div_shift = 3,
1849 		.pre_div_width = 2,
1850 	},
1851 	.s = {
1852 		.src_sel_shift = 0,
1853 		.parent_map = gcc_pxo_pll8_map,
1854 	},
1855 	.freq_tbl = clk_tbl_usb,
1856 	.clkr = {
1857 		.enable_reg = 0x290c,
1858 		.enable_mask = BIT(11),
1859 		.hw.init = &(struct clk_init_data){
1860 			.name = "usb_hs1_xcvr_src",
1861 			.parent_names = gcc_pxo_pll8,
1862 			.num_parents = 2,
1863 			.ops = &clk_rcg_ops,
1864 			.flags = CLK_SET_RATE_GATE,
1865 		},
1866 	}
1867 };
1868 
1869 static struct clk_branch usb_hs1_xcvr_clk = {
1870 	.halt_reg = 0x2fc8,
1871 	.halt_bit = 0,
1872 	.clkr = {
1873 		.enable_reg = 0x290c,
1874 		.enable_mask = BIT(9),
1875 		.hw.init = &(struct clk_init_data){
1876 			.name = "usb_hs1_xcvr_clk",
1877 			.parent_names = (const char *[]){ "usb_hs1_xcvr_src" },
1878 			.num_parents = 1,
1879 			.ops = &clk_branch_ops,
1880 			.flags = CLK_SET_RATE_PARENT,
1881 		},
1882 	},
1883 };
1884 
1885 static struct clk_rcg usb_fs1_xcvr_fs_src = {
1886 	.ns_reg = 0x2968,
1887 	.md_reg = 0x2964,
1888 	.mn = {
1889 		.mnctr_en_bit = 8,
1890 		.mnctr_reset_bit = 7,
1891 		.mnctr_mode_shift = 5,
1892 		.n_val_shift = 16,
1893 		.m_val_shift = 16,
1894 		.width = 8,
1895 	},
1896 	.p = {
1897 		.pre_div_shift = 3,
1898 		.pre_div_width = 2,
1899 	},
1900 	.s = {
1901 		.src_sel_shift = 0,
1902 		.parent_map = gcc_pxo_pll8_map,
1903 	},
1904 	.freq_tbl = clk_tbl_usb,
1905 	.clkr = {
1906 		.enable_reg = 0x2968,
1907 		.enable_mask = BIT(11),
1908 		.hw.init = &(struct clk_init_data){
1909 			.name = "usb_fs1_xcvr_fs_src",
1910 			.parent_names = gcc_pxo_pll8,
1911 			.num_parents = 2,
1912 			.ops = &clk_rcg_ops,
1913 			.flags = CLK_SET_RATE_GATE,
1914 		},
1915 	}
1916 };
1917 
1918 static const char *usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" };
1919 
1920 static struct clk_branch usb_fs1_xcvr_fs_clk = {
1921 	.halt_reg = 0x2fcc,
1922 	.halt_bit = 15,
1923 	.clkr = {
1924 		.enable_reg = 0x2968,
1925 		.enable_mask = BIT(9),
1926 		.hw.init = &(struct clk_init_data){
1927 			.name = "usb_fs1_xcvr_fs_clk",
1928 			.parent_names = usb_fs1_xcvr_fs_src_p,
1929 			.num_parents = 1,
1930 			.ops = &clk_branch_ops,
1931 			.flags = CLK_SET_RATE_PARENT,
1932 		},
1933 	},
1934 };
1935 
1936 static struct clk_branch usb_fs1_system_clk = {
1937 	.halt_reg = 0x2fcc,
1938 	.halt_bit = 16,
1939 	.clkr = {
1940 		.enable_reg = 0x296c,
1941 		.enable_mask = BIT(4),
1942 		.hw.init = &(struct clk_init_data){
1943 			.parent_names = usb_fs1_xcvr_fs_src_p,
1944 			.num_parents = 1,
1945 			.name = "usb_fs1_system_clk",
1946 			.ops = &clk_branch_ops,
1947 			.flags = CLK_SET_RATE_PARENT,
1948 		},
1949 	},
1950 };
1951 
1952 static struct clk_rcg usb_fs2_xcvr_fs_src = {
1953 	.ns_reg = 0x2988,
1954 	.md_reg = 0x2984,
1955 	.mn = {
1956 		.mnctr_en_bit = 8,
1957 		.mnctr_reset_bit = 7,
1958 		.mnctr_mode_shift = 5,
1959 		.n_val_shift = 16,
1960 		.m_val_shift = 16,
1961 		.width = 8,
1962 	},
1963 	.p = {
1964 		.pre_div_shift = 3,
1965 		.pre_div_width = 2,
1966 	},
1967 	.s = {
1968 		.src_sel_shift = 0,
1969 		.parent_map = gcc_pxo_pll8_map,
1970 	},
1971 	.freq_tbl = clk_tbl_usb,
1972 	.clkr = {
1973 		.enable_reg = 0x2988,
1974 		.enable_mask = BIT(11),
1975 		.hw.init = &(struct clk_init_data){
1976 			.name = "usb_fs2_xcvr_fs_src",
1977 			.parent_names = gcc_pxo_pll8,
1978 			.num_parents = 2,
1979 			.ops = &clk_rcg_ops,
1980 			.flags = CLK_SET_RATE_GATE,
1981 		},
1982 	}
1983 };
1984 
1985 static const char *usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" };
1986 
1987 static struct clk_branch usb_fs2_xcvr_fs_clk = {
1988 	.halt_reg = 0x2fcc,
1989 	.halt_bit = 12,
1990 	.clkr = {
1991 		.enable_reg = 0x2988,
1992 		.enable_mask = BIT(9),
1993 		.hw.init = &(struct clk_init_data){
1994 			.name = "usb_fs2_xcvr_fs_clk",
1995 			.parent_names = usb_fs2_xcvr_fs_src_p,
1996 			.num_parents = 1,
1997 			.ops = &clk_branch_ops,
1998 			.flags = CLK_SET_RATE_PARENT,
1999 		},
2000 	},
2001 };
2002 
2003 static struct clk_branch usb_fs2_system_clk = {
2004 	.halt_reg = 0x2fcc,
2005 	.halt_bit = 13,
2006 	.clkr = {
2007 		.enable_reg = 0x298c,
2008 		.enable_mask = BIT(4),
2009 		.hw.init = &(struct clk_init_data){
2010 			.name = "usb_fs2_system_clk",
2011 			.parent_names = usb_fs2_xcvr_fs_src_p,
2012 			.num_parents = 1,
2013 			.ops = &clk_branch_ops,
2014 			.flags = CLK_SET_RATE_PARENT,
2015 		},
2016 	},
2017 };
2018 
2019 static struct clk_branch gsbi1_h_clk = {
2020 	.halt_reg = 0x2fcc,
2021 	.halt_bit = 11,
2022 	.clkr = {
2023 		.enable_reg = 0x29c0,
2024 		.enable_mask = BIT(4),
2025 		.hw.init = &(struct clk_init_data){
2026 			.name = "gsbi1_h_clk",
2027 			.ops = &clk_branch_ops,
2028 			.flags = CLK_IS_ROOT,
2029 		},
2030 	},
2031 };
2032 
2033 static struct clk_branch gsbi2_h_clk = {
2034 	.halt_reg = 0x2fcc,
2035 	.halt_bit = 7,
2036 	.clkr = {
2037 		.enable_reg = 0x29e0,
2038 		.enable_mask = BIT(4),
2039 		.hw.init = &(struct clk_init_data){
2040 			.name = "gsbi2_h_clk",
2041 			.ops = &clk_branch_ops,
2042 			.flags = CLK_IS_ROOT,
2043 		},
2044 	},
2045 };
2046 
2047 static struct clk_branch gsbi3_h_clk = {
2048 	.halt_reg = 0x2fcc,
2049 	.halt_bit = 3,
2050 	.clkr = {
2051 		.enable_reg = 0x2a00,
2052 		.enable_mask = BIT(4),
2053 		.hw.init = &(struct clk_init_data){
2054 			.name = "gsbi3_h_clk",
2055 			.ops = &clk_branch_ops,
2056 			.flags = CLK_IS_ROOT,
2057 		},
2058 	},
2059 };
2060 
2061 static struct clk_branch gsbi4_h_clk = {
2062 	.halt_reg = 0x2fd0,
2063 	.halt_bit = 27,
2064 	.clkr = {
2065 		.enable_reg = 0x2a20,
2066 		.enable_mask = BIT(4),
2067 		.hw.init = &(struct clk_init_data){
2068 			.name = "gsbi4_h_clk",
2069 			.ops = &clk_branch_ops,
2070 			.flags = CLK_IS_ROOT,
2071 		},
2072 	},
2073 };
2074 
2075 static struct clk_branch gsbi5_h_clk = {
2076 	.halt_reg = 0x2fd0,
2077 	.halt_bit = 23,
2078 	.clkr = {
2079 		.enable_reg = 0x2a40,
2080 		.enable_mask = BIT(4),
2081 		.hw.init = &(struct clk_init_data){
2082 			.name = "gsbi5_h_clk",
2083 			.ops = &clk_branch_ops,
2084 			.flags = CLK_IS_ROOT,
2085 		},
2086 	},
2087 };
2088 
2089 static struct clk_branch gsbi6_h_clk = {
2090 	.halt_reg = 0x2fd0,
2091 	.halt_bit = 19,
2092 	.clkr = {
2093 		.enable_reg = 0x2a60,
2094 		.enable_mask = BIT(4),
2095 		.hw.init = &(struct clk_init_data){
2096 			.name = "gsbi6_h_clk",
2097 			.ops = &clk_branch_ops,
2098 			.flags = CLK_IS_ROOT,
2099 		},
2100 	},
2101 };
2102 
2103 static struct clk_branch gsbi7_h_clk = {
2104 	.halt_reg = 0x2fd0,
2105 	.halt_bit = 15,
2106 	.clkr = {
2107 		.enable_reg = 0x2a80,
2108 		.enable_mask = BIT(4),
2109 		.hw.init = &(struct clk_init_data){
2110 			.name = "gsbi7_h_clk",
2111 			.ops = &clk_branch_ops,
2112 			.flags = CLK_IS_ROOT,
2113 		},
2114 	},
2115 };
2116 
2117 static struct clk_branch gsbi8_h_clk = {
2118 	.halt_reg = 0x2fd0,
2119 	.halt_bit = 11,
2120 	.clkr = {
2121 		.enable_reg = 0x2aa0,
2122 		.enable_mask = BIT(4),
2123 		.hw.init = &(struct clk_init_data){
2124 			.name = "gsbi8_h_clk",
2125 			.ops = &clk_branch_ops,
2126 			.flags = CLK_IS_ROOT,
2127 		},
2128 	},
2129 };
2130 
2131 static struct clk_branch gsbi9_h_clk = {
2132 	.halt_reg = 0x2fd0,
2133 	.halt_bit = 7,
2134 	.clkr = {
2135 		.enable_reg = 0x2ac0,
2136 		.enable_mask = BIT(4),
2137 		.hw.init = &(struct clk_init_data){
2138 			.name = "gsbi9_h_clk",
2139 			.ops = &clk_branch_ops,
2140 			.flags = CLK_IS_ROOT,
2141 		},
2142 	},
2143 };
2144 
2145 static struct clk_branch gsbi10_h_clk = {
2146 	.halt_reg = 0x2fd0,
2147 	.halt_bit = 3,
2148 	.clkr = {
2149 		.enable_reg = 0x2ae0,
2150 		.enable_mask = BIT(4),
2151 		.hw.init = &(struct clk_init_data){
2152 			.name = "gsbi10_h_clk",
2153 			.ops = &clk_branch_ops,
2154 			.flags = CLK_IS_ROOT,
2155 		},
2156 	},
2157 };
2158 
2159 static struct clk_branch gsbi11_h_clk = {
2160 	.halt_reg = 0x2fd4,
2161 	.halt_bit = 18,
2162 	.clkr = {
2163 		.enable_reg = 0x2b00,
2164 		.enable_mask = BIT(4),
2165 		.hw.init = &(struct clk_init_data){
2166 			.name = "gsbi11_h_clk",
2167 			.ops = &clk_branch_ops,
2168 			.flags = CLK_IS_ROOT,
2169 		},
2170 	},
2171 };
2172 
2173 static struct clk_branch gsbi12_h_clk = {
2174 	.halt_reg = 0x2fd4,
2175 	.halt_bit = 14,
2176 	.clkr = {
2177 		.enable_reg = 0x2b20,
2178 		.enable_mask = BIT(4),
2179 		.hw.init = &(struct clk_init_data){
2180 			.name = "gsbi12_h_clk",
2181 			.ops = &clk_branch_ops,
2182 			.flags = CLK_IS_ROOT,
2183 		},
2184 	},
2185 };
2186 
2187 static struct clk_branch tsif_h_clk = {
2188 	.halt_reg = 0x2fd4,
2189 	.halt_bit = 7,
2190 	.clkr = {
2191 		.enable_reg = 0x2700,
2192 		.enable_mask = BIT(4),
2193 		.hw.init = &(struct clk_init_data){
2194 			.name = "tsif_h_clk",
2195 			.ops = &clk_branch_ops,
2196 			.flags = CLK_IS_ROOT,
2197 		},
2198 	},
2199 };
2200 
2201 static struct clk_branch usb_fs1_h_clk = {
2202 	.halt_reg = 0x2fcc,
2203 	.halt_bit = 17,
2204 	.clkr = {
2205 		.enable_reg = 0x2960,
2206 		.enable_mask = BIT(4),
2207 		.hw.init = &(struct clk_init_data){
2208 			.name = "usb_fs1_h_clk",
2209 			.ops = &clk_branch_ops,
2210 			.flags = CLK_IS_ROOT,
2211 		},
2212 	},
2213 };
2214 
2215 static struct clk_branch usb_fs2_h_clk = {
2216 	.halt_reg = 0x2fcc,
2217 	.halt_bit = 14,
2218 	.clkr = {
2219 		.enable_reg = 0x2980,
2220 		.enable_mask = BIT(4),
2221 		.hw.init = &(struct clk_init_data){
2222 			.name = "usb_fs2_h_clk",
2223 			.ops = &clk_branch_ops,
2224 			.flags = CLK_IS_ROOT,
2225 		},
2226 	},
2227 };
2228 
2229 static struct clk_branch usb_hs1_h_clk = {
2230 	.halt_reg = 0x2fc8,
2231 	.halt_bit = 1,
2232 	.clkr = {
2233 		.enable_reg = 0x2900,
2234 		.enable_mask = BIT(4),
2235 		.hw.init = &(struct clk_init_data){
2236 			.name = "usb_hs1_h_clk",
2237 			.ops = &clk_branch_ops,
2238 			.flags = CLK_IS_ROOT,
2239 		},
2240 	},
2241 };
2242 
2243 static struct clk_branch sdc1_h_clk = {
2244 	.halt_reg = 0x2fc8,
2245 	.halt_bit = 11,
2246 	.clkr = {
2247 		.enable_reg = 0x2820,
2248 		.enable_mask = BIT(4),
2249 		.hw.init = &(struct clk_init_data){
2250 			.name = "sdc1_h_clk",
2251 			.ops = &clk_branch_ops,
2252 			.flags = CLK_IS_ROOT,
2253 		},
2254 	},
2255 };
2256 
2257 static struct clk_branch sdc2_h_clk = {
2258 	.halt_reg = 0x2fc8,
2259 	.halt_bit = 10,
2260 	.clkr = {
2261 		.enable_reg = 0x2840,
2262 		.enable_mask = BIT(4),
2263 		.hw.init = &(struct clk_init_data){
2264 			.name = "sdc2_h_clk",
2265 			.ops = &clk_branch_ops,
2266 			.flags = CLK_IS_ROOT,
2267 		},
2268 	},
2269 };
2270 
2271 static struct clk_branch sdc3_h_clk = {
2272 	.halt_reg = 0x2fc8,
2273 	.halt_bit = 9,
2274 	.clkr = {
2275 		.enable_reg = 0x2860,
2276 		.enable_mask = BIT(4),
2277 		.hw.init = &(struct clk_init_data){
2278 			.name = "sdc3_h_clk",
2279 			.ops = &clk_branch_ops,
2280 			.flags = CLK_IS_ROOT,
2281 		},
2282 	},
2283 };
2284 
2285 static struct clk_branch sdc4_h_clk = {
2286 	.halt_reg = 0x2fc8,
2287 	.halt_bit = 8,
2288 	.clkr = {
2289 		.enable_reg = 0x2880,
2290 		.enable_mask = BIT(4),
2291 		.hw.init = &(struct clk_init_data){
2292 			.name = "sdc4_h_clk",
2293 			.ops = &clk_branch_ops,
2294 			.flags = CLK_IS_ROOT,
2295 		},
2296 	},
2297 };
2298 
2299 static struct clk_branch sdc5_h_clk = {
2300 	.halt_reg = 0x2fc8,
2301 	.halt_bit = 7,
2302 	.clkr = {
2303 		.enable_reg = 0x28a0,
2304 		.enable_mask = BIT(4),
2305 		.hw.init = &(struct clk_init_data){
2306 			.name = "sdc5_h_clk",
2307 			.ops = &clk_branch_ops,
2308 			.flags = CLK_IS_ROOT,
2309 		},
2310 	},
2311 };
2312 
2313 static struct clk_branch adm0_clk = {
2314 	.halt_reg = 0x2fdc,
2315 	.halt_check = BRANCH_HALT_VOTED,
2316 	.halt_bit = 14,
2317 	.clkr = {
2318 		.enable_reg = 0x3080,
2319 		.enable_mask = BIT(2),
2320 		.hw.init = &(struct clk_init_data){
2321 			.name = "adm0_clk",
2322 			.ops = &clk_branch_ops,
2323 			.flags = CLK_IS_ROOT,
2324 		},
2325 	},
2326 };
2327 
2328 static struct clk_branch adm0_pbus_clk = {
2329 	.halt_reg = 0x2fdc,
2330 	.halt_check = BRANCH_HALT_VOTED,
2331 	.halt_bit = 13,
2332 	.clkr = {
2333 		.enable_reg = 0x3080,
2334 		.enable_mask = BIT(3),
2335 		.hw.init = &(struct clk_init_data){
2336 			.name = "adm0_pbus_clk",
2337 			.ops = &clk_branch_ops,
2338 			.flags = CLK_IS_ROOT,
2339 		},
2340 	},
2341 };
2342 
2343 static struct clk_branch adm1_clk = {
2344 	.halt_reg = 0x2fdc,
2345 	.halt_bit = 12,
2346 	.halt_check = BRANCH_HALT_VOTED,
2347 	.clkr = {
2348 		.enable_reg = 0x3080,
2349 		.enable_mask = BIT(4),
2350 		.hw.init = &(struct clk_init_data){
2351 			.name = "adm1_clk",
2352 			.ops = &clk_branch_ops,
2353 			.flags = CLK_IS_ROOT,
2354 		},
2355 	},
2356 };
2357 
2358 static struct clk_branch adm1_pbus_clk = {
2359 	.halt_reg = 0x2fdc,
2360 	.halt_bit = 11,
2361 	.halt_check = BRANCH_HALT_VOTED,
2362 	.clkr = {
2363 		.enable_reg = 0x3080,
2364 		.enable_mask = BIT(5),
2365 		.hw.init = &(struct clk_init_data){
2366 			.name = "adm1_pbus_clk",
2367 			.ops = &clk_branch_ops,
2368 			.flags = CLK_IS_ROOT,
2369 		},
2370 	},
2371 };
2372 
2373 static struct clk_branch modem_ahb1_h_clk = {
2374 	.halt_reg = 0x2fdc,
2375 	.halt_bit = 8,
2376 	.halt_check = BRANCH_HALT_VOTED,
2377 	.clkr = {
2378 		.enable_reg = 0x3080,
2379 		.enable_mask = BIT(0),
2380 		.hw.init = &(struct clk_init_data){
2381 			.name = "modem_ahb1_h_clk",
2382 			.ops = &clk_branch_ops,
2383 			.flags = CLK_IS_ROOT,
2384 		},
2385 	},
2386 };
2387 
2388 static struct clk_branch modem_ahb2_h_clk = {
2389 	.halt_reg = 0x2fdc,
2390 	.halt_bit = 7,
2391 	.halt_check = BRANCH_HALT_VOTED,
2392 	.clkr = {
2393 		.enable_reg = 0x3080,
2394 		.enable_mask = BIT(1),
2395 		.hw.init = &(struct clk_init_data){
2396 			.name = "modem_ahb2_h_clk",
2397 			.ops = &clk_branch_ops,
2398 			.flags = CLK_IS_ROOT,
2399 		},
2400 	},
2401 };
2402 
2403 static struct clk_branch pmic_arb0_h_clk = {
2404 	.halt_reg = 0x2fd8,
2405 	.halt_check = BRANCH_HALT_VOTED,
2406 	.halt_bit = 22,
2407 	.clkr = {
2408 		.enable_reg = 0x3080,
2409 		.enable_mask = BIT(8),
2410 		.hw.init = &(struct clk_init_data){
2411 			.name = "pmic_arb0_h_clk",
2412 			.ops = &clk_branch_ops,
2413 			.flags = CLK_IS_ROOT,
2414 		},
2415 	},
2416 };
2417 
2418 static struct clk_branch pmic_arb1_h_clk = {
2419 	.halt_reg = 0x2fd8,
2420 	.halt_check = BRANCH_HALT_VOTED,
2421 	.halt_bit = 21,
2422 	.clkr = {
2423 		.enable_reg = 0x3080,
2424 		.enable_mask = BIT(9),
2425 		.hw.init = &(struct clk_init_data){
2426 			.name = "pmic_arb1_h_clk",
2427 			.ops = &clk_branch_ops,
2428 			.flags = CLK_IS_ROOT,
2429 		},
2430 	},
2431 };
2432 
2433 static struct clk_branch pmic_ssbi2_clk = {
2434 	.halt_reg = 0x2fd8,
2435 	.halt_check = BRANCH_HALT_VOTED,
2436 	.halt_bit = 23,
2437 	.clkr = {
2438 		.enable_reg = 0x3080,
2439 		.enable_mask = BIT(7),
2440 		.hw.init = &(struct clk_init_data){
2441 			.name = "pmic_ssbi2_clk",
2442 			.ops = &clk_branch_ops,
2443 			.flags = CLK_IS_ROOT,
2444 		},
2445 	},
2446 };
2447 
2448 static struct clk_branch rpm_msg_ram_h_clk = {
2449 	.hwcg_reg = 0x27e0,
2450 	.hwcg_bit = 6,
2451 	.halt_reg = 0x2fd8,
2452 	.halt_check = BRANCH_HALT_VOTED,
2453 	.halt_bit = 12,
2454 	.clkr = {
2455 		.enable_reg = 0x3080,
2456 		.enable_mask = BIT(6),
2457 		.hw.init = &(struct clk_init_data){
2458 			.name = "rpm_msg_ram_h_clk",
2459 			.ops = &clk_branch_ops,
2460 			.flags = CLK_IS_ROOT,
2461 		},
2462 	},
2463 };
2464 
2465 static struct clk_regmap *gcc_msm8660_clks[] = {
2466 	[PLL8] = &pll8.clkr,
2467 	[PLL8_VOTE] = &pll8_vote,
2468 	[GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
2469 	[GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
2470 	[GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
2471 	[GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
2472 	[GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
2473 	[GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
2474 	[GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
2475 	[GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
2476 	[GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
2477 	[GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
2478 	[GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
2479 	[GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
2480 	[GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
2481 	[GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
2482 	[GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
2483 	[GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
2484 	[GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
2485 	[GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
2486 	[GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
2487 	[GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
2488 	[GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
2489 	[GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
2490 	[GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
2491 	[GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
2492 	[GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
2493 	[GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
2494 	[GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
2495 	[GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
2496 	[GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
2497 	[GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
2498 	[GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
2499 	[GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
2500 	[GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
2501 	[GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
2502 	[GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
2503 	[GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
2504 	[GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
2505 	[GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
2506 	[GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
2507 	[GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
2508 	[GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
2509 	[GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
2510 	[GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
2511 	[GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
2512 	[GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
2513 	[GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
2514 	[GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
2515 	[GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
2516 	[GP0_SRC] = &gp0_src.clkr,
2517 	[GP0_CLK] = &gp0_clk.clkr,
2518 	[GP1_SRC] = &gp1_src.clkr,
2519 	[GP1_CLK] = &gp1_clk.clkr,
2520 	[GP2_SRC] = &gp2_src.clkr,
2521 	[GP2_CLK] = &gp2_clk.clkr,
2522 	[PMEM_CLK] = &pmem_clk.clkr,
2523 	[PRNG_SRC] = &prng_src.clkr,
2524 	[PRNG_CLK] = &prng_clk.clkr,
2525 	[SDC1_SRC] = &sdc1_src.clkr,
2526 	[SDC1_CLK] = &sdc1_clk.clkr,
2527 	[SDC2_SRC] = &sdc2_src.clkr,
2528 	[SDC2_CLK] = &sdc2_clk.clkr,
2529 	[SDC3_SRC] = &sdc3_src.clkr,
2530 	[SDC3_CLK] = &sdc3_clk.clkr,
2531 	[SDC4_SRC] = &sdc4_src.clkr,
2532 	[SDC4_CLK] = &sdc4_clk.clkr,
2533 	[SDC5_SRC] = &sdc5_src.clkr,
2534 	[SDC5_CLK] = &sdc5_clk.clkr,
2535 	[TSIF_REF_SRC] = &tsif_ref_src.clkr,
2536 	[TSIF_REF_CLK] = &tsif_ref_clk.clkr,
2537 	[USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
2538 	[USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
2539 	[USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
2540 	[USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
2541 	[USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
2542 	[USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
2543 	[USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
2544 	[USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
2545 	[GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
2546 	[GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
2547 	[GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
2548 	[GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
2549 	[GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
2550 	[GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
2551 	[GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
2552 	[GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
2553 	[GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
2554 	[GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
2555 	[GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
2556 	[GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
2557 	[TSIF_H_CLK] = &tsif_h_clk.clkr,
2558 	[USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
2559 	[USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
2560 	[USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
2561 	[SDC1_H_CLK] = &sdc1_h_clk.clkr,
2562 	[SDC2_H_CLK] = &sdc2_h_clk.clkr,
2563 	[SDC3_H_CLK] = &sdc3_h_clk.clkr,
2564 	[SDC4_H_CLK] = &sdc4_h_clk.clkr,
2565 	[SDC5_H_CLK] = &sdc5_h_clk.clkr,
2566 	[ADM0_CLK] = &adm0_clk.clkr,
2567 	[ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
2568 	[ADM1_CLK] = &adm1_clk.clkr,
2569 	[ADM1_PBUS_CLK] = &adm1_pbus_clk.clkr,
2570 	[MODEM_AHB1_H_CLK] = &modem_ahb1_h_clk.clkr,
2571 	[MODEM_AHB2_H_CLK] = &modem_ahb2_h_clk.clkr,
2572 	[PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
2573 	[PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
2574 	[PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
2575 	[RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
2576 };
2577 
2578 static const struct qcom_reset_map gcc_msm8660_resets[] = {
2579 	[AFAB_CORE_RESET] = { 0x2080, 7 },
2580 	[SCSS_SYS_RESET] = { 0x20b4, 1 },
2581 	[SCSS_SYS_POR_RESET] = { 0x20b4 },
2582 	[AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
2583 	[AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
2584 	[AFAB_SMPSS_M0_RESET] = { 0x20b8 },
2585 	[AFAB_EBI1_S_RESET] = { 0x20c0, 7 },
2586 	[SFAB_CORE_RESET] = { 0x2120, 7 },
2587 	[SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
2588 	[SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
2589 	[SFAB_ADM0_M2_RESET] = { 0x21e4, 7 },
2590 	[ADM0_C2_RESET] = { 0x220c, 4 },
2591 	[ADM0_C1_RESET] = { 0x220c, 3 },
2592 	[ADM0_C0_RESET] = { 0x220c, 2 },
2593 	[ADM0_PBUS_RESET] = { 0x220c, 1 },
2594 	[ADM0_RESET] = { 0x220c },
2595 	[SFAB_ADM1_M0_RESET] = { 0x2220, 7 },
2596 	[SFAB_ADM1_M1_RESET] = { 0x2224, 7 },
2597 	[SFAB_ADM1_M2_RESET] = { 0x2228, 7 },
2598 	[MMFAB_ADM1_M3_RESET] = { 0x2240, 7 },
2599 	[ADM1_C3_RESET] = { 0x226c, 5 },
2600 	[ADM1_C2_RESET] = { 0x226c, 4 },
2601 	[ADM1_C1_RESET] = { 0x226c, 3 },
2602 	[ADM1_C0_RESET] = { 0x226c, 2 },
2603 	[ADM1_PBUS_RESET] = { 0x226c, 1 },
2604 	[ADM1_RESET] = { 0x226c },
2605 	[IMEM0_RESET] = { 0x2280, 7 },
2606 	[SFAB_LPASS_Q6_RESET] = { 0x23a0, 7 },
2607 	[SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
2608 	[AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
2609 	[AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
2610 	[DFAB_CORE_RESET] = { 0x24ac, 7 },
2611 	[SFAB_DFAB_M_RESET] = { 0x2500, 7 },
2612 	[DFAB_SFAB_M_RESET] = { 0x2520, 7 },
2613 	[DFAB_SWAY0_RESET] = { 0x2540, 7 },
2614 	[DFAB_SWAY1_RESET] = { 0x2544, 7 },
2615 	[DFAB_ARB0_RESET] = { 0x2560, 7 },
2616 	[DFAB_ARB1_RESET] = { 0x2564, 7 },
2617 	[PPSS_PROC_RESET] = { 0x2594, 1 },
2618 	[PPSS_RESET] = { 0x2594 },
2619 	[PMEM_RESET] = { 0x25a0, 7 },
2620 	[DMA_BAM_RESET] = { 0x25c0, 7 },
2621 	[SIC_RESET] = { 0x25e0, 7 },
2622 	[SPS_TIC_RESET] = { 0x2600, 7 },
2623 	[CFBP0_RESET] = { 0x2650, 7 },
2624 	[CFBP1_RESET] = { 0x2654, 7 },
2625 	[CFBP2_RESET] = { 0x2658, 7 },
2626 	[EBI2_RESET] = { 0x2664, 7 },
2627 	[SFAB_CFPB_M_RESET] = { 0x2680, 7 },
2628 	[CFPB_MASTER_RESET] = { 0x26a0, 7 },
2629 	[SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
2630 	[CFPB_SPLITTER_RESET] = { 0x26e0, 7 },
2631 	[TSIF_RESET] = { 0x2700, 7 },
2632 	[CE1_RESET] = { 0x2720, 7 },
2633 	[CE2_RESET] = { 0x2740, 7 },
2634 	[SFAB_SFPB_M_RESET] = { 0x2780, 7 },
2635 	[SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
2636 	[RPM_PROC_RESET] = { 0x27c0, 7 },
2637 	[RPM_BUS_RESET] = { 0x27c4, 7 },
2638 	[RPM_MSG_RAM_RESET] = { 0x27e0, 7 },
2639 	[PMIC_ARB0_RESET] = { 0x2800, 7 },
2640 	[PMIC_ARB1_RESET] = { 0x2804, 7 },
2641 	[PMIC_SSBI2_RESET] = { 0x280c, 12 },
2642 	[SDC1_RESET] = { 0x2830 },
2643 	[SDC2_RESET] = { 0x2850 },
2644 	[SDC3_RESET] = { 0x2870 },
2645 	[SDC4_RESET] = { 0x2890 },
2646 	[SDC5_RESET] = { 0x28b0 },
2647 	[USB_HS1_RESET] = { 0x2910 },
2648 	[USB_HS2_XCVR_RESET] = { 0x2934, 1 },
2649 	[USB_HS2_RESET] = { 0x2934 },
2650 	[USB_FS1_XCVR_RESET] = { 0x2974, 1 },
2651 	[USB_FS1_RESET] = { 0x2974 },
2652 	[USB_FS2_XCVR_RESET] = { 0x2994, 1 },
2653 	[USB_FS2_RESET] = { 0x2994 },
2654 	[GSBI1_RESET] = { 0x29dc },
2655 	[GSBI2_RESET] = { 0x29fc },
2656 	[GSBI3_RESET] = { 0x2a1c },
2657 	[GSBI4_RESET] = { 0x2a3c },
2658 	[GSBI5_RESET] = { 0x2a5c },
2659 	[GSBI6_RESET] = { 0x2a7c },
2660 	[GSBI7_RESET] = { 0x2a9c },
2661 	[GSBI8_RESET] = { 0x2abc },
2662 	[GSBI9_RESET] = { 0x2adc },
2663 	[GSBI10_RESET] = { 0x2afc },
2664 	[GSBI11_RESET] = { 0x2b1c },
2665 	[GSBI12_RESET] = { 0x2b3c },
2666 	[SPDM_RESET] = { 0x2b6c },
2667 	[SEC_CTRL_RESET] = { 0x2b80, 7 },
2668 	[TLMM_H_RESET] = { 0x2ba0, 7 },
2669 	[TLMM_RESET] = { 0x2ba4, 7 },
2670 	[MARRM_PWRON_RESET] = { 0x2bd4, 1 },
2671 	[MARM_RESET] = { 0x2bd4 },
2672 	[MAHB1_RESET] = { 0x2be4, 7 },
2673 	[SFAB_MSS_S_RESET] = { 0x2c00, 7 },
2674 	[MAHB2_RESET] = { 0x2c20, 7 },
2675 	[MODEM_SW_AHB_RESET] = { 0x2c48, 1 },
2676 	[MODEM_RESET] = { 0x2c48 },
2677 	[SFAB_MSS_MDM1_RESET] = { 0x2c4c, 1 },
2678 	[SFAB_MSS_MDM0_RESET] = { 0x2c4c },
2679 	[MSS_SLP_RESET] = { 0x2c60, 7 },
2680 	[MSS_MARM_SAW_RESET] = { 0x2c68, 1 },
2681 	[MSS_WDOG_RESET] = { 0x2c68 },
2682 	[TSSC_RESET] = { 0x2ca0, 7 },
2683 	[PDM_RESET] = { 0x2cc0, 12 },
2684 	[SCSS_CORE0_RESET] = { 0x2d60, 1 },
2685 	[SCSS_CORE0_POR_RESET] = { 0x2d60 },
2686 	[SCSS_CORE1_RESET] = { 0x2d80, 1 },
2687 	[SCSS_CORE1_POR_RESET] = { 0x2d80 },
2688 	[MPM_RESET] = { 0x2da4, 1 },
2689 	[EBI1_1X_DIV_RESET] = { 0x2dec, 9 },
2690 	[EBI1_RESET] = { 0x2dec, 7 },
2691 	[SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
2692 	[USB_PHY0_RESET] = { 0x2e20 },
2693 	[USB_PHY1_RESET] = { 0x2e40 },
2694 	[PRNG_RESET] = { 0x2e80, 12 },
2695 };
2696 
2697 static const struct regmap_config gcc_msm8660_regmap_config = {
2698 	.reg_bits	= 32,
2699 	.reg_stride	= 4,
2700 	.val_bits	= 32,
2701 	.max_register	= 0x363c,
2702 	.fast_io	= true,
2703 };
2704 
2705 static const struct qcom_cc_desc gcc_msm8660_desc = {
2706 	.config = &gcc_msm8660_regmap_config,
2707 	.clks = gcc_msm8660_clks,
2708 	.num_clks = ARRAY_SIZE(gcc_msm8660_clks),
2709 	.resets = gcc_msm8660_resets,
2710 	.num_resets = ARRAY_SIZE(gcc_msm8660_resets),
2711 };
2712 
2713 static const struct of_device_id gcc_msm8660_match_table[] = {
2714 	{ .compatible = "qcom,gcc-msm8660" },
2715 	{ }
2716 };
2717 MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table);
2718 
2719 static int gcc_msm8660_probe(struct platform_device *pdev)
2720 {
2721 	struct clk *clk;
2722 	struct device *dev = &pdev->dev;
2723 
2724 	/* Temporary until RPM clocks supported */
2725 	clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000);
2726 	if (IS_ERR(clk))
2727 		return PTR_ERR(clk);
2728 
2729 	clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000);
2730 	if (IS_ERR(clk))
2731 		return PTR_ERR(clk);
2732 
2733 	return qcom_cc_probe(pdev, &gcc_msm8660_desc);
2734 }
2735 
2736 static int gcc_msm8660_remove(struct platform_device *pdev)
2737 {
2738 	qcom_cc_remove(pdev);
2739 	return 0;
2740 }
2741 
2742 static struct platform_driver gcc_msm8660_driver = {
2743 	.probe		= gcc_msm8660_probe,
2744 	.remove		= gcc_msm8660_remove,
2745 	.driver		= {
2746 		.name	= "gcc-msm8660",
2747 		.owner	= THIS_MODULE,
2748 		.of_match_table = gcc_msm8660_match_table,
2749 	},
2750 };
2751 
2752 static int __init gcc_msm8660_init(void)
2753 {
2754 	return platform_driver_register(&gcc_msm8660_driver);
2755 }
2756 core_initcall(gcc_msm8660_init);
2757 
2758 static void __exit gcc_msm8660_exit(void)
2759 {
2760 	platform_driver_unregister(&gcc_msm8660_driver);
2761 }
2762 module_exit(gcc_msm8660_exit);
2763 
2764 MODULE_DESCRIPTION("GCC MSM 8660 Driver");
2765 MODULE_LICENSE("GPL v2");
2766 MODULE_ALIAS("platform:gcc-msm8660");
2767