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