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