@@ -20,6 +20,7 @@
#define CLKS_NR_TOP (CLK_GOUT_CMU_VRA_BUS + 1)
#define CLKS_NR_HSI0 (CLK_GOUT_HSI0_XIU_D_HSI0_ACLK + 1)
#define CLKS_NR_PERIS (CLK_GOUT_PERIS_OTP_CON_TOP_OSCCLK + 1)
+#define CLKS_NR_HSI1 (CLK_MOUT_HSI1_UFS_EMBD_USER + 1)
/* ---- CMU_TOP ------------------------------------------------------------- */
@@ -1483,6 +1484,222 @@ static void __init exynos990_cmu_peris_init(struct device_node *np)
CLK_OF_DECLARE(exynos990_cmu_peris, "samsung,exynos990-cmu-peris",
exynos990_cmu_peris_init);
+/* ---- CMU_HSI1 ------------------------------------------------------------ */
+
+/* Register Offset definitions for CMU_HSI1 (0x13000000) */
+#define PLL_CON0_MUX_CLKCMU_HSI1_BUS_USER 0x0600
+#define PLL_CON1_MUX_CLKCMU_HSI1_BUS_USER 0x0604
+#define PLL_CON0_MUX_CLKCMU_HSI1_MMC_CARD_USER 0x0610
+#define PLL_CON1_MUX_CLKCMU_HSI1_MMC_CARD_USER 0x0614
+#define PLL_CON0_MUX_CLKCMU_HSI1_PCIE_USER 0x0620
+#define PLL_CON1_MUX_CLKCMU_HSI1_PCIE_USER 0x0624
+#define PLL_CON0_MUX_CLKCMU_HSI1_UFS_CARD_USER 0x0630
+#define PLL_CON1_MUX_CLKCMU_HSI1_UFS_CARD_USER 0x0634
+#define PLL_CON0_MUX_CLKCMU_HSI1_UFS_EMBD_USER 0x0640
+#define PLL_CON1_MUX_CLKCMU_HSI1_UFS_EMBD_USER 0x0644
+#define HSI1_CMU_HSI1_CONTROLLER_OPTION 0x0800
+#define CLK_CON_GAT_CLK_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_PHY_REFCLK_IN 0x2000
+#define CLK_CON_GAT_CLK_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_PCIE_SUB_CTRL_INST_0_PHY_REFCLK_IN 0x2004
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_D_TZPC_HSI1_IPCLKPORT_PCLK 0x2008
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_GPIO_HSI1_IPCLKPORT_PCLK 0x200c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_HSI1_CMU_HSI1_IPCLKPORT_PCLK 0x2010
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_LHM_AXI_P_HSI1_IPCLKPORT_I_CLK 0x2014
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_LHS_ACEL_D_HSI1_IPCLKPORT_I_CLK 0x2018
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_MMC_CARD_IPCLKPORT_I_ACLK 0x201c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_MMC_CARD_IPCLKPORT_SDCLKIN 0x2020
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_DBI_ACLK 0x2024
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_IEEE1500_WRAPPER_FOR_PCIEG2_PHY_X1_INST_0_I_SCL_APB_PCLK 0x2028
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_MSTR_ACLK 0x202c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_PCIE_SUB_CTRL_INST_0_I_DRIVER_APB_CLK 0x2030
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_PIPE2_DIGITAL_X1_WRAP_INST_0_I_APB_PCLK_SCL 0x2034
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_SLV_ACLK 0x2038
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_G4X2_DWC_PCIE_CTL_INST_0_DBI_ACLK_UG 0x203c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_G4X2_DWC_PCIE_CTL_INST_0_MSTR_ACLK_UG 0x2040
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_G4X2_DWC_PCIE_CTL_INST_0_SLV_ACLK_UG 0x2044
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_PCIE_SUB_CTRL_INST_0_I_DRIVER_APB_CLK 0x2048
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCS_PMA_INST_0_PIPE_PAL_PCIE_INST_0_I_APB_PCLK 0x204c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCS_PMA_INST_0_SF_PCIEPHY000X2_LN07LPP_QCH_TM_WRAPPER_INST_0_I_APB_PCLK 0x2050
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_IA_GEN2_IPCLKPORT_I_CLK 0x2054
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_IA_GEN4_0_IPCLKPORT_I_CLK 0x2058
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PPMU_HSI1_IPCLKPORT_ACLK 0x205c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_PPMU_HSI1_IPCLKPORT_PCLK 0x2060
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_RSTNSYNC_CLK_HSI1_BUS_IPCLKPORT_CLK 0x2064
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_RSTNSYNC_CLK_HSI1_OSCCLK_IPCLKPORT_CLK 0x2068
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_SYSMMU_HSI1_IPCLKPORT_CLK_S2 0x206c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_SYSREG_HSI1_IPCLKPORT_PCLK 0x2070
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_CARD_IPCLKPORT_I_ACLK 0x2074
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_CARD_IPCLKPORT_I_CLK_UNIPRO 0x2078
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_CARD_IPCLKPORT_I_FMP_CLK 0x207c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_EMBD_IPCLKPORT_I_ACLK 0x2080
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_EMBD_IPCLKPORT_I_CLK_UNIPRO 0x2084
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_EMBD_IPCLKPORT_I_FMP_CLK 0x2088
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_VGEN_LITE_HSI1_IPCLKPORT_CLK 0x208c
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_XIU_D_HSI1_IPCLKPORT_ACLK 0x2090
+#define CLK_CON_GAT_GOUT_BLK_HSI1_UID_XIU_P_HSI1_IPCLKPORT_ACLK 0x2094
+#define DMYQCH_CON_PCIE_GEN2_QCH_REF 0x3000
+#define DMYQCH_CON_PCIE_GEN4_0_QCH_REF 0x3004
+#define QCH_CON_D_TZPC_HSI1_QCH 0x3024
+#define QCH_CON_GPIO_HSI1_QCH 0x3028
+#define QCH_CON_HSI1_CMU_HSI1_QCH 0x302c
+#define QCH_CON_LHM_AXI_P_HSI1_QCH 0x3030
+#define QCH_CON_LHS_ACEL_D_HSI1_QCH 0x3034
+#define QCH_CON_MMC_CARD_QCH 0x3038
+#define QCH_CON_PCIE_GEN2_QCH_APB 0x303c
+#define QCH_CON_PCIE_GEN2_QCH_DBI 0x3040
+#define QCH_CON_PCIE_GEN2_QCH_MSTR 0x3044
+#define QCH_CON_PCIE_GEN2_QCH_PCS 0x3048
+#define QCH_CON_PCIE_GEN2_QCH_PHY 0x304c
+#define QCH_CON_PCIE_GEN4_0_QCH_APB 0x3050
+#define QCH_CON_PCIE_GEN4_0_QCH_AXI 0x3054
+#define QCH_CON_PCIE_GEN4_0_QCH_DBI 0x3058
+#define QCH_CON_PCIE_GEN4_0_QCH_PCS_APB 0x305c
+#define QCH_CON_PCIE_GEN4_0_QCH_PMA_APB 0x3060
+#define QCH_CON_PCIE_IA_GEN2_QCH 0x3064
+#define QCH_CON_PCIE_IA_GEN4_0_QCH 0x3068
+#define QCH_CON_PPMU_HSI1_QCH 0x306c
+#define QCH_CON_SYSMMU_HSI1_QCH 0x3070
+#define QCH_CON_SYSREG_HSI1_QCH 0x3074
+#define QCH_CON_UFS_CARD_QCH 0x3078
+#define QCH_CON_UFS_CARD_QCH_FMP 0x307c
+#define QCH_CON_UFS_EMBD_QCH 0x3080
+#define QCH_CON_UFS_EMBD_QCH_FMP 0x3084
+#define QCH_CON_VGEN_LITE_HSI1_QCH 0x3088
+
+static const unsigned long hsi1_clk_regs[] __initconst = {
+ PLL_CON0_MUX_CLKCMU_HSI1_BUS_USER,
+ PLL_CON1_MUX_CLKCMU_HSI1_BUS_USER,
+ PLL_CON0_MUX_CLKCMU_HSI1_MMC_CARD_USER,
+ PLL_CON1_MUX_CLKCMU_HSI1_MMC_CARD_USER,
+ PLL_CON0_MUX_CLKCMU_HSI1_PCIE_USER,
+ PLL_CON1_MUX_CLKCMU_HSI1_PCIE_USER,
+ PLL_CON0_MUX_CLKCMU_HSI1_UFS_CARD_USER,
+ PLL_CON1_MUX_CLKCMU_HSI1_UFS_CARD_USER,
+ PLL_CON0_MUX_CLKCMU_HSI1_UFS_EMBD_USER,
+ PLL_CON1_MUX_CLKCMU_HSI1_UFS_EMBD_USER,
+ HSI1_CMU_HSI1_CONTROLLER_OPTION,
+ CLK_CON_GAT_CLK_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_PHY_REFCLK_IN,
+ CLK_CON_GAT_CLK_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_PCIE_SUB_CTRL_INST_0_PHY_REFCLK_IN,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_D_TZPC_HSI1_IPCLKPORT_PCLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_GPIO_HSI1_IPCLKPORT_PCLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_HSI1_CMU_HSI1_IPCLKPORT_PCLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_LHM_AXI_P_HSI1_IPCLKPORT_I_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_LHS_ACEL_D_HSI1_IPCLKPORT_I_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_MMC_CARD_IPCLKPORT_I_ACLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_MMC_CARD_IPCLKPORT_SDCLKIN,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_DBI_ACLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_IEEE1500_WRAPPER_FOR_PCIEG2_PHY_X1_INST_0_I_SCL_APB_PCLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_MSTR_ACLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_PCIE_SUB_CTRL_INST_0_I_DRIVER_APB_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_PIPE2_DIGITAL_X1_WRAP_INST_0_I_APB_PCLK_SCL,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN2_IPCLKPORT_SLV_ACLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_G4X2_DWC_PCIE_CTL_INST_0_DBI_ACLK_UG,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_G4X2_DWC_PCIE_CTL_INST_0_MSTR_ACLK_UG,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_G4X2_DWC_PCIE_CTL_INST_0_SLV_ACLK_UG,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCIE_001_PCIE_SUB_CTRL_INST_0_I_DRIVER_APB_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCS_PMA_INST_0_PIPE_PAL_PCIE_INST_0_I_APB_PCLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_GEN4_0_IPCLKPORT_PCS_PMA_INST_0_SF_PCIEPHY000X2_LN07LPP_QCH_TM_WRAPPER_INST_0_I_APB_PCLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_IA_GEN2_IPCLKPORT_I_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PCIE_IA_GEN4_0_IPCLKPORT_I_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PPMU_HSI1_IPCLKPORT_ACLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_PPMU_HSI1_IPCLKPORT_PCLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_RSTNSYNC_CLK_HSI1_BUS_IPCLKPORT_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_RSTNSYNC_CLK_HSI1_OSCCLK_IPCLKPORT_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_SYSMMU_HSI1_IPCLKPORT_CLK_S2,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_SYSREG_HSI1_IPCLKPORT_PCLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_CARD_IPCLKPORT_I_ACLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_CARD_IPCLKPORT_I_CLK_UNIPRO,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_CARD_IPCLKPORT_I_FMP_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_EMBD_IPCLKPORT_I_ACLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_EMBD_IPCLKPORT_I_CLK_UNIPRO,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_UFS_EMBD_IPCLKPORT_I_FMP_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_VGEN_LITE_HSI1_IPCLKPORT_CLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_XIU_D_HSI1_IPCLKPORT_ACLK,
+ CLK_CON_GAT_GOUT_BLK_HSI1_UID_XIU_P_HSI1_IPCLKPORT_ACLK,
+ DMYQCH_CON_PCIE_GEN2_QCH_REF,
+ DMYQCH_CON_PCIE_GEN4_0_QCH_REF,
+ QCH_CON_D_TZPC_HSI1_QCH,
+ QCH_CON_GPIO_HSI1_QCH,
+ QCH_CON_HSI1_CMU_HSI1_QCH,
+ QCH_CON_LHM_AXI_P_HSI1_QCH,
+ QCH_CON_LHS_ACEL_D_HSI1_QCH,
+ QCH_CON_MMC_CARD_QCH,
+ QCH_CON_PCIE_GEN2_QCH_APB,
+ QCH_CON_PCIE_GEN2_QCH_DBI,
+ QCH_CON_PCIE_GEN2_QCH_MSTR,
+ QCH_CON_PCIE_GEN2_QCH_PCS,
+ QCH_CON_PCIE_GEN2_QCH_PHY,
+ QCH_CON_PCIE_GEN4_0_QCH_APB,
+ QCH_CON_PCIE_GEN4_0_QCH_AXI,
+ QCH_CON_PCIE_GEN4_0_QCH_DBI,
+ QCH_CON_PCIE_GEN4_0_QCH_PCS_APB,
+ QCH_CON_PCIE_GEN4_0_QCH_PMA_APB,
+ QCH_CON_PCIE_IA_GEN2_QCH,
+ QCH_CON_PCIE_IA_GEN4_0_QCH,
+ QCH_CON_PPMU_HSI1_QCH,
+ QCH_CON_SYSMMU_HSI1_QCH,
+ QCH_CON_SYSREG_HSI1_QCH,
+ QCH_CON_UFS_CARD_QCH,
+ QCH_CON_UFS_CARD_QCH_FMP,
+ QCH_CON_UFS_EMBD_QCH,
+ QCH_CON_UFS_EMBD_QCH_FMP,
+ QCH_CON_VGEN_LITE_HSI1_QCH,
+};
+
+/* Parent clock list for CMU_HSI1 muxes */
+PNAME(mout_hsi1_ufs_embd_p) = { "oscclk",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared2_div2",
+ "oscclk" };
+PNAME(mout_hsi1_ufs_card_p) = { "oscclk",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared2_div2",
+ "oscclk" };
+PNAME(mout_hsi1_pcie_p) = { "oscclk", "fout_shared2_pll" };
+PNAME(mout_hsi1_bus_p) = { "dout_cmu_shared0_div3",
+ "dout_cmu_shared0_div4",
+ "dout_cmu_shared1_div4",
+ "dout_cmu_shared4_div3",
+ "dout_cmu_shared2_div2",
+ "fout_mmc_pll",
+ "oscclk",
+ "oscclk" };
+PNAME(mout_hsi1_mmc_card_p) = { "oscclk",
+ "fout_shared2_pll",
+ "fout_mmc_pll",
+ "dout_cmu_shared0_div4" };
+PNAME(mout_hsi1_bus_user_p) = { "oscclk", "dout_cmu_hsi1_bus" };
+PNAME(mout_hsi1_mmc_card_user_p) = { "oscclk", "dout_cmu_hsi1_mmc_card" };
+PNAME(mout_hsi1_pcie_user_p) = { "oscclk", "dout_cmu_hsi1_pcie" };
+PNAME(mout_hsi1_ufs_card_user_p) = { "oscclk", "dout_cmu_hsi1_ufs_card" };
+PNAME(mout_hsi1_ufs_embd_user_p) = { "oscclk", "dout_cmu_hsi1_ufs_embd" };
+
+static const struct samsung_mux_clock hsi1_mux_clks[] __initconst = {
+ MUX(CLK_MOUT_HSI1_BUS_USER, "mout_hsi1_bus_user",
+ mout_hsi1_bus_user_p, PLL_CON0_MUX_CLKCMU_HSI1_BUS_USER,
+ 4, 1),
+ MUX(CLK_MOUT_HSI1_MMC_CARD_USER, "mout_hsi1_mmc_card_user",
+ mout_hsi1_mmc_card_user_p, PLL_CON0_MUX_CLKCMU_HSI1_MMC_CARD_USER,
+ 4, 1),
+ MUX(CLK_MOUT_HSI1_PCIE_USER, "mout_hsi1_pcie_user",
+ mout_hsi1_pcie_user_p, PLL_CON0_MUX_CLKCMU_HSI1_PCIE_USER,
+ 4, 1),
+ MUX(CLK_MOUT_HSI1_UFS_CARD_USER, "mout_hsi1_ufs_card_user",
+ mout_hsi1_ufs_card_user_p, PLL_CON0_MUX_CLKCMU_HSI1_UFS_CARD_USER,
+ 4, 1),
+ MUX(CLK_MOUT_HSI1_UFS_EMBD_USER, "mout_hsi1_ufs_embd_user",
+ mout_hsi1_ufs_embd_user_p, PLL_CON0_MUX_CLKCMU_HSI1_UFS_EMBD_USER,
+ 4, 1),
+};
+
+static const struct samsung_cmu_info hsi1_cmu_info __initconst = {
+ .mux_clks = hsi1_mux_clks,
+ .nr_mux_clks = ARRAY_SIZE(hsi1_mux_clks),
+ .nr_clk_ids = CLKS_NR_HSI1,
+ .clk_regs = hsi1_clk_regs,
+ .nr_clk_regs = ARRAY_SIZE(hsi1_clk_regs),
+ .clk_name = "bus",
+};
+
/* ----- platform_driver ----- */
static int __init exynos990_cmu_probe(struct platform_device *pdev)
@@ -1501,6 +1718,10 @@ static const struct of_device_id exynos990_cmu_of_match[] = {
.compatible = "samsung,exynos990-cmu-hsi0",
.data = &hsi0_cmu_info,
},
+ {
+ .compatible = "samsung,exynos990-cmu-hsi1",
+ .data = &hsi1_cmu_info,
+ },
{ },
};
The CMU_HSI1 block is used for providing clocks for the DesignWare MMC Controller, PCIE Subsystem and UFS subsystem, and has six dependency clocks from CMU_TOP. Signed-off-by: Umer Uddin <umer.uddin@mentallysanemainliners.org> --- drivers/clk/samsung/clk-exynos990.c | 221 ++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+)