xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8960.c (revision 5b394b2d)
1 /*
2  * Copyright (c) 2013-2014, 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-msm8960.h>
26 #include <dt-bindings/reset/qcom,gcc-msm8960.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 pll3 = {
36 	.l_reg = 0x3164,
37 	.m_reg = 0x3168,
38 	.n_reg = 0x316c,
39 	.config_reg = 0x3174,
40 	.mode_reg = 0x3160,
41 	.status_reg = 0x3178,
42 	.status_bit = 16,
43 	.clkr.hw.init = &(struct clk_init_data){
44 		.name = "pll3",
45 		.parent_names = (const char *[]){ "pxo" },
46 		.num_parents = 1,
47 		.ops = &clk_pll_ops,
48 	},
49 };
50 
51 static struct clk_regmap pll4_vote = {
52 	.enable_reg = 0x34c0,
53 	.enable_mask = BIT(4),
54 	.hw.init = &(struct clk_init_data){
55 		.name = "pll4_vote",
56 		.parent_names = (const char *[]){ "pll4" },
57 		.num_parents = 1,
58 		.ops = &clk_pll_vote_ops,
59 	},
60 };
61 
62 static struct clk_pll pll8 = {
63 	.l_reg = 0x3144,
64 	.m_reg = 0x3148,
65 	.n_reg = 0x314c,
66 	.config_reg = 0x3154,
67 	.mode_reg = 0x3140,
68 	.status_reg = 0x3158,
69 	.status_bit = 16,
70 	.clkr.hw.init = &(struct clk_init_data){
71 		.name = "pll8",
72 		.parent_names = (const char *[]){ "pxo" },
73 		.num_parents = 1,
74 		.ops = &clk_pll_ops,
75 	},
76 };
77 
78 static struct clk_regmap pll8_vote = {
79 	.enable_reg = 0x34c0,
80 	.enable_mask = BIT(8),
81 	.hw.init = &(struct clk_init_data){
82 		.name = "pll8_vote",
83 		.parent_names = (const char *[]){ "pll8" },
84 		.num_parents = 1,
85 		.ops = &clk_pll_vote_ops,
86 	},
87 };
88 
89 static struct clk_pll pll14 = {
90 	.l_reg = 0x31c4,
91 	.m_reg = 0x31c8,
92 	.n_reg = 0x31cc,
93 	.config_reg = 0x31d4,
94 	.mode_reg = 0x31c0,
95 	.status_reg = 0x31d8,
96 	.status_bit = 16,
97 	.clkr.hw.init = &(struct clk_init_data){
98 		.name = "pll14",
99 		.parent_names = (const char *[]){ "pxo" },
100 		.num_parents = 1,
101 		.ops = &clk_pll_ops,
102 	},
103 };
104 
105 static struct clk_regmap pll14_vote = {
106 	.enable_reg = 0x34c0,
107 	.enable_mask = BIT(14),
108 	.hw.init = &(struct clk_init_data){
109 		.name = "pll14_vote",
110 		.parent_names = (const char *[]){ "pll14" },
111 		.num_parents = 1,
112 		.ops = &clk_pll_vote_ops,
113 	},
114 };
115 
116 enum {
117 	P_PXO,
118 	P_PLL8,
119 	P_PLL3,
120 	P_CXO,
121 };
122 
123 static const struct parent_map gcc_pxo_pll8_map[] = {
124 	{ P_PXO, 0 },
125 	{ P_PLL8, 3 }
126 };
127 
128 static const char * const gcc_pxo_pll8[] = {
129 	"pxo",
130 	"pll8_vote",
131 };
132 
133 static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
134 	{ P_PXO, 0 },
135 	{ P_PLL8, 3 },
136 	{ P_CXO, 5 }
137 };
138 
139 static const char * const gcc_pxo_pll8_cxo[] = {
140 	"pxo",
141 	"pll8_vote",
142 	"cxo",
143 };
144 
145 static const struct parent_map gcc_pxo_pll8_pll3_map[] = {
146 	{ P_PXO, 0 },
147 	{ P_PLL8, 3 },
148 	{ P_PLL3, 6 }
149 };
150 
151 static const char * const gcc_pxo_pll8_pll3[] = {
152 	"pxo",
153 	"pll8_vote",
154 	"pll3",
155 };
156 
157 static struct freq_tbl clk_tbl_gsbi_uart[] = {
158 	{  1843200, P_PLL8, 2,  6, 625 },
159 	{  3686400, P_PLL8, 2, 12, 625 },
160 	{  7372800, P_PLL8, 2, 24, 625 },
161 	{ 14745600, P_PLL8, 2, 48, 625 },
162 	{ 16000000, P_PLL8, 4,  1,   6 },
163 	{ 24000000, P_PLL8, 4,  1,   4 },
164 	{ 32000000, P_PLL8, 4,  1,   3 },
165 	{ 40000000, P_PLL8, 1,  5,  48 },
166 	{ 46400000, P_PLL8, 1, 29, 240 },
167 	{ 48000000, P_PLL8, 4,  1,   2 },
168 	{ 51200000, P_PLL8, 1,  2,  15 },
169 	{ 56000000, P_PLL8, 1,  7,  48 },
170 	{ 58982400, P_PLL8, 1, 96, 625 },
171 	{ 64000000, P_PLL8, 2,  1,   3 },
172 	{ }
173 };
174 
175 static struct clk_rcg gsbi1_uart_src = {
176 	.ns_reg = 0x29d4,
177 	.md_reg = 0x29d0,
178 	.mn = {
179 		.mnctr_en_bit = 8,
180 		.mnctr_reset_bit = 7,
181 		.mnctr_mode_shift = 5,
182 		.n_val_shift = 16,
183 		.m_val_shift = 16,
184 		.width = 16,
185 	},
186 	.p = {
187 		.pre_div_shift = 3,
188 		.pre_div_width = 2,
189 	},
190 	.s = {
191 		.src_sel_shift = 0,
192 		.parent_map = gcc_pxo_pll8_map,
193 	},
194 	.freq_tbl = clk_tbl_gsbi_uart,
195 	.clkr = {
196 		.enable_reg = 0x29d4,
197 		.enable_mask = BIT(11),
198 		.hw.init = &(struct clk_init_data){
199 			.name = "gsbi1_uart_src",
200 			.parent_names = gcc_pxo_pll8,
201 			.num_parents = 2,
202 			.ops = &clk_rcg_ops,
203 			.flags = CLK_SET_PARENT_GATE,
204 		},
205 	},
206 };
207 
208 static struct clk_branch gsbi1_uart_clk = {
209 	.halt_reg = 0x2fcc,
210 	.halt_bit = 10,
211 	.clkr = {
212 		.enable_reg = 0x29d4,
213 		.enable_mask = BIT(9),
214 		.hw.init = &(struct clk_init_data){
215 			.name = "gsbi1_uart_clk",
216 			.parent_names = (const char *[]){
217 				"gsbi1_uart_src",
218 			},
219 			.num_parents = 1,
220 			.ops = &clk_branch_ops,
221 			.flags = CLK_SET_RATE_PARENT,
222 		},
223 	},
224 };
225 
226 static struct clk_rcg gsbi2_uart_src = {
227 	.ns_reg = 0x29f4,
228 	.md_reg = 0x29f0,
229 	.mn = {
230 		.mnctr_en_bit = 8,
231 		.mnctr_reset_bit = 7,
232 		.mnctr_mode_shift = 5,
233 		.n_val_shift = 16,
234 		.m_val_shift = 16,
235 		.width = 16,
236 	},
237 	.p = {
238 		.pre_div_shift = 3,
239 		.pre_div_width = 2,
240 	},
241 	.s = {
242 		.src_sel_shift = 0,
243 		.parent_map = gcc_pxo_pll8_map,
244 	},
245 	.freq_tbl = clk_tbl_gsbi_uart,
246 	.clkr = {
247 		.enable_reg = 0x29f4,
248 		.enable_mask = BIT(11),
249 		.hw.init = &(struct clk_init_data){
250 			.name = "gsbi2_uart_src",
251 			.parent_names = gcc_pxo_pll8,
252 			.num_parents = 2,
253 			.ops = &clk_rcg_ops,
254 			.flags = CLK_SET_PARENT_GATE,
255 		},
256 	},
257 };
258 
259 static struct clk_branch gsbi2_uart_clk = {
260 	.halt_reg = 0x2fcc,
261 	.halt_bit = 6,
262 	.clkr = {
263 		.enable_reg = 0x29f4,
264 		.enable_mask = BIT(9),
265 		.hw.init = &(struct clk_init_data){
266 			.name = "gsbi2_uart_clk",
267 			.parent_names = (const char *[]){
268 				"gsbi2_uart_src",
269 			},
270 			.num_parents = 1,
271 			.ops = &clk_branch_ops,
272 			.flags = CLK_SET_RATE_PARENT,
273 		},
274 	},
275 };
276 
277 static struct clk_rcg gsbi3_uart_src = {
278 	.ns_reg = 0x2a14,
279 	.md_reg = 0x2a10,
280 	.mn = {
281 		.mnctr_en_bit = 8,
282 		.mnctr_reset_bit = 7,
283 		.mnctr_mode_shift = 5,
284 		.n_val_shift = 16,
285 		.m_val_shift = 16,
286 		.width = 16,
287 	},
288 	.p = {
289 		.pre_div_shift = 3,
290 		.pre_div_width = 2,
291 	},
292 	.s = {
293 		.src_sel_shift = 0,
294 		.parent_map = gcc_pxo_pll8_map,
295 	},
296 	.freq_tbl = clk_tbl_gsbi_uart,
297 	.clkr = {
298 		.enable_reg = 0x2a14,
299 		.enable_mask = BIT(11),
300 		.hw.init = &(struct clk_init_data){
301 			.name = "gsbi3_uart_src",
302 			.parent_names = gcc_pxo_pll8,
303 			.num_parents = 2,
304 			.ops = &clk_rcg_ops,
305 			.flags = CLK_SET_PARENT_GATE,
306 		},
307 	},
308 };
309 
310 static struct clk_branch gsbi3_uart_clk = {
311 	.halt_reg = 0x2fcc,
312 	.halt_bit = 2,
313 	.clkr = {
314 		.enable_reg = 0x2a14,
315 		.enable_mask = BIT(9),
316 		.hw.init = &(struct clk_init_data){
317 			.name = "gsbi3_uart_clk",
318 			.parent_names = (const char *[]){
319 				"gsbi3_uart_src",
320 			},
321 			.num_parents = 1,
322 			.ops = &clk_branch_ops,
323 			.flags = CLK_SET_RATE_PARENT,
324 		},
325 	},
326 };
327 
328 static struct clk_rcg gsbi4_uart_src = {
329 	.ns_reg = 0x2a34,
330 	.md_reg = 0x2a30,
331 	.mn = {
332 		.mnctr_en_bit = 8,
333 		.mnctr_reset_bit = 7,
334 		.mnctr_mode_shift = 5,
335 		.n_val_shift = 16,
336 		.m_val_shift = 16,
337 		.width = 16,
338 	},
339 	.p = {
340 		.pre_div_shift = 3,
341 		.pre_div_width = 2,
342 	},
343 	.s = {
344 		.src_sel_shift = 0,
345 		.parent_map = gcc_pxo_pll8_map,
346 	},
347 	.freq_tbl = clk_tbl_gsbi_uart,
348 	.clkr = {
349 		.enable_reg = 0x2a34,
350 		.enable_mask = BIT(11),
351 		.hw.init = &(struct clk_init_data){
352 			.name = "gsbi4_uart_src",
353 			.parent_names = gcc_pxo_pll8,
354 			.num_parents = 2,
355 			.ops = &clk_rcg_ops,
356 			.flags = CLK_SET_PARENT_GATE,
357 		},
358 	},
359 };
360 
361 static struct clk_branch gsbi4_uart_clk = {
362 	.halt_reg = 0x2fd0,
363 	.halt_bit = 26,
364 	.clkr = {
365 		.enable_reg = 0x2a34,
366 		.enable_mask = BIT(9),
367 		.hw.init = &(struct clk_init_data){
368 			.name = "gsbi4_uart_clk",
369 			.parent_names = (const char *[]){
370 				"gsbi4_uart_src",
371 			},
372 			.num_parents = 1,
373 			.ops = &clk_branch_ops,
374 			.flags = CLK_SET_RATE_PARENT,
375 		},
376 	},
377 };
378 
379 static struct clk_rcg gsbi5_uart_src = {
380 	.ns_reg = 0x2a54,
381 	.md_reg = 0x2a50,
382 	.mn = {
383 		.mnctr_en_bit = 8,
384 		.mnctr_reset_bit = 7,
385 		.mnctr_mode_shift = 5,
386 		.n_val_shift = 16,
387 		.m_val_shift = 16,
388 		.width = 16,
389 	},
390 	.p = {
391 		.pre_div_shift = 3,
392 		.pre_div_width = 2,
393 	},
394 	.s = {
395 		.src_sel_shift = 0,
396 		.parent_map = gcc_pxo_pll8_map,
397 	},
398 	.freq_tbl = clk_tbl_gsbi_uart,
399 	.clkr = {
400 		.enable_reg = 0x2a54,
401 		.enable_mask = BIT(11),
402 		.hw.init = &(struct clk_init_data){
403 			.name = "gsbi5_uart_src",
404 			.parent_names = gcc_pxo_pll8,
405 			.num_parents = 2,
406 			.ops = &clk_rcg_ops,
407 			.flags = CLK_SET_PARENT_GATE,
408 		},
409 	},
410 };
411 
412 static struct clk_branch gsbi5_uart_clk = {
413 	.halt_reg = 0x2fd0,
414 	.halt_bit = 22,
415 	.clkr = {
416 		.enable_reg = 0x2a54,
417 		.enable_mask = BIT(9),
418 		.hw.init = &(struct clk_init_data){
419 			.name = "gsbi5_uart_clk",
420 			.parent_names = (const char *[]){
421 				"gsbi5_uart_src",
422 			},
423 			.num_parents = 1,
424 			.ops = &clk_branch_ops,
425 			.flags = CLK_SET_RATE_PARENT,
426 		},
427 	},
428 };
429 
430 static struct clk_rcg gsbi6_uart_src = {
431 	.ns_reg = 0x2a74,
432 	.md_reg = 0x2a70,
433 	.mn = {
434 		.mnctr_en_bit = 8,
435 		.mnctr_reset_bit = 7,
436 		.mnctr_mode_shift = 5,
437 		.n_val_shift = 16,
438 		.m_val_shift = 16,
439 		.width = 16,
440 	},
441 	.p = {
442 		.pre_div_shift = 3,
443 		.pre_div_width = 2,
444 	},
445 	.s = {
446 		.src_sel_shift = 0,
447 		.parent_map = gcc_pxo_pll8_map,
448 	},
449 	.freq_tbl = clk_tbl_gsbi_uart,
450 	.clkr = {
451 		.enable_reg = 0x2a74,
452 		.enable_mask = BIT(11),
453 		.hw.init = &(struct clk_init_data){
454 			.name = "gsbi6_uart_src",
455 			.parent_names = gcc_pxo_pll8,
456 			.num_parents = 2,
457 			.ops = &clk_rcg_ops,
458 			.flags = CLK_SET_PARENT_GATE,
459 		},
460 	},
461 };
462 
463 static struct clk_branch gsbi6_uart_clk = {
464 	.halt_reg = 0x2fd0,
465 	.halt_bit = 18,
466 	.clkr = {
467 		.enable_reg = 0x2a74,
468 		.enable_mask = BIT(9),
469 		.hw.init = &(struct clk_init_data){
470 			.name = "gsbi6_uart_clk",
471 			.parent_names = (const char *[]){
472 				"gsbi6_uart_src",
473 			},
474 			.num_parents = 1,
475 			.ops = &clk_branch_ops,
476 			.flags = CLK_SET_RATE_PARENT,
477 		},
478 	},
479 };
480 
481 static struct clk_rcg gsbi7_uart_src = {
482 	.ns_reg = 0x2a94,
483 	.md_reg = 0x2a90,
484 	.mn = {
485 		.mnctr_en_bit = 8,
486 		.mnctr_reset_bit = 7,
487 		.mnctr_mode_shift = 5,
488 		.n_val_shift = 16,
489 		.m_val_shift = 16,
490 		.width = 16,
491 	},
492 	.p = {
493 		.pre_div_shift = 3,
494 		.pre_div_width = 2,
495 	},
496 	.s = {
497 		.src_sel_shift = 0,
498 		.parent_map = gcc_pxo_pll8_map,
499 	},
500 	.freq_tbl = clk_tbl_gsbi_uart,
501 	.clkr = {
502 		.enable_reg = 0x2a94,
503 		.enable_mask = BIT(11),
504 		.hw.init = &(struct clk_init_data){
505 			.name = "gsbi7_uart_src",
506 			.parent_names = gcc_pxo_pll8,
507 			.num_parents = 2,
508 			.ops = &clk_rcg_ops,
509 			.flags = CLK_SET_PARENT_GATE,
510 		},
511 	},
512 };
513 
514 static struct clk_branch gsbi7_uart_clk = {
515 	.halt_reg = 0x2fd0,
516 	.halt_bit = 14,
517 	.clkr = {
518 		.enable_reg = 0x2a94,
519 		.enable_mask = BIT(9),
520 		.hw.init = &(struct clk_init_data){
521 			.name = "gsbi7_uart_clk",
522 			.parent_names = (const char *[]){
523 				"gsbi7_uart_src",
524 			},
525 			.num_parents = 1,
526 			.ops = &clk_branch_ops,
527 			.flags = CLK_SET_RATE_PARENT,
528 		},
529 	},
530 };
531 
532 static struct clk_rcg gsbi8_uart_src = {
533 	.ns_reg = 0x2ab4,
534 	.md_reg = 0x2ab0,
535 	.mn = {
536 		.mnctr_en_bit = 8,
537 		.mnctr_reset_bit = 7,
538 		.mnctr_mode_shift = 5,
539 		.n_val_shift = 16,
540 		.m_val_shift = 16,
541 		.width = 16,
542 	},
543 	.p = {
544 		.pre_div_shift = 3,
545 		.pre_div_width = 2,
546 	},
547 	.s = {
548 		.src_sel_shift = 0,
549 		.parent_map = gcc_pxo_pll8_map,
550 	},
551 	.freq_tbl = clk_tbl_gsbi_uart,
552 	.clkr = {
553 		.enable_reg = 0x2ab4,
554 		.enable_mask = BIT(11),
555 		.hw.init = &(struct clk_init_data){
556 			.name = "gsbi8_uart_src",
557 			.parent_names = gcc_pxo_pll8,
558 			.num_parents = 2,
559 			.ops = &clk_rcg_ops,
560 			.flags = CLK_SET_PARENT_GATE,
561 		},
562 	},
563 };
564 
565 static struct clk_branch gsbi8_uart_clk = {
566 	.halt_reg = 0x2fd0,
567 	.halt_bit = 10,
568 	.clkr = {
569 		.enable_reg = 0x2ab4,
570 		.enable_mask = BIT(9),
571 		.hw.init = &(struct clk_init_data){
572 			.name = "gsbi8_uart_clk",
573 			.parent_names = (const char *[]){ "gsbi8_uart_src" },
574 			.num_parents = 1,
575 			.ops = &clk_branch_ops,
576 			.flags = CLK_SET_RATE_PARENT,
577 		},
578 	},
579 };
580 
581 static struct clk_rcg gsbi9_uart_src = {
582 	.ns_reg = 0x2ad4,
583 	.md_reg = 0x2ad0,
584 	.mn = {
585 		.mnctr_en_bit = 8,
586 		.mnctr_reset_bit = 7,
587 		.mnctr_mode_shift = 5,
588 		.n_val_shift = 16,
589 		.m_val_shift = 16,
590 		.width = 16,
591 	},
592 	.p = {
593 		.pre_div_shift = 3,
594 		.pre_div_width = 2,
595 	},
596 	.s = {
597 		.src_sel_shift = 0,
598 		.parent_map = gcc_pxo_pll8_map,
599 	},
600 	.freq_tbl = clk_tbl_gsbi_uart,
601 	.clkr = {
602 		.enable_reg = 0x2ad4,
603 		.enable_mask = BIT(11),
604 		.hw.init = &(struct clk_init_data){
605 			.name = "gsbi9_uart_src",
606 			.parent_names = gcc_pxo_pll8,
607 			.num_parents = 2,
608 			.ops = &clk_rcg_ops,
609 			.flags = CLK_SET_PARENT_GATE,
610 		},
611 	},
612 };
613 
614 static struct clk_branch gsbi9_uart_clk = {
615 	.halt_reg = 0x2fd0,
616 	.halt_bit = 6,
617 	.clkr = {
618 		.enable_reg = 0x2ad4,
619 		.enable_mask = BIT(9),
620 		.hw.init = &(struct clk_init_data){
621 			.name = "gsbi9_uart_clk",
622 			.parent_names = (const char *[]){ "gsbi9_uart_src" },
623 			.num_parents = 1,
624 			.ops = &clk_branch_ops,
625 			.flags = CLK_SET_RATE_PARENT,
626 		},
627 	},
628 };
629 
630 static struct clk_rcg gsbi10_uart_src = {
631 	.ns_reg = 0x2af4,
632 	.md_reg = 0x2af0,
633 	.mn = {
634 		.mnctr_en_bit = 8,
635 		.mnctr_reset_bit = 7,
636 		.mnctr_mode_shift = 5,
637 		.n_val_shift = 16,
638 		.m_val_shift = 16,
639 		.width = 16,
640 	},
641 	.p = {
642 		.pre_div_shift = 3,
643 		.pre_div_width = 2,
644 	},
645 	.s = {
646 		.src_sel_shift = 0,
647 		.parent_map = gcc_pxo_pll8_map,
648 	},
649 	.freq_tbl = clk_tbl_gsbi_uart,
650 	.clkr = {
651 		.enable_reg = 0x2af4,
652 		.enable_mask = BIT(11),
653 		.hw.init = &(struct clk_init_data){
654 			.name = "gsbi10_uart_src",
655 			.parent_names = gcc_pxo_pll8,
656 			.num_parents = 2,
657 			.ops = &clk_rcg_ops,
658 			.flags = CLK_SET_PARENT_GATE,
659 		},
660 	},
661 };
662 
663 static struct clk_branch gsbi10_uart_clk = {
664 	.halt_reg = 0x2fd0,
665 	.halt_bit = 2,
666 	.clkr = {
667 		.enable_reg = 0x2af4,
668 		.enable_mask = BIT(9),
669 		.hw.init = &(struct clk_init_data){
670 			.name = "gsbi10_uart_clk",
671 			.parent_names = (const char *[]){ "gsbi10_uart_src" },
672 			.num_parents = 1,
673 			.ops = &clk_branch_ops,
674 			.flags = CLK_SET_RATE_PARENT,
675 		},
676 	},
677 };
678 
679 static struct clk_rcg gsbi11_uart_src = {
680 	.ns_reg = 0x2b14,
681 	.md_reg = 0x2b10,
682 	.mn = {
683 		.mnctr_en_bit = 8,
684 		.mnctr_reset_bit = 7,
685 		.mnctr_mode_shift = 5,
686 		.n_val_shift = 16,
687 		.m_val_shift = 16,
688 		.width = 16,
689 	},
690 	.p = {
691 		.pre_div_shift = 3,
692 		.pre_div_width = 2,
693 	},
694 	.s = {
695 		.src_sel_shift = 0,
696 		.parent_map = gcc_pxo_pll8_map,
697 	},
698 	.freq_tbl = clk_tbl_gsbi_uart,
699 	.clkr = {
700 		.enable_reg = 0x2b14,
701 		.enable_mask = BIT(11),
702 		.hw.init = &(struct clk_init_data){
703 			.name = "gsbi11_uart_src",
704 			.parent_names = gcc_pxo_pll8,
705 			.num_parents = 2,
706 			.ops = &clk_rcg_ops,
707 			.flags = CLK_SET_PARENT_GATE,
708 		},
709 	},
710 };
711 
712 static struct clk_branch gsbi11_uart_clk = {
713 	.halt_reg = 0x2fd4,
714 	.halt_bit = 17,
715 	.clkr = {
716 		.enable_reg = 0x2b14,
717 		.enable_mask = BIT(9),
718 		.hw.init = &(struct clk_init_data){
719 			.name = "gsbi11_uart_clk",
720 			.parent_names = (const char *[]){ "gsbi11_uart_src" },
721 			.num_parents = 1,
722 			.ops = &clk_branch_ops,
723 			.flags = CLK_SET_RATE_PARENT,
724 		},
725 	},
726 };
727 
728 static struct clk_rcg gsbi12_uart_src = {
729 	.ns_reg = 0x2b34,
730 	.md_reg = 0x2b30,
731 	.mn = {
732 		.mnctr_en_bit = 8,
733 		.mnctr_reset_bit = 7,
734 		.mnctr_mode_shift = 5,
735 		.n_val_shift = 16,
736 		.m_val_shift = 16,
737 		.width = 16,
738 	},
739 	.p = {
740 		.pre_div_shift = 3,
741 		.pre_div_width = 2,
742 	},
743 	.s = {
744 		.src_sel_shift = 0,
745 		.parent_map = gcc_pxo_pll8_map,
746 	},
747 	.freq_tbl = clk_tbl_gsbi_uart,
748 	.clkr = {
749 		.enable_reg = 0x2b34,
750 		.enable_mask = BIT(11),
751 		.hw.init = &(struct clk_init_data){
752 			.name = "gsbi12_uart_src",
753 			.parent_names = gcc_pxo_pll8,
754 			.num_parents = 2,
755 			.ops = &clk_rcg_ops,
756 			.flags = CLK_SET_PARENT_GATE,
757 		},
758 	},
759 };
760 
761 static struct clk_branch gsbi12_uart_clk = {
762 	.halt_reg = 0x2fd4,
763 	.halt_bit = 13,
764 	.clkr = {
765 		.enable_reg = 0x2b34,
766 		.enable_mask = BIT(9),
767 		.hw.init = &(struct clk_init_data){
768 			.name = "gsbi12_uart_clk",
769 			.parent_names = (const char *[]){ "gsbi12_uart_src" },
770 			.num_parents = 1,
771 			.ops = &clk_branch_ops,
772 			.flags = CLK_SET_RATE_PARENT,
773 		},
774 	},
775 };
776 
777 static struct freq_tbl clk_tbl_gsbi_qup[] = {
778 	{  1100000, P_PXO,  1, 2, 49 },
779 	{  5400000, P_PXO,  1, 1,  5 },
780 	{ 10800000, P_PXO,  1, 2,  5 },
781 	{ 15060000, P_PLL8, 1, 2, 51 },
782 	{ 24000000, P_PLL8, 4, 1,  4 },
783 	{ 25600000, P_PLL8, 1, 1, 15 },
784 	{ 27000000, P_PXO,  1, 0,  0 },
785 	{ 48000000, P_PLL8, 4, 1,  2 },
786 	{ 51200000, P_PLL8, 1, 2, 15 },
787 	{ }
788 };
789 
790 static struct clk_rcg gsbi1_qup_src = {
791 	.ns_reg = 0x29cc,
792 	.md_reg = 0x29c8,
793 	.mn = {
794 		.mnctr_en_bit = 8,
795 		.mnctr_reset_bit = 7,
796 		.mnctr_mode_shift = 5,
797 		.n_val_shift = 16,
798 		.m_val_shift = 16,
799 		.width = 8,
800 	},
801 	.p = {
802 		.pre_div_shift = 3,
803 		.pre_div_width = 2,
804 	},
805 	.s = {
806 		.src_sel_shift = 0,
807 		.parent_map = gcc_pxo_pll8_map,
808 	},
809 	.freq_tbl = clk_tbl_gsbi_qup,
810 	.clkr = {
811 		.enable_reg = 0x29cc,
812 		.enable_mask = BIT(11),
813 		.hw.init = &(struct clk_init_data){
814 			.name = "gsbi1_qup_src",
815 			.parent_names = gcc_pxo_pll8,
816 			.num_parents = 2,
817 			.ops = &clk_rcg_ops,
818 			.flags = CLK_SET_PARENT_GATE,
819 		},
820 	},
821 };
822 
823 static struct clk_branch gsbi1_qup_clk = {
824 	.halt_reg = 0x2fcc,
825 	.halt_bit = 9,
826 	.clkr = {
827 		.enable_reg = 0x29cc,
828 		.enable_mask = BIT(9),
829 		.hw.init = &(struct clk_init_data){
830 			.name = "gsbi1_qup_clk",
831 			.parent_names = (const char *[]){ "gsbi1_qup_src" },
832 			.num_parents = 1,
833 			.ops = &clk_branch_ops,
834 			.flags = CLK_SET_RATE_PARENT,
835 		},
836 	},
837 };
838 
839 static struct clk_rcg gsbi2_qup_src = {
840 	.ns_reg = 0x29ec,
841 	.md_reg = 0x29e8,
842 	.mn = {
843 		.mnctr_en_bit = 8,
844 		.mnctr_reset_bit = 7,
845 		.mnctr_mode_shift = 5,
846 		.n_val_shift = 16,
847 		.m_val_shift = 16,
848 		.width = 8,
849 	},
850 	.p = {
851 		.pre_div_shift = 3,
852 		.pre_div_width = 2,
853 	},
854 	.s = {
855 		.src_sel_shift = 0,
856 		.parent_map = gcc_pxo_pll8_map,
857 	},
858 	.freq_tbl = clk_tbl_gsbi_qup,
859 	.clkr = {
860 		.enable_reg = 0x29ec,
861 		.enable_mask = BIT(11),
862 		.hw.init = &(struct clk_init_data){
863 			.name = "gsbi2_qup_src",
864 			.parent_names = gcc_pxo_pll8,
865 			.num_parents = 2,
866 			.ops = &clk_rcg_ops,
867 			.flags = CLK_SET_PARENT_GATE,
868 		},
869 	},
870 };
871 
872 static struct clk_branch gsbi2_qup_clk = {
873 	.halt_reg = 0x2fcc,
874 	.halt_bit = 4,
875 	.clkr = {
876 		.enable_reg = 0x29ec,
877 		.enable_mask = BIT(9),
878 		.hw.init = &(struct clk_init_data){
879 			.name = "gsbi2_qup_clk",
880 			.parent_names = (const char *[]){ "gsbi2_qup_src" },
881 			.num_parents = 1,
882 			.ops = &clk_branch_ops,
883 			.flags = CLK_SET_RATE_PARENT,
884 		},
885 	},
886 };
887 
888 static struct clk_rcg gsbi3_qup_src = {
889 	.ns_reg = 0x2a0c,
890 	.md_reg = 0x2a08,
891 	.mn = {
892 		.mnctr_en_bit = 8,
893 		.mnctr_reset_bit = 7,
894 		.mnctr_mode_shift = 5,
895 		.n_val_shift = 16,
896 		.m_val_shift = 16,
897 		.width = 8,
898 	},
899 	.p = {
900 		.pre_div_shift = 3,
901 		.pre_div_width = 2,
902 	},
903 	.s = {
904 		.src_sel_shift = 0,
905 		.parent_map = gcc_pxo_pll8_map,
906 	},
907 	.freq_tbl = clk_tbl_gsbi_qup,
908 	.clkr = {
909 		.enable_reg = 0x2a0c,
910 		.enable_mask = BIT(11),
911 		.hw.init = &(struct clk_init_data){
912 			.name = "gsbi3_qup_src",
913 			.parent_names = gcc_pxo_pll8,
914 			.num_parents = 2,
915 			.ops = &clk_rcg_ops,
916 			.flags = CLK_SET_PARENT_GATE,
917 		},
918 	},
919 };
920 
921 static struct clk_branch gsbi3_qup_clk = {
922 	.halt_reg = 0x2fcc,
923 	.halt_bit = 0,
924 	.clkr = {
925 		.enable_reg = 0x2a0c,
926 		.enable_mask = BIT(9),
927 		.hw.init = &(struct clk_init_data){
928 			.name = "gsbi3_qup_clk",
929 			.parent_names = (const char *[]){ "gsbi3_qup_src" },
930 			.num_parents = 1,
931 			.ops = &clk_branch_ops,
932 			.flags = CLK_SET_RATE_PARENT,
933 		},
934 	},
935 };
936 
937 static struct clk_rcg gsbi4_qup_src = {
938 	.ns_reg = 0x2a2c,
939 	.md_reg = 0x2a28,
940 	.mn = {
941 		.mnctr_en_bit = 8,
942 		.mnctr_reset_bit = 7,
943 		.mnctr_mode_shift = 5,
944 		.n_val_shift = 16,
945 		.m_val_shift = 16,
946 		.width = 8,
947 	},
948 	.p = {
949 		.pre_div_shift = 3,
950 		.pre_div_width = 2,
951 	},
952 	.s = {
953 		.src_sel_shift = 0,
954 		.parent_map = gcc_pxo_pll8_map,
955 	},
956 	.freq_tbl = clk_tbl_gsbi_qup,
957 	.clkr = {
958 		.enable_reg = 0x2a2c,
959 		.enable_mask = BIT(11),
960 		.hw.init = &(struct clk_init_data){
961 			.name = "gsbi4_qup_src",
962 			.parent_names = gcc_pxo_pll8,
963 			.num_parents = 2,
964 			.ops = &clk_rcg_ops,
965 			.flags = CLK_SET_PARENT_GATE,
966 		},
967 	},
968 };
969 
970 static struct clk_branch gsbi4_qup_clk = {
971 	.halt_reg = 0x2fd0,
972 	.halt_bit = 24,
973 	.clkr = {
974 		.enable_reg = 0x2a2c,
975 		.enable_mask = BIT(9),
976 		.hw.init = &(struct clk_init_data){
977 			.name = "gsbi4_qup_clk",
978 			.parent_names = (const char *[]){ "gsbi4_qup_src" },
979 			.num_parents = 1,
980 			.ops = &clk_branch_ops,
981 			.flags = CLK_SET_RATE_PARENT,
982 		},
983 	},
984 };
985 
986 static struct clk_rcg gsbi5_qup_src = {
987 	.ns_reg = 0x2a4c,
988 	.md_reg = 0x2a48,
989 	.mn = {
990 		.mnctr_en_bit = 8,
991 		.mnctr_reset_bit = 7,
992 		.mnctr_mode_shift = 5,
993 		.n_val_shift = 16,
994 		.m_val_shift = 16,
995 		.width = 8,
996 	},
997 	.p = {
998 		.pre_div_shift = 3,
999 		.pre_div_width = 2,
1000 	},
1001 	.s = {
1002 		.src_sel_shift = 0,
1003 		.parent_map = gcc_pxo_pll8_map,
1004 	},
1005 	.freq_tbl = clk_tbl_gsbi_qup,
1006 	.clkr = {
1007 		.enable_reg = 0x2a4c,
1008 		.enable_mask = BIT(11),
1009 		.hw.init = &(struct clk_init_data){
1010 			.name = "gsbi5_qup_src",
1011 			.parent_names = gcc_pxo_pll8,
1012 			.num_parents = 2,
1013 			.ops = &clk_rcg_ops,
1014 			.flags = CLK_SET_PARENT_GATE,
1015 		},
1016 	},
1017 };
1018 
1019 static struct clk_branch gsbi5_qup_clk = {
1020 	.halt_reg = 0x2fd0,
1021 	.halt_bit = 20,
1022 	.clkr = {
1023 		.enable_reg = 0x2a4c,
1024 		.enable_mask = BIT(9),
1025 		.hw.init = &(struct clk_init_data){
1026 			.name = "gsbi5_qup_clk",
1027 			.parent_names = (const char *[]){ "gsbi5_qup_src" },
1028 			.num_parents = 1,
1029 			.ops = &clk_branch_ops,
1030 			.flags = CLK_SET_RATE_PARENT,
1031 		},
1032 	},
1033 };
1034 
1035 static struct clk_rcg gsbi6_qup_src = {
1036 	.ns_reg = 0x2a6c,
1037 	.md_reg = 0x2a68,
1038 	.mn = {
1039 		.mnctr_en_bit = 8,
1040 		.mnctr_reset_bit = 7,
1041 		.mnctr_mode_shift = 5,
1042 		.n_val_shift = 16,
1043 		.m_val_shift = 16,
1044 		.width = 8,
1045 	},
1046 	.p = {
1047 		.pre_div_shift = 3,
1048 		.pre_div_width = 2,
1049 	},
1050 	.s = {
1051 		.src_sel_shift = 0,
1052 		.parent_map = gcc_pxo_pll8_map,
1053 	},
1054 	.freq_tbl = clk_tbl_gsbi_qup,
1055 	.clkr = {
1056 		.enable_reg = 0x2a6c,
1057 		.enable_mask = BIT(11),
1058 		.hw.init = &(struct clk_init_data){
1059 			.name = "gsbi6_qup_src",
1060 			.parent_names = gcc_pxo_pll8,
1061 			.num_parents = 2,
1062 			.ops = &clk_rcg_ops,
1063 			.flags = CLK_SET_PARENT_GATE,
1064 		},
1065 	},
1066 };
1067 
1068 static struct clk_branch gsbi6_qup_clk = {
1069 	.halt_reg = 0x2fd0,
1070 	.halt_bit = 16,
1071 	.clkr = {
1072 		.enable_reg = 0x2a6c,
1073 		.enable_mask = BIT(9),
1074 		.hw.init = &(struct clk_init_data){
1075 			.name = "gsbi6_qup_clk",
1076 			.parent_names = (const char *[]){ "gsbi6_qup_src" },
1077 			.num_parents = 1,
1078 			.ops = &clk_branch_ops,
1079 			.flags = CLK_SET_RATE_PARENT,
1080 		},
1081 	},
1082 };
1083 
1084 static struct clk_rcg gsbi7_qup_src = {
1085 	.ns_reg = 0x2a8c,
1086 	.md_reg = 0x2a88,
1087 	.mn = {
1088 		.mnctr_en_bit = 8,
1089 		.mnctr_reset_bit = 7,
1090 		.mnctr_mode_shift = 5,
1091 		.n_val_shift = 16,
1092 		.m_val_shift = 16,
1093 		.width = 8,
1094 	},
1095 	.p = {
1096 		.pre_div_shift = 3,
1097 		.pre_div_width = 2,
1098 	},
1099 	.s = {
1100 		.src_sel_shift = 0,
1101 		.parent_map = gcc_pxo_pll8_map,
1102 	},
1103 	.freq_tbl = clk_tbl_gsbi_qup,
1104 	.clkr = {
1105 		.enable_reg = 0x2a8c,
1106 		.enable_mask = BIT(11),
1107 		.hw.init = &(struct clk_init_data){
1108 			.name = "gsbi7_qup_src",
1109 			.parent_names = gcc_pxo_pll8,
1110 			.num_parents = 2,
1111 			.ops = &clk_rcg_ops,
1112 			.flags = CLK_SET_PARENT_GATE,
1113 		},
1114 	},
1115 };
1116 
1117 static struct clk_branch gsbi7_qup_clk = {
1118 	.halt_reg = 0x2fd0,
1119 	.halt_bit = 12,
1120 	.clkr = {
1121 		.enable_reg = 0x2a8c,
1122 		.enable_mask = BIT(9),
1123 		.hw.init = &(struct clk_init_data){
1124 			.name = "gsbi7_qup_clk",
1125 			.parent_names = (const char *[]){ "gsbi7_qup_src" },
1126 			.num_parents = 1,
1127 			.ops = &clk_branch_ops,
1128 			.flags = CLK_SET_RATE_PARENT,
1129 		},
1130 	},
1131 };
1132 
1133 static struct clk_rcg gsbi8_qup_src = {
1134 	.ns_reg = 0x2aac,
1135 	.md_reg = 0x2aa8,
1136 	.mn = {
1137 		.mnctr_en_bit = 8,
1138 		.mnctr_reset_bit = 7,
1139 		.mnctr_mode_shift = 5,
1140 		.n_val_shift = 16,
1141 		.m_val_shift = 16,
1142 		.width = 8,
1143 	},
1144 	.p = {
1145 		.pre_div_shift = 3,
1146 		.pre_div_width = 2,
1147 	},
1148 	.s = {
1149 		.src_sel_shift = 0,
1150 		.parent_map = gcc_pxo_pll8_map,
1151 	},
1152 	.freq_tbl = clk_tbl_gsbi_qup,
1153 	.clkr = {
1154 		.enable_reg = 0x2aac,
1155 		.enable_mask = BIT(11),
1156 		.hw.init = &(struct clk_init_data){
1157 			.name = "gsbi8_qup_src",
1158 			.parent_names = gcc_pxo_pll8,
1159 			.num_parents = 2,
1160 			.ops = &clk_rcg_ops,
1161 			.flags = CLK_SET_PARENT_GATE,
1162 		},
1163 	},
1164 };
1165 
1166 static struct clk_branch gsbi8_qup_clk = {
1167 	.halt_reg = 0x2fd0,
1168 	.halt_bit = 8,
1169 	.clkr = {
1170 		.enable_reg = 0x2aac,
1171 		.enable_mask = BIT(9),
1172 		.hw.init = &(struct clk_init_data){
1173 			.name = "gsbi8_qup_clk",
1174 			.parent_names = (const char *[]){ "gsbi8_qup_src" },
1175 			.num_parents = 1,
1176 			.ops = &clk_branch_ops,
1177 			.flags = CLK_SET_RATE_PARENT,
1178 		},
1179 	},
1180 };
1181 
1182 static struct clk_rcg gsbi9_qup_src = {
1183 	.ns_reg = 0x2acc,
1184 	.md_reg = 0x2ac8,
1185 	.mn = {
1186 		.mnctr_en_bit = 8,
1187 		.mnctr_reset_bit = 7,
1188 		.mnctr_mode_shift = 5,
1189 		.n_val_shift = 16,
1190 		.m_val_shift = 16,
1191 		.width = 8,
1192 	},
1193 	.p = {
1194 		.pre_div_shift = 3,
1195 		.pre_div_width = 2,
1196 	},
1197 	.s = {
1198 		.src_sel_shift = 0,
1199 		.parent_map = gcc_pxo_pll8_map,
1200 	},
1201 	.freq_tbl = clk_tbl_gsbi_qup,
1202 	.clkr = {
1203 		.enable_reg = 0x2acc,
1204 		.enable_mask = BIT(11),
1205 		.hw.init = &(struct clk_init_data){
1206 			.name = "gsbi9_qup_src",
1207 			.parent_names = gcc_pxo_pll8,
1208 			.num_parents = 2,
1209 			.ops = &clk_rcg_ops,
1210 			.flags = CLK_SET_PARENT_GATE,
1211 		},
1212 	},
1213 };
1214 
1215 static struct clk_branch gsbi9_qup_clk = {
1216 	.halt_reg = 0x2fd0,
1217 	.halt_bit = 4,
1218 	.clkr = {
1219 		.enable_reg = 0x2acc,
1220 		.enable_mask = BIT(9),
1221 		.hw.init = &(struct clk_init_data){
1222 			.name = "gsbi9_qup_clk",
1223 			.parent_names = (const char *[]){ "gsbi9_qup_src" },
1224 			.num_parents = 1,
1225 			.ops = &clk_branch_ops,
1226 			.flags = CLK_SET_RATE_PARENT,
1227 		},
1228 	},
1229 };
1230 
1231 static struct clk_rcg gsbi10_qup_src = {
1232 	.ns_reg = 0x2aec,
1233 	.md_reg = 0x2ae8,
1234 	.mn = {
1235 		.mnctr_en_bit = 8,
1236 		.mnctr_reset_bit = 7,
1237 		.mnctr_mode_shift = 5,
1238 		.n_val_shift = 16,
1239 		.m_val_shift = 16,
1240 		.width = 8,
1241 	},
1242 	.p = {
1243 		.pre_div_shift = 3,
1244 		.pre_div_width = 2,
1245 	},
1246 	.s = {
1247 		.src_sel_shift = 0,
1248 		.parent_map = gcc_pxo_pll8_map,
1249 	},
1250 	.freq_tbl = clk_tbl_gsbi_qup,
1251 	.clkr = {
1252 		.enable_reg = 0x2aec,
1253 		.enable_mask = BIT(11),
1254 		.hw.init = &(struct clk_init_data){
1255 			.name = "gsbi10_qup_src",
1256 			.parent_names = gcc_pxo_pll8,
1257 			.num_parents = 2,
1258 			.ops = &clk_rcg_ops,
1259 			.flags = CLK_SET_PARENT_GATE,
1260 		},
1261 	},
1262 };
1263 
1264 static struct clk_branch gsbi10_qup_clk = {
1265 	.halt_reg = 0x2fd0,
1266 	.halt_bit = 0,
1267 	.clkr = {
1268 		.enable_reg = 0x2aec,
1269 		.enable_mask = BIT(9),
1270 		.hw.init = &(struct clk_init_data){
1271 			.name = "gsbi10_qup_clk",
1272 			.parent_names = (const char *[]){ "gsbi10_qup_src" },
1273 			.num_parents = 1,
1274 			.ops = &clk_branch_ops,
1275 			.flags = CLK_SET_RATE_PARENT,
1276 		},
1277 	},
1278 };
1279 
1280 static struct clk_rcg gsbi11_qup_src = {
1281 	.ns_reg = 0x2b0c,
1282 	.md_reg = 0x2b08,
1283 	.mn = {
1284 		.mnctr_en_bit = 8,
1285 		.mnctr_reset_bit = 7,
1286 		.mnctr_mode_shift = 5,
1287 		.n_val_shift = 16,
1288 		.m_val_shift = 16,
1289 		.width = 8,
1290 	},
1291 	.p = {
1292 		.pre_div_shift = 3,
1293 		.pre_div_width = 2,
1294 	},
1295 	.s = {
1296 		.src_sel_shift = 0,
1297 		.parent_map = gcc_pxo_pll8_map,
1298 	},
1299 	.freq_tbl = clk_tbl_gsbi_qup,
1300 	.clkr = {
1301 		.enable_reg = 0x2b0c,
1302 		.enable_mask = BIT(11),
1303 		.hw.init = &(struct clk_init_data){
1304 			.name = "gsbi11_qup_src",
1305 			.parent_names = gcc_pxo_pll8,
1306 			.num_parents = 2,
1307 			.ops = &clk_rcg_ops,
1308 			.flags = CLK_SET_PARENT_GATE,
1309 		},
1310 	},
1311 };
1312 
1313 static struct clk_branch gsbi11_qup_clk = {
1314 	.halt_reg = 0x2fd4,
1315 	.halt_bit = 15,
1316 	.clkr = {
1317 		.enable_reg = 0x2b0c,
1318 		.enable_mask = BIT(9),
1319 		.hw.init = &(struct clk_init_data){
1320 			.name = "gsbi11_qup_clk",
1321 			.parent_names = (const char *[]){ "gsbi11_qup_src" },
1322 			.num_parents = 1,
1323 			.ops = &clk_branch_ops,
1324 			.flags = CLK_SET_RATE_PARENT,
1325 		},
1326 	},
1327 };
1328 
1329 static struct clk_rcg gsbi12_qup_src = {
1330 	.ns_reg = 0x2b2c,
1331 	.md_reg = 0x2b28,
1332 	.mn = {
1333 		.mnctr_en_bit = 8,
1334 		.mnctr_reset_bit = 7,
1335 		.mnctr_mode_shift = 5,
1336 		.n_val_shift = 16,
1337 		.m_val_shift = 16,
1338 		.width = 8,
1339 	},
1340 	.p = {
1341 		.pre_div_shift = 3,
1342 		.pre_div_width = 2,
1343 	},
1344 	.s = {
1345 		.src_sel_shift = 0,
1346 		.parent_map = gcc_pxo_pll8_map,
1347 	},
1348 	.freq_tbl = clk_tbl_gsbi_qup,
1349 	.clkr = {
1350 		.enable_reg = 0x2b2c,
1351 		.enable_mask = BIT(11),
1352 		.hw.init = &(struct clk_init_data){
1353 			.name = "gsbi12_qup_src",
1354 			.parent_names = gcc_pxo_pll8,
1355 			.num_parents = 2,
1356 			.ops = &clk_rcg_ops,
1357 			.flags = CLK_SET_PARENT_GATE,
1358 		},
1359 	},
1360 };
1361 
1362 static struct clk_branch gsbi12_qup_clk = {
1363 	.halt_reg = 0x2fd4,
1364 	.halt_bit = 11,
1365 	.clkr = {
1366 		.enable_reg = 0x2b2c,
1367 		.enable_mask = BIT(9),
1368 		.hw.init = &(struct clk_init_data){
1369 			.name = "gsbi12_qup_clk",
1370 			.parent_names = (const char *[]){ "gsbi12_qup_src" },
1371 			.num_parents = 1,
1372 			.ops = &clk_branch_ops,
1373 			.flags = CLK_SET_RATE_PARENT,
1374 		},
1375 	},
1376 };
1377 
1378 static const struct freq_tbl clk_tbl_gp[] = {
1379 	{ 9600000, P_CXO,  2, 0, 0 },
1380 	{ 13500000, P_PXO,  2, 0, 0 },
1381 	{ 19200000, P_CXO,  1, 0, 0 },
1382 	{ 27000000, P_PXO,  1, 0, 0 },
1383 	{ 64000000, P_PLL8, 2, 1, 3 },
1384 	{ 76800000, P_PLL8, 1, 1, 5 },
1385 	{ 96000000, P_PLL8, 4, 0, 0 },
1386 	{ 128000000, P_PLL8, 3, 0, 0 },
1387 	{ 192000000, P_PLL8, 2, 0, 0 },
1388 	{ }
1389 };
1390 
1391 static struct clk_rcg gp0_src = {
1392 	.ns_reg = 0x2d24,
1393 	.md_reg = 0x2d00,
1394 	.mn = {
1395 		.mnctr_en_bit = 8,
1396 		.mnctr_reset_bit = 7,
1397 		.mnctr_mode_shift = 5,
1398 		.n_val_shift = 16,
1399 		.m_val_shift = 16,
1400 		.width = 8,
1401 	},
1402 	.p = {
1403 		.pre_div_shift = 3,
1404 		.pre_div_width = 2,
1405 	},
1406 	.s = {
1407 		.src_sel_shift = 0,
1408 		.parent_map = gcc_pxo_pll8_cxo_map,
1409 	},
1410 	.freq_tbl = clk_tbl_gp,
1411 	.clkr = {
1412 		.enable_reg = 0x2d24,
1413 		.enable_mask = BIT(11),
1414 		.hw.init = &(struct clk_init_data){
1415 			.name = "gp0_src",
1416 			.parent_names = gcc_pxo_pll8_cxo,
1417 			.num_parents = 3,
1418 			.ops = &clk_rcg_ops,
1419 			.flags = CLK_SET_PARENT_GATE,
1420 		},
1421 	}
1422 };
1423 
1424 static struct clk_branch gp0_clk = {
1425 	.halt_reg = 0x2fd8,
1426 	.halt_bit = 7,
1427 	.clkr = {
1428 		.enable_reg = 0x2d24,
1429 		.enable_mask = BIT(9),
1430 		.hw.init = &(struct clk_init_data){
1431 			.name = "gp0_clk",
1432 			.parent_names = (const char *[]){ "gp0_src" },
1433 			.num_parents = 1,
1434 			.ops = &clk_branch_ops,
1435 			.flags = CLK_SET_RATE_PARENT,
1436 		},
1437 	},
1438 };
1439 
1440 static struct clk_rcg gp1_src = {
1441 	.ns_reg = 0x2d44,
1442 	.md_reg = 0x2d40,
1443 	.mn = {
1444 		.mnctr_en_bit = 8,
1445 		.mnctr_reset_bit = 7,
1446 		.mnctr_mode_shift = 5,
1447 		.n_val_shift = 16,
1448 		.m_val_shift = 16,
1449 		.width = 8,
1450 	},
1451 	.p = {
1452 		.pre_div_shift = 3,
1453 		.pre_div_width = 2,
1454 	},
1455 	.s = {
1456 		.src_sel_shift = 0,
1457 		.parent_map = gcc_pxo_pll8_cxo_map,
1458 	},
1459 	.freq_tbl = clk_tbl_gp,
1460 	.clkr = {
1461 		.enable_reg = 0x2d44,
1462 		.enable_mask = BIT(11),
1463 		.hw.init = &(struct clk_init_data){
1464 			.name = "gp1_src",
1465 			.parent_names = gcc_pxo_pll8_cxo,
1466 			.num_parents = 3,
1467 			.ops = &clk_rcg_ops,
1468 			.flags = CLK_SET_RATE_GATE,
1469 		},
1470 	}
1471 };
1472 
1473 static struct clk_branch gp1_clk = {
1474 	.halt_reg = 0x2fd8,
1475 	.halt_bit = 6,
1476 	.clkr = {
1477 		.enable_reg = 0x2d44,
1478 		.enable_mask = BIT(9),
1479 		.hw.init = &(struct clk_init_data){
1480 			.name = "gp1_clk",
1481 			.parent_names = (const char *[]){ "gp1_src" },
1482 			.num_parents = 1,
1483 			.ops = &clk_branch_ops,
1484 			.flags = CLK_SET_RATE_PARENT,
1485 		},
1486 	},
1487 };
1488 
1489 static struct clk_rcg gp2_src = {
1490 	.ns_reg = 0x2d64,
1491 	.md_reg = 0x2d60,
1492 	.mn = {
1493 		.mnctr_en_bit = 8,
1494 		.mnctr_reset_bit = 7,
1495 		.mnctr_mode_shift = 5,
1496 		.n_val_shift = 16,
1497 		.m_val_shift = 16,
1498 		.width = 8,
1499 	},
1500 	.p = {
1501 		.pre_div_shift = 3,
1502 		.pre_div_width = 2,
1503 	},
1504 	.s = {
1505 		.src_sel_shift = 0,
1506 		.parent_map = gcc_pxo_pll8_cxo_map,
1507 	},
1508 	.freq_tbl = clk_tbl_gp,
1509 	.clkr = {
1510 		.enable_reg = 0x2d64,
1511 		.enable_mask = BIT(11),
1512 		.hw.init = &(struct clk_init_data){
1513 			.name = "gp2_src",
1514 			.parent_names = gcc_pxo_pll8_cxo,
1515 			.num_parents = 3,
1516 			.ops = &clk_rcg_ops,
1517 			.flags = CLK_SET_RATE_GATE,
1518 		},
1519 	}
1520 };
1521 
1522 static struct clk_branch gp2_clk = {
1523 	.halt_reg = 0x2fd8,
1524 	.halt_bit = 5,
1525 	.clkr = {
1526 		.enable_reg = 0x2d64,
1527 		.enable_mask = BIT(9),
1528 		.hw.init = &(struct clk_init_data){
1529 			.name = "gp2_clk",
1530 			.parent_names = (const char *[]){ "gp2_src" },
1531 			.num_parents = 1,
1532 			.ops = &clk_branch_ops,
1533 			.flags = CLK_SET_RATE_PARENT,
1534 		},
1535 	},
1536 };
1537 
1538 static struct clk_branch pmem_clk = {
1539 	.hwcg_reg = 0x25a0,
1540 	.hwcg_bit = 6,
1541 	.halt_reg = 0x2fc8,
1542 	.halt_bit = 20,
1543 	.clkr = {
1544 		.enable_reg = 0x25a0,
1545 		.enable_mask = BIT(4),
1546 		.hw.init = &(struct clk_init_data){
1547 			.name = "pmem_clk",
1548 			.ops = &clk_branch_ops,
1549 		},
1550 	},
1551 };
1552 
1553 static struct clk_rcg prng_src = {
1554 	.ns_reg = 0x2e80,
1555 	.p = {
1556 		.pre_div_shift = 3,
1557 		.pre_div_width = 4,
1558 	},
1559 	.s = {
1560 		.src_sel_shift = 0,
1561 		.parent_map = gcc_pxo_pll8_map,
1562 	},
1563 	.clkr = {
1564 		.hw.init = &(struct clk_init_data){
1565 			.name = "prng_src",
1566 			.parent_names = gcc_pxo_pll8,
1567 			.num_parents = 2,
1568 			.ops = &clk_rcg_ops,
1569 		},
1570 	},
1571 };
1572 
1573 static struct clk_branch prng_clk = {
1574 	.halt_reg = 0x2fd8,
1575 	.halt_check = BRANCH_HALT_VOTED,
1576 	.halt_bit = 10,
1577 	.clkr = {
1578 		.enable_reg = 0x3080,
1579 		.enable_mask = BIT(10),
1580 		.hw.init = &(struct clk_init_data){
1581 			.name = "prng_clk",
1582 			.parent_names = (const char *[]){ "prng_src" },
1583 			.num_parents = 1,
1584 			.ops = &clk_branch_ops,
1585 		},
1586 	},
1587 };
1588 
1589 static const struct freq_tbl clk_tbl_sdc[] = {
1590 	{    144000, P_PXO,   3, 2, 125 },
1591 	{    400000, P_PLL8,  4, 1, 240 },
1592 	{  16000000, P_PLL8,  4, 1,   6 },
1593 	{  17070000, P_PLL8,  1, 2,  45 },
1594 	{  20210000, P_PLL8,  1, 1,  19 },
1595 	{  24000000, P_PLL8,  4, 1,   4 },
1596 	{  48000000, P_PLL8,  4, 1,   2 },
1597 	{  64000000, P_PLL8,  3, 1,   2 },
1598 	{  96000000, P_PLL8,  4, 0,   0 },
1599 	{ 192000000, P_PLL8,  2, 0,   0 },
1600 	{ }
1601 };
1602 
1603 static struct clk_rcg sdc1_src = {
1604 	.ns_reg = 0x282c,
1605 	.md_reg = 0x2828,
1606 	.mn = {
1607 		.mnctr_en_bit = 8,
1608 		.mnctr_reset_bit = 7,
1609 		.mnctr_mode_shift = 5,
1610 		.n_val_shift = 16,
1611 		.m_val_shift = 16,
1612 		.width = 8,
1613 	},
1614 	.p = {
1615 		.pre_div_shift = 3,
1616 		.pre_div_width = 2,
1617 	},
1618 	.s = {
1619 		.src_sel_shift = 0,
1620 		.parent_map = gcc_pxo_pll8_map,
1621 	},
1622 	.freq_tbl = clk_tbl_sdc,
1623 	.clkr = {
1624 		.enable_reg = 0x282c,
1625 		.enable_mask = BIT(11),
1626 		.hw.init = &(struct clk_init_data){
1627 			.name = "sdc1_src",
1628 			.parent_names = gcc_pxo_pll8,
1629 			.num_parents = 2,
1630 			.ops = &clk_rcg_ops,
1631 		},
1632 	}
1633 };
1634 
1635 static struct clk_branch sdc1_clk = {
1636 	.halt_reg = 0x2fc8,
1637 	.halt_bit = 6,
1638 	.clkr = {
1639 		.enable_reg = 0x282c,
1640 		.enable_mask = BIT(9),
1641 		.hw.init = &(struct clk_init_data){
1642 			.name = "sdc1_clk",
1643 			.parent_names = (const char *[]){ "sdc1_src" },
1644 			.num_parents = 1,
1645 			.ops = &clk_branch_ops,
1646 			.flags = CLK_SET_RATE_PARENT,
1647 		},
1648 	},
1649 };
1650 
1651 static struct clk_rcg sdc2_src = {
1652 	.ns_reg = 0x284c,
1653 	.md_reg = 0x2848,
1654 	.mn = {
1655 		.mnctr_en_bit = 8,
1656 		.mnctr_reset_bit = 7,
1657 		.mnctr_mode_shift = 5,
1658 		.n_val_shift = 16,
1659 		.m_val_shift = 16,
1660 		.width = 8,
1661 	},
1662 	.p = {
1663 		.pre_div_shift = 3,
1664 		.pre_div_width = 2,
1665 	},
1666 	.s = {
1667 		.src_sel_shift = 0,
1668 		.parent_map = gcc_pxo_pll8_map,
1669 	},
1670 	.freq_tbl = clk_tbl_sdc,
1671 	.clkr = {
1672 		.enable_reg = 0x284c,
1673 		.enable_mask = BIT(11),
1674 		.hw.init = &(struct clk_init_data){
1675 			.name = "sdc2_src",
1676 			.parent_names = gcc_pxo_pll8,
1677 			.num_parents = 2,
1678 			.ops = &clk_rcg_ops,
1679 		},
1680 	}
1681 };
1682 
1683 static struct clk_branch sdc2_clk = {
1684 	.halt_reg = 0x2fc8,
1685 	.halt_bit = 5,
1686 	.clkr = {
1687 		.enable_reg = 0x284c,
1688 		.enable_mask = BIT(9),
1689 		.hw.init = &(struct clk_init_data){
1690 			.name = "sdc2_clk",
1691 			.parent_names = (const char *[]){ "sdc2_src" },
1692 			.num_parents = 1,
1693 			.ops = &clk_branch_ops,
1694 			.flags = CLK_SET_RATE_PARENT,
1695 		},
1696 	},
1697 };
1698 
1699 static struct clk_rcg sdc3_src = {
1700 	.ns_reg = 0x286c,
1701 	.md_reg = 0x2868,
1702 	.mn = {
1703 		.mnctr_en_bit = 8,
1704 		.mnctr_reset_bit = 7,
1705 		.mnctr_mode_shift = 5,
1706 		.n_val_shift = 16,
1707 		.m_val_shift = 16,
1708 		.width = 8,
1709 	},
1710 	.p = {
1711 		.pre_div_shift = 3,
1712 		.pre_div_width = 2,
1713 	},
1714 	.s = {
1715 		.src_sel_shift = 0,
1716 		.parent_map = gcc_pxo_pll8_map,
1717 	},
1718 	.freq_tbl = clk_tbl_sdc,
1719 	.clkr = {
1720 		.enable_reg = 0x286c,
1721 		.enable_mask = BIT(11),
1722 		.hw.init = &(struct clk_init_data){
1723 			.name = "sdc3_src",
1724 			.parent_names = gcc_pxo_pll8,
1725 			.num_parents = 2,
1726 			.ops = &clk_rcg_ops,
1727 		},
1728 	}
1729 };
1730 
1731 static struct clk_branch sdc3_clk = {
1732 	.halt_reg = 0x2fc8,
1733 	.halt_bit = 4,
1734 	.clkr = {
1735 		.enable_reg = 0x286c,
1736 		.enable_mask = BIT(9),
1737 		.hw.init = &(struct clk_init_data){
1738 			.name = "sdc3_clk",
1739 			.parent_names = (const char *[]){ "sdc3_src" },
1740 			.num_parents = 1,
1741 			.ops = &clk_branch_ops,
1742 			.flags = CLK_SET_RATE_PARENT,
1743 		},
1744 	},
1745 };
1746 
1747 static struct clk_rcg sdc4_src = {
1748 	.ns_reg = 0x288c,
1749 	.md_reg = 0x2888,
1750 	.mn = {
1751 		.mnctr_en_bit = 8,
1752 		.mnctr_reset_bit = 7,
1753 		.mnctr_mode_shift = 5,
1754 		.n_val_shift = 16,
1755 		.m_val_shift = 16,
1756 		.width = 8,
1757 	},
1758 	.p = {
1759 		.pre_div_shift = 3,
1760 		.pre_div_width = 2,
1761 	},
1762 	.s = {
1763 		.src_sel_shift = 0,
1764 		.parent_map = gcc_pxo_pll8_map,
1765 	},
1766 	.freq_tbl = clk_tbl_sdc,
1767 	.clkr = {
1768 		.enable_reg = 0x288c,
1769 		.enable_mask = BIT(11),
1770 		.hw.init = &(struct clk_init_data){
1771 			.name = "sdc4_src",
1772 			.parent_names = gcc_pxo_pll8,
1773 			.num_parents = 2,
1774 			.ops = &clk_rcg_ops,
1775 		},
1776 	}
1777 };
1778 
1779 static struct clk_branch sdc4_clk = {
1780 	.halt_reg = 0x2fc8,
1781 	.halt_bit = 3,
1782 	.clkr = {
1783 		.enable_reg = 0x288c,
1784 		.enable_mask = BIT(9),
1785 		.hw.init = &(struct clk_init_data){
1786 			.name = "sdc4_clk",
1787 			.parent_names = (const char *[]){ "sdc4_src" },
1788 			.num_parents = 1,
1789 			.ops = &clk_branch_ops,
1790 			.flags = CLK_SET_RATE_PARENT,
1791 		},
1792 	},
1793 };
1794 
1795 static struct clk_rcg sdc5_src = {
1796 	.ns_reg = 0x28ac,
1797 	.md_reg = 0x28a8,
1798 	.mn = {
1799 		.mnctr_en_bit = 8,
1800 		.mnctr_reset_bit = 7,
1801 		.mnctr_mode_shift = 5,
1802 		.n_val_shift = 16,
1803 		.m_val_shift = 16,
1804 		.width = 8,
1805 	},
1806 	.p = {
1807 		.pre_div_shift = 3,
1808 		.pre_div_width = 2,
1809 	},
1810 	.s = {
1811 		.src_sel_shift = 0,
1812 		.parent_map = gcc_pxo_pll8_map,
1813 	},
1814 	.freq_tbl = clk_tbl_sdc,
1815 	.clkr = {
1816 		.enable_reg = 0x28ac,
1817 		.enable_mask = BIT(11),
1818 		.hw.init = &(struct clk_init_data){
1819 			.name = "sdc5_src",
1820 			.parent_names = gcc_pxo_pll8,
1821 			.num_parents = 2,
1822 			.ops = &clk_rcg_ops,
1823 		},
1824 	}
1825 };
1826 
1827 static struct clk_branch sdc5_clk = {
1828 	.halt_reg = 0x2fc8,
1829 	.halt_bit = 2,
1830 	.clkr = {
1831 		.enable_reg = 0x28ac,
1832 		.enable_mask = BIT(9),
1833 		.hw.init = &(struct clk_init_data){
1834 			.name = "sdc5_clk",
1835 			.parent_names = (const char *[]){ "sdc5_src" },
1836 			.num_parents = 1,
1837 			.ops = &clk_branch_ops,
1838 			.flags = CLK_SET_RATE_PARENT,
1839 		},
1840 	},
1841 };
1842 
1843 static const struct freq_tbl clk_tbl_tsif_ref[] = {
1844 	{ 105000, P_PXO,  1, 1, 256 },
1845 	{ }
1846 };
1847 
1848 static struct clk_rcg tsif_ref_src = {
1849 	.ns_reg = 0x2710,
1850 	.md_reg = 0x270c,
1851 	.mn = {
1852 		.mnctr_en_bit = 8,
1853 		.mnctr_reset_bit = 7,
1854 		.mnctr_mode_shift = 5,
1855 		.n_val_shift = 16,
1856 		.m_val_shift = 16,
1857 		.width = 16,
1858 	},
1859 	.p = {
1860 		.pre_div_shift = 3,
1861 		.pre_div_width = 2,
1862 	},
1863 	.s = {
1864 		.src_sel_shift = 0,
1865 		.parent_map = gcc_pxo_pll8_map,
1866 	},
1867 	.freq_tbl = clk_tbl_tsif_ref,
1868 	.clkr = {
1869 		.enable_reg = 0x2710,
1870 		.enable_mask = BIT(11),
1871 		.hw.init = &(struct clk_init_data){
1872 			.name = "tsif_ref_src",
1873 			.parent_names = gcc_pxo_pll8,
1874 			.num_parents = 2,
1875 			.ops = &clk_rcg_ops,
1876 			.flags = CLK_SET_RATE_GATE,
1877 		},
1878 	}
1879 };
1880 
1881 static struct clk_branch tsif_ref_clk = {
1882 	.halt_reg = 0x2fd4,
1883 	.halt_bit = 5,
1884 	.clkr = {
1885 		.enable_reg = 0x2710,
1886 		.enable_mask = BIT(9),
1887 		.hw.init = &(struct clk_init_data){
1888 			.name = "tsif_ref_clk",
1889 			.parent_names = (const char *[]){ "tsif_ref_src" },
1890 			.num_parents = 1,
1891 			.ops = &clk_branch_ops,
1892 			.flags = CLK_SET_RATE_PARENT,
1893 		},
1894 	},
1895 };
1896 
1897 static const struct freq_tbl clk_tbl_usb[] = {
1898 	{ 60000000, P_PLL8, 1, 5, 32 },
1899 	{ }
1900 };
1901 
1902 static struct clk_rcg usb_hs1_xcvr_src = {
1903 	.ns_reg = 0x290c,
1904 	.md_reg = 0x2908,
1905 	.mn = {
1906 		.mnctr_en_bit = 8,
1907 		.mnctr_reset_bit = 7,
1908 		.mnctr_mode_shift = 5,
1909 		.n_val_shift = 16,
1910 		.m_val_shift = 16,
1911 		.width = 8,
1912 	},
1913 	.p = {
1914 		.pre_div_shift = 3,
1915 		.pre_div_width = 2,
1916 	},
1917 	.s = {
1918 		.src_sel_shift = 0,
1919 		.parent_map = gcc_pxo_pll8_map,
1920 	},
1921 	.freq_tbl = clk_tbl_usb,
1922 	.clkr = {
1923 		.enable_reg = 0x290c,
1924 		.enable_mask = BIT(11),
1925 		.hw.init = &(struct clk_init_data){
1926 			.name = "usb_hs1_xcvr_src",
1927 			.parent_names = gcc_pxo_pll8,
1928 			.num_parents = 2,
1929 			.ops = &clk_rcg_ops,
1930 			.flags = CLK_SET_RATE_GATE,
1931 		},
1932 	}
1933 };
1934 
1935 static struct clk_branch usb_hs1_xcvr_clk = {
1936 	.halt_reg = 0x2fc8,
1937 	.halt_bit = 0,
1938 	.clkr = {
1939 		.enable_reg = 0x290c,
1940 		.enable_mask = BIT(9),
1941 		.hw.init = &(struct clk_init_data){
1942 			.name = "usb_hs1_xcvr_clk",
1943 			.parent_names = (const char *[]){ "usb_hs1_xcvr_src" },
1944 			.num_parents = 1,
1945 			.ops = &clk_branch_ops,
1946 			.flags = CLK_SET_RATE_PARENT,
1947 		},
1948 	},
1949 };
1950 
1951 static struct clk_rcg usb_hs3_xcvr_src = {
1952 	.ns_reg = 0x370c,
1953 	.md_reg = 0x3708,
1954 	.mn = {
1955 		.mnctr_en_bit = 8,
1956 		.mnctr_reset_bit = 7,
1957 		.mnctr_mode_shift = 5,
1958 		.n_val_shift = 16,
1959 		.m_val_shift = 16,
1960 		.width = 8,
1961 	},
1962 	.p = {
1963 		.pre_div_shift = 3,
1964 		.pre_div_width = 2,
1965 	},
1966 	.s = {
1967 		.src_sel_shift = 0,
1968 		.parent_map = gcc_pxo_pll8_map,
1969 	},
1970 	.freq_tbl = clk_tbl_usb,
1971 	.clkr = {
1972 		.enable_reg = 0x370c,
1973 		.enable_mask = BIT(11),
1974 		.hw.init = &(struct clk_init_data){
1975 			.name = "usb_hs3_xcvr_src",
1976 			.parent_names = gcc_pxo_pll8,
1977 			.num_parents = 2,
1978 			.ops = &clk_rcg_ops,
1979 			.flags = CLK_SET_RATE_GATE,
1980 		},
1981 	}
1982 };
1983 
1984 static struct clk_branch usb_hs3_xcvr_clk = {
1985 	.halt_reg = 0x2fc8,
1986 	.halt_bit = 30,
1987 	.clkr = {
1988 		.enable_reg = 0x370c,
1989 		.enable_mask = BIT(9),
1990 		.hw.init = &(struct clk_init_data){
1991 			.name = "usb_hs3_xcvr_clk",
1992 			.parent_names = (const char *[]){ "usb_hs3_xcvr_src" },
1993 			.num_parents = 1,
1994 			.ops = &clk_branch_ops,
1995 			.flags = CLK_SET_RATE_PARENT,
1996 		},
1997 	},
1998 };
1999 
2000 static struct clk_rcg usb_hs4_xcvr_src = {
2001 	.ns_reg = 0x372c,
2002 	.md_reg = 0x3728,
2003 	.mn = {
2004 		.mnctr_en_bit = 8,
2005 		.mnctr_reset_bit = 7,
2006 		.mnctr_mode_shift = 5,
2007 		.n_val_shift = 16,
2008 		.m_val_shift = 16,
2009 		.width = 8,
2010 	},
2011 	.p = {
2012 		.pre_div_shift = 3,
2013 		.pre_div_width = 2,
2014 	},
2015 	.s = {
2016 		.src_sel_shift = 0,
2017 		.parent_map = gcc_pxo_pll8_map,
2018 	},
2019 	.freq_tbl = clk_tbl_usb,
2020 	.clkr = {
2021 		.enable_reg = 0x372c,
2022 		.enable_mask = BIT(11),
2023 		.hw.init = &(struct clk_init_data){
2024 			.name = "usb_hs4_xcvr_src",
2025 			.parent_names = gcc_pxo_pll8,
2026 			.num_parents = 2,
2027 			.ops = &clk_rcg_ops,
2028 			.flags = CLK_SET_RATE_GATE,
2029 		},
2030 	}
2031 };
2032 
2033 static struct clk_branch usb_hs4_xcvr_clk = {
2034 	.halt_reg = 0x2fc8,
2035 	.halt_bit = 2,
2036 	.clkr = {
2037 		.enable_reg = 0x372c,
2038 		.enable_mask = BIT(9),
2039 		.hw.init = &(struct clk_init_data){
2040 			.name = "usb_hs4_xcvr_clk",
2041 			.parent_names = (const char *[]){ "usb_hs4_xcvr_src" },
2042 			.num_parents = 1,
2043 			.ops = &clk_branch_ops,
2044 			.flags = CLK_SET_RATE_PARENT,
2045 		},
2046 	},
2047 };
2048 
2049 static struct clk_rcg usb_hsic_xcvr_fs_src = {
2050 	.ns_reg = 0x2928,
2051 	.md_reg = 0x2924,
2052 	.mn = {
2053 		.mnctr_en_bit = 8,
2054 		.mnctr_reset_bit = 7,
2055 		.mnctr_mode_shift = 5,
2056 		.n_val_shift = 16,
2057 		.m_val_shift = 16,
2058 		.width = 8,
2059 	},
2060 	.p = {
2061 		.pre_div_shift = 3,
2062 		.pre_div_width = 2,
2063 	},
2064 	.s = {
2065 		.src_sel_shift = 0,
2066 		.parent_map = gcc_pxo_pll8_map,
2067 	},
2068 	.freq_tbl = clk_tbl_usb,
2069 	.clkr = {
2070 		.enable_reg = 0x2928,
2071 		.enable_mask = BIT(11),
2072 		.hw.init = &(struct clk_init_data){
2073 			.name = "usb_hsic_xcvr_fs_src",
2074 			.parent_names = gcc_pxo_pll8,
2075 			.num_parents = 2,
2076 			.ops = &clk_rcg_ops,
2077 			.flags = CLK_SET_RATE_GATE,
2078 		},
2079 	}
2080 };
2081 
2082 static const char * const usb_hsic_xcvr_fs_src_p[] = { "usb_hsic_xcvr_fs_src" };
2083 
2084 static struct clk_branch usb_hsic_xcvr_fs_clk = {
2085 	.halt_reg = 0x2fc8,
2086 	.halt_bit = 2,
2087 	.clkr = {
2088 		.enable_reg = 0x2928,
2089 		.enable_mask = BIT(9),
2090 		.hw.init = &(struct clk_init_data){
2091 			.name = "usb_hsic_xcvr_fs_clk",
2092 			.parent_names = usb_hsic_xcvr_fs_src_p,
2093 			.num_parents = 1,
2094 			.ops = &clk_branch_ops,
2095 			.flags = CLK_SET_RATE_PARENT,
2096 		},
2097 	},
2098 };
2099 
2100 static struct clk_branch usb_hsic_system_clk = {
2101 	.halt_reg = 0x2fcc,
2102 	.halt_bit = 24,
2103 	.clkr = {
2104 		.enable_reg = 0x292c,
2105 		.enable_mask = BIT(4),
2106 		.hw.init = &(struct clk_init_data){
2107 			.parent_names = usb_hsic_xcvr_fs_src_p,
2108 			.num_parents = 1,
2109 			.name = "usb_hsic_system_clk",
2110 			.ops = &clk_branch_ops,
2111 			.flags = CLK_SET_RATE_PARENT,
2112 		},
2113 	},
2114 };
2115 
2116 static struct clk_branch usb_hsic_hsic_clk = {
2117 	.halt_reg = 0x2fcc,
2118 	.halt_bit = 19,
2119 	.clkr = {
2120 		.enable_reg = 0x2b44,
2121 		.enable_mask = BIT(0),
2122 		.hw.init = &(struct clk_init_data){
2123 			.parent_names = (const char *[]){ "pll14_vote" },
2124 			.num_parents = 1,
2125 			.name = "usb_hsic_hsic_clk",
2126 			.ops = &clk_branch_ops,
2127 		},
2128 	},
2129 };
2130 
2131 static struct clk_branch usb_hsic_hsio_cal_clk = {
2132 	.halt_reg = 0x2fcc,
2133 	.halt_bit = 23,
2134 	.clkr = {
2135 		.enable_reg = 0x2b48,
2136 		.enable_mask = BIT(0),
2137 		.hw.init = &(struct clk_init_data){
2138 			.name = "usb_hsic_hsio_cal_clk",
2139 			.ops = &clk_branch_ops,
2140 		},
2141 	},
2142 };
2143 
2144 static struct clk_rcg usb_fs1_xcvr_fs_src = {
2145 	.ns_reg = 0x2968,
2146 	.md_reg = 0x2964,
2147 	.mn = {
2148 		.mnctr_en_bit = 8,
2149 		.mnctr_reset_bit = 7,
2150 		.mnctr_mode_shift = 5,
2151 		.n_val_shift = 16,
2152 		.m_val_shift = 16,
2153 		.width = 8,
2154 	},
2155 	.p = {
2156 		.pre_div_shift = 3,
2157 		.pre_div_width = 2,
2158 	},
2159 	.s = {
2160 		.src_sel_shift = 0,
2161 		.parent_map = gcc_pxo_pll8_map,
2162 	},
2163 	.freq_tbl = clk_tbl_usb,
2164 	.clkr = {
2165 		.enable_reg = 0x2968,
2166 		.enable_mask = BIT(11),
2167 		.hw.init = &(struct clk_init_data){
2168 			.name = "usb_fs1_xcvr_fs_src",
2169 			.parent_names = gcc_pxo_pll8,
2170 			.num_parents = 2,
2171 			.ops = &clk_rcg_ops,
2172 			.flags = CLK_SET_RATE_GATE,
2173 		},
2174 	}
2175 };
2176 
2177 static const char * const usb_fs1_xcvr_fs_src_p[] = { "usb_fs1_xcvr_fs_src" };
2178 
2179 static struct clk_branch usb_fs1_xcvr_fs_clk = {
2180 	.halt_reg = 0x2fcc,
2181 	.halt_bit = 15,
2182 	.clkr = {
2183 		.enable_reg = 0x2968,
2184 		.enable_mask = BIT(9),
2185 		.hw.init = &(struct clk_init_data){
2186 			.name = "usb_fs1_xcvr_fs_clk",
2187 			.parent_names = usb_fs1_xcvr_fs_src_p,
2188 			.num_parents = 1,
2189 			.ops = &clk_branch_ops,
2190 			.flags = CLK_SET_RATE_PARENT,
2191 		},
2192 	},
2193 };
2194 
2195 static struct clk_branch usb_fs1_system_clk = {
2196 	.halt_reg = 0x2fcc,
2197 	.halt_bit = 16,
2198 	.clkr = {
2199 		.enable_reg = 0x296c,
2200 		.enable_mask = BIT(4),
2201 		.hw.init = &(struct clk_init_data){
2202 			.parent_names = usb_fs1_xcvr_fs_src_p,
2203 			.num_parents = 1,
2204 			.name = "usb_fs1_system_clk",
2205 			.ops = &clk_branch_ops,
2206 			.flags = CLK_SET_RATE_PARENT,
2207 		},
2208 	},
2209 };
2210 
2211 static struct clk_rcg usb_fs2_xcvr_fs_src = {
2212 	.ns_reg = 0x2988,
2213 	.md_reg = 0x2984,
2214 	.mn = {
2215 		.mnctr_en_bit = 8,
2216 		.mnctr_reset_bit = 7,
2217 		.mnctr_mode_shift = 5,
2218 		.n_val_shift = 16,
2219 		.m_val_shift = 16,
2220 		.width = 8,
2221 	},
2222 	.p = {
2223 		.pre_div_shift = 3,
2224 		.pre_div_width = 2,
2225 	},
2226 	.s = {
2227 		.src_sel_shift = 0,
2228 		.parent_map = gcc_pxo_pll8_map,
2229 	},
2230 	.freq_tbl = clk_tbl_usb,
2231 	.clkr = {
2232 		.enable_reg = 0x2988,
2233 		.enable_mask = BIT(11),
2234 		.hw.init = &(struct clk_init_data){
2235 			.name = "usb_fs2_xcvr_fs_src",
2236 			.parent_names = gcc_pxo_pll8,
2237 			.num_parents = 2,
2238 			.ops = &clk_rcg_ops,
2239 			.flags = CLK_SET_RATE_GATE,
2240 		},
2241 	}
2242 };
2243 
2244 static const char * const usb_fs2_xcvr_fs_src_p[] = { "usb_fs2_xcvr_fs_src" };
2245 
2246 static struct clk_branch usb_fs2_xcvr_fs_clk = {
2247 	.halt_reg = 0x2fcc,
2248 	.halt_bit = 12,
2249 	.clkr = {
2250 		.enable_reg = 0x2988,
2251 		.enable_mask = BIT(9),
2252 		.hw.init = &(struct clk_init_data){
2253 			.name = "usb_fs2_xcvr_fs_clk",
2254 			.parent_names = usb_fs2_xcvr_fs_src_p,
2255 			.num_parents = 1,
2256 			.ops = &clk_branch_ops,
2257 			.flags = CLK_SET_RATE_PARENT,
2258 		},
2259 	},
2260 };
2261 
2262 static struct clk_branch usb_fs2_system_clk = {
2263 	.halt_reg = 0x2fcc,
2264 	.halt_bit = 13,
2265 	.clkr = {
2266 		.enable_reg = 0x298c,
2267 		.enable_mask = BIT(4),
2268 		.hw.init = &(struct clk_init_data){
2269 			.name = "usb_fs2_system_clk",
2270 			.parent_names = usb_fs2_xcvr_fs_src_p,
2271 			.num_parents = 1,
2272 			.ops = &clk_branch_ops,
2273 			.flags = CLK_SET_RATE_PARENT,
2274 		},
2275 	},
2276 };
2277 
2278 static struct clk_branch ce1_core_clk = {
2279 	.hwcg_reg = 0x2724,
2280 	.hwcg_bit = 6,
2281 	.halt_reg = 0x2fd4,
2282 	.halt_bit = 27,
2283 	.clkr = {
2284 		.enable_reg = 0x2724,
2285 		.enable_mask = BIT(4),
2286 		.hw.init = &(struct clk_init_data){
2287 			.name = "ce1_core_clk",
2288 			.ops = &clk_branch_ops,
2289 		},
2290 	},
2291 };
2292 
2293 static struct clk_branch ce1_h_clk = {
2294 	.halt_reg = 0x2fd4,
2295 	.halt_bit = 1,
2296 	.clkr = {
2297 		.enable_reg = 0x2720,
2298 		.enable_mask = BIT(4),
2299 		.hw.init = &(struct clk_init_data){
2300 			.name = "ce1_h_clk",
2301 			.ops = &clk_branch_ops,
2302 		},
2303 	},
2304 };
2305 
2306 static struct clk_branch dma_bam_h_clk = {
2307 	.hwcg_reg = 0x25c0,
2308 	.hwcg_bit = 6,
2309 	.halt_reg = 0x2fc8,
2310 	.halt_bit = 12,
2311 	.clkr = {
2312 		.enable_reg = 0x25c0,
2313 		.enable_mask = BIT(4),
2314 		.hw.init = &(struct clk_init_data){
2315 			.name = "dma_bam_h_clk",
2316 			.ops = &clk_branch_ops,
2317 		},
2318 	},
2319 };
2320 
2321 static struct clk_branch gsbi1_h_clk = {
2322 	.hwcg_reg = 0x29c0,
2323 	.hwcg_bit = 6,
2324 	.halt_reg = 0x2fcc,
2325 	.halt_bit = 11,
2326 	.clkr = {
2327 		.enable_reg = 0x29c0,
2328 		.enable_mask = BIT(4),
2329 		.hw.init = &(struct clk_init_data){
2330 			.name = "gsbi1_h_clk",
2331 			.ops = &clk_branch_ops,
2332 		},
2333 	},
2334 };
2335 
2336 static struct clk_branch gsbi2_h_clk = {
2337 	.hwcg_reg = 0x29e0,
2338 	.hwcg_bit = 6,
2339 	.halt_reg = 0x2fcc,
2340 	.halt_bit = 7,
2341 	.clkr = {
2342 		.enable_reg = 0x29e0,
2343 		.enable_mask = BIT(4),
2344 		.hw.init = &(struct clk_init_data){
2345 			.name = "gsbi2_h_clk",
2346 			.ops = &clk_branch_ops,
2347 		},
2348 	},
2349 };
2350 
2351 static struct clk_branch gsbi3_h_clk = {
2352 	.hwcg_reg = 0x2a00,
2353 	.hwcg_bit = 6,
2354 	.halt_reg = 0x2fcc,
2355 	.halt_bit = 3,
2356 	.clkr = {
2357 		.enable_reg = 0x2a00,
2358 		.enable_mask = BIT(4),
2359 		.hw.init = &(struct clk_init_data){
2360 			.name = "gsbi3_h_clk",
2361 			.ops = &clk_branch_ops,
2362 		},
2363 	},
2364 };
2365 
2366 static struct clk_branch gsbi4_h_clk = {
2367 	.hwcg_reg = 0x2a20,
2368 	.hwcg_bit = 6,
2369 	.halt_reg = 0x2fd0,
2370 	.halt_bit = 27,
2371 	.clkr = {
2372 		.enable_reg = 0x2a20,
2373 		.enable_mask = BIT(4),
2374 		.hw.init = &(struct clk_init_data){
2375 			.name = "gsbi4_h_clk",
2376 			.ops = &clk_branch_ops,
2377 		},
2378 	},
2379 };
2380 
2381 static struct clk_branch gsbi5_h_clk = {
2382 	.hwcg_reg = 0x2a40,
2383 	.hwcg_bit = 6,
2384 	.halt_reg = 0x2fd0,
2385 	.halt_bit = 23,
2386 	.clkr = {
2387 		.enable_reg = 0x2a40,
2388 		.enable_mask = BIT(4),
2389 		.hw.init = &(struct clk_init_data){
2390 			.name = "gsbi5_h_clk",
2391 			.ops = &clk_branch_ops,
2392 		},
2393 	},
2394 };
2395 
2396 static struct clk_branch gsbi6_h_clk = {
2397 	.hwcg_reg = 0x2a60,
2398 	.hwcg_bit = 6,
2399 	.halt_reg = 0x2fd0,
2400 	.halt_bit = 19,
2401 	.clkr = {
2402 		.enable_reg = 0x2a60,
2403 		.enable_mask = BIT(4),
2404 		.hw.init = &(struct clk_init_data){
2405 			.name = "gsbi6_h_clk",
2406 			.ops = &clk_branch_ops,
2407 		},
2408 	},
2409 };
2410 
2411 static struct clk_branch gsbi7_h_clk = {
2412 	.hwcg_reg = 0x2a80,
2413 	.hwcg_bit = 6,
2414 	.halt_reg = 0x2fd0,
2415 	.halt_bit = 15,
2416 	.clkr = {
2417 		.enable_reg = 0x2a80,
2418 		.enable_mask = BIT(4),
2419 		.hw.init = &(struct clk_init_data){
2420 			.name = "gsbi7_h_clk",
2421 			.ops = &clk_branch_ops,
2422 		},
2423 	},
2424 };
2425 
2426 static struct clk_branch gsbi8_h_clk = {
2427 	.hwcg_reg = 0x2aa0,
2428 	.hwcg_bit = 6,
2429 	.halt_reg = 0x2fd0,
2430 	.halt_bit = 11,
2431 	.clkr = {
2432 		.enable_reg = 0x2aa0,
2433 		.enable_mask = BIT(4),
2434 		.hw.init = &(struct clk_init_data){
2435 			.name = "gsbi8_h_clk",
2436 			.ops = &clk_branch_ops,
2437 		},
2438 	},
2439 };
2440 
2441 static struct clk_branch gsbi9_h_clk = {
2442 	.hwcg_reg = 0x2ac0,
2443 	.hwcg_bit = 6,
2444 	.halt_reg = 0x2fd0,
2445 	.halt_bit = 7,
2446 	.clkr = {
2447 		.enable_reg = 0x2ac0,
2448 		.enable_mask = BIT(4),
2449 		.hw.init = &(struct clk_init_data){
2450 			.name = "gsbi9_h_clk",
2451 			.ops = &clk_branch_ops,
2452 		},
2453 	},
2454 };
2455 
2456 static struct clk_branch gsbi10_h_clk = {
2457 	.hwcg_reg = 0x2ae0,
2458 	.hwcg_bit = 6,
2459 	.halt_reg = 0x2fd0,
2460 	.halt_bit = 3,
2461 	.clkr = {
2462 		.enable_reg = 0x2ae0,
2463 		.enable_mask = BIT(4),
2464 		.hw.init = &(struct clk_init_data){
2465 			.name = "gsbi10_h_clk",
2466 			.ops = &clk_branch_ops,
2467 		},
2468 	},
2469 };
2470 
2471 static struct clk_branch gsbi11_h_clk = {
2472 	.hwcg_reg = 0x2b00,
2473 	.hwcg_bit = 6,
2474 	.halt_reg = 0x2fd4,
2475 	.halt_bit = 18,
2476 	.clkr = {
2477 		.enable_reg = 0x2b00,
2478 		.enable_mask = BIT(4),
2479 		.hw.init = &(struct clk_init_data){
2480 			.name = "gsbi11_h_clk",
2481 			.ops = &clk_branch_ops,
2482 		},
2483 	},
2484 };
2485 
2486 static struct clk_branch gsbi12_h_clk = {
2487 	.hwcg_reg = 0x2b20,
2488 	.hwcg_bit = 6,
2489 	.halt_reg = 0x2fd4,
2490 	.halt_bit = 14,
2491 	.clkr = {
2492 		.enable_reg = 0x2b20,
2493 		.enable_mask = BIT(4),
2494 		.hw.init = &(struct clk_init_data){
2495 			.name = "gsbi12_h_clk",
2496 			.ops = &clk_branch_ops,
2497 		},
2498 	},
2499 };
2500 
2501 static struct clk_branch tsif_h_clk = {
2502 	.hwcg_reg = 0x2700,
2503 	.hwcg_bit = 6,
2504 	.halt_reg = 0x2fd4,
2505 	.halt_bit = 7,
2506 	.clkr = {
2507 		.enable_reg = 0x2700,
2508 		.enable_mask = BIT(4),
2509 		.hw.init = &(struct clk_init_data){
2510 			.name = "tsif_h_clk",
2511 			.ops = &clk_branch_ops,
2512 		},
2513 	},
2514 };
2515 
2516 static struct clk_branch usb_fs1_h_clk = {
2517 	.halt_reg = 0x2fcc,
2518 	.halt_bit = 17,
2519 	.clkr = {
2520 		.enable_reg = 0x2960,
2521 		.enable_mask = BIT(4),
2522 		.hw.init = &(struct clk_init_data){
2523 			.name = "usb_fs1_h_clk",
2524 			.ops = &clk_branch_ops,
2525 		},
2526 	},
2527 };
2528 
2529 static struct clk_branch usb_fs2_h_clk = {
2530 	.halt_reg = 0x2fcc,
2531 	.halt_bit = 14,
2532 	.clkr = {
2533 		.enable_reg = 0x2980,
2534 		.enable_mask = BIT(4),
2535 		.hw.init = &(struct clk_init_data){
2536 			.name = "usb_fs2_h_clk",
2537 			.ops = &clk_branch_ops,
2538 		},
2539 	},
2540 };
2541 
2542 static struct clk_branch usb_hs1_h_clk = {
2543 	.hwcg_reg = 0x2900,
2544 	.hwcg_bit = 6,
2545 	.halt_reg = 0x2fc8,
2546 	.halt_bit = 1,
2547 	.clkr = {
2548 		.enable_reg = 0x2900,
2549 		.enable_mask = BIT(4),
2550 		.hw.init = &(struct clk_init_data){
2551 			.name = "usb_hs1_h_clk",
2552 			.ops = &clk_branch_ops,
2553 		},
2554 	},
2555 };
2556 
2557 static struct clk_branch usb_hs3_h_clk = {
2558 	.halt_reg = 0x2fc8,
2559 	.halt_bit = 31,
2560 	.clkr = {
2561 		.enable_reg = 0x3700,
2562 		.enable_mask = BIT(4),
2563 		.hw.init = &(struct clk_init_data){
2564 			.name = "usb_hs3_h_clk",
2565 			.ops = &clk_branch_ops,
2566 		},
2567 	},
2568 };
2569 
2570 static struct clk_branch usb_hs4_h_clk = {
2571 	.halt_reg = 0x2fc8,
2572 	.halt_bit = 7,
2573 	.clkr = {
2574 		.enable_reg = 0x3720,
2575 		.enable_mask = BIT(4),
2576 		.hw.init = &(struct clk_init_data){
2577 			.name = "usb_hs4_h_clk",
2578 			.ops = &clk_branch_ops,
2579 		},
2580 	},
2581 };
2582 
2583 static struct clk_branch usb_hsic_h_clk = {
2584 	.halt_reg = 0x2fcc,
2585 	.halt_bit = 28,
2586 	.clkr = {
2587 		.enable_reg = 0x2920,
2588 		.enable_mask = BIT(4),
2589 		.hw.init = &(struct clk_init_data){
2590 			.name = "usb_hsic_h_clk",
2591 			.ops = &clk_branch_ops,
2592 		},
2593 	},
2594 };
2595 
2596 static struct clk_branch sdc1_h_clk = {
2597 	.hwcg_reg = 0x2820,
2598 	.hwcg_bit = 6,
2599 	.halt_reg = 0x2fc8,
2600 	.halt_bit = 11,
2601 	.clkr = {
2602 		.enable_reg = 0x2820,
2603 		.enable_mask = BIT(4),
2604 		.hw.init = &(struct clk_init_data){
2605 			.name = "sdc1_h_clk",
2606 			.ops = &clk_branch_ops,
2607 		},
2608 	},
2609 };
2610 
2611 static struct clk_branch sdc2_h_clk = {
2612 	.hwcg_reg = 0x2840,
2613 	.hwcg_bit = 6,
2614 	.halt_reg = 0x2fc8,
2615 	.halt_bit = 10,
2616 	.clkr = {
2617 		.enable_reg = 0x2840,
2618 		.enable_mask = BIT(4),
2619 		.hw.init = &(struct clk_init_data){
2620 			.name = "sdc2_h_clk",
2621 			.ops = &clk_branch_ops,
2622 		},
2623 	},
2624 };
2625 
2626 static struct clk_branch sdc3_h_clk = {
2627 	.hwcg_reg = 0x2860,
2628 	.hwcg_bit = 6,
2629 	.halt_reg = 0x2fc8,
2630 	.halt_bit = 9,
2631 	.clkr = {
2632 		.enable_reg = 0x2860,
2633 		.enable_mask = BIT(4),
2634 		.hw.init = &(struct clk_init_data){
2635 			.name = "sdc3_h_clk",
2636 			.ops = &clk_branch_ops,
2637 		},
2638 	},
2639 };
2640 
2641 static struct clk_branch sdc4_h_clk = {
2642 	.hwcg_reg = 0x2880,
2643 	.hwcg_bit = 6,
2644 	.halt_reg = 0x2fc8,
2645 	.halt_bit = 8,
2646 	.clkr = {
2647 		.enable_reg = 0x2880,
2648 		.enable_mask = BIT(4),
2649 		.hw.init = &(struct clk_init_data){
2650 			.name = "sdc4_h_clk",
2651 			.ops = &clk_branch_ops,
2652 		},
2653 	},
2654 };
2655 
2656 static struct clk_branch sdc5_h_clk = {
2657 	.hwcg_reg = 0x28a0,
2658 	.hwcg_bit = 6,
2659 	.halt_reg = 0x2fc8,
2660 	.halt_bit = 7,
2661 	.clkr = {
2662 		.enable_reg = 0x28a0,
2663 		.enable_mask = BIT(4),
2664 		.hw.init = &(struct clk_init_data){
2665 			.name = "sdc5_h_clk",
2666 			.ops = &clk_branch_ops,
2667 		},
2668 	},
2669 };
2670 
2671 static struct clk_branch adm0_clk = {
2672 	.halt_reg = 0x2fdc,
2673 	.halt_check = BRANCH_HALT_VOTED,
2674 	.halt_bit = 14,
2675 	.clkr = {
2676 		.enable_reg = 0x3080,
2677 		.enable_mask = BIT(2),
2678 		.hw.init = &(struct clk_init_data){
2679 			.name = "adm0_clk",
2680 			.ops = &clk_branch_ops,
2681 		},
2682 	},
2683 };
2684 
2685 static struct clk_branch adm0_pbus_clk = {
2686 	.hwcg_reg = 0x2208,
2687 	.hwcg_bit = 6,
2688 	.halt_reg = 0x2fdc,
2689 	.halt_check = BRANCH_HALT_VOTED,
2690 	.halt_bit = 13,
2691 	.clkr = {
2692 		.enable_reg = 0x3080,
2693 		.enable_mask = BIT(3),
2694 		.hw.init = &(struct clk_init_data){
2695 			.name = "adm0_pbus_clk",
2696 			.ops = &clk_branch_ops,
2697 		},
2698 	},
2699 };
2700 
2701 static struct freq_tbl clk_tbl_ce3[] = {
2702 	{ 48000000, P_PLL8, 8 },
2703 	{ 100000000, P_PLL3, 12 },
2704 	{ 120000000, P_PLL3, 10 },
2705 	{ }
2706 };
2707 
2708 static struct clk_rcg ce3_src = {
2709 	.ns_reg = 0x36c0,
2710 	.p = {
2711 		.pre_div_shift = 3,
2712 		.pre_div_width = 4,
2713 	},
2714 	.s = {
2715 		.src_sel_shift = 0,
2716 		.parent_map = gcc_pxo_pll8_pll3_map,
2717 	},
2718 	.freq_tbl = clk_tbl_ce3,
2719 	.clkr = {
2720 		.enable_reg = 0x36c0,
2721 		.enable_mask = BIT(7),
2722 		.hw.init = &(struct clk_init_data){
2723 			.name = "ce3_src",
2724 			.parent_names = gcc_pxo_pll8_pll3,
2725 			.num_parents = 3,
2726 			.ops = &clk_rcg_ops,
2727 			.flags = CLK_SET_RATE_GATE,
2728 		},
2729 	},
2730 };
2731 
2732 static struct clk_branch ce3_core_clk = {
2733 	.halt_reg = 0x2fdc,
2734 	.halt_bit = 5,
2735 	.clkr = {
2736 		.enable_reg = 0x36cc,
2737 		.enable_mask = BIT(4),
2738 		.hw.init = &(struct clk_init_data){
2739 			.name = "ce3_core_clk",
2740 			.parent_names = (const char *[]){ "ce3_src" },
2741 			.num_parents = 1,
2742 			.ops = &clk_branch_ops,
2743 			.flags = CLK_SET_RATE_PARENT,
2744 		},
2745 	},
2746 };
2747 
2748 static struct clk_branch ce3_h_clk = {
2749 	.halt_reg = 0x2fc4,
2750 	.halt_bit = 16,
2751 	.clkr = {
2752 		.enable_reg = 0x36c4,
2753 		.enable_mask = BIT(4),
2754 		.hw.init = &(struct clk_init_data){
2755 			.name = "ce3_h_clk",
2756 			.parent_names = (const char *[]){ "ce3_src" },
2757 			.num_parents = 1,
2758 			.ops = &clk_branch_ops,
2759 			.flags = CLK_SET_RATE_PARENT,
2760 		},
2761 	},
2762 };
2763 
2764 static const struct freq_tbl clk_tbl_sata_ref[] = {
2765 	{ 48000000, P_PLL8, 8, 0, 0 },
2766 	{ 100000000, P_PLL3, 12, 0, 0 },
2767 	{ }
2768 };
2769 
2770 static struct clk_rcg sata_clk_src = {
2771 	.ns_reg = 0x2c08,
2772 	.p = {
2773 		.pre_div_shift = 3,
2774 		.pre_div_width = 4,
2775 	},
2776 	.s = {
2777 		.src_sel_shift = 0,
2778 		.parent_map = gcc_pxo_pll8_pll3_map,
2779 	},
2780 	.freq_tbl = clk_tbl_sata_ref,
2781 	.clkr = {
2782 		.enable_reg = 0x2c08,
2783 		.enable_mask = BIT(7),
2784 		.hw.init = &(struct clk_init_data){
2785 			.name = "sata_clk_src",
2786 			.parent_names = gcc_pxo_pll8_pll3,
2787 			.num_parents = 3,
2788 			.ops = &clk_rcg_ops,
2789 			.flags = CLK_SET_RATE_GATE,
2790 		},
2791 	},
2792 };
2793 
2794 static struct clk_branch sata_rxoob_clk = {
2795 	.halt_reg = 0x2fdc,
2796 	.halt_bit = 26,
2797 	.clkr = {
2798 		.enable_reg = 0x2c0c,
2799 		.enable_mask = BIT(4),
2800 		.hw.init = &(struct clk_init_data){
2801 			.name = "sata_rxoob_clk",
2802 			.parent_names = (const char *[]){ "sata_clk_src" },
2803 			.num_parents = 1,
2804 			.ops = &clk_branch_ops,
2805 			.flags = CLK_SET_RATE_PARENT,
2806 		},
2807 	},
2808 };
2809 
2810 static struct clk_branch sata_pmalive_clk = {
2811 	.halt_reg = 0x2fdc,
2812 	.halt_bit = 25,
2813 	.clkr = {
2814 		.enable_reg = 0x2c10,
2815 		.enable_mask = BIT(4),
2816 		.hw.init = &(struct clk_init_data){
2817 			.name = "sata_pmalive_clk",
2818 			.parent_names = (const char *[]){ "sata_clk_src" },
2819 			.num_parents = 1,
2820 			.ops = &clk_branch_ops,
2821 			.flags = CLK_SET_RATE_PARENT,
2822 		},
2823 	},
2824 };
2825 
2826 static struct clk_branch sata_phy_ref_clk = {
2827 	.halt_reg = 0x2fdc,
2828 	.halt_bit = 24,
2829 	.clkr = {
2830 		.enable_reg = 0x2c14,
2831 		.enable_mask = BIT(4),
2832 		.hw.init = &(struct clk_init_data){
2833 			.name = "sata_phy_ref_clk",
2834 			.parent_names = (const char *[]){ "pxo" },
2835 			.num_parents = 1,
2836 			.ops = &clk_branch_ops,
2837 		},
2838 	},
2839 };
2840 
2841 static struct clk_branch sata_a_clk = {
2842 	.halt_reg = 0x2fc0,
2843 	.halt_bit = 12,
2844 	.clkr = {
2845 		.enable_reg = 0x2c20,
2846 		.enable_mask = BIT(4),
2847 		.hw.init = &(struct clk_init_data){
2848 			.name = "sata_a_clk",
2849 			.ops = &clk_branch_ops,
2850 		},
2851 	},
2852 };
2853 
2854 static struct clk_branch sata_h_clk = {
2855 	.halt_reg = 0x2fdc,
2856 	.halt_bit = 27,
2857 	.clkr = {
2858 		.enable_reg = 0x2c00,
2859 		.enable_mask = BIT(4),
2860 		.hw.init = &(struct clk_init_data){
2861 			.name = "sata_h_clk",
2862 			.ops = &clk_branch_ops,
2863 		},
2864 	},
2865 };
2866 
2867 static struct clk_branch sfab_sata_s_h_clk = {
2868 	.halt_reg = 0x2fc4,
2869 	.halt_bit = 14,
2870 	.clkr = {
2871 		.enable_reg = 0x2480,
2872 		.enable_mask = BIT(4),
2873 		.hw.init = &(struct clk_init_data){
2874 			.name = "sfab_sata_s_h_clk",
2875 			.ops = &clk_branch_ops,
2876 		},
2877 	},
2878 };
2879 
2880 static struct clk_branch sata_phy_cfg_clk = {
2881 	.halt_reg = 0x2fcc,
2882 	.halt_bit = 12,
2883 	.clkr = {
2884 		.enable_reg = 0x2c40,
2885 		.enable_mask = BIT(4),
2886 		.hw.init = &(struct clk_init_data){
2887 			.name = "sata_phy_cfg_clk",
2888 			.ops = &clk_branch_ops,
2889 		},
2890 	},
2891 };
2892 
2893 static struct clk_branch pcie_phy_ref_clk = {
2894 	.halt_reg = 0x2fdc,
2895 	.halt_bit = 29,
2896 	.clkr = {
2897 		.enable_reg = 0x22d0,
2898 		.enable_mask = BIT(4),
2899 		.hw.init = &(struct clk_init_data){
2900 			.name = "pcie_phy_ref_clk",
2901 			.ops = &clk_branch_ops,
2902 		},
2903 	},
2904 };
2905 
2906 static struct clk_branch pcie_h_clk = {
2907 	.halt_reg = 0x2fd4,
2908 	.halt_bit = 8,
2909 	.clkr = {
2910 		.enable_reg = 0x22cc,
2911 		.enable_mask = BIT(4),
2912 		.hw.init = &(struct clk_init_data){
2913 			.name = "pcie_h_clk",
2914 			.ops = &clk_branch_ops,
2915 		},
2916 	},
2917 };
2918 
2919 static struct clk_branch pcie_a_clk = {
2920 	.halt_reg = 0x2fc0,
2921 	.halt_bit = 13,
2922 	.clkr = {
2923 		.enable_reg = 0x22c0,
2924 		.enable_mask = BIT(4),
2925 		.hw.init = &(struct clk_init_data){
2926 			.name = "pcie_a_clk",
2927 			.ops = &clk_branch_ops,
2928 		},
2929 	},
2930 };
2931 
2932 static struct clk_branch pmic_arb0_h_clk = {
2933 	.halt_reg = 0x2fd8,
2934 	.halt_check = BRANCH_HALT_VOTED,
2935 	.halt_bit = 22,
2936 	.clkr = {
2937 		.enable_reg = 0x3080,
2938 		.enable_mask = BIT(8),
2939 		.hw.init = &(struct clk_init_data){
2940 			.name = "pmic_arb0_h_clk",
2941 			.ops = &clk_branch_ops,
2942 		},
2943 	},
2944 };
2945 
2946 static struct clk_branch pmic_arb1_h_clk = {
2947 	.halt_reg = 0x2fd8,
2948 	.halt_check = BRANCH_HALT_VOTED,
2949 	.halt_bit = 21,
2950 	.clkr = {
2951 		.enable_reg = 0x3080,
2952 		.enable_mask = BIT(9),
2953 		.hw.init = &(struct clk_init_data){
2954 			.name = "pmic_arb1_h_clk",
2955 			.ops = &clk_branch_ops,
2956 		},
2957 	},
2958 };
2959 
2960 static struct clk_branch pmic_ssbi2_clk = {
2961 	.halt_reg = 0x2fd8,
2962 	.halt_check = BRANCH_HALT_VOTED,
2963 	.halt_bit = 23,
2964 	.clkr = {
2965 		.enable_reg = 0x3080,
2966 		.enable_mask = BIT(7),
2967 		.hw.init = &(struct clk_init_data){
2968 			.name = "pmic_ssbi2_clk",
2969 			.ops = &clk_branch_ops,
2970 		},
2971 	},
2972 };
2973 
2974 static struct clk_branch rpm_msg_ram_h_clk = {
2975 	.hwcg_reg = 0x27e0,
2976 	.hwcg_bit = 6,
2977 	.halt_reg = 0x2fd8,
2978 	.halt_check = BRANCH_HALT_VOTED,
2979 	.halt_bit = 12,
2980 	.clkr = {
2981 		.enable_reg = 0x3080,
2982 		.enable_mask = BIT(6),
2983 		.hw.init = &(struct clk_init_data){
2984 			.name = "rpm_msg_ram_h_clk",
2985 			.ops = &clk_branch_ops,
2986 		},
2987 	},
2988 };
2989 
2990 static struct clk_regmap *gcc_msm8960_clks[] = {
2991 	[PLL3] = &pll3.clkr,
2992 	[PLL4_VOTE] = &pll4_vote,
2993 	[PLL8] = &pll8.clkr,
2994 	[PLL8_VOTE] = &pll8_vote,
2995 	[PLL14] = &pll14.clkr,
2996 	[PLL14_VOTE] = &pll14_vote,
2997 	[GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
2998 	[GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
2999 	[GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
3000 	[GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
3001 	[GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
3002 	[GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
3003 	[GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
3004 	[GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
3005 	[GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
3006 	[GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
3007 	[GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
3008 	[GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
3009 	[GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
3010 	[GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
3011 	[GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
3012 	[GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
3013 	[GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
3014 	[GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
3015 	[GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
3016 	[GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
3017 	[GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
3018 	[GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
3019 	[GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
3020 	[GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
3021 	[GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
3022 	[GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
3023 	[GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
3024 	[GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
3025 	[GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
3026 	[GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
3027 	[GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
3028 	[GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
3029 	[GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
3030 	[GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
3031 	[GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
3032 	[GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
3033 	[GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
3034 	[GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
3035 	[GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
3036 	[GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
3037 	[GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
3038 	[GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
3039 	[GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
3040 	[GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
3041 	[GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
3042 	[GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
3043 	[GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
3044 	[GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
3045 	[GP0_SRC] = &gp0_src.clkr,
3046 	[GP0_CLK] = &gp0_clk.clkr,
3047 	[GP1_SRC] = &gp1_src.clkr,
3048 	[GP1_CLK] = &gp1_clk.clkr,
3049 	[GP2_SRC] = &gp2_src.clkr,
3050 	[GP2_CLK] = &gp2_clk.clkr,
3051 	[PMEM_A_CLK] = &pmem_clk.clkr,
3052 	[PRNG_SRC] = &prng_src.clkr,
3053 	[PRNG_CLK] = &prng_clk.clkr,
3054 	[SDC1_SRC] = &sdc1_src.clkr,
3055 	[SDC1_CLK] = &sdc1_clk.clkr,
3056 	[SDC2_SRC] = &sdc2_src.clkr,
3057 	[SDC2_CLK] = &sdc2_clk.clkr,
3058 	[SDC3_SRC] = &sdc3_src.clkr,
3059 	[SDC3_CLK] = &sdc3_clk.clkr,
3060 	[SDC4_SRC] = &sdc4_src.clkr,
3061 	[SDC4_CLK] = &sdc4_clk.clkr,
3062 	[SDC5_SRC] = &sdc5_src.clkr,
3063 	[SDC5_CLK] = &sdc5_clk.clkr,
3064 	[TSIF_REF_SRC] = &tsif_ref_src.clkr,
3065 	[TSIF_REF_CLK] = &tsif_ref_clk.clkr,
3066 	[USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
3067 	[USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
3068 	[USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
3069 	[USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
3070 	[USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
3071 	[USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
3072 	[USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
3073 	[USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
3074 	[USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
3075 	[USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
3076 	[USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
3077 	[USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
3078 	[USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
3079 	[CE1_CORE_CLK] = &ce1_core_clk.clkr,
3080 	[CE1_H_CLK] = &ce1_h_clk.clkr,
3081 	[DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
3082 	[GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
3083 	[GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
3084 	[GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
3085 	[GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
3086 	[GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
3087 	[GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
3088 	[GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
3089 	[GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
3090 	[GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
3091 	[GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
3092 	[GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
3093 	[GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
3094 	[TSIF_H_CLK] = &tsif_h_clk.clkr,
3095 	[USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
3096 	[USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
3097 	[USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
3098 	[USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
3099 	[SDC1_H_CLK] = &sdc1_h_clk.clkr,
3100 	[SDC2_H_CLK] = &sdc2_h_clk.clkr,
3101 	[SDC3_H_CLK] = &sdc3_h_clk.clkr,
3102 	[SDC4_H_CLK] = &sdc4_h_clk.clkr,
3103 	[SDC5_H_CLK] = &sdc5_h_clk.clkr,
3104 	[ADM0_CLK] = &adm0_clk.clkr,
3105 	[ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
3106 	[PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
3107 	[PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
3108 	[PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
3109 	[RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
3110 };
3111 
3112 static const struct qcom_reset_map gcc_msm8960_resets[] = {
3113 	[SFAB_MSS_Q6_SW_RESET] = { 0x2040, 7 },
3114 	[SFAB_MSS_Q6_FW_RESET] = { 0x2044, 7 },
3115 	[QDSS_STM_RESET] = { 0x2060, 6 },
3116 	[AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
3117 	[AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
3118 	[AFAB_SMPSS_M0_RESET] = { 0x20b8 },
3119 	[AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
3120 	[AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
3121 	[SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
3122 	[SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
3123 	[SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
3124 	[ADM0_C2_RESET] = { 0x220c, 4},
3125 	[ADM0_C1_RESET] = { 0x220c, 3},
3126 	[ADM0_C0_RESET] = { 0x220c, 2},
3127 	[ADM0_PBUS_RESET] = { 0x220c, 1 },
3128 	[ADM0_RESET] = { 0x220c },
3129 	[QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
3130 	[QDSS_POR_RESET] = { 0x2260, 4 },
3131 	[QDSS_TSCTR_RESET] = { 0x2260, 3 },
3132 	[QDSS_HRESET_RESET] = { 0x2260, 2 },
3133 	[QDSS_AXI_RESET] = { 0x2260, 1 },
3134 	[QDSS_DBG_RESET] = { 0x2260 },
3135 	[PCIE_A_RESET] = { 0x22c0, 7 },
3136 	[PCIE_AUX_RESET] = { 0x22c8, 7 },
3137 	[PCIE_H_RESET] = { 0x22d0, 7 },
3138 	[SFAB_PCIE_M_RESET] = { 0x22d4, 1 },
3139 	[SFAB_PCIE_S_RESET] = { 0x22d4 },
3140 	[SFAB_MSS_M_RESET] = { 0x2340, 7 },
3141 	[SFAB_USB3_M_RESET] = { 0x2360, 7 },
3142 	[SFAB_RIVA_M_RESET] = { 0x2380, 7 },
3143 	[SFAB_LPASS_RESET] = { 0x23a0, 7 },
3144 	[SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
3145 	[AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
3146 	[AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
3147 	[SFAB_SATA_S_RESET] = { 0x2480, 7 },
3148 	[SFAB_DFAB_M_RESET] = { 0x2500, 7 },
3149 	[DFAB_SFAB_M_RESET] = { 0x2520, 7 },
3150 	[DFAB_SWAY0_RESET] = { 0x2540, 7 },
3151 	[DFAB_SWAY1_RESET] = { 0x2544, 7 },
3152 	[DFAB_ARB0_RESET] = { 0x2560, 7 },
3153 	[DFAB_ARB1_RESET] = { 0x2564, 7 },
3154 	[PPSS_PROC_RESET] = { 0x2594, 1 },
3155 	[PPSS_RESET] = { 0x2594},
3156 	[DMA_BAM_RESET] = { 0x25c0, 7 },
3157 	[SPS_TIC_H_RESET] = { 0x2600, 7 },
3158 	[SLIMBUS_H_RESET] = { 0x2620, 7 },
3159 	[SFAB_CFPB_M_RESET] = { 0x2680, 7 },
3160 	[SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
3161 	[TSIF_H_RESET] = { 0x2700, 7 },
3162 	[CE1_H_RESET] = { 0x2720, 7 },
3163 	[CE1_CORE_RESET] = { 0x2724, 7 },
3164 	[CE1_SLEEP_RESET] = { 0x2728, 7 },
3165 	[CE2_H_RESET] = { 0x2740, 7 },
3166 	[CE2_CORE_RESET] = { 0x2744, 7 },
3167 	[SFAB_SFPB_M_RESET] = { 0x2780, 7 },
3168 	[SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
3169 	[RPM_PROC_RESET] = { 0x27c0, 7 },
3170 	[PMIC_SSBI2_RESET] = { 0x280c, 12 },
3171 	[SDC1_RESET] = { 0x2830 },
3172 	[SDC2_RESET] = { 0x2850 },
3173 	[SDC3_RESET] = { 0x2870 },
3174 	[SDC4_RESET] = { 0x2890 },
3175 	[SDC5_RESET] = { 0x28b0 },
3176 	[DFAB_A2_RESET] = { 0x28c0, 7 },
3177 	[USB_HS1_RESET] = { 0x2910 },
3178 	[USB_HSIC_RESET] = { 0x2934 },
3179 	[USB_FS1_XCVR_RESET] = { 0x2974, 1 },
3180 	[USB_FS1_RESET] = { 0x2974 },
3181 	[USB_FS2_XCVR_RESET] = { 0x2994, 1 },
3182 	[USB_FS2_RESET] = { 0x2994 },
3183 	[GSBI1_RESET] = { 0x29dc },
3184 	[GSBI2_RESET] = { 0x29fc },
3185 	[GSBI3_RESET] = { 0x2a1c },
3186 	[GSBI4_RESET] = { 0x2a3c },
3187 	[GSBI5_RESET] = { 0x2a5c },
3188 	[GSBI6_RESET] = { 0x2a7c },
3189 	[GSBI7_RESET] = { 0x2a9c },
3190 	[GSBI8_RESET] = { 0x2abc },
3191 	[GSBI9_RESET] = { 0x2adc },
3192 	[GSBI10_RESET] = { 0x2afc },
3193 	[GSBI11_RESET] = { 0x2b1c },
3194 	[GSBI12_RESET] = { 0x2b3c },
3195 	[SPDM_RESET] = { 0x2b6c },
3196 	[TLMM_H_RESET] = { 0x2ba0, 7 },
3197 	[SFAB_MSS_S_RESET] = { 0x2c00, 7 },
3198 	[MSS_SLP_RESET] = { 0x2c60, 7 },
3199 	[MSS_Q6SW_JTAG_RESET] = { 0x2c68, 7 },
3200 	[MSS_Q6FW_JTAG_RESET] = { 0x2c6c, 7 },
3201 	[MSS_RESET] = { 0x2c64 },
3202 	[SATA_H_RESET] = { 0x2c80, 7 },
3203 	[SATA_RXOOB_RESE] = { 0x2c8c, 7 },
3204 	[SATA_PMALIVE_RESET] = { 0x2c90, 7 },
3205 	[SATA_SFAB_M_RESET] = { 0x2c98, 7 },
3206 	[TSSC_RESET] = { 0x2ca0, 7 },
3207 	[PDM_RESET] = { 0x2cc0, 12 },
3208 	[MPM_H_RESET] = { 0x2da0, 7 },
3209 	[MPM_RESET] = { 0x2da4 },
3210 	[SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
3211 	[PRNG_RESET] = { 0x2e80, 12 },
3212 	[RIVA_RESET] = { 0x35e0 },
3213 };
3214 
3215 static struct clk_regmap *gcc_apq8064_clks[] = {
3216 	[PLL3] = &pll3.clkr,
3217 	[PLL4_VOTE] = &pll4_vote,
3218 	[PLL8] = &pll8.clkr,
3219 	[PLL8_VOTE] = &pll8_vote,
3220 	[PLL14] = &pll14.clkr,
3221 	[PLL14_VOTE] = &pll14_vote,
3222 	[GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
3223 	[GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
3224 	[GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
3225 	[GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
3226 	[GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
3227 	[GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
3228 	[GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
3229 	[GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
3230 	[GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
3231 	[GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
3232 	[GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
3233 	[GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
3234 	[GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
3235 	[GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
3236 	[GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
3237 	[GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
3238 	[GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
3239 	[GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
3240 	[GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
3241 	[GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
3242 	[GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
3243 	[GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
3244 	[GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
3245 	[GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
3246 	[GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
3247 	[GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
3248 	[GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
3249 	[GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
3250 	[GP0_SRC] = &gp0_src.clkr,
3251 	[GP0_CLK] = &gp0_clk.clkr,
3252 	[GP1_SRC] = &gp1_src.clkr,
3253 	[GP1_CLK] = &gp1_clk.clkr,
3254 	[GP2_SRC] = &gp2_src.clkr,
3255 	[GP2_CLK] = &gp2_clk.clkr,
3256 	[PMEM_A_CLK] = &pmem_clk.clkr,
3257 	[PRNG_SRC] = &prng_src.clkr,
3258 	[PRNG_CLK] = &prng_clk.clkr,
3259 	[SDC1_SRC] = &sdc1_src.clkr,
3260 	[SDC1_CLK] = &sdc1_clk.clkr,
3261 	[SDC2_SRC] = &sdc2_src.clkr,
3262 	[SDC2_CLK] = &sdc2_clk.clkr,
3263 	[SDC3_SRC] = &sdc3_src.clkr,
3264 	[SDC3_CLK] = &sdc3_clk.clkr,
3265 	[SDC4_SRC] = &sdc4_src.clkr,
3266 	[SDC4_CLK] = &sdc4_clk.clkr,
3267 	[TSIF_REF_SRC] = &tsif_ref_src.clkr,
3268 	[TSIF_REF_CLK] = &tsif_ref_clk.clkr,
3269 	[USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
3270 	[USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
3271 	[USB_HS3_XCVR_SRC] = &usb_hs3_xcvr_src.clkr,
3272 	[USB_HS3_XCVR_CLK] = &usb_hs3_xcvr_clk.clkr,
3273 	[USB_HS4_XCVR_SRC] = &usb_hs4_xcvr_src.clkr,
3274 	[USB_HS4_XCVR_CLK] = &usb_hs4_xcvr_clk.clkr,
3275 	[USB_HSIC_XCVR_FS_SRC] = &usb_hsic_xcvr_fs_src.clkr,
3276 	[USB_HSIC_XCVR_FS_CLK] = &usb_hsic_xcvr_fs_clk.clkr,
3277 	[USB_HSIC_SYSTEM_CLK] = &usb_hsic_system_clk.clkr,
3278 	[USB_HSIC_HSIC_CLK] = &usb_hsic_hsic_clk.clkr,
3279 	[USB_HSIC_HSIO_CAL_CLK] = &usb_hsic_hsio_cal_clk.clkr,
3280 	[USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
3281 	[USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
3282 	[USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
3283 	[SATA_H_CLK] = &sata_h_clk.clkr,
3284 	[SATA_CLK_SRC] = &sata_clk_src.clkr,
3285 	[SATA_RXOOB_CLK] = &sata_rxoob_clk.clkr,
3286 	[SATA_PMALIVE_CLK] = &sata_pmalive_clk.clkr,
3287 	[SATA_PHY_REF_CLK] = &sata_phy_ref_clk.clkr,
3288 	[SATA_PHY_CFG_CLK] = &sata_phy_cfg_clk.clkr,
3289 	[SATA_A_CLK] = &sata_a_clk.clkr,
3290 	[SFAB_SATA_S_H_CLK] = &sfab_sata_s_h_clk.clkr,
3291 	[CE3_SRC] = &ce3_src.clkr,
3292 	[CE3_CORE_CLK] = &ce3_core_clk.clkr,
3293 	[CE3_H_CLK] = &ce3_h_clk.clkr,
3294 	[DMA_BAM_H_CLK] = &dma_bam_h_clk.clkr,
3295 	[GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
3296 	[GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
3297 	[GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
3298 	[GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
3299 	[GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
3300 	[GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
3301 	[GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
3302 	[TSIF_H_CLK] = &tsif_h_clk.clkr,
3303 	[USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
3304 	[USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
3305 	[USB_HSIC_H_CLK] = &usb_hsic_h_clk.clkr,
3306 	[USB_HS3_H_CLK] = &usb_hs3_h_clk.clkr,
3307 	[USB_HS4_H_CLK] = &usb_hs4_h_clk.clkr,
3308 	[SDC1_H_CLK] = &sdc1_h_clk.clkr,
3309 	[SDC2_H_CLK] = &sdc2_h_clk.clkr,
3310 	[SDC3_H_CLK] = &sdc3_h_clk.clkr,
3311 	[SDC4_H_CLK] = &sdc4_h_clk.clkr,
3312 	[ADM0_CLK] = &adm0_clk.clkr,
3313 	[ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
3314 	[PCIE_A_CLK] = &pcie_a_clk.clkr,
3315 	[PCIE_PHY_REF_CLK] = &pcie_phy_ref_clk.clkr,
3316 	[PCIE_H_CLK] = &pcie_h_clk.clkr,
3317 	[PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
3318 	[PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
3319 	[PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
3320 	[RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
3321 };
3322 
3323 static const struct qcom_reset_map gcc_apq8064_resets[] = {
3324 	[QDSS_STM_RESET] = { 0x2060, 6 },
3325 	[AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
3326 	[AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
3327 	[AFAB_SMPSS_M0_RESET] = { 0x20b8 },
3328 	[AFAB_EBI1_CH0_RESET] = { 0x20c0, 7 },
3329 	[AFAB_EBI1_CH1_RESET] = { 0x20c4, 7},
3330 	[SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
3331 	[SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
3332 	[SFAB_ADM0_M2_RESET] = { 0x21e8, 7 },
3333 	[ADM0_C2_RESET] = { 0x220c, 4},
3334 	[ADM0_C1_RESET] = { 0x220c, 3},
3335 	[ADM0_C0_RESET] = { 0x220c, 2},
3336 	[ADM0_PBUS_RESET] = { 0x220c, 1 },
3337 	[ADM0_RESET] = { 0x220c },
3338 	[QDSS_CLKS_SW_RESET] = { 0x2260, 5 },
3339 	[QDSS_POR_RESET] = { 0x2260, 4 },
3340 	[QDSS_TSCTR_RESET] = { 0x2260, 3 },
3341 	[QDSS_HRESET_RESET] = { 0x2260, 2 },
3342 	[QDSS_AXI_RESET] = { 0x2260, 1 },
3343 	[QDSS_DBG_RESET] = { 0x2260 },
3344 	[SFAB_PCIE_M_RESET] = { 0x22d8, 1 },
3345 	[SFAB_PCIE_S_RESET] = { 0x22d8 },
3346 	[PCIE_EXT_PCI_RESET] = { 0x22dc, 6 },
3347 	[PCIE_PHY_RESET] = { 0x22dc, 5 },
3348 	[PCIE_PCI_RESET] = { 0x22dc, 4 },
3349 	[PCIE_POR_RESET] = { 0x22dc, 3 },
3350 	[PCIE_HCLK_RESET] = { 0x22dc, 2 },
3351 	[PCIE_ACLK_RESET] = { 0x22dc },
3352 	[SFAB_USB3_M_RESET] = { 0x2360, 7 },
3353 	[SFAB_RIVA_M_RESET] = { 0x2380, 7 },
3354 	[SFAB_LPASS_RESET] = { 0x23a0, 7 },
3355 	[SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
3356 	[AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
3357 	[AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
3358 	[SFAB_SATA_S_RESET] = { 0x2480, 7 },
3359 	[SFAB_DFAB_M_RESET] = { 0x2500, 7 },
3360 	[DFAB_SFAB_M_RESET] = { 0x2520, 7 },
3361 	[DFAB_SWAY0_RESET] = { 0x2540, 7 },
3362 	[DFAB_SWAY1_RESET] = { 0x2544, 7 },
3363 	[DFAB_ARB0_RESET] = { 0x2560, 7 },
3364 	[DFAB_ARB1_RESET] = { 0x2564, 7 },
3365 	[PPSS_PROC_RESET] = { 0x2594, 1 },
3366 	[PPSS_RESET] = { 0x2594},
3367 	[DMA_BAM_RESET] = { 0x25c0, 7 },
3368 	[SPS_TIC_H_RESET] = { 0x2600, 7 },
3369 	[SFAB_CFPB_M_RESET] = { 0x2680, 7 },
3370 	[SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
3371 	[TSIF_H_RESET] = { 0x2700, 7 },
3372 	[CE1_H_RESET] = { 0x2720, 7 },
3373 	[CE1_CORE_RESET] = { 0x2724, 7 },
3374 	[CE1_SLEEP_RESET] = { 0x2728, 7 },
3375 	[CE2_H_RESET] = { 0x2740, 7 },
3376 	[CE2_CORE_RESET] = { 0x2744, 7 },
3377 	[SFAB_SFPB_M_RESET] = { 0x2780, 7 },
3378 	[SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
3379 	[RPM_PROC_RESET] = { 0x27c0, 7 },
3380 	[PMIC_SSBI2_RESET] = { 0x280c, 12 },
3381 	[SDC1_RESET] = { 0x2830 },
3382 	[SDC2_RESET] = { 0x2850 },
3383 	[SDC3_RESET] = { 0x2870 },
3384 	[SDC4_RESET] = { 0x2890 },
3385 	[USB_HS1_RESET] = { 0x2910 },
3386 	[USB_HSIC_RESET] = { 0x2934 },
3387 	[USB_FS1_XCVR_RESET] = { 0x2974, 1 },
3388 	[USB_FS1_RESET] = { 0x2974 },
3389 	[GSBI1_RESET] = { 0x29dc },
3390 	[GSBI2_RESET] = { 0x29fc },
3391 	[GSBI3_RESET] = { 0x2a1c },
3392 	[GSBI4_RESET] = { 0x2a3c },
3393 	[GSBI5_RESET] = { 0x2a5c },
3394 	[GSBI6_RESET] = { 0x2a7c },
3395 	[GSBI7_RESET] = { 0x2a9c },
3396 	[SPDM_RESET] = { 0x2b6c },
3397 	[TLMM_H_RESET] = { 0x2ba0, 7 },
3398 	[SATA_SFAB_M_RESET] = { 0x2c18 },
3399 	[SATA_RESET] = { 0x2c1c },
3400 	[GSS_SLP_RESET] = { 0x2c60, 7 },
3401 	[GSS_RESET] = { 0x2c64 },
3402 	[TSSC_RESET] = { 0x2ca0, 7 },
3403 	[PDM_RESET] = { 0x2cc0, 12 },
3404 	[MPM_H_RESET] = { 0x2da0, 7 },
3405 	[MPM_RESET] = { 0x2da4 },
3406 	[SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
3407 	[PRNG_RESET] = { 0x2e80, 12 },
3408 	[RIVA_RESET] = { 0x35e0 },
3409 	[CE3_H_RESET] = { 0x36c4, 7 },
3410 	[SFAB_CE3_M_RESET] = { 0x36c8, 1 },
3411 	[SFAB_CE3_S_RESET] = { 0x36c8 },
3412 	[CE3_RESET] = { 0x36cc, 7 },
3413 	[CE3_SLEEP_RESET] = { 0x36d0, 7 },
3414 	[USB_HS3_RESET] = { 0x3710 },
3415 	[USB_HS4_RESET] = { 0x3730 },
3416 };
3417 
3418 static const struct regmap_config gcc_msm8960_regmap_config = {
3419 	.reg_bits	= 32,
3420 	.reg_stride	= 4,
3421 	.val_bits	= 32,
3422 	.max_register	= 0x3660,
3423 	.fast_io	= true,
3424 };
3425 
3426 static const struct regmap_config gcc_apq8064_regmap_config = {
3427 	.reg_bits	= 32,
3428 	.reg_stride	= 4,
3429 	.val_bits	= 32,
3430 	.max_register	= 0x3880,
3431 	.fast_io	= true,
3432 };
3433 
3434 static const struct qcom_cc_desc gcc_msm8960_desc = {
3435 	.config = &gcc_msm8960_regmap_config,
3436 	.clks = gcc_msm8960_clks,
3437 	.num_clks = ARRAY_SIZE(gcc_msm8960_clks),
3438 	.resets = gcc_msm8960_resets,
3439 	.num_resets = ARRAY_SIZE(gcc_msm8960_resets),
3440 };
3441 
3442 static const struct qcom_cc_desc gcc_apq8064_desc = {
3443 	.config = &gcc_apq8064_regmap_config,
3444 	.clks = gcc_apq8064_clks,
3445 	.num_clks = ARRAY_SIZE(gcc_apq8064_clks),
3446 	.resets = gcc_apq8064_resets,
3447 	.num_resets = ARRAY_SIZE(gcc_apq8064_resets),
3448 };
3449 
3450 static const struct of_device_id gcc_msm8960_match_table[] = {
3451 	{ .compatible = "qcom,gcc-msm8960", .data = &gcc_msm8960_desc },
3452 	{ .compatible = "qcom,gcc-apq8064", .data = &gcc_apq8064_desc },
3453 	{ }
3454 };
3455 MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table);
3456 
3457 static int gcc_msm8960_probe(struct platform_device *pdev)
3458 {
3459 	struct device *dev = &pdev->dev;
3460 	const struct of_device_id *match;
3461 	struct platform_device *tsens;
3462 	int ret;
3463 
3464 	match = of_match_device(gcc_msm8960_match_table, &pdev->dev);
3465 	if (!match)
3466 		return -EINVAL;
3467 
3468 	ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
3469 	if (ret)
3470 		return ret;
3471 
3472 	ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
3473 	if (ret)
3474 		return ret;
3475 
3476 	ret = qcom_cc_probe(pdev, match->data);
3477 	if (ret)
3478 		return ret;
3479 
3480 	tsens = platform_device_register_data(&pdev->dev, "qcom-tsens", -1,
3481 					      NULL, 0);
3482 	if (IS_ERR(tsens))
3483 		return PTR_ERR(tsens);
3484 
3485 	platform_set_drvdata(pdev, tsens);
3486 
3487 	return 0;
3488 }
3489 
3490 static int gcc_msm8960_remove(struct platform_device *pdev)
3491 {
3492 	struct platform_device *tsens = platform_get_drvdata(pdev);
3493 
3494 	platform_device_unregister(tsens);
3495 
3496 	return 0;
3497 }
3498 
3499 static struct platform_driver gcc_msm8960_driver = {
3500 	.probe		= gcc_msm8960_probe,
3501 	.remove		= gcc_msm8960_remove,
3502 	.driver		= {
3503 		.name	= "gcc-msm8960",
3504 		.of_match_table = gcc_msm8960_match_table,
3505 	},
3506 };
3507 
3508 static int __init gcc_msm8960_init(void)
3509 {
3510 	return platform_driver_register(&gcc_msm8960_driver);
3511 }
3512 core_initcall(gcc_msm8960_init);
3513 
3514 static void __exit gcc_msm8960_exit(void)
3515 {
3516 	platform_driver_unregister(&gcc_msm8960_driver);
3517 }
3518 module_exit(gcc_msm8960_exit);
3519 
3520 MODULE_DESCRIPTION("QCOM GCC MSM8960 Driver");
3521 MODULE_LICENSE("GPL v2");
3522 MODULE_ALIAS("platform:gcc-msm8960");
3523