1717#include "clk-exynos-arm64.h"
1818
1919/* 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)
2121#define CLKS_NR_CORE (CLK_GOUT_TREX_P_CORE_PCLK_P_CORE + 1)
2222#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)
2424
2525/* ---- CMU_TOP ------------------------------------------------------------- */
2626
@@ -162,6 +162,10 @@ static const struct samsung_pll_clock top_pll_clks[] __initconst = {
162162 NULL ),
163163};
164164
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+
165169/* List of parent clocks for Muxes in CMU_TOP: for CMU_CORE */
166170PNAME (mout_core_bus_p ) = { "dout_shared0_div2" , "dout_shared1_div2" ,
167171 "dout_shared0_div3" , "dout_shared0_div3" };
@@ -189,6 +193,12 @@ PNAME(mout_fsys_mmc_sdio_p) = { "dout_shared0_div2", "dout_shared1_div2" };
189193PNAME (mout_fsys_usb30drd_p ) = { "dout_shared0_div4" , "dout_shared1_div4" };
190194
191195static 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+
192202 /* CORE */
193203 MUX (CLK_MOUT_CORE_BUS , "mout_core_bus" , mout_core_bus_p ,
194204 CLK_CON_MUX_MUX_CLKCMU_CORE_BUS , 0 , 2 ),
@@ -232,17 +242,17 @@ static const struct samsung_mux_clock top_mux_clks[] __initconst = {
232242
233243static const struct samsung_div_clock top_div_clks [] __initconst = {
234244 /* 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 " ,
236246 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 " ,
238248 CLK_CON_DIV_PLL_SHARED0_DIV3 , 0 , 2 ),
239249 DIV (CLK_DOUT_SHARED0_DIV4 , "dout_shared0_div4" , "dout_shared0_div2" ,
240250 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 " ,
242252 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 " ,
244254 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 " ,
246256 CLK_CON_DIV_PLL_SHARED1_DIV3 , 0 , 2 ),
247257 DIV (CLK_DOUT_SHARED1_DIV4 , "dout_shared1_div4" , "dout_shared1_div2" ,
248258 CLK_CON_DIV_PLL_SHARED1_DIV4 , 0 , 1 ),
@@ -676,30 +686,56 @@ static const struct samsung_cmu_info core_cmu_info __initconst = {
676686/* ---- CMU_FSYS ------------------------------------------------------------ */
677687
678688/* 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
690708
691709static const unsigned long fsys_clk_regs [] __initconst = {
710+ PLL_LOCKTIME_PLL_USB ,
692711 PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER ,
693712 PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER ,
694713 PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER ,
695714 PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER ,
696715 PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER ,
716+ PLL_CON0_PLL_USB ,
717+ CLK_CON_GAT_CLK_FSYS_USB20PHY_CLKCORE ,
697718 CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK ,
698719 CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN ,
699720 CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK ,
700721 CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN ,
701722 CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK ,
702723 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 ),
703739};
704740
705741/* 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" };
708744PNAME (mout_fsys_mmc_embd_user_p ) = { "oscclk" , "dout_fsys_mmc_embd" };
709745PNAME (mout_fsys_mmc_sdio_user_p ) = { "oscclk" , "dout_fsys_mmc_sdio" };
710746PNAME (mout_fsys_usb30drd_user_p ) = { "oscclk" , "dout_fsys_usb30drd" };
747+ PNAME (mout_usb_pll_p ) = { "oscclk" , "fout_usb_pll" };
711748
712749static const struct samsung_mux_clock fsys_mux_clks [] __initconst = {
713750 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 = {
721758 MUX_F (CLK_MOUT_FSYS_MMC_SDIO_USER , "mout_fsys_mmc_sdio_user" ,
722759 mout_fsys_mmc_sdio_user_p , PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER ,
723760 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" ,
725762 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 ),
727766};
728767
729768static 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 ),
730771 GATE (CLK_GOUT_MMC_CARD_ACLK , "gout_mmc_card_aclk" , "mout_fsys_bus_user" ,
731772 CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK , 21 , 0 , 0 ),
732773 GATE (CLK_GOUT_MMC_CARD_SDCLKIN , "gout_mmc_card_sdclkin" ,
@@ -742,9 +783,21 @@ static const struct samsung_gate_clock fsys_gate_clks[] __initconst = {
742783 GATE (CLK_GOUT_MMC_SDIO_SDCLKIN , "gout_mmc_sdio_sdclkin" ,
743784 "mout_fsys_mmc_sdio_user" , CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN ,
744785 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 ),
745796};
746797
747798static const struct samsung_cmu_info fsys_cmu_info __initconst = {
799+ .pll_clks = fsys_pll_clks ,
800+ .nr_pll_clks = ARRAY_SIZE (fsys_pll_clks ),
748801 .mux_clks = fsys_mux_clks ,
749802 .nr_mux_clks = ARRAY_SIZE (fsys_mux_clks ),
750803 .gate_clks = fsys_gate_clks ,
0 commit comments