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