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