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