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