1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
6 #include <linux/kernel.h>
7 #include <linux/bitops.h>
9 #include <linux/platform_device.h>
10 #include <linux/module.h>
12 #include <linux/of_device.h>
13 #include <linux/clk-provider.h>
14 #include <linux/regmap.h>
15 #include <linux/reset-controller.h>
17 #include <dt-bindings/clock/qcom,gcc-msm8660.h>
18 #include <dt-bindings/reset/qcom,gcc-msm8660.h>
21 #include "clk-regmap.h"
24 #include "clk-branch.h"
27 static struct clk_pll pll8 = {
35 .clkr.hw.init = &(struct clk_init_data){
37 .parent_data = &(const struct clk_parent_data){
38 .fw_name = "pxo", .name = "pxo_board",
45 static struct clk_regmap pll8_vote = {
47 .enable_mask = BIT(8),
48 .hw.init = &(struct clk_init_data){
50 .parent_hws = (const struct clk_hw*[]){
54 .ops = &clk_pll_vote_ops,
64 static const struct parent_map gcc_pxo_pll8_map[] = {
69 static const struct clk_parent_data gcc_pxo_pll8[] = {
70 { .fw_name = "pxo", .name = "pxo_board" },
71 { .hw = &pll8_vote.hw },
74 static const struct parent_map gcc_pxo_pll8_cxo_map[] = {
80 static const struct clk_parent_data gcc_pxo_pll8_cxo[] = {
81 { .fw_name = "pxo", .name = "pxo_board" },
82 { .hw = &pll8_vote.hw },
83 { .fw_name = "cxo", .name = "cxo_board" },
86 static struct freq_tbl clk_tbl_gsbi_uart[] = {
87 { 1843200, P_PLL8, 2, 6, 625 },
88 { 3686400, P_PLL8, 2, 12, 625 },
89 { 7372800, P_PLL8, 2, 24, 625 },
90 { 14745600, P_PLL8, 2, 48, 625 },
91 { 16000000, P_PLL8, 4, 1, 6 },
92 { 24000000, P_PLL8, 4, 1, 4 },
93 { 32000000, P_PLL8, 4, 1, 3 },
94 { 40000000, P_PLL8, 1, 5, 48 },
95 { 46400000, P_PLL8, 1, 29, 240 },
96 { 48000000, P_PLL8, 4, 1, 2 },
97 { 51200000, P_PLL8, 1, 2, 15 },
98 { 56000000, P_PLL8, 1, 7, 48 },
99 { 58982400, P_PLL8, 1, 96, 625 },
100 { 64000000, P_PLL8, 2, 1, 3 },
104 static struct clk_rcg gsbi1_uart_src = {
109 .mnctr_reset_bit = 7,
110 .mnctr_mode_shift = 5,
121 .parent_map = gcc_pxo_pll8_map,
123 .freq_tbl = clk_tbl_gsbi_uart,
125 .enable_reg = 0x29d4,
126 .enable_mask = BIT(11),
127 .hw.init = &(struct clk_init_data){
128 .name = "gsbi1_uart_src",
129 .parent_data = gcc_pxo_pll8,
130 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
132 .flags = CLK_SET_PARENT_GATE,
137 static struct clk_branch gsbi1_uart_clk = {
141 .enable_reg = 0x29d4,
142 .enable_mask = BIT(9),
143 .hw.init = &(struct clk_init_data){
144 .name = "gsbi1_uart_clk",
145 .parent_hws = (const struct clk_hw*[]){
146 &gsbi1_uart_src.clkr.hw
149 .ops = &clk_branch_ops,
150 .flags = CLK_SET_RATE_PARENT,
155 static struct clk_rcg gsbi2_uart_src = {
160 .mnctr_reset_bit = 7,
161 .mnctr_mode_shift = 5,
172 .parent_map = gcc_pxo_pll8_map,
174 .freq_tbl = clk_tbl_gsbi_uart,
176 .enable_reg = 0x29f4,
177 .enable_mask = BIT(11),
178 .hw.init = &(struct clk_init_data){
179 .name = "gsbi2_uart_src",
180 .parent_data = gcc_pxo_pll8,
181 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
183 .flags = CLK_SET_PARENT_GATE,
188 static struct clk_branch gsbi2_uart_clk = {
192 .enable_reg = 0x29f4,
193 .enable_mask = BIT(9),
194 .hw.init = &(struct clk_init_data){
195 .name = "gsbi2_uart_clk",
196 .parent_hws = (const struct clk_hw*[]){
197 &gsbi2_uart_src.clkr.hw
200 .ops = &clk_branch_ops,
201 .flags = CLK_SET_RATE_PARENT,
206 static struct clk_rcg gsbi3_uart_src = {
211 .mnctr_reset_bit = 7,
212 .mnctr_mode_shift = 5,
223 .parent_map = gcc_pxo_pll8_map,
225 .freq_tbl = clk_tbl_gsbi_uart,
227 .enable_reg = 0x2a14,
228 .enable_mask = BIT(11),
229 .hw.init = &(struct clk_init_data){
230 .name = "gsbi3_uart_src",
231 .parent_data = gcc_pxo_pll8,
232 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
234 .flags = CLK_SET_PARENT_GATE,
239 static struct clk_branch gsbi3_uart_clk = {
243 .enable_reg = 0x2a14,
244 .enable_mask = BIT(9),
245 .hw.init = &(struct clk_init_data){
246 .name = "gsbi3_uart_clk",
247 .parent_hws = (const struct clk_hw*[]){
248 &gsbi3_uart_src.clkr.hw
251 .ops = &clk_branch_ops,
252 .flags = CLK_SET_RATE_PARENT,
257 static struct clk_rcg gsbi4_uart_src = {
262 .mnctr_reset_bit = 7,
263 .mnctr_mode_shift = 5,
274 .parent_map = gcc_pxo_pll8_map,
276 .freq_tbl = clk_tbl_gsbi_uart,
278 .enable_reg = 0x2a34,
279 .enable_mask = BIT(11),
280 .hw.init = &(struct clk_init_data){
281 .name = "gsbi4_uart_src",
282 .parent_data = gcc_pxo_pll8,
283 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
285 .flags = CLK_SET_PARENT_GATE,
290 static struct clk_branch gsbi4_uart_clk = {
294 .enable_reg = 0x2a34,
295 .enable_mask = BIT(9),
296 .hw.init = &(struct clk_init_data){
297 .name = "gsbi4_uart_clk",
298 .parent_hws = (const struct clk_hw*[]){
299 &gsbi4_uart_src.clkr.hw
302 .ops = &clk_branch_ops,
303 .flags = CLK_SET_RATE_PARENT,
308 static struct clk_rcg gsbi5_uart_src = {
313 .mnctr_reset_bit = 7,
314 .mnctr_mode_shift = 5,
325 .parent_map = gcc_pxo_pll8_map,
327 .freq_tbl = clk_tbl_gsbi_uart,
329 .enable_reg = 0x2a54,
330 .enable_mask = BIT(11),
331 .hw.init = &(struct clk_init_data){
332 .name = "gsbi5_uart_src",
333 .parent_data = gcc_pxo_pll8,
334 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
336 .flags = CLK_SET_PARENT_GATE,
341 static struct clk_branch gsbi5_uart_clk = {
345 .enable_reg = 0x2a54,
346 .enable_mask = BIT(9),
347 .hw.init = &(struct clk_init_data){
348 .name = "gsbi5_uart_clk",
349 .parent_hws = (const struct clk_hw*[]){
350 &gsbi5_uart_src.clkr.hw
353 .ops = &clk_branch_ops,
354 .flags = CLK_SET_RATE_PARENT,
359 static struct clk_rcg gsbi6_uart_src = {
364 .mnctr_reset_bit = 7,
365 .mnctr_mode_shift = 5,
376 .parent_map = gcc_pxo_pll8_map,
378 .freq_tbl = clk_tbl_gsbi_uart,
380 .enable_reg = 0x2a74,
381 .enable_mask = BIT(11),
382 .hw.init = &(struct clk_init_data){
383 .name = "gsbi6_uart_src",
384 .parent_data = gcc_pxo_pll8,
385 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
387 .flags = CLK_SET_PARENT_GATE,
392 static struct clk_branch gsbi6_uart_clk = {
396 .enable_reg = 0x2a74,
397 .enable_mask = BIT(9),
398 .hw.init = &(struct clk_init_data){
399 .name = "gsbi6_uart_clk",
400 .parent_hws = (const struct clk_hw*[]){
401 &gsbi6_uart_src.clkr.hw
404 .ops = &clk_branch_ops,
405 .flags = CLK_SET_RATE_PARENT,
410 static struct clk_rcg gsbi7_uart_src = {
415 .mnctr_reset_bit = 7,
416 .mnctr_mode_shift = 5,
427 .parent_map = gcc_pxo_pll8_map,
429 .freq_tbl = clk_tbl_gsbi_uart,
431 .enable_reg = 0x2a94,
432 .enable_mask = BIT(11),
433 .hw.init = &(struct clk_init_data){
434 .name = "gsbi7_uart_src",
435 .parent_data = gcc_pxo_pll8,
436 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
438 .flags = CLK_SET_PARENT_GATE,
443 static struct clk_branch gsbi7_uart_clk = {
447 .enable_reg = 0x2a94,
448 .enable_mask = BIT(9),
449 .hw.init = &(struct clk_init_data){
450 .name = "gsbi7_uart_clk",
451 .parent_hws = (const struct clk_hw*[]){
452 &gsbi7_uart_src.clkr.hw
455 .ops = &clk_branch_ops,
456 .flags = CLK_SET_RATE_PARENT,
461 static struct clk_rcg gsbi8_uart_src = {
466 .mnctr_reset_bit = 7,
467 .mnctr_mode_shift = 5,
478 .parent_map = gcc_pxo_pll8_map,
480 .freq_tbl = clk_tbl_gsbi_uart,
482 .enable_reg = 0x2ab4,
483 .enable_mask = BIT(11),
484 .hw.init = &(struct clk_init_data){
485 .name = "gsbi8_uart_src",
486 .parent_data = gcc_pxo_pll8,
487 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
489 .flags = CLK_SET_PARENT_GATE,
494 static struct clk_branch gsbi8_uart_clk = {
498 .enable_reg = 0x2ab4,
499 .enable_mask = BIT(9),
500 .hw.init = &(struct clk_init_data){
501 .name = "gsbi8_uart_clk",
502 .parent_hws = (const struct clk_hw*[]){
503 &gsbi8_uart_src.clkr.hw
506 .ops = &clk_branch_ops,
507 .flags = CLK_SET_RATE_PARENT,
512 static struct clk_rcg gsbi9_uart_src = {
517 .mnctr_reset_bit = 7,
518 .mnctr_mode_shift = 5,
529 .parent_map = gcc_pxo_pll8_map,
531 .freq_tbl = clk_tbl_gsbi_uart,
533 .enable_reg = 0x2ad4,
534 .enable_mask = BIT(11),
535 .hw.init = &(struct clk_init_data){
536 .name = "gsbi9_uart_src",
537 .parent_data = gcc_pxo_pll8,
538 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
540 .flags = CLK_SET_PARENT_GATE,
545 static struct clk_branch gsbi9_uart_clk = {
549 .enable_reg = 0x2ad4,
550 .enable_mask = BIT(9),
551 .hw.init = &(struct clk_init_data){
552 .name = "gsbi9_uart_clk",
553 .parent_hws = (const struct clk_hw*[]){
554 &gsbi9_uart_src.clkr.hw
557 .ops = &clk_branch_ops,
558 .flags = CLK_SET_RATE_PARENT,
563 static struct clk_rcg gsbi10_uart_src = {
568 .mnctr_reset_bit = 7,
569 .mnctr_mode_shift = 5,
580 .parent_map = gcc_pxo_pll8_map,
582 .freq_tbl = clk_tbl_gsbi_uart,
584 .enable_reg = 0x2af4,
585 .enable_mask = BIT(11),
586 .hw.init = &(struct clk_init_data){
587 .name = "gsbi10_uart_src",
588 .parent_data = gcc_pxo_pll8,
589 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
591 .flags = CLK_SET_PARENT_GATE,
596 static struct clk_branch gsbi10_uart_clk = {
600 .enable_reg = 0x2af4,
601 .enable_mask = BIT(9),
602 .hw.init = &(struct clk_init_data){
603 .name = "gsbi10_uart_clk",
604 .parent_hws = (const struct clk_hw*[]){
605 &gsbi10_uart_src.clkr.hw
608 .ops = &clk_branch_ops,
609 .flags = CLK_SET_RATE_PARENT,
614 static struct clk_rcg gsbi11_uart_src = {
619 .mnctr_reset_bit = 7,
620 .mnctr_mode_shift = 5,
631 .parent_map = gcc_pxo_pll8_map,
633 .freq_tbl = clk_tbl_gsbi_uart,
635 .enable_reg = 0x2b14,
636 .enable_mask = BIT(11),
637 .hw.init = &(struct clk_init_data){
638 .name = "gsbi11_uart_src",
639 .parent_data = gcc_pxo_pll8,
640 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
642 .flags = CLK_SET_PARENT_GATE,
647 static struct clk_branch gsbi11_uart_clk = {
651 .enable_reg = 0x2b14,
652 .enable_mask = BIT(9),
653 .hw.init = &(struct clk_init_data){
654 .name = "gsbi11_uart_clk",
655 .parent_hws = (const struct clk_hw*[]){
656 &gsbi11_uart_src.clkr.hw
659 .ops = &clk_branch_ops,
660 .flags = CLK_SET_RATE_PARENT,
665 static struct clk_rcg gsbi12_uart_src = {
670 .mnctr_reset_bit = 7,
671 .mnctr_mode_shift = 5,
682 .parent_map = gcc_pxo_pll8_map,
684 .freq_tbl = clk_tbl_gsbi_uart,
686 .enable_reg = 0x2b34,
687 .enable_mask = BIT(11),
688 .hw.init = &(struct clk_init_data){
689 .name = "gsbi12_uart_src",
690 .parent_data = gcc_pxo_pll8,
691 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
693 .flags = CLK_SET_PARENT_GATE,
698 static struct clk_branch gsbi12_uart_clk = {
702 .enable_reg = 0x2b34,
703 .enable_mask = BIT(9),
704 .hw.init = &(struct clk_init_data){
705 .name = "gsbi12_uart_clk",
706 .parent_hws = (const struct clk_hw*[]){
707 &gsbi12_uart_src.clkr.hw
710 .ops = &clk_branch_ops,
711 .flags = CLK_SET_RATE_PARENT,
716 static struct freq_tbl clk_tbl_gsbi_qup[] = {
717 { 1100000, P_PXO, 1, 2, 49 },
718 { 5400000, P_PXO, 1, 1, 5 },
719 { 10800000, P_PXO, 1, 2, 5 },
720 { 15060000, P_PLL8, 1, 2, 51 },
721 { 24000000, P_PLL8, 4, 1, 4 },
722 { 25600000, P_PLL8, 1, 1, 15 },
723 { 27000000, P_PXO, 1, 0, 0 },
724 { 48000000, P_PLL8, 4, 1, 2 },
725 { 51200000, P_PLL8, 1, 2, 15 },
729 static struct clk_rcg gsbi1_qup_src = {
734 .mnctr_reset_bit = 7,
735 .mnctr_mode_shift = 5,
746 .parent_map = gcc_pxo_pll8_map,
748 .freq_tbl = clk_tbl_gsbi_qup,
750 .enable_reg = 0x29cc,
751 .enable_mask = BIT(11),
752 .hw.init = &(struct clk_init_data){
753 .name = "gsbi1_qup_src",
754 .parent_data = gcc_pxo_pll8,
755 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
757 .flags = CLK_SET_PARENT_GATE,
762 static struct clk_branch gsbi1_qup_clk = {
766 .enable_reg = 0x29cc,
767 .enable_mask = BIT(9),
768 .hw.init = &(struct clk_init_data){
769 .name = "gsbi1_qup_clk",
770 .parent_hws = (const struct clk_hw*[]){
771 &gsbi1_qup_src.clkr.hw
774 .ops = &clk_branch_ops,
775 .flags = CLK_SET_RATE_PARENT,
780 static struct clk_rcg gsbi2_qup_src = {
785 .mnctr_reset_bit = 7,
786 .mnctr_mode_shift = 5,
797 .parent_map = gcc_pxo_pll8_map,
799 .freq_tbl = clk_tbl_gsbi_qup,
801 .enable_reg = 0x29ec,
802 .enable_mask = BIT(11),
803 .hw.init = &(struct clk_init_data){
804 .name = "gsbi2_qup_src",
805 .parent_data = gcc_pxo_pll8,
806 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
808 .flags = CLK_SET_PARENT_GATE,
813 static struct clk_branch gsbi2_qup_clk = {
817 .enable_reg = 0x29ec,
818 .enable_mask = BIT(9),
819 .hw.init = &(struct clk_init_data){
820 .name = "gsbi2_qup_clk",
821 .parent_hws = (const struct clk_hw*[]){
822 &gsbi2_qup_src.clkr.hw
825 .ops = &clk_branch_ops,
826 .flags = CLK_SET_RATE_PARENT,
831 static struct clk_rcg gsbi3_qup_src = {
836 .mnctr_reset_bit = 7,
837 .mnctr_mode_shift = 5,
848 .parent_map = gcc_pxo_pll8_map,
850 .freq_tbl = clk_tbl_gsbi_qup,
852 .enable_reg = 0x2a0c,
853 .enable_mask = BIT(11),
854 .hw.init = &(struct clk_init_data){
855 .name = "gsbi3_qup_src",
856 .parent_data = gcc_pxo_pll8,
857 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
859 .flags = CLK_SET_PARENT_GATE,
864 static struct clk_branch gsbi3_qup_clk = {
868 .enable_reg = 0x2a0c,
869 .enable_mask = BIT(9),
870 .hw.init = &(struct clk_init_data){
871 .name = "gsbi3_qup_clk",
872 .parent_hws = (const struct clk_hw*[]){
873 &gsbi3_qup_src.clkr.hw
876 .ops = &clk_branch_ops,
877 .flags = CLK_SET_RATE_PARENT,
882 static struct clk_rcg gsbi4_qup_src = {
887 .mnctr_reset_bit = 7,
888 .mnctr_mode_shift = 5,
899 .parent_map = gcc_pxo_pll8_map,
901 .freq_tbl = clk_tbl_gsbi_qup,
903 .enable_reg = 0x2a2c,
904 .enable_mask = BIT(11),
905 .hw.init = &(struct clk_init_data){
906 .name = "gsbi4_qup_src",
907 .parent_data = gcc_pxo_pll8,
908 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
910 .flags = CLK_SET_PARENT_GATE,
915 static struct clk_branch gsbi4_qup_clk = {
919 .enable_reg = 0x2a2c,
920 .enable_mask = BIT(9),
921 .hw.init = &(struct clk_init_data){
922 .name = "gsbi4_qup_clk",
923 .parent_hws = (const struct clk_hw*[]){
924 &gsbi4_qup_src.clkr.hw
927 .ops = &clk_branch_ops,
928 .flags = CLK_SET_RATE_PARENT,
933 static struct clk_rcg gsbi5_qup_src = {
938 .mnctr_reset_bit = 7,
939 .mnctr_mode_shift = 5,
950 .parent_map = gcc_pxo_pll8_map,
952 .freq_tbl = clk_tbl_gsbi_qup,
954 .enable_reg = 0x2a4c,
955 .enable_mask = BIT(11),
956 .hw.init = &(struct clk_init_data){
957 .name = "gsbi5_qup_src",
958 .parent_data = gcc_pxo_pll8,
959 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
961 .flags = CLK_SET_PARENT_GATE,
966 static struct clk_branch gsbi5_qup_clk = {
970 .enable_reg = 0x2a4c,
971 .enable_mask = BIT(9),
972 .hw.init = &(struct clk_init_data){
973 .name = "gsbi5_qup_clk",
974 .parent_hws = (const struct clk_hw*[]){
975 &gsbi5_qup_src.clkr.hw
978 .ops = &clk_branch_ops,
979 .flags = CLK_SET_RATE_PARENT,
984 static struct clk_rcg gsbi6_qup_src = {
989 .mnctr_reset_bit = 7,
990 .mnctr_mode_shift = 5,
1001 .parent_map = gcc_pxo_pll8_map,
1003 .freq_tbl = clk_tbl_gsbi_qup,
1005 .enable_reg = 0x2a6c,
1006 .enable_mask = BIT(11),
1007 .hw.init = &(struct clk_init_data){
1008 .name = "gsbi6_qup_src",
1009 .parent_data = gcc_pxo_pll8,
1010 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1011 .ops = &clk_rcg_ops,
1012 .flags = CLK_SET_PARENT_GATE,
1017 static struct clk_branch gsbi6_qup_clk = {
1021 .enable_reg = 0x2a6c,
1022 .enable_mask = BIT(9),
1023 .hw.init = &(struct clk_init_data){
1024 .name = "gsbi6_qup_clk",
1025 .parent_hws = (const struct clk_hw*[]){
1026 &gsbi6_qup_src.clkr.hw
1029 .ops = &clk_branch_ops,
1030 .flags = CLK_SET_RATE_PARENT,
1035 static struct clk_rcg gsbi7_qup_src = {
1040 .mnctr_reset_bit = 7,
1041 .mnctr_mode_shift = 5,
1052 .parent_map = gcc_pxo_pll8_map,
1054 .freq_tbl = clk_tbl_gsbi_qup,
1056 .enable_reg = 0x2a8c,
1057 .enable_mask = BIT(11),
1058 .hw.init = &(struct clk_init_data){
1059 .name = "gsbi7_qup_src",
1060 .parent_data = gcc_pxo_pll8,
1061 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1062 .ops = &clk_rcg_ops,
1063 .flags = CLK_SET_PARENT_GATE,
1068 static struct clk_branch gsbi7_qup_clk = {
1072 .enable_reg = 0x2a8c,
1073 .enable_mask = BIT(9),
1074 .hw.init = &(struct clk_init_data){
1075 .name = "gsbi7_qup_clk",
1076 .parent_hws = (const struct clk_hw*[]){
1077 &gsbi7_qup_src.clkr.hw
1080 .ops = &clk_branch_ops,
1081 .flags = CLK_SET_RATE_PARENT,
1086 static struct clk_rcg gsbi8_qup_src = {
1091 .mnctr_reset_bit = 7,
1092 .mnctr_mode_shift = 5,
1103 .parent_map = gcc_pxo_pll8_map,
1105 .freq_tbl = clk_tbl_gsbi_qup,
1107 .enable_reg = 0x2aac,
1108 .enable_mask = BIT(11),
1109 .hw.init = &(struct clk_init_data){
1110 .name = "gsbi8_qup_src",
1111 .parent_data = gcc_pxo_pll8,
1112 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1113 .ops = &clk_rcg_ops,
1114 .flags = CLK_SET_PARENT_GATE,
1119 static struct clk_branch gsbi8_qup_clk = {
1123 .enable_reg = 0x2aac,
1124 .enable_mask = BIT(9),
1125 .hw.init = &(struct clk_init_data){
1126 .name = "gsbi8_qup_clk",
1127 .parent_hws = (const struct clk_hw*[]){
1128 &gsbi8_qup_src.clkr.hw
1131 .ops = &clk_branch_ops,
1132 .flags = CLK_SET_RATE_PARENT,
1137 static struct clk_rcg gsbi9_qup_src = {
1142 .mnctr_reset_bit = 7,
1143 .mnctr_mode_shift = 5,
1154 .parent_map = gcc_pxo_pll8_map,
1156 .freq_tbl = clk_tbl_gsbi_qup,
1158 .enable_reg = 0x2acc,
1159 .enable_mask = BIT(11),
1160 .hw.init = &(struct clk_init_data){
1161 .name = "gsbi9_qup_src",
1162 .parent_data = gcc_pxo_pll8,
1163 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1164 .ops = &clk_rcg_ops,
1165 .flags = CLK_SET_PARENT_GATE,
1170 static struct clk_branch gsbi9_qup_clk = {
1174 .enable_reg = 0x2acc,
1175 .enable_mask = BIT(9),
1176 .hw.init = &(struct clk_init_data){
1177 .name = "gsbi9_qup_clk",
1178 .parent_hws = (const struct clk_hw*[]){
1179 &gsbi9_qup_src.clkr.hw
1182 .ops = &clk_branch_ops,
1183 .flags = CLK_SET_RATE_PARENT,
1188 static struct clk_rcg gsbi10_qup_src = {
1193 .mnctr_reset_bit = 7,
1194 .mnctr_mode_shift = 5,
1205 .parent_map = gcc_pxo_pll8_map,
1207 .freq_tbl = clk_tbl_gsbi_qup,
1209 .enable_reg = 0x2aec,
1210 .enable_mask = BIT(11),
1211 .hw.init = &(struct clk_init_data){
1212 .name = "gsbi10_qup_src",
1213 .parent_data = gcc_pxo_pll8,
1214 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1215 .ops = &clk_rcg_ops,
1216 .flags = CLK_SET_PARENT_GATE,
1221 static struct clk_branch gsbi10_qup_clk = {
1225 .enable_reg = 0x2aec,
1226 .enable_mask = BIT(9),
1227 .hw.init = &(struct clk_init_data){
1228 .name = "gsbi10_qup_clk",
1229 .parent_hws = (const struct clk_hw*[]){
1230 &gsbi10_qup_src.clkr.hw
1233 .ops = &clk_branch_ops,
1234 .flags = CLK_SET_RATE_PARENT,
1239 static struct clk_rcg gsbi11_qup_src = {
1244 .mnctr_reset_bit = 7,
1245 .mnctr_mode_shift = 5,
1256 .parent_map = gcc_pxo_pll8_map,
1258 .freq_tbl = clk_tbl_gsbi_qup,
1260 .enable_reg = 0x2b0c,
1261 .enable_mask = BIT(11),
1262 .hw.init = &(struct clk_init_data){
1263 .name = "gsbi11_qup_src",
1264 .parent_data = gcc_pxo_pll8,
1265 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1266 .ops = &clk_rcg_ops,
1267 .flags = CLK_SET_PARENT_GATE,
1272 static struct clk_branch gsbi11_qup_clk = {
1276 .enable_reg = 0x2b0c,
1277 .enable_mask = BIT(9),
1278 .hw.init = &(struct clk_init_data){
1279 .name = "gsbi11_qup_clk",
1280 .parent_hws = (const struct clk_hw*[]){
1281 &gsbi11_qup_src.clkr.hw
1284 .ops = &clk_branch_ops,
1285 .flags = CLK_SET_RATE_PARENT,
1290 static struct clk_rcg gsbi12_qup_src = {
1295 .mnctr_reset_bit = 7,
1296 .mnctr_mode_shift = 5,
1307 .parent_map = gcc_pxo_pll8_map,
1309 .freq_tbl = clk_tbl_gsbi_qup,
1311 .enable_reg = 0x2b2c,
1312 .enable_mask = BIT(11),
1313 .hw.init = &(struct clk_init_data){
1314 .name = "gsbi12_qup_src",
1315 .parent_data = gcc_pxo_pll8,
1316 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1317 .ops = &clk_rcg_ops,
1318 .flags = CLK_SET_PARENT_GATE,
1323 static struct clk_branch gsbi12_qup_clk = {
1327 .enable_reg = 0x2b2c,
1328 .enable_mask = BIT(9),
1329 .hw.init = &(struct clk_init_data){
1330 .name = "gsbi12_qup_clk",
1331 .parent_hws = (const struct clk_hw*[]){
1332 &gsbi12_qup_src.clkr.hw
1335 .ops = &clk_branch_ops,
1336 .flags = CLK_SET_RATE_PARENT,
1341 static const struct freq_tbl clk_tbl_gp[] = {
1342 { 9600000, P_CXO, 2, 0, 0 },
1343 { 13500000, P_PXO, 2, 0, 0 },
1344 { 19200000, P_CXO, 1, 0, 0 },
1345 { 27000000, P_PXO, 1, 0, 0 },
1346 { 64000000, P_PLL8, 2, 1, 3 },
1347 { 76800000, P_PLL8, 1, 1, 5 },
1348 { 96000000, P_PLL8, 4, 0, 0 },
1349 { 128000000, P_PLL8, 3, 0, 0 },
1350 { 192000000, P_PLL8, 2, 0, 0 },
1354 static struct clk_rcg gp0_src = {
1359 .mnctr_reset_bit = 7,
1360 .mnctr_mode_shift = 5,
1371 .parent_map = gcc_pxo_pll8_cxo_map,
1373 .freq_tbl = clk_tbl_gp,
1375 .enable_reg = 0x2d24,
1376 .enable_mask = BIT(11),
1377 .hw.init = &(struct clk_init_data){
1379 .parent_data = gcc_pxo_pll8_cxo,
1380 .num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
1381 .ops = &clk_rcg_ops,
1382 .flags = CLK_SET_PARENT_GATE,
1387 static struct clk_branch gp0_clk = {
1391 .enable_reg = 0x2d24,
1392 .enable_mask = BIT(9),
1393 .hw.init = &(struct clk_init_data){
1395 .parent_hws = (const struct clk_hw*[]){
1399 .ops = &clk_branch_ops,
1400 .flags = CLK_SET_RATE_PARENT,
1405 static struct clk_rcg gp1_src = {
1410 .mnctr_reset_bit = 7,
1411 .mnctr_mode_shift = 5,
1422 .parent_map = gcc_pxo_pll8_cxo_map,
1424 .freq_tbl = clk_tbl_gp,
1426 .enable_reg = 0x2d44,
1427 .enable_mask = BIT(11),
1428 .hw.init = &(struct clk_init_data){
1430 .parent_data = gcc_pxo_pll8_cxo,
1431 .num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
1432 .ops = &clk_rcg_ops,
1433 .flags = CLK_SET_RATE_GATE,
1438 static struct clk_branch gp1_clk = {
1442 .enable_reg = 0x2d44,
1443 .enable_mask = BIT(9),
1444 .hw.init = &(struct clk_init_data){
1446 .parent_hws = (const struct clk_hw*[]){
1450 .ops = &clk_branch_ops,
1451 .flags = CLK_SET_RATE_PARENT,
1456 static struct clk_rcg gp2_src = {
1461 .mnctr_reset_bit = 7,
1462 .mnctr_mode_shift = 5,
1473 .parent_map = gcc_pxo_pll8_cxo_map,
1475 .freq_tbl = clk_tbl_gp,
1477 .enable_reg = 0x2d64,
1478 .enable_mask = BIT(11),
1479 .hw.init = &(struct clk_init_data){
1481 .parent_data = gcc_pxo_pll8_cxo,
1482 .num_parents = ARRAY_SIZE(gcc_pxo_pll8_cxo),
1483 .ops = &clk_rcg_ops,
1484 .flags = CLK_SET_RATE_GATE,
1489 static struct clk_branch gp2_clk = {
1493 .enable_reg = 0x2d64,
1494 .enable_mask = BIT(9),
1495 .hw.init = &(struct clk_init_data){
1497 .parent_hws = (const struct clk_hw*[]){
1501 .ops = &clk_branch_ops,
1502 .flags = CLK_SET_RATE_PARENT,
1507 static struct clk_branch pmem_clk = {
1513 .enable_reg = 0x25a0,
1514 .enable_mask = BIT(4),
1515 .hw.init = &(struct clk_init_data){
1517 .ops = &clk_branch_ops,
1522 static struct clk_rcg prng_src = {
1530 .parent_map = gcc_pxo_pll8_map,
1533 .init = &(struct clk_init_data){
1535 .parent_data = gcc_pxo_pll8,
1536 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1537 .ops = &clk_rcg_ops,
1542 static struct clk_branch prng_clk = {
1544 .halt_check = BRANCH_HALT_VOTED,
1547 .enable_reg = 0x3080,
1548 .enable_mask = BIT(10),
1549 .hw.init = &(struct clk_init_data){
1551 .parent_hws = (const struct clk_hw*[]){
1555 .ops = &clk_branch_ops,
1560 static const struct freq_tbl clk_tbl_sdc[] = {
1561 { 144000, P_PXO, 3, 2, 125 },
1562 { 400000, P_PLL8, 4, 1, 240 },
1563 { 16000000, P_PLL8, 4, 1, 6 },
1564 { 17070000, P_PLL8, 1, 2, 45 },
1565 { 20210000, P_PLL8, 1, 1, 19 },
1566 { 24000000, P_PLL8, 4, 1, 4 },
1567 { 48000000, P_PLL8, 4, 1, 2 },
1571 static struct clk_rcg sdc1_src = {
1576 .mnctr_reset_bit = 7,
1577 .mnctr_mode_shift = 5,
1588 .parent_map = gcc_pxo_pll8_map,
1590 .freq_tbl = clk_tbl_sdc,
1592 .enable_reg = 0x282c,
1593 .enable_mask = BIT(11),
1594 .hw.init = &(struct clk_init_data){
1596 .parent_data = gcc_pxo_pll8,
1597 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1598 .ops = &clk_rcg_ops,
1603 static struct clk_branch sdc1_clk = {
1607 .enable_reg = 0x282c,
1608 .enable_mask = BIT(9),
1609 .hw.init = &(struct clk_init_data){
1611 .parent_hws = (const struct clk_hw*[]){
1615 .ops = &clk_branch_ops,
1616 .flags = CLK_SET_RATE_PARENT,
1621 static struct clk_rcg sdc2_src = {
1626 .mnctr_reset_bit = 7,
1627 .mnctr_mode_shift = 5,
1638 .parent_map = gcc_pxo_pll8_map,
1640 .freq_tbl = clk_tbl_sdc,
1642 .enable_reg = 0x284c,
1643 .enable_mask = BIT(11),
1644 .hw.init = &(struct clk_init_data){
1646 .parent_data = gcc_pxo_pll8,
1647 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1648 .ops = &clk_rcg_ops,
1653 static struct clk_branch sdc2_clk = {
1657 .enable_reg = 0x284c,
1658 .enable_mask = BIT(9),
1659 .hw.init = &(struct clk_init_data){
1661 .parent_hws = (const struct clk_hw*[]){
1665 .ops = &clk_branch_ops,
1666 .flags = CLK_SET_RATE_PARENT,
1671 static struct clk_rcg sdc3_src = {
1676 .mnctr_reset_bit = 7,
1677 .mnctr_mode_shift = 5,
1688 .parent_map = gcc_pxo_pll8_map,
1690 .freq_tbl = clk_tbl_sdc,
1692 .enable_reg = 0x286c,
1693 .enable_mask = BIT(11),
1694 .hw.init = &(struct clk_init_data){
1696 .parent_data = gcc_pxo_pll8,
1697 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1698 .ops = &clk_rcg_ops,
1703 static struct clk_branch sdc3_clk = {
1707 .enable_reg = 0x286c,
1708 .enable_mask = BIT(9),
1709 .hw.init = &(struct clk_init_data){
1711 .parent_hws = (const struct clk_hw*[]){
1715 .ops = &clk_branch_ops,
1716 .flags = CLK_SET_RATE_PARENT,
1721 static struct clk_rcg sdc4_src = {
1726 .mnctr_reset_bit = 7,
1727 .mnctr_mode_shift = 5,
1738 .parent_map = gcc_pxo_pll8_map,
1740 .freq_tbl = clk_tbl_sdc,
1742 .enable_reg = 0x288c,
1743 .enable_mask = BIT(11),
1744 .hw.init = &(struct clk_init_data){
1746 .parent_data = gcc_pxo_pll8,
1747 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1748 .ops = &clk_rcg_ops,
1753 static struct clk_branch sdc4_clk = {
1757 .enable_reg = 0x288c,
1758 .enable_mask = BIT(9),
1759 .hw.init = &(struct clk_init_data){
1761 .parent_hws = (const struct clk_hw*[]){
1765 .ops = &clk_branch_ops,
1766 .flags = CLK_SET_RATE_PARENT,
1771 static struct clk_rcg sdc5_src = {
1776 .mnctr_reset_bit = 7,
1777 .mnctr_mode_shift = 5,
1788 .parent_map = gcc_pxo_pll8_map,
1790 .freq_tbl = clk_tbl_sdc,
1792 .enable_reg = 0x28ac,
1793 .enable_mask = BIT(11),
1794 .hw.init = &(struct clk_init_data){
1796 .parent_data = gcc_pxo_pll8,
1797 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1798 .ops = &clk_rcg_ops,
1803 static struct clk_branch sdc5_clk = {
1807 .enable_reg = 0x28ac,
1808 .enable_mask = BIT(9),
1809 .hw.init = &(struct clk_init_data){
1811 .parent_hws = (const struct clk_hw*[]){
1815 .ops = &clk_branch_ops,
1816 .flags = CLK_SET_RATE_PARENT,
1821 static const struct freq_tbl clk_tbl_tsif_ref[] = {
1822 { 105000, P_PXO, 1, 1, 256 },
1826 static struct clk_rcg tsif_ref_src = {
1831 .mnctr_reset_bit = 7,
1832 .mnctr_mode_shift = 5,
1843 .parent_map = gcc_pxo_pll8_map,
1845 .freq_tbl = clk_tbl_tsif_ref,
1847 .enable_reg = 0x2710,
1848 .enable_mask = BIT(11),
1849 .hw.init = &(struct clk_init_data){
1850 .name = "tsif_ref_src",
1851 .parent_data = gcc_pxo_pll8,
1852 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1853 .ops = &clk_rcg_ops,
1854 .flags = CLK_SET_RATE_GATE,
1859 static struct clk_branch tsif_ref_clk = {
1863 .enable_reg = 0x2710,
1864 .enable_mask = BIT(9),
1865 .hw.init = &(struct clk_init_data){
1866 .name = "tsif_ref_clk",
1867 .parent_hws = (const struct clk_hw*[]){
1868 &tsif_ref_src.clkr.hw
1871 .ops = &clk_branch_ops,
1872 .flags = CLK_SET_RATE_PARENT,
1877 static const struct freq_tbl clk_tbl_usb[] = {
1878 { 60000000, P_PLL8, 1, 5, 32 },
1882 static struct clk_rcg usb_hs1_xcvr_src = {
1887 .mnctr_reset_bit = 7,
1888 .mnctr_mode_shift = 5,
1899 .parent_map = gcc_pxo_pll8_map,
1901 .freq_tbl = clk_tbl_usb,
1903 .enable_reg = 0x290c,
1904 .enable_mask = BIT(11),
1905 .hw.init = &(struct clk_init_data){
1906 .name = "usb_hs1_xcvr_src",
1907 .parent_data = gcc_pxo_pll8,
1908 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1909 .ops = &clk_rcg_ops,
1910 .flags = CLK_SET_RATE_GATE,
1915 static struct clk_branch usb_hs1_xcvr_clk = {
1919 .enable_reg = 0x290c,
1920 .enable_mask = BIT(9),
1921 .hw.init = &(struct clk_init_data){
1922 .name = "usb_hs1_xcvr_clk",
1923 .parent_hws = (const struct clk_hw*[]){
1924 &usb_hs1_xcvr_src.clkr.hw
1927 .ops = &clk_branch_ops,
1928 .flags = CLK_SET_RATE_PARENT,
1933 static struct clk_rcg usb_fs1_xcvr_fs_src = {
1938 .mnctr_reset_bit = 7,
1939 .mnctr_mode_shift = 5,
1950 .parent_map = gcc_pxo_pll8_map,
1952 .freq_tbl = clk_tbl_usb,
1954 .enable_reg = 0x2968,
1955 .enable_mask = BIT(11),
1956 .hw.init = &(struct clk_init_data){
1957 .name = "usb_fs1_xcvr_fs_src",
1958 .parent_data = gcc_pxo_pll8,
1959 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
1960 .ops = &clk_rcg_ops,
1961 .flags = CLK_SET_RATE_GATE,
1966 static struct clk_branch usb_fs1_xcvr_fs_clk = {
1970 .enable_reg = 0x2968,
1971 .enable_mask = BIT(9),
1972 .hw.init = &(struct clk_init_data){
1973 .name = "usb_fs1_xcvr_fs_clk",
1974 .parent_hws = (const struct clk_hw*[]){
1975 &usb_fs1_xcvr_fs_src.clkr.hw,
1978 .ops = &clk_branch_ops,
1979 .flags = CLK_SET_RATE_PARENT,
1984 static struct clk_branch usb_fs1_system_clk = {
1988 .enable_reg = 0x296c,
1989 .enable_mask = BIT(4),
1990 .hw.init = &(struct clk_init_data){
1991 .parent_hws = (const struct clk_hw*[]){
1992 &usb_fs1_xcvr_fs_src.clkr.hw,
1995 .name = "usb_fs1_system_clk",
1996 .ops = &clk_branch_ops,
1997 .flags = CLK_SET_RATE_PARENT,
2002 static struct clk_rcg usb_fs2_xcvr_fs_src = {
2007 .mnctr_reset_bit = 7,
2008 .mnctr_mode_shift = 5,
2019 .parent_map = gcc_pxo_pll8_map,
2021 .freq_tbl = clk_tbl_usb,
2023 .enable_reg = 0x2988,
2024 .enable_mask = BIT(11),
2025 .hw.init = &(struct clk_init_data){
2026 .name = "usb_fs2_xcvr_fs_src",
2027 .parent_data = gcc_pxo_pll8,
2028 .num_parents = ARRAY_SIZE(gcc_pxo_pll8),
2029 .ops = &clk_rcg_ops,
2030 .flags = CLK_SET_RATE_GATE,
2035 static struct clk_branch usb_fs2_xcvr_fs_clk = {
2039 .enable_reg = 0x2988,
2040 .enable_mask = BIT(9),
2041 .hw.init = &(struct clk_init_data){
2042 .name = "usb_fs2_xcvr_fs_clk",
2043 .parent_hws = (const struct clk_hw*[]){
2044 &usb_fs2_xcvr_fs_src.clkr.hw,
2047 .ops = &clk_branch_ops,
2048 .flags = CLK_SET_RATE_PARENT,
2053 static struct clk_branch usb_fs2_system_clk = {
2057 .enable_reg = 0x298c,
2058 .enable_mask = BIT(4),
2059 .hw.init = &(struct clk_init_data){
2060 .name = "usb_fs2_system_clk",
2061 .parent_hws = (const struct clk_hw*[]){
2062 &usb_fs2_xcvr_fs_src.clkr.hw,
2065 .ops = &clk_branch_ops,
2066 .flags = CLK_SET_RATE_PARENT,
2071 static struct clk_branch gsbi1_h_clk = {
2075 .enable_reg = 0x29c0,
2076 .enable_mask = BIT(4),
2077 .hw.init = &(struct clk_init_data){
2078 .name = "gsbi1_h_clk",
2079 .ops = &clk_branch_ops,
2084 static struct clk_branch gsbi2_h_clk = {
2088 .enable_reg = 0x29e0,
2089 .enable_mask = BIT(4),
2090 .hw.init = &(struct clk_init_data){
2091 .name = "gsbi2_h_clk",
2092 .ops = &clk_branch_ops,
2097 static struct clk_branch gsbi3_h_clk = {
2101 .enable_reg = 0x2a00,
2102 .enable_mask = BIT(4),
2103 .hw.init = &(struct clk_init_data){
2104 .name = "gsbi3_h_clk",
2105 .ops = &clk_branch_ops,
2110 static struct clk_branch gsbi4_h_clk = {
2114 .enable_reg = 0x2a20,
2115 .enable_mask = BIT(4),
2116 .hw.init = &(struct clk_init_data){
2117 .name = "gsbi4_h_clk",
2118 .ops = &clk_branch_ops,
2123 static struct clk_branch gsbi5_h_clk = {
2127 .enable_reg = 0x2a40,
2128 .enable_mask = BIT(4),
2129 .hw.init = &(struct clk_init_data){
2130 .name = "gsbi5_h_clk",
2131 .ops = &clk_branch_ops,
2136 static struct clk_branch gsbi6_h_clk = {
2140 .enable_reg = 0x2a60,
2141 .enable_mask = BIT(4),
2142 .hw.init = &(struct clk_init_data){
2143 .name = "gsbi6_h_clk",
2144 .ops = &clk_branch_ops,
2149 static struct clk_branch gsbi7_h_clk = {
2153 .enable_reg = 0x2a80,
2154 .enable_mask = BIT(4),
2155 .hw.init = &(struct clk_init_data){
2156 .name = "gsbi7_h_clk",
2157 .ops = &clk_branch_ops,
2162 static struct clk_branch gsbi8_h_clk = {
2166 .enable_reg = 0x2aa0,
2167 .enable_mask = BIT(4),
2168 .hw.init = &(struct clk_init_data){
2169 .name = "gsbi8_h_clk",
2170 .ops = &clk_branch_ops,
2175 static struct clk_branch gsbi9_h_clk = {
2179 .enable_reg = 0x2ac0,
2180 .enable_mask = BIT(4),
2181 .hw.init = &(struct clk_init_data){
2182 .name = "gsbi9_h_clk",
2183 .ops = &clk_branch_ops,
2188 static struct clk_branch gsbi10_h_clk = {
2192 .enable_reg = 0x2ae0,
2193 .enable_mask = BIT(4),
2194 .hw.init = &(struct clk_init_data){
2195 .name = "gsbi10_h_clk",
2196 .ops = &clk_branch_ops,
2201 static struct clk_branch gsbi11_h_clk = {
2205 .enable_reg = 0x2b00,
2206 .enable_mask = BIT(4),
2207 .hw.init = &(struct clk_init_data){
2208 .name = "gsbi11_h_clk",
2209 .ops = &clk_branch_ops,
2214 static struct clk_branch gsbi12_h_clk = {
2218 .enable_reg = 0x2b20,
2219 .enable_mask = BIT(4),
2220 .hw.init = &(struct clk_init_data){
2221 .name = "gsbi12_h_clk",
2222 .ops = &clk_branch_ops,
2227 static struct clk_branch tsif_h_clk = {
2231 .enable_reg = 0x2700,
2232 .enable_mask = BIT(4),
2233 .hw.init = &(struct clk_init_data){
2234 .name = "tsif_h_clk",
2235 .ops = &clk_branch_ops,
2240 static struct clk_branch usb_fs1_h_clk = {
2244 .enable_reg = 0x2960,
2245 .enable_mask = BIT(4),
2246 .hw.init = &(struct clk_init_data){
2247 .name = "usb_fs1_h_clk",
2248 .ops = &clk_branch_ops,
2253 static struct clk_branch usb_fs2_h_clk = {
2257 .enable_reg = 0x2980,
2258 .enable_mask = BIT(4),
2259 .hw.init = &(struct clk_init_data){
2260 .name = "usb_fs2_h_clk",
2261 .ops = &clk_branch_ops,
2266 static struct clk_branch usb_hs1_h_clk = {
2270 .enable_reg = 0x2900,
2271 .enable_mask = BIT(4),
2272 .hw.init = &(struct clk_init_data){
2273 .name = "usb_hs1_h_clk",
2274 .ops = &clk_branch_ops,
2279 static struct clk_branch sdc1_h_clk = {
2283 .enable_reg = 0x2820,
2284 .enable_mask = BIT(4),
2285 .hw.init = &(struct clk_init_data){
2286 .name = "sdc1_h_clk",
2287 .ops = &clk_branch_ops,
2292 static struct clk_branch sdc2_h_clk = {
2296 .enable_reg = 0x2840,
2297 .enable_mask = BIT(4),
2298 .hw.init = &(struct clk_init_data){
2299 .name = "sdc2_h_clk",
2300 .ops = &clk_branch_ops,
2305 static struct clk_branch sdc3_h_clk = {
2309 .enable_reg = 0x2860,
2310 .enable_mask = BIT(4),
2311 .hw.init = &(struct clk_init_data){
2312 .name = "sdc3_h_clk",
2313 .ops = &clk_branch_ops,
2318 static struct clk_branch sdc4_h_clk = {
2322 .enable_reg = 0x2880,
2323 .enable_mask = BIT(4),
2324 .hw.init = &(struct clk_init_data){
2325 .name = "sdc4_h_clk",
2326 .ops = &clk_branch_ops,
2331 static struct clk_branch sdc5_h_clk = {
2335 .enable_reg = 0x28a0,
2336 .enable_mask = BIT(4),
2337 .hw.init = &(struct clk_init_data){
2338 .name = "sdc5_h_clk",
2339 .ops = &clk_branch_ops,
2344 static struct clk_branch ebi2_2x_clk = {
2348 .enable_reg = 0x2660,
2349 .enable_mask = BIT(4),
2350 .hw.init = &(struct clk_init_data){
2351 .name = "ebi2_2x_clk",
2352 .ops = &clk_branch_ops,
2357 static struct clk_branch ebi2_clk = {
2361 .enable_reg = 0x2664,
2362 .enable_mask = BIT(4),
2363 .hw.init = &(struct clk_init_data){
2365 .ops = &clk_branch_ops,
2370 static struct clk_branch adm0_clk = {
2372 .halt_check = BRANCH_HALT_VOTED,
2375 .enable_reg = 0x3080,
2376 .enable_mask = BIT(2),
2377 .hw.init = &(struct clk_init_data){
2379 .ops = &clk_branch_ops,
2384 static struct clk_branch adm0_pbus_clk = {
2386 .halt_check = BRANCH_HALT_VOTED,
2389 .enable_reg = 0x3080,
2390 .enable_mask = BIT(3),
2391 .hw.init = &(struct clk_init_data){
2392 .name = "adm0_pbus_clk",
2393 .ops = &clk_branch_ops,
2398 static struct clk_branch adm1_clk = {
2401 .halt_check = BRANCH_HALT_VOTED,
2403 .enable_reg = 0x3080,
2404 .enable_mask = BIT(4),
2405 .hw.init = &(struct clk_init_data){
2407 .ops = &clk_branch_ops,
2412 static struct clk_branch adm1_pbus_clk = {
2415 .halt_check = BRANCH_HALT_VOTED,
2417 .enable_reg = 0x3080,
2418 .enable_mask = BIT(5),
2419 .hw.init = &(struct clk_init_data){
2420 .name = "adm1_pbus_clk",
2421 .ops = &clk_branch_ops,
2426 static struct clk_branch modem_ahb1_h_clk = {
2429 .halt_check = BRANCH_HALT_VOTED,
2431 .enable_reg = 0x3080,
2432 .enable_mask = BIT(0),
2433 .hw.init = &(struct clk_init_data){
2434 .name = "modem_ahb1_h_clk",
2435 .ops = &clk_branch_ops,
2440 static struct clk_branch modem_ahb2_h_clk = {
2443 .halt_check = BRANCH_HALT_VOTED,
2445 .enable_reg = 0x3080,
2446 .enable_mask = BIT(1),
2447 .hw.init = &(struct clk_init_data){
2448 .name = "modem_ahb2_h_clk",
2449 .ops = &clk_branch_ops,
2454 static struct clk_branch pmic_arb0_h_clk = {
2456 .halt_check = BRANCH_HALT_VOTED,
2459 .enable_reg = 0x3080,
2460 .enable_mask = BIT(8),
2461 .hw.init = &(struct clk_init_data){
2462 .name = "pmic_arb0_h_clk",
2463 .ops = &clk_branch_ops,
2468 static struct clk_branch pmic_arb1_h_clk = {
2470 .halt_check = BRANCH_HALT_VOTED,
2473 .enable_reg = 0x3080,
2474 .enable_mask = BIT(9),
2475 .hw.init = &(struct clk_init_data){
2476 .name = "pmic_arb1_h_clk",
2477 .ops = &clk_branch_ops,
2482 static struct clk_branch pmic_ssbi2_clk = {
2484 .halt_check = BRANCH_HALT_VOTED,
2487 .enable_reg = 0x3080,
2488 .enable_mask = BIT(7),
2489 .hw.init = &(struct clk_init_data){
2490 .name = "pmic_ssbi2_clk",
2491 .ops = &clk_branch_ops,
2496 static struct clk_branch rpm_msg_ram_h_clk = {
2500 .halt_check = BRANCH_HALT_VOTED,
2503 .enable_reg = 0x3080,
2504 .enable_mask = BIT(6),
2505 .hw.init = &(struct clk_init_data){
2506 .name = "rpm_msg_ram_h_clk",
2507 .ops = &clk_branch_ops,
2512 static struct clk_regmap *gcc_msm8660_clks[] = {
2513 [PLL8] = &pll8.clkr,
2514 [PLL8_VOTE] = &pll8_vote,
2515 [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr,
2516 [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr,
2517 [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr,
2518 [GSBI2_UART_CLK] = &gsbi2_uart_clk.clkr,
2519 [GSBI3_UART_SRC] = &gsbi3_uart_src.clkr,
2520 [GSBI3_UART_CLK] = &gsbi3_uart_clk.clkr,
2521 [GSBI4_UART_SRC] = &gsbi4_uart_src.clkr,
2522 [GSBI4_UART_CLK] = &gsbi4_uart_clk.clkr,
2523 [GSBI5_UART_SRC] = &gsbi5_uart_src.clkr,
2524 [GSBI5_UART_CLK] = &gsbi5_uart_clk.clkr,
2525 [GSBI6_UART_SRC] = &gsbi6_uart_src.clkr,
2526 [GSBI6_UART_CLK] = &gsbi6_uart_clk.clkr,
2527 [GSBI7_UART_SRC] = &gsbi7_uart_src.clkr,
2528 [GSBI7_UART_CLK] = &gsbi7_uart_clk.clkr,
2529 [GSBI8_UART_SRC] = &gsbi8_uart_src.clkr,
2530 [GSBI8_UART_CLK] = &gsbi8_uart_clk.clkr,
2531 [GSBI9_UART_SRC] = &gsbi9_uart_src.clkr,
2532 [GSBI9_UART_CLK] = &gsbi9_uart_clk.clkr,
2533 [GSBI10_UART_SRC] = &gsbi10_uart_src.clkr,
2534 [GSBI10_UART_CLK] = &gsbi10_uart_clk.clkr,
2535 [GSBI11_UART_SRC] = &gsbi11_uart_src.clkr,
2536 [GSBI11_UART_CLK] = &gsbi11_uart_clk.clkr,
2537 [GSBI12_UART_SRC] = &gsbi12_uart_src.clkr,
2538 [GSBI12_UART_CLK] = &gsbi12_uart_clk.clkr,
2539 [GSBI1_QUP_SRC] = &gsbi1_qup_src.clkr,
2540 [GSBI1_QUP_CLK] = &gsbi1_qup_clk.clkr,
2541 [GSBI2_QUP_SRC] = &gsbi2_qup_src.clkr,
2542 [GSBI2_QUP_CLK] = &gsbi2_qup_clk.clkr,
2543 [GSBI3_QUP_SRC] = &gsbi3_qup_src.clkr,
2544 [GSBI3_QUP_CLK] = &gsbi3_qup_clk.clkr,
2545 [GSBI4_QUP_SRC] = &gsbi4_qup_src.clkr,
2546 [GSBI4_QUP_CLK] = &gsbi4_qup_clk.clkr,
2547 [GSBI5_QUP_SRC] = &gsbi5_qup_src.clkr,
2548 [GSBI5_QUP_CLK] = &gsbi5_qup_clk.clkr,
2549 [GSBI6_QUP_SRC] = &gsbi6_qup_src.clkr,
2550 [GSBI6_QUP_CLK] = &gsbi6_qup_clk.clkr,
2551 [GSBI7_QUP_SRC] = &gsbi7_qup_src.clkr,
2552 [GSBI7_QUP_CLK] = &gsbi7_qup_clk.clkr,
2553 [GSBI8_QUP_SRC] = &gsbi8_qup_src.clkr,
2554 [GSBI8_QUP_CLK] = &gsbi8_qup_clk.clkr,
2555 [GSBI9_QUP_SRC] = &gsbi9_qup_src.clkr,
2556 [GSBI9_QUP_CLK] = &gsbi9_qup_clk.clkr,
2557 [GSBI10_QUP_SRC] = &gsbi10_qup_src.clkr,
2558 [GSBI10_QUP_CLK] = &gsbi10_qup_clk.clkr,
2559 [GSBI11_QUP_SRC] = &gsbi11_qup_src.clkr,
2560 [GSBI11_QUP_CLK] = &gsbi11_qup_clk.clkr,
2561 [GSBI12_QUP_SRC] = &gsbi12_qup_src.clkr,
2562 [GSBI12_QUP_CLK] = &gsbi12_qup_clk.clkr,
2563 [GP0_SRC] = &gp0_src.clkr,
2564 [GP0_CLK] = &gp0_clk.clkr,
2565 [GP1_SRC] = &gp1_src.clkr,
2566 [GP1_CLK] = &gp1_clk.clkr,
2567 [GP2_SRC] = &gp2_src.clkr,
2568 [GP2_CLK] = &gp2_clk.clkr,
2569 [PMEM_CLK] = &pmem_clk.clkr,
2570 [PRNG_SRC] = &prng_src.clkr,
2571 [PRNG_CLK] = &prng_clk.clkr,
2572 [SDC1_SRC] = &sdc1_src.clkr,
2573 [SDC1_CLK] = &sdc1_clk.clkr,
2574 [SDC2_SRC] = &sdc2_src.clkr,
2575 [SDC2_CLK] = &sdc2_clk.clkr,
2576 [SDC3_SRC] = &sdc3_src.clkr,
2577 [SDC3_CLK] = &sdc3_clk.clkr,
2578 [SDC4_SRC] = &sdc4_src.clkr,
2579 [SDC4_CLK] = &sdc4_clk.clkr,
2580 [SDC5_SRC] = &sdc5_src.clkr,
2581 [SDC5_CLK] = &sdc5_clk.clkr,
2582 [TSIF_REF_SRC] = &tsif_ref_src.clkr,
2583 [TSIF_REF_CLK] = &tsif_ref_clk.clkr,
2584 [USB_HS1_XCVR_SRC] = &usb_hs1_xcvr_src.clkr,
2585 [USB_HS1_XCVR_CLK] = &usb_hs1_xcvr_clk.clkr,
2586 [USB_FS1_XCVR_FS_SRC] = &usb_fs1_xcvr_fs_src.clkr,
2587 [USB_FS1_XCVR_FS_CLK] = &usb_fs1_xcvr_fs_clk.clkr,
2588 [USB_FS1_SYSTEM_CLK] = &usb_fs1_system_clk.clkr,
2589 [USB_FS2_XCVR_FS_SRC] = &usb_fs2_xcvr_fs_src.clkr,
2590 [USB_FS2_XCVR_FS_CLK] = &usb_fs2_xcvr_fs_clk.clkr,
2591 [USB_FS2_SYSTEM_CLK] = &usb_fs2_system_clk.clkr,
2592 [GSBI1_H_CLK] = &gsbi1_h_clk.clkr,
2593 [GSBI2_H_CLK] = &gsbi2_h_clk.clkr,
2594 [GSBI3_H_CLK] = &gsbi3_h_clk.clkr,
2595 [GSBI4_H_CLK] = &gsbi4_h_clk.clkr,
2596 [GSBI5_H_CLK] = &gsbi5_h_clk.clkr,
2597 [GSBI6_H_CLK] = &gsbi6_h_clk.clkr,
2598 [GSBI7_H_CLK] = &gsbi7_h_clk.clkr,
2599 [GSBI8_H_CLK] = &gsbi8_h_clk.clkr,
2600 [GSBI9_H_CLK] = &gsbi9_h_clk.clkr,
2601 [GSBI10_H_CLK] = &gsbi10_h_clk.clkr,
2602 [GSBI11_H_CLK] = &gsbi11_h_clk.clkr,
2603 [GSBI12_H_CLK] = &gsbi12_h_clk.clkr,
2604 [TSIF_H_CLK] = &tsif_h_clk.clkr,
2605 [USB_FS1_H_CLK] = &usb_fs1_h_clk.clkr,
2606 [USB_FS2_H_CLK] = &usb_fs2_h_clk.clkr,
2607 [USB_HS1_H_CLK] = &usb_hs1_h_clk.clkr,
2608 [SDC1_H_CLK] = &sdc1_h_clk.clkr,
2609 [SDC2_H_CLK] = &sdc2_h_clk.clkr,
2610 [SDC3_H_CLK] = &sdc3_h_clk.clkr,
2611 [SDC4_H_CLK] = &sdc4_h_clk.clkr,
2612 [SDC5_H_CLK] = &sdc5_h_clk.clkr,
2613 [EBI2_2X_CLK] = &ebi2_2x_clk.clkr,
2614 [EBI2_CLK] = &ebi2_clk.clkr,
2615 [ADM0_CLK] = &adm0_clk.clkr,
2616 [ADM0_PBUS_CLK] = &adm0_pbus_clk.clkr,
2617 [ADM1_CLK] = &adm1_clk.clkr,
2618 [ADM1_PBUS_CLK] = &adm1_pbus_clk.clkr,
2619 [MODEM_AHB1_H_CLK] = &modem_ahb1_h_clk.clkr,
2620 [MODEM_AHB2_H_CLK] = &modem_ahb2_h_clk.clkr,
2621 [PMIC_ARB0_H_CLK] = &pmic_arb0_h_clk.clkr,
2622 [PMIC_ARB1_H_CLK] = &pmic_arb1_h_clk.clkr,
2623 [PMIC_SSBI2_CLK] = &pmic_ssbi2_clk.clkr,
2624 [RPM_MSG_RAM_H_CLK] = &rpm_msg_ram_h_clk.clkr,
2627 static const struct qcom_reset_map gcc_msm8660_resets[] = {
2628 [AFAB_CORE_RESET] = { 0x2080, 7 },
2629 [SCSS_SYS_RESET] = { 0x20b4, 1 },
2630 [SCSS_SYS_POR_RESET] = { 0x20b4 },
2631 [AFAB_SMPSS_S_RESET] = { 0x20b8, 2 },
2632 [AFAB_SMPSS_M1_RESET] = { 0x20b8, 1 },
2633 [AFAB_SMPSS_M0_RESET] = { 0x20b8 },
2634 [AFAB_EBI1_S_RESET] = { 0x20c0, 7 },
2635 [SFAB_CORE_RESET] = { 0x2120, 7 },
2636 [SFAB_ADM0_M0_RESET] = { 0x21e0, 7 },
2637 [SFAB_ADM0_M1_RESET] = { 0x21e4, 7 },
2638 [SFAB_ADM0_M2_RESET] = { 0x21e4, 7 },
2639 [ADM0_C2_RESET] = { 0x220c, 4 },
2640 [ADM0_C1_RESET] = { 0x220c, 3 },
2641 [ADM0_C0_RESET] = { 0x220c, 2 },
2642 [ADM0_PBUS_RESET] = { 0x220c, 1 },
2643 [ADM0_RESET] = { 0x220c },
2644 [SFAB_ADM1_M0_RESET] = { 0x2220, 7 },
2645 [SFAB_ADM1_M1_RESET] = { 0x2224, 7 },
2646 [SFAB_ADM1_M2_RESET] = { 0x2228, 7 },
2647 [MMFAB_ADM1_M3_RESET] = { 0x2240, 7 },
2648 [ADM1_C3_RESET] = { 0x226c, 5 },
2649 [ADM1_C2_RESET] = { 0x226c, 4 },
2650 [ADM1_C1_RESET] = { 0x226c, 3 },
2651 [ADM1_C0_RESET] = { 0x226c, 2 },
2652 [ADM1_PBUS_RESET] = { 0x226c, 1 },
2653 [ADM1_RESET] = { 0x226c },
2654 [IMEM0_RESET] = { 0x2280, 7 },
2655 [SFAB_LPASS_Q6_RESET] = { 0x23a0, 7 },
2656 [SFAB_AFAB_M_RESET] = { 0x23e0, 7 },
2657 [AFAB_SFAB_M0_RESET] = { 0x2420, 7 },
2658 [AFAB_SFAB_M1_RESET] = { 0x2424, 7 },
2659 [DFAB_CORE_RESET] = { 0x24ac, 7 },
2660 [SFAB_DFAB_M_RESET] = { 0x2500, 7 },
2661 [DFAB_SFAB_M_RESET] = { 0x2520, 7 },
2662 [DFAB_SWAY0_RESET] = { 0x2540, 7 },
2663 [DFAB_SWAY1_RESET] = { 0x2544, 7 },
2664 [DFAB_ARB0_RESET] = { 0x2560, 7 },
2665 [DFAB_ARB1_RESET] = { 0x2564, 7 },
2666 [PPSS_PROC_RESET] = { 0x2594, 1 },
2667 [PPSS_RESET] = { 0x2594 },
2668 [PMEM_RESET] = { 0x25a0, 7 },
2669 [DMA_BAM_RESET] = { 0x25c0, 7 },
2670 [SIC_RESET] = { 0x25e0, 7 },
2671 [SPS_TIC_RESET] = { 0x2600, 7 },
2672 [CFBP0_RESET] = { 0x2650, 7 },
2673 [CFBP1_RESET] = { 0x2654, 7 },
2674 [CFBP2_RESET] = { 0x2658, 7 },
2675 [EBI2_RESET] = { 0x2664, 7 },
2676 [SFAB_CFPB_M_RESET] = { 0x2680, 7 },
2677 [CFPB_MASTER_RESET] = { 0x26a0, 7 },
2678 [SFAB_CFPB_S_RESET] = { 0x26c0, 7 },
2679 [CFPB_SPLITTER_RESET] = { 0x26e0, 7 },
2680 [TSIF_RESET] = { 0x2700, 7 },
2681 [CE1_RESET] = { 0x2720, 7 },
2682 [CE2_RESET] = { 0x2740, 7 },
2683 [SFAB_SFPB_M_RESET] = { 0x2780, 7 },
2684 [SFAB_SFPB_S_RESET] = { 0x27a0, 7 },
2685 [RPM_PROC_RESET] = { 0x27c0, 7 },
2686 [RPM_BUS_RESET] = { 0x27c4, 7 },
2687 [RPM_MSG_RAM_RESET] = { 0x27e0, 7 },
2688 [PMIC_ARB0_RESET] = { 0x2800, 7 },
2689 [PMIC_ARB1_RESET] = { 0x2804, 7 },
2690 [PMIC_SSBI2_RESET] = { 0x280c, 12 },
2691 [SDC1_RESET] = { 0x2830 },
2692 [SDC2_RESET] = { 0x2850 },
2693 [SDC3_RESET] = { 0x2870 },
2694 [SDC4_RESET] = { 0x2890 },
2695 [SDC5_RESET] = { 0x28b0 },
2696 [USB_HS1_RESET] = { 0x2910 },
2697 [USB_HS2_XCVR_RESET] = { 0x2934, 1 },
2698 [USB_HS2_RESET] = { 0x2934 },
2699 [USB_FS1_XCVR_RESET] = { 0x2974, 1 },
2700 [USB_FS1_RESET] = { 0x2974 },
2701 [USB_FS2_XCVR_RESET] = { 0x2994, 1 },
2702 [USB_FS2_RESET] = { 0x2994 },
2703 [GSBI1_RESET] = { 0x29dc },
2704 [GSBI2_RESET] = { 0x29fc },
2705 [GSBI3_RESET] = { 0x2a1c },
2706 [GSBI4_RESET] = { 0x2a3c },
2707 [GSBI5_RESET] = { 0x2a5c },
2708 [GSBI6_RESET] = { 0x2a7c },
2709 [GSBI7_RESET] = { 0x2a9c },
2710 [GSBI8_RESET] = { 0x2abc },
2711 [GSBI9_RESET] = { 0x2adc },
2712 [GSBI10_RESET] = { 0x2afc },
2713 [GSBI11_RESET] = { 0x2b1c },
2714 [GSBI12_RESET] = { 0x2b3c },
2715 [SPDM_RESET] = { 0x2b6c },
2716 [SEC_CTRL_RESET] = { 0x2b80, 7 },
2717 [TLMM_H_RESET] = { 0x2ba0, 7 },
2718 [TLMM_RESET] = { 0x2ba4, 7 },
2719 [MARRM_PWRON_RESET] = { 0x2bd4, 1 },
2720 [MARM_RESET] = { 0x2bd4 },
2721 [MAHB1_RESET] = { 0x2be4, 7 },
2722 [SFAB_MSS_S_RESET] = { 0x2c00, 7 },
2723 [MAHB2_RESET] = { 0x2c20, 7 },
2724 [MODEM_SW_AHB_RESET] = { 0x2c48, 1 },
2725 [MODEM_RESET] = { 0x2c48 },
2726 [SFAB_MSS_MDM1_RESET] = { 0x2c4c, 1 },
2727 [SFAB_MSS_MDM0_RESET] = { 0x2c4c },
2728 [MSS_SLP_RESET] = { 0x2c60, 7 },
2729 [MSS_MARM_SAW_RESET] = { 0x2c68, 1 },
2730 [MSS_WDOG_RESET] = { 0x2c68 },
2731 [TSSC_RESET] = { 0x2ca0, 7 },
2732 [PDM_RESET] = { 0x2cc0, 12 },
2733 [SCSS_CORE0_RESET] = { 0x2d60, 1 },
2734 [SCSS_CORE0_POR_RESET] = { 0x2d60 },
2735 [SCSS_CORE1_RESET] = { 0x2d80, 1 },
2736 [SCSS_CORE1_POR_RESET] = { 0x2d80 },
2737 [MPM_RESET] = { 0x2da4, 1 },
2738 [EBI1_1X_DIV_RESET] = { 0x2dec, 9 },
2739 [EBI1_RESET] = { 0x2dec, 7 },
2740 [SFAB_SMPSS_S_RESET] = { 0x2e00, 7 },
2741 [USB_PHY0_RESET] = { 0x2e20 },
2742 [USB_PHY1_RESET] = { 0x2e40 },
2743 [PRNG_RESET] = { 0x2e80, 12 },
2746 static const struct regmap_config gcc_msm8660_regmap_config = {
2750 .max_register = 0x363c,
2754 static const struct qcom_cc_desc gcc_msm8660_desc = {
2755 .config = &gcc_msm8660_regmap_config,
2756 .clks = gcc_msm8660_clks,
2757 .num_clks = ARRAY_SIZE(gcc_msm8660_clks),
2758 .resets = gcc_msm8660_resets,
2759 .num_resets = ARRAY_SIZE(gcc_msm8660_resets),
2762 static const struct of_device_id gcc_msm8660_match_table[] = {
2763 { .compatible = "qcom,gcc-msm8660" },
2766 MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table);
2768 static int gcc_msm8660_probe(struct platform_device *pdev)
2771 struct device *dev = &pdev->dev;
2773 ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000);
2777 ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000);
2781 return qcom_cc_probe(pdev, &gcc_msm8660_desc);
2784 static struct platform_driver gcc_msm8660_driver = {
2785 .probe = gcc_msm8660_probe,
2787 .name = "gcc-msm8660",
2788 .of_match_table = gcc_msm8660_match_table,
2792 static int __init gcc_msm8660_init(void)
2794 return platform_driver_register(&gcc_msm8660_driver);
2796 core_initcall(gcc_msm8660_init);
2798 static void __exit gcc_msm8660_exit(void)
2800 platform_driver_unregister(&gcc_msm8660_driver);
2802 module_exit(gcc_msm8660_exit);
2804 MODULE_DESCRIPTION("GCC MSM 8660 Driver");
2805 MODULE_LICENSE("GPL v2");
2806 MODULE_ALIAS("platform:gcc-msm8660");