17
17
#include "clk-exynos-arm64.h"
18
18
19
19
/* NOTE: Must be equal to the last clock ID increased by one */
20
- #define CLKS_NR_TOP (CLK_GOUT_FSYS_USB30DRD + 1)
20
+ #define CLKS_NR_TOP (CLK_MOUT_SHARED1_PLL + 1)
21
21
#define CLKS_NR_CORE (CLK_GOUT_TREX_P_CORE_PCLK_P_CORE + 1)
22
22
#define CLKS_NR_PERI (CLK_GOUT_WDT1_PCLK + 1)
23
- #define CLKS_NR_FSYS (CLK_GOUT_MMC_SDIO_SDCLKIN + 1)
23
+ #define CLKS_NR_FSYS (CLK_FSYS_USB30DRD_REF_CLK + 1)
24
24
25
25
/* ---- CMU_TOP ------------------------------------------------------------- */
26
26
@@ -162,6 +162,10 @@ static const struct samsung_pll_clock top_pll_clks[] __initconst = {
162
162
NULL ),
163
163
};
164
164
165
+ /* List of parent clocks for Muxes in CMU_TOP */
166
+ PNAME (mout_shared0_pll_p ) = { "oscclk" , "fout_shared0_pll" };
167
+ PNAME (mout_shared1_pll_p ) = { "oscclk" , "fout_shared1_pll" };
168
+
165
169
/* List of parent clocks for Muxes in CMU_TOP: for CMU_CORE */
166
170
PNAME (mout_core_bus_p ) = { "dout_shared0_div2" , "dout_shared1_div2" ,
167
171
"dout_shared0_div3" , "dout_shared0_div3" };
@@ -189,6 +193,12 @@ PNAME(mout_fsys_mmc_sdio_p) = { "dout_shared0_div2", "dout_shared1_div2" };
189
193
PNAME (mout_fsys_usb30drd_p ) = { "dout_shared0_div4" , "dout_shared1_div4" };
190
194
191
195
static const struct samsung_mux_clock top_mux_clks [] __initconst = {
196
+ /* TOP */
197
+ MUX (CLK_MOUT_SHARED0_PLL , "mout_shared0_pll" , mout_shared0_pll_p ,
198
+ PLL_CON0_PLL_SHARED0 , 4 , 1 ),
199
+ MUX (CLK_MOUT_SHARED1_PLL , "mout_shared1_pll" , mout_shared1_pll_p ,
200
+ PLL_CON0_PLL_SHARED1 , 4 , 1 ),
201
+
192
202
/* CORE */
193
203
MUX (CLK_MOUT_CORE_BUS , "mout_core_bus" , mout_core_bus_p ,
194
204
CLK_CON_MUX_MUX_CLKCMU_CORE_BUS , 0 , 2 ),
@@ -232,17 +242,17 @@ static const struct samsung_mux_clock top_mux_clks[] __initconst = {
232
242
233
243
static const struct samsung_div_clock top_div_clks [] __initconst = {
234
244
/* TOP */
235
- DIV (CLK_DOUT_SHARED0_DIV2 , "dout_shared0_div2" , "fout_shared0_pll " ,
245
+ DIV (CLK_DOUT_SHARED0_DIV2 , "dout_shared0_div2" , "mout_shared0_pll " ,
236
246
CLK_CON_DIV_PLL_SHARED0_DIV2 , 0 , 1 ),
237
- DIV (CLK_DOUT_SHARED0_DIV3 , "dout_shared0_div3" , "fout_shared0_pll " ,
247
+ DIV (CLK_DOUT_SHARED0_DIV3 , "dout_shared0_div3" , "mout_shared0_pll " ,
238
248
CLK_CON_DIV_PLL_SHARED0_DIV3 , 0 , 2 ),
239
249
DIV (CLK_DOUT_SHARED0_DIV4 , "dout_shared0_div4" , "dout_shared0_div2" ,
240
250
CLK_CON_DIV_PLL_SHARED0_DIV4 , 0 , 1 ),
241
- DIV (CLK_DOUT_SHARED0_DIV5 , "dout_shared0_div5" , "fout_shared0_pll " ,
251
+ DIV (CLK_DOUT_SHARED0_DIV5 , "dout_shared0_div5" , "mout_shared0_pll " ,
242
252
CLK_CON_DIV_PLL_SHARED0_DIV5 , 0 , 3 ),
243
- DIV (CLK_DOUT_SHARED1_DIV2 , "dout_shared1_div2" , "fout_shared1_pll " ,
253
+ DIV (CLK_DOUT_SHARED1_DIV2 , "dout_shared1_div2" , "mout_shared1_pll " ,
244
254
CLK_CON_DIV_PLL_SHARED1_DIV2 , 0 , 1 ),
245
- DIV (CLK_DOUT_SHARED1_DIV3 , "dout_shared1_div3" , "fout_shared1_pll " ,
255
+ DIV (CLK_DOUT_SHARED1_DIV3 , "dout_shared1_div3" , "mout_shared1_pll " ,
246
256
CLK_CON_DIV_PLL_SHARED1_DIV3 , 0 , 2 ),
247
257
DIV (CLK_DOUT_SHARED1_DIV4 , "dout_shared1_div4" , "dout_shared1_div2" ,
248
258
CLK_CON_DIV_PLL_SHARED1_DIV4 , 0 , 1 ),
@@ -676,30 +686,56 @@ static const struct samsung_cmu_info core_cmu_info __initconst = {
676
686
/* ---- CMU_FSYS ------------------------------------------------------------ */
677
687
678
688
/* Register Offset definitions for CMU_FSYS (0x13400000) */
679
- #define PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER 0x0100
680
- #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER 0x0120
681
- #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER 0x0140
682
- #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER 0x0160
683
- #define PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER 0x0180
684
- #define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK 0x2030
685
- #define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN 0x2034
686
- #define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK 0x2038
687
- #define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN 0x203c
688
- #define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK 0x2040
689
- #define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN 0x2044
689
+ #define PLL_LOCKTIME_PLL_USB 0x0000
690
+ #define PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER 0x0100
691
+ #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER 0x0120
692
+ #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER 0x0140
693
+ #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER 0x0160
694
+ #define PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER 0x0180
695
+ #define PLL_CON0_PLL_USB 0x01a0
696
+ #define CLK_CON_GAT_CLK_FSYS_USB20PHY_CLKCORE 0x200c
697
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK 0x2030
698
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN 0x2034
699
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK 0x2038
700
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN 0x203c
701
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK 0x2040
702
+ #define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN 0x2044
703
+ #define CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_20PHYCTRL 0x2068
704
+ #define CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_0 0x206c
705
+ #define CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_1 0x2070
706
+ #define CLK_CON_GAT_GOUT_FSYS_USB30DRD_BUS_CLK_EARLY 0x2074
707
+ #define CLK_CON_GAT_GOUT_FSYS_USB30DRD_REF_CLK 0x2078
690
708
691
709
static const unsigned long fsys_clk_regs [] __initconst = {
710
+ PLL_LOCKTIME_PLL_USB ,
692
711
PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER ,
693
712
PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER ,
694
713
PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER ,
695
714
PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER ,
696
715
PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER ,
716
+ PLL_CON0_PLL_USB ,
717
+ CLK_CON_GAT_CLK_FSYS_USB20PHY_CLKCORE ,
697
718
CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK ,
698
719
CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN ,
699
720
CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK ,
700
721
CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN ,
701
722
CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK ,
702
723
CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN ,
724
+ CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_20PHYCTRL ,
725
+ CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_0 ,
726
+ CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_1 ,
727
+ CLK_CON_GAT_GOUT_FSYS_USB30DRD_BUS_CLK_EARLY ,
728
+ CLK_CON_GAT_GOUT_FSYS_USB30DRD_REF_CLK ,
729
+ };
730
+
731
+ static const struct samsung_pll_rate_table pll_usb_rate_table [] __initconst = {
732
+ PLL_35XX_RATE (26 * MHZ , 50000000U , 400 , 13 , 4 ),
733
+ };
734
+
735
+ static const struct samsung_pll_clock fsys_pll_clks [] __initconst = {
736
+ PLL (pll_1418x , CLK_FOUT_USB_PLL , "fout_usb_pll" , "oscclk" ,
737
+ PLL_LOCKTIME_PLL_USB , PLL_CON0_PLL_USB ,
738
+ pll_usb_rate_table ),
703
739
};
704
740
705
741
/* List of parent clocks for Muxes in CMU_FSYS */
@@ -708,6 +744,7 @@ PNAME(mout_fsys_mmc_card_user_p) = { "oscclk", "dout_fsys_mmc_card" };
708
744
PNAME (mout_fsys_mmc_embd_user_p ) = { "oscclk" , "dout_fsys_mmc_embd" };
709
745
PNAME (mout_fsys_mmc_sdio_user_p ) = { "oscclk" , "dout_fsys_mmc_sdio" };
710
746
PNAME (mout_fsys_usb30drd_user_p ) = { "oscclk" , "dout_fsys_usb30drd" };
747
+ PNAME (mout_usb_pll_p ) = { "oscclk" , "fout_usb_pll" };
711
748
712
749
static const struct samsung_mux_clock fsys_mux_clks [] __initconst = {
713
750
MUX (CLK_MOUT_FSYS_BUS_USER , "mout_fsys_bus_user" , mout_fsys_bus_user_p ,
@@ -721,12 +758,16 @@ static const struct samsung_mux_clock fsys_mux_clks[] __initconst = {
721
758
MUX_F (CLK_MOUT_FSYS_MMC_SDIO_USER , "mout_fsys_mmc_sdio_user" ,
722
759
mout_fsys_mmc_sdio_user_p , PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER ,
723
760
4 , 1 , CLK_SET_RATE_PARENT , 0 ),
724
- MUX_F (CLK_MOUT_FSYS_USB30DRD_USER , "mout_fsys_usb30drd_user" ,
761
+ MUX (CLK_MOUT_FSYS_USB30DRD_USER , "mout_fsys_usb30drd_user" ,
725
762
mout_fsys_usb30drd_user_p , PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER ,
726
- 4 , 1 , CLK_SET_RATE_PARENT , 0 ),
763
+ 4 , 1 ),
764
+ nMUX_F (CLK_MOUT_USB_PLL , "mout_usb_pll" , mout_usb_pll_p ,
765
+ PLL_CON0_PLL_USB , 4 , 1 , CLK_SET_RATE_PARENT , 0 ),
727
766
};
728
767
729
768
static const struct samsung_gate_clock fsys_gate_clks [] __initconst = {
769
+ GATE (CLK_FSYS_USB20PHY_CLKCORE , "clk_fsys_usb20phy_clkcore" , "mout_usb_pll" ,
770
+ CLK_CON_GAT_CLK_FSYS_USB20PHY_CLKCORE , 21 , CLK_SET_RATE_PARENT , 0 ),
730
771
GATE (CLK_GOUT_MMC_CARD_ACLK , "gout_mmc_card_aclk" , "mout_fsys_bus_user" ,
731
772
CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK , 21 , 0 , 0 ),
732
773
GATE (CLK_GOUT_MMC_CARD_SDCLKIN , "gout_mmc_card_sdclkin" ,
@@ -742,9 +783,21 @@ static const struct samsung_gate_clock fsys_gate_clks[] __initconst = {
742
783
GATE (CLK_GOUT_MMC_SDIO_SDCLKIN , "gout_mmc_sdio_sdclkin" ,
743
784
"mout_fsys_mmc_sdio_user" , CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN ,
744
785
21 , CLK_SET_RATE_PARENT , 0 ),
786
+ GATE (CLK_FSYS_USB30DRD_ACLK_20PHYCTRL , "clk_fsys_usb30drd_aclk_20phyctrl" ,
787
+ "mout_fsys_bus_user" , CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_20PHYCTRL , 21 , 0 , 0 ),
788
+ GATE (CLK_FSYS_USB30DRD_ACLK_30PHYCTRL_0 , "clk_fsys_usb30drd_aclk_30phyctrl_0" ,
789
+ "mout_fsys_bus_user" , CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_0 , 21 , 0 , 0 ),
790
+ GATE (CLK_FSYS_USB30DRD_ACLK_30PHYCTRL_1 , "clk_fsys_usb30drd_aclk_30phyctrl_1" ,
791
+ "mout_fsys_bus_user" , CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_1 , 21 , 0 , 0 ),
792
+ GATE (CLK_FSYS_USB30DRD_BUS_CLK_EARLY , "clk_fsys_usb30drd_bus_clk_early" ,
793
+ "mout_fsys_bus_user" , CLK_CON_GAT_GOUT_FSYS_USB30DRD_BUS_CLK_EARLY , 21 , 0 , 0 ),
794
+ GATE (CLK_FSYS_USB30DRD_REF_CLK , "clk_fsys_usb30drd_ref_clk" , "mout_fsys_usb30drd_user" ,
795
+ CLK_CON_GAT_GOUT_FSYS_USB30DRD_REF_CLK , 21 , 0 , 0 ),
745
796
};
746
797
747
798
static const struct samsung_cmu_info fsys_cmu_info __initconst = {
799
+ .pll_clks = fsys_pll_clks ,
800
+ .nr_pll_clks = ARRAY_SIZE (fsys_pll_clks ),
748
801
.mux_clks = fsys_mux_clks ,
749
802
.nr_mux_clks = ARRAY_SIZE (fsys_mux_clks ),
750
803
.gate_clks = fsys_gate_clks ,
0 commit comments