27
27
#define CLK_CON_MUX_MUX_CLKCMU_CORE_BUS 0x1014
28
28
#define CLK_CON_MUX_MUX_CLKCMU_CORE_CCI 0x1018
29
29
#define CLK_CON_MUX_MUX_CLKCMU_CORE_G3D 0x101c
30
+ #define CLK_CON_MUX_MUX_CLKCMU_FSYS_BUS 0x1028
31
+ #define CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_CARD 0x102c
32
+ #define CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_EMBD 0x1030
33
+ #define CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_SDIO 0x1034
34
+ #define CLK_CON_MUX_MUX_CLKCMU_FSYS_USB30DRD 0x1038
30
35
#define CLK_CON_MUX_MUX_CLKCMU_PERI_BUS 0x1058
31
36
#define CLK_CON_MUX_MUX_CLKCMU_PERI_SPI0 0x105c
32
37
#define CLK_CON_MUX_MUX_CLKCMU_PERI_SPI1 0x1060
39
44
#define CLK_CON_DIV_CLKCMU_CORE_BUS 0x181c
40
45
#define CLK_CON_DIV_CLKCMU_CORE_CCI 0x1820
41
46
#define CLK_CON_DIV_CLKCMU_CORE_G3D 0x1824
47
+ #define CLK_CON_DIV_CLKCMU_FSYS_BUS 0x1844
48
+ #define CLK_CON_DIV_CLKCMU_FSYS_MMC_CARD 0x1848
49
+ #define CLK_CON_DIV_CLKCMU_FSYS_MMC_EMBD 0x184c
50
+ #define CLK_CON_DIV_CLKCMU_FSYS_MMC_SDIO 0x1850
51
+ #define CLK_CON_DIV_CLKCMU_FSYS_USB30DRD 0x1854
42
52
#define CLK_CON_DIV_CLKCMU_PERI_BUS 0x1874
43
53
#define CLK_CON_DIV_CLKCMU_PERI_SPI0 0x1878
44
54
#define CLK_CON_DIV_CLKCMU_PERI_SPI1 0x187c
59
69
#define CLK_CON_GAT_GATE_CLKCMU_CORE_BUS 0x201c
60
70
#define CLK_CON_GAT_GATE_CLKCMU_CORE_CCI 0x2020
61
71
#define CLK_CON_GAT_GATE_CLKCMU_CORE_G3D 0x2024
72
+ #define CLK_CON_GAT_GATE_CLKCMU_FSYS_BUS 0x2044
73
+ #define CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_CARD 0x2048
74
+ #define CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_EMBD 0x204c
75
+ #define CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_SDIO 0x2050
76
+ #define CLK_CON_GAT_GATE_CLKCMU_FSYS_USB30DRD 0x2054
62
77
#define CLK_CON_GAT_GATE_CLKCMU_PERI_BUS 0x207c
63
78
#define CLK_CON_GAT_GATE_CLKCMU_PERI_SPI0 0x2080
64
79
#define CLK_CON_GAT_GATE_CLKCMU_PERI_SPI1 0x2084
@@ -76,6 +91,11 @@ static const unsigned long top_clk_regs[] __initconst = {
76
91
CLK_CON_MUX_MUX_CLKCMU_CORE_BUS ,
77
92
CLK_CON_MUX_MUX_CLKCMU_CORE_CCI ,
78
93
CLK_CON_MUX_MUX_CLKCMU_CORE_G3D ,
94
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_BUS ,
95
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_CARD ,
96
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_EMBD ,
97
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_SDIO ,
98
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_USB30DRD ,
79
99
CLK_CON_MUX_MUX_CLKCMU_PERI_BUS ,
80
100
CLK_CON_MUX_MUX_CLKCMU_PERI_SPI0 ,
81
101
CLK_CON_MUX_MUX_CLKCMU_PERI_SPI1 ,
@@ -88,6 +108,11 @@ static const unsigned long top_clk_regs[] __initconst = {
88
108
CLK_CON_DIV_CLKCMU_CORE_BUS ,
89
109
CLK_CON_DIV_CLKCMU_CORE_CCI ,
90
110
CLK_CON_DIV_CLKCMU_CORE_G3D ,
111
+ CLK_CON_DIV_CLKCMU_FSYS_BUS ,
112
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_CARD ,
113
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_EMBD ,
114
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_SDIO ,
115
+ CLK_CON_DIV_CLKCMU_FSYS_USB30DRD ,
91
116
CLK_CON_DIV_CLKCMU_PERI_BUS ,
92
117
CLK_CON_DIV_CLKCMU_PERI_SPI0 ,
93
118
CLK_CON_DIV_CLKCMU_PERI_SPI1 ,
@@ -108,6 +133,11 @@ static const unsigned long top_clk_regs[] __initconst = {
108
133
CLK_CON_GAT_GATE_CLKCMU_CORE_BUS ,
109
134
CLK_CON_GAT_GATE_CLKCMU_CORE_CCI ,
110
135
CLK_CON_GAT_GATE_CLKCMU_CORE_G3D ,
136
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_BUS ,
137
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_CARD ,
138
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_EMBD ,
139
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_SDIO ,
140
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_USB30DRD ,
111
141
CLK_CON_GAT_GATE_CLKCMU_PERI_BUS ,
112
142
CLK_CON_GAT_GATE_CLKCMU_PERI_SPI0 ,
113
143
CLK_CON_GAT_GATE_CLKCMU_PERI_SPI1 ,
@@ -146,6 +176,13 @@ PNAME(mout_peri_usi0_p) = { "oscclk", "dout_shared0_div4" };
146
176
PNAME (mout_peri_usi1_p ) = { "oscclk" , "dout_shared0_div4" };
147
177
PNAME (mout_peri_usi2_p ) = { "oscclk" , "dout_shared0_div4" };
148
178
179
+ /* List of parent clocks for Muxes in CMU_TOP: for CMU_FSYS */
180
+ PNAME (mout_fsys_bus_p ) = { "dout_shared0_div2" , "dout_shared1_div2" };
181
+ PNAME (mout_fsys_mmc_card_p ) = { "dout_shared0_div2" , "dout_shared1_div2" };
182
+ PNAME (mout_fsys_mmc_embd_p ) = { "dout_shared0_div2" , "dout_shared1_div2" };
183
+ PNAME (mout_fsys_mmc_sdio_p ) = { "dout_shared0_div2" , "dout_shared1_div2" };
184
+ PNAME (mout_fsys_usb30drd_p ) = { "dout_shared0_div4" , "dout_shared1_div4" };
185
+
149
186
static const struct samsung_mux_clock top_mux_clks [] __initconst = {
150
187
/* CORE */
151
188
MUX (CLK_MOUT_CORE_BUS , "mout_core_bus" , mout_core_bus_p ,
@@ -174,6 +211,18 @@ static const struct samsung_mux_clock top_mux_clks[] __initconst = {
174
211
CLK_CON_MUX_MUX_CLKCMU_PERI_USI1 , 0 , 1 ),
175
212
MUX (CLK_MOUT_PERI_USI2 , "mout_peri_usi2" , mout_peri_usi2_p ,
176
213
CLK_CON_MUX_MUX_CLKCMU_PERI_USI2 , 0 , 1 ),
214
+
215
+ /* FSYS */
216
+ MUX (CLK_MOUT_FSYS_BUS , "mout_fsys_bus" , mout_fsys_bus_p ,
217
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_BUS , 0 , 1 ),
218
+ MUX (CLK_MOUT_FSYS_MMC_CARD , "mout_fsys_mmc_card" , mout_fsys_mmc_card_p ,
219
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_CARD , 0 , 1 ),
220
+ MUX (CLK_MOUT_FSYS_MMC_EMBD , "mout_fsys_mmc_embd" , mout_fsys_mmc_embd_p ,
221
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_EMBD , 0 , 1 ),
222
+ MUX (CLK_MOUT_FSYS_MMC_SDIO , "mout_fsys_mmc_sdio" , mout_fsys_mmc_sdio_p ,
223
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_MMC_SDIO , 0 , 1 ),
224
+ MUX (CLK_MOUT_FSYS_USB30DRD , "mout_fsys_usb30drd" , mout_fsys_usb30drd_p ,
225
+ CLK_CON_MUX_MUX_CLKCMU_FSYS_USB30DRD , 0 , 1 ),
177
226
};
178
227
179
228
static const struct samsung_div_clock top_div_clks [] __initconst = {
@@ -220,6 +269,18 @@ static const struct samsung_div_clock top_div_clks[] __initconst = {
220
269
CLK_CON_DIV_CLKCMU_PERI_USI1 , 0 , 4 ),
221
270
DIV (CLK_DOUT_PERI_USI2 , "dout_peri_usi2" , "gout_peri_usi2" ,
222
271
CLK_CON_DIV_CLKCMU_PERI_USI2 , 0 , 4 ),
272
+
273
+ /* FSYS */
274
+ DIV (CLK_DOUT_FSYS_BUS , "dout_fsys_bus" , "gout_fsys_bus" ,
275
+ CLK_CON_DIV_CLKCMU_FSYS_BUS , 0 , 4 ),
276
+ DIV (CLK_DOUT_FSYS_MMC_CARD , "dout_fsys_mmc_card" , "gout_fsys_mmc_card" ,
277
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_CARD , 0 , 9 ),
278
+ DIV (CLK_DOUT_FSYS_MMC_EMBD , "dout_fsys_mmc_embd" , "gout_fsys_mmc_embd" ,
279
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_EMBD , 0 , 9 ),
280
+ DIV (CLK_DOUT_FSYS_MMC_SDIO , "dout_fsys_mmc_sdio" , "gout_fsys_mmc_sdio" ,
281
+ CLK_CON_DIV_CLKCMU_FSYS_MMC_SDIO , 0 , 9 ),
282
+ DIV (CLK_DOUT_FSYS_USB30DRD , "dout_fsys_usb30drd" , "gout_fsys_usb30drd" ,
283
+ CLK_CON_DIV_CLKCMU_FSYS_USB30DRD , 0 , 4 ),
223
284
};
224
285
225
286
static const struct samsung_gate_clock top_gate_clks [] __initconst = {
@@ -250,6 +311,18 @@ static const struct samsung_gate_clock top_gate_clks[] __initconst = {
250
311
CLK_CON_GAT_GATE_CLKCMU_PERI_USI1 , 21 , 0 , 0 ),
251
312
GATE (CLK_GOUT_PERI_USI2 , "gout_peri_usi2" , "mout_peri_usi2" ,
252
313
CLK_CON_GAT_GATE_CLKCMU_PERI_USI2 , 21 , 0 , 0 ),
314
+
315
+ /* FSYS */
316
+ GATE (CLK_GOUT_FSYS_BUS , "gout_fsys_bus" , "mout_fsys_bus" ,
317
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_BUS , 21 , 0 , 0 ),
318
+ GATE (CLK_GOUT_FSYS_MMC_CARD , "gout_fsys_mmc_card" , "mout_fsys_mmc_card" ,
319
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_CARD , 21 , 0 , 0 ),
320
+ GATE (CLK_GOUT_FSYS_MMC_EMBD , "gout_fsys_mmc_embd" , "mout_fsys_mmc_embd" ,
321
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_EMBD , 21 , 0 , 0 ),
322
+ GATE (CLK_GOUT_FSYS_MMC_SDIO , "gout_fsys_mmc_sdio" , "mout_fsys_mmc_sdio" ,
323
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_MMC_SDIO , 21 , 0 , 0 ),
324
+ GATE (CLK_GOUT_FSYS_USB30DRD , "gout_fsys_usb30drd" , "mout_fsys_usb30drd" ,
325
+ CLK_CON_GAT_GATE_CLKCMU_FSYS_USB30DRD , 21 , 0 , 0 ),
253
326
};
254
327
255
328
static const struct samsung_cmu_info top_cmu_info __initconst = {
@@ -560,6 +633,88 @@ static const struct samsung_cmu_info core_cmu_info __initconst = {
560
633
.clk_name = "dout_core_bus" ,
561
634
};
562
635
636
+ /* ---- CMU_FSYS ------------------------------------------------------------ */
637
+
638
+ /* Register Offset definitions for CMU_FSYS (0x13400000) */
639
+ #define PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER 0x0100
640
+ #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER 0x0120
641
+ #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER 0x0140
642
+ #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER 0x0160
643
+ #define PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER 0x0180
644
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK 0x2030
645
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN 0x2034
646
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK 0x2038
647
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN 0x203c
648
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK 0x2040
649
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN 0x2044
650
+
651
+ static const unsigned long fsys_clk_regs [] __initconst = {
652
+ PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER ,
653
+ PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER ,
654
+ PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER ,
655
+ PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER ,
656
+ PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER ,
657
+ CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK ,
658
+ CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN ,
659
+ CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK ,
660
+ CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN ,
661
+ CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK ,
662
+ CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN ,
663
+ };
664
+
665
+ /* List of parent clocks for Muxes in CMU_FSYS */
666
+ PNAME (mout_fsys_bus_user_p ) = { "oscclk" , "dout_fsys_bus" };
667
+ PNAME (mout_fsys_mmc_card_user_p ) = { "oscclk" , "dout_fsys_mmc_card" };
668
+ PNAME (mout_fsys_mmc_embd_user_p ) = { "oscclk" , "dout_fsys_mmc_embd" };
669
+ PNAME (mout_fsys_mmc_sdio_user_p ) = { "oscclk" , "dout_fsys_mmc_sdio" };
670
+ PNAME (mout_fsys_usb30drd_user_p ) = { "oscclk" , "dout_fsys_usb30drd" };
671
+
672
+ static const struct samsung_mux_clock fsys_mux_clks [] __initconst = {
673
+ MUX (CLK_MOUT_FSYS_BUS_USER , "mout_fsys_bus_user" , mout_fsys_bus_user_p ,
674
+ PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER , 4 , 1 ),
675
+ MUX_F (CLK_MOUT_FSYS_MMC_CARD_USER , "mout_fsys_mmc_card_user" ,
676
+ mout_fsys_mmc_card_user_p , PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER ,
677
+ 4 , 1 , CLK_SET_RATE_PARENT , 0 ),
678
+ MUX_F (CLK_MOUT_FSYS_MMC_EMBD_USER , "mout_fsys_mmc_embd_user" ,
679
+ mout_fsys_mmc_embd_user_p , PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER ,
680
+ 4 , 1 , CLK_SET_RATE_PARENT , 0 ),
681
+ MUX_F (CLK_MOUT_FSYS_MMC_SDIO_USER , "mout_fsys_mmc_sdio_user" ,
682
+ mout_fsys_mmc_sdio_user_p , PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER ,
683
+ 4 , 1 , CLK_SET_RATE_PARENT , 0 ),
684
+ MUX_F (CLK_MOUT_FSYS_USB30DRD_USER , "mout_fsys_usb30drd_user" ,
685
+ mout_fsys_usb30drd_user_p , PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER ,
686
+ 4 , 1 , CLK_SET_RATE_PARENT , 0 ),
687
+ };
688
+
689
+ static const struct samsung_gate_clock fsys_gate_clks [] __initconst = {
690
+ GATE (CLK_GOUT_MMC_CARD_ACLK , "gout_mmc_card_aclk" , "mout_fsys_bus_user" ,
691
+ CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK , 21 , 0 , 0 ),
692
+ GATE (CLK_GOUT_MMC_CARD_SDCLKIN , "gout_mmc_card_sdclkin" ,
693
+ "mout_fsys_mmc_card_user" , CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN ,
694
+ 21 , CLK_SET_RATE_PARENT , 0 ),
695
+ GATE (CLK_GOUT_MMC_EMBD_ACLK , "gout_mmc_embd_aclk" , "mout_fsys_bus_user" ,
696
+ CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK , 21 , 0 , 0 ),
697
+ GATE (CLK_GOUT_MMC_EMBD_SDCLKIN , "gout_mmc_embd_sdclkin" ,
698
+ "mout_fsys_mmc_embd_user" , CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN ,
699
+ 21 , CLK_SET_RATE_PARENT , 0 ),
700
+ GATE (CLK_GOUT_MMC_SDIO_ACLK , "gout_mmc_sdio_aclk" , "mout_fsys_bus_user" ,
701
+ CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK , 21 , 0 , 0 ),
702
+ GATE (CLK_GOUT_MMC_SDIO_SDCLKIN , "gout_mmc_sdio_sdclkin" ,
703
+ "mout_fsys_mmc_sdio_user" , CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN ,
704
+ 21 , CLK_SET_RATE_PARENT , 0 ),
705
+ };
706
+
707
+ static const struct samsung_cmu_info fsys_cmu_info __initconst = {
708
+ .mux_clks = fsys_mux_clks ,
709
+ .nr_mux_clks = ARRAY_SIZE (fsys_mux_clks ),
710
+ .gate_clks = fsys_gate_clks ,
711
+ .nr_gate_clks = ARRAY_SIZE (fsys_gate_clks ),
712
+ .nr_clk_ids = FSYS_NR_CLK ,
713
+ .clk_regs = fsys_clk_regs ,
714
+ .nr_clk_regs = ARRAY_SIZE (fsys_clk_regs ),
715
+ .clk_name = "dout_fsys_bus" ,
716
+ };
717
+
563
718
/* ---- platform_driver ----------------------------------------------------- */
564
719
565
720
static int __init exynos7885_cmu_probe (struct platform_device * pdev )
@@ -577,6 +732,9 @@ static const struct of_device_id exynos7885_cmu_of_match[] = {
577
732
{
578
733
.compatible = "samsung,exynos7885-cmu-core" ,
579
734
.data = & core_cmu_info ,
735
+ }, {
736
+ .compatible = "samsung,exynos7885-cmu-fsys" ,
737
+ .data = & fsys_cmu_info ,
580
738
}, {
581
739
},
582
740
};
0 commit comments