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