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