[PATCH 05/16] clk: samsung: artpec-8: Add clock support for CMU_CMU block

ksk4725 at coasia.com ksk4725 at coasia.com
Wed Jul 9 17:20:35 PDT 2025


From: Hakyeong Kim <hgkim05 at coasia.com>

Add clock support for below CMU block in ARTPEC-8 SoC.
 - CMU_CMU

Signed-off-by: Ravi Patel <ravi.patel at samsung.com>
Signed-off-by: Hakyeong Kim <hgkim05 at coasia.com>
---
 drivers/clk/samsung/clk-artpec8.c | 415 ++++++++++++++++++++++++++++++
 1 file changed, 415 insertions(+)

diff --git a/drivers/clk/samsung/clk-artpec8.c b/drivers/clk/samsung/clk-artpec8.c
index 11a48b2fcc09..1ef9e52ad24b 100644
--- a/drivers/clk/samsung/clk-artpec8.c
+++ b/drivers/clk/samsung/clk-artpec8.c
@@ -14,8 +14,423 @@
 #include "clk.h"
 
 /* NOTE: Must be equal to the last clock ID increased by one */
+#define CMU_CMU_NR_CLK			(DOUT_CLKCMU_VPP_CORE + 1)
 #define CMU_IMEM_NR_CLK			(MOUT_IMEM_JPEG_USER + 1)
 
+/* register offset definitions for cmu_cmu (0x12400000) */
+#define PLL_LOCKTIME_PLL_AUDIO			0x0000
+#define PLL_LOCKTIME_PLL_SHARED0		0x0004
+#define PLL_LOCKTIME_PLL_SHARED1		0x0008
+#define PLL_CON0_PLL_AUDIO			0x0100
+#define PLL_CON0_PLL_SHARED0			0x0120
+#define PLL_CON0_PLL_SHARED1			0x0140
+#define MUX_CLKCMU_2D				0x1000
+#define MUX_CLKCMU_3D				0x1004
+#define MUX_CLKCMU_BUS_BUS			0x1008
+#define MUX_CLKCMU_BUS_DLP			0x100c
+#define MUX_CLKCMU_CDC_CORE			0x1010
+#define MUX_CLKCMU_FSYS_SCAN0			0x1014
+#define MUX_CLKCMU_FSYS_SCAN1			0x1018
+#define MUX_CLKCMU_IMEM_JPEG			0x101c
+#define MUX_CLKCMU_PERI_DISP			0x1020
+#define MUX_CLKCMU_CORE_BUS			0x1024
+#define MUX_CLKCMU_CORE_DLP			0x1028
+#define MUX_CLKCMU_CPUCL_SWITCH			0x1030
+#define MUX_CLKCMU_DLP_CORE			0x1034
+#define MUX_CLKCMU_FSYS_BUS			0x1038
+#define MUX_CLKCMU_FSYS_IP			0x103c
+#define MUX_CLKCMU_IMEM_ACLK			0x1054
+#define MUX_CLKCMU_MIF_BUSP			0x1080
+#define MUX_CLKCMU_MIF_SWITCH			0x1084
+#define MUX_CLKCMU_PERI_IP			0x1088
+#define MUX_CLKCMU_RSP_CORE			0x108c
+#define MUX_CLKCMU_TRFM_CORE			0x1090
+#define MUX_CLKCMU_VCA_ACE			0x1094
+#define MUX_CLKCMU_VCA_OD			0x1098
+#define MUX_CLKCMU_VIO_CORE			0x109c
+#define MUX_CLKCMU_VIP0_CORE			0x10a0
+#define MUX_CLKCMU_VIP1_CORE			0x10a4
+#define MUX_CLKCMU_VPP_CORE			0x10a8
+
+#define DIV_CLKCMU_BUS_BUS			0x1800
+#define DIV_CLKCMU_BUS_DLP			0x1804
+#define DIV_CLKCMU_CDC_CORE			0x1808
+#define DIV_CLKCMU_FSYS_SCAN0			0x180c
+#define DIV_CLKCMU_FSYS_SCAN1			0x1810
+#define DIV_CLKCMU_IMEM_JPEG			0x1814
+#define DIV_CLKCMU_MIF_SWITCH			0x1818
+#define DIV_CLKCMU_CORE_DLP			0x181c
+#define DIV_CLKCMU_CORE_MAIN			0x1820
+#define DIV_CLKCMU_PERI_DISP			0x1824
+#define DIV_CLKCMU_CPUCL_SWITCH			0x1828
+#define DIV_CLKCMU_DLP_CORE			0x182c
+#define DIV_CLKCMU_FSYS_BUS			0x1830
+#define DIV_CLKCMU_FSYS_IP			0x1834
+#define DIV_CLKCMU_VIO_AUDIO			0x1838
+#define DIV_CLKCMU_GPU_2D			0x1848
+#define DIV_CLKCMU_GPU_3D			0x184c
+#define DIV_CLKCMU_IMEM_ACLK			0x1854
+#define DIV_CLKCMU_MIF_BUSP			0x1884
+#define DIV_CLKCMU_PERI_AUDIO			0x1890
+#define DIV_CLKCMU_PERI_IP			0x1894
+#define DIV_CLKCMU_RSP_CORE			0x1898
+#define DIV_CLKCMU_TRFM_CORE			0x189c
+#define DIV_CLKCMU_VCA_ACE			0x18a0
+#define DIV_CLKCMU_VCA_OD			0x18a4
+#define DIV_CLKCMU_VIO_CORE			0x18ac
+#define DIV_CLKCMU_VIP0_CORE			0x18b0
+#define DIV_CLKCMU_VIP1_CORE			0x18b4
+#define DIV_CLKCMU_VPP_CORE			0x18b8
+#define DIV_PLL_SHARED0_DIV2			0x18bc
+#define DIV_PLL_SHARED0_DIV3			0x18c0
+#define DIV_PLL_SHARED0_DIV4			0x18c4
+#define DIV_PLL_SHARED1_DIV2			0x18c8
+#define DIV_PLL_SHARED1_DIV3			0x18cc
+#define DIV_PLL_SHARED1_DIV4			0x18d0
+
+static const unsigned long cmu_cmu_clk_regs[] __initconst = {
+	PLL_LOCKTIME_PLL_AUDIO,
+	PLL_LOCKTIME_PLL_SHARED0,
+	PLL_LOCKTIME_PLL_SHARED1,
+	PLL_CON0_PLL_AUDIO,
+	PLL_CON0_PLL_SHARED0,
+	PLL_CON0_PLL_SHARED1,
+	MUX_CLKCMU_2D,
+	MUX_CLKCMU_3D,
+	MUX_CLKCMU_BUS_BUS,
+	MUX_CLKCMU_BUS_DLP,
+	MUX_CLKCMU_CDC_CORE,
+	MUX_CLKCMU_FSYS_SCAN0,
+	MUX_CLKCMU_FSYS_SCAN1,
+	MUX_CLKCMU_IMEM_JPEG,
+	MUX_CLKCMU_PERI_DISP,
+	MUX_CLKCMU_CORE_BUS,
+	MUX_CLKCMU_CORE_DLP,
+	MUX_CLKCMU_CPUCL_SWITCH,
+	MUX_CLKCMU_DLP_CORE,
+	MUX_CLKCMU_FSYS_BUS,
+	MUX_CLKCMU_FSYS_IP,
+	MUX_CLKCMU_IMEM_ACLK,
+	MUX_CLKCMU_MIF_BUSP,
+	MUX_CLKCMU_MIF_SWITCH,
+	MUX_CLKCMU_PERI_IP,
+	MUX_CLKCMU_RSP_CORE,
+	MUX_CLKCMU_TRFM_CORE,
+	MUX_CLKCMU_VCA_ACE,
+	MUX_CLKCMU_VCA_OD,
+	MUX_CLKCMU_VIO_CORE,
+	MUX_CLKCMU_VIP0_CORE,
+	MUX_CLKCMU_VIP1_CORE,
+	MUX_CLKCMU_VPP_CORE,
+	DIV_CLKCMU_BUS_BUS,
+	DIV_CLKCMU_BUS_DLP,
+	DIV_CLKCMU_CDC_CORE,
+	DIV_CLKCMU_FSYS_SCAN0,
+	DIV_CLKCMU_FSYS_SCAN1,
+	DIV_CLKCMU_IMEM_JPEG,
+	DIV_CLKCMU_MIF_SWITCH,
+	DIV_CLKCMU_CORE_DLP,
+	DIV_CLKCMU_CORE_MAIN,
+	DIV_CLKCMU_PERI_DISP,
+	DIV_CLKCMU_CPUCL_SWITCH,
+	DIV_CLKCMU_DLP_CORE,
+	DIV_CLKCMU_FSYS_BUS,
+	DIV_CLKCMU_FSYS_IP,
+	DIV_CLKCMU_VIO_AUDIO,
+	DIV_CLKCMU_GPU_2D,
+	DIV_CLKCMU_GPU_3D,
+	DIV_CLKCMU_IMEM_ACLK,
+	DIV_CLKCMU_MIF_BUSP,
+	DIV_CLKCMU_PERI_AUDIO,
+	DIV_CLKCMU_PERI_IP,
+	DIV_CLKCMU_RSP_CORE,
+	DIV_CLKCMU_TRFM_CORE,
+	DIV_CLKCMU_VCA_ACE,
+	DIV_CLKCMU_VCA_OD,
+	DIV_CLKCMU_VIO_CORE,
+	DIV_CLKCMU_VIP0_CORE,
+	DIV_CLKCMU_VIP1_CORE,
+	DIV_CLKCMU_VPP_CORE,
+	DIV_PLL_SHARED0_DIV2,
+	DIV_PLL_SHARED0_DIV3,
+	DIV_PLL_SHARED0_DIV4,
+	DIV_PLL_SHARED1_DIV2,
+	DIV_PLL_SHARED1_DIV3,
+	DIV_PLL_SHARED1_DIV4,
+};
+
+static const struct samsung_pll_rate_table artpec8_pll_audio_rates[] = {
+	PLL_36XX_RATE(25 * MHZ, 589823913U, 47, 1, 1, 12184),
+	PLL_36XX_RATE(25 * MHZ, 393215942U, 47, 3, 0, 12184),
+	PLL_36XX_RATE(25 * MHZ, 294911956U, 47, 1, 2, 12184),
+	PLL_36XX_RATE(25 * MHZ, 100000000U, 32, 2, 2, 0),
+	PLL_36XX_RATE(25 * MHZ,  98303985U, 47, 3, 2, 12184),
+	PLL_36XX_RATE(25 * MHZ,  49151992U, 47, 3, 3, 12184),
+};
+
+static const struct samsung_pll_clock cmu_cmu_pll_clks[] __initconst = {
+	PLL(pll_1017x, PLL_SHARED0, "fout_pll_shared0", "fin_pll",
+	    PLL_LOCKTIME_PLL_SHARED0, PLL_CON0_PLL_SHARED0, NULL),
+	PLL(pll_1017x, PLL_SHARED1, "fout_pll_shared1", "fin_pll",
+	    PLL_LOCKTIME_PLL_SHARED1, PLL_CON0_PLL_SHARED1, NULL),
+	PLL(pll_1031x, PLL_AUDIO, "fout_pll_audio", "fin_pll",
+	    PLL_LOCKTIME_PLL_AUDIO, PLL_CON0_PLL_AUDIO, artpec8_pll_audio_rates),
+};
+
+PNAME(mout_clkcmu_bus_bus_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_bus_dlp_p) = {
+	"dout_pll_shared0_div2", "dout_pll_shared0_div4",
+	"dout_pll_shared1_div2", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_core_bus_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared0_div4", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_core_dlp_p) = {
+	"dout_pll_shared0_div2", "dout_pll_sahred1_div2",
+	"dout_pll_shared0_div3", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_cpucl_switch_p) = {
+	"dout_pll_shared0_div2", "dout_pll_shared1_div2",
+	"dout_pll_shared0_div3", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_fsys_bus_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div2",
+	"dout_pll_shared1_div4", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_fsys_ip_p) = {
+	"dout_pll_shared0_div2", "dout_pll_shared1_div3",
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3" };
+PNAME(mout_clkcmu_fsys_sfmc_p) = {
+	"dout_pll_shared1_div3", "dout_pll_shared0_div2",
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3" };
+PNAME(mout_clkcmu_fsys_scan0_p) = {
+	"dout_pll_shared0_div4", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_fsys_scan1_p) = {
+	"dout_pll_shared0_div4", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_imem_imem_p) = {
+	"dout_pll_shared1_div4", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div2" };
+PNAME(mout_clkcmu_imem_jpeg_p) = {
+	"dout_pll_shared0_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div2", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_cdc_core_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_dlp_core_p) = {
+	"dout_pll_shared0_div2", "dout_pll_shared1_div2",
+	"dout_pll_shared0_div3", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_3d_p) = {
+	"dout_pll_shared0_div2", "dout_pll_shared1_div2",
+	"dout_pll_shared0_div3", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_2d_p) = {
+	"dout_pll_shared0_div2", "dout_pll_shared1_div2",
+	"dout_pll_shared0_div3", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_mif_switch_p) = {
+	"dout_pll_shared0", "dout_pll_shared1",
+	"dout_pll_shared0_div2", "dout_pll_shared0_div3" };
+PNAME(mout_clkcmu_mif_busp_p) = {
+	"dout_pll_shared0_div3", "dout_pll_shared1_div4",
+	"dout_pll_shared0_div4", "dout_pll_shared0_div2" };
+PNAME(mout_clkcmu_peri_disp_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div2",
+	"dout_pll_shared1_div4", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_peri_ip_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div4",
+	"dout_pll_shared1_div4", "dout_pll_shared0_div2" };
+PNAME(mout_clkcmu_rsp_core_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_trfm_core_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_vca_ace_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_vca_od_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_vio_core_p) = {
+	"dout_pll_shared0_div3", "dout_pll_shared0_div2",
+	"dout_pll_shared1_div2", "dout_pll_shared1_div3" };
+PNAME(mout_clkcmu_vip0_core_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_vip1_core_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_vpp_core_p) = {
+	"dout_pll_shared1_div2", "dout_pll_shared0_div3",
+	"dout_pll_shared1_div3", "dout_pll_shared1_div4" };
+PNAME(mout_clkcmu_pll_shared0_p) = { "fin_pll", "fout_pll_shared0" };
+PNAME(mout_clkcmu_pll_shared1_p) = { "fin_pll", "fout_pll_shared1" };
+PNAME(mout_clkcmu_pll_audio_p) = { "fin_pll", "fout_pll_audio" };
+
+static const struct samsung_fixed_factor_clock cmu_fixed_factor_clks[] __initconst = {
+	FFACTOR(DOUT_CLKCMU_OTP, "dout_clkcmu_otp", "fin_pll", 1, 8, 0),
+};
+
+static const struct samsung_mux_clock cmu_cmu_mux_clks[] __initconst = {
+	MUX(0, "mout_clkcmu_pll_shared0", mout_clkcmu_pll_shared0_p,
+	    PLL_CON0_PLL_SHARED0, 4, 1),
+	MUX(0, "mout_clkcmu_pll_shared1", mout_clkcmu_pll_shared1_p,
+	    PLL_CON0_PLL_SHARED1, 4, 1),
+	MUX(0, "mout_clkcmu_pll_audio", mout_clkcmu_pll_audio_p,
+	    PLL_CON0_PLL_AUDIO, 4, 1),
+	MUX(0, "mout_clkcmu_bus_bus", mout_clkcmu_bus_bus_p,
+	    MUX_CLKCMU_BUS_BUS, 0, 2),
+	MUX(0, "mout_clkcmu_bus_dlp", mout_clkcmu_bus_dlp_p,
+	    MUX_CLKCMU_BUS_DLP, 0, 2),
+	MUX(0, "mout_clkcmu_core_bus", mout_clkcmu_core_bus_p,
+	    MUX_CLKCMU_CORE_BUS, 0, 2),
+	MUX(0, "mout_clkcmu_core_dlp", mout_clkcmu_core_dlp_p,
+	    MUX_CLKCMU_CORE_DLP, 0, 2),
+	MUX(0, "mout_clkcmu_cpucl_switch", mout_clkcmu_cpucl_switch_p,
+	    MUX_CLKCMU_CPUCL_SWITCH, 0, 3),
+	MUX(0, "mout_clkcmu_fsys_bus", mout_clkcmu_fsys_bus_p,
+	    MUX_CLKCMU_FSYS_BUS, 0, 2),
+	MUX(0, "mout_clkcmu_fsys_ip", mout_clkcmu_fsys_ip_p,
+	    MUX_CLKCMU_FSYS_IP, 0, 2),
+	MUX(0, "mout_clkcmu_fsys_scan0", mout_clkcmu_fsys_scan0_p,
+	    MUX_CLKCMU_FSYS_SCAN0, 0, 1),
+	MUX(0, "mout_clkcmu_fsys_scan1", mout_clkcmu_fsys_scan1_p,
+	    MUX_CLKCMU_FSYS_SCAN1, 0, 1),
+	MUX(0, "mout_clkcmu_imem_imem", mout_clkcmu_imem_imem_p,
+	    MUX_CLKCMU_IMEM_ACLK, 0, 2),
+	MUX(0, "mout_clkcmu_imem_jpeg", mout_clkcmu_imem_jpeg_p,
+	    MUX_CLKCMU_IMEM_JPEG, 0, 2),
+	nMUX(0, "mout_clkcmu_cdc_core", mout_clkcmu_cdc_core_p,
+	     MUX_CLKCMU_CDC_CORE, 0, 2),
+	nMUX(0, "mout_clkcmu_dlp_core", mout_clkcmu_dlp_core_p,
+	     MUX_CLKCMU_DLP_CORE, 0, 2),
+	MUX(0, "mout_clkcmu_3d", mout_clkcmu_3d_p,
+	    MUX_CLKCMU_3D, 0, 2),
+	MUX(0, "mout_clkcmu_2d", mout_clkcmu_2d_p,
+	    MUX_CLKCMU_2D, 0, 2),
+	MUX(0, "mout_clkcmu_mif_switch", mout_clkcmu_mif_switch_p,
+	    MUX_CLKCMU_MIF_SWITCH, 0, 2),
+	MUX(0, "mout_clkcmu_mif_busp", mout_clkcmu_mif_busp_p,
+	    MUX_CLKCMU_MIF_BUSP, 0, 2),
+	MUX(0, "mout_clkcmu_peri_disp", mout_clkcmu_peri_disp_p,
+	    MUX_CLKCMU_PERI_DISP, 0, 2),
+	MUX(0, "mout_clkcmu_peri_ip", mout_clkcmu_peri_ip_p,
+	    MUX_CLKCMU_PERI_IP, 0, 2),
+	MUX(0, "mout_clkcmu_rsp_core", mout_clkcmu_rsp_core_p,
+	    MUX_CLKCMU_RSP_CORE, 0, 2),
+	nMUX(0, "mout_clkcmu_trfm_core", mout_clkcmu_trfm_core_p,
+	     MUX_CLKCMU_TRFM_CORE, 0, 2),
+	MUX(0, "mout_clkcmu_vca_ace", mout_clkcmu_vca_ace_p,
+	    MUX_CLKCMU_VCA_ACE, 0, 2),
+	MUX(0, "mout_clkcmu_vca_od", mout_clkcmu_vca_od_p,
+	    MUX_CLKCMU_VCA_OD, 0, 2),
+	MUX(0, "mout_clkcmu_vio_core", mout_clkcmu_vio_core_p,
+	    MUX_CLKCMU_VIO_CORE, 0, 2),
+	nMUX(0, "mout_clkcmu_vip0_core", mout_clkcmu_vip0_core_p,
+	     MUX_CLKCMU_VIP0_CORE, 0, 2),
+	nMUX(0, "mout_clkcmu_vip1_core", mout_clkcmu_vip1_core_p,
+	     MUX_CLKCMU_VIP1_CORE, 0, 2),
+	nMUX(0, "mout_clkcmu_vpp_core", mout_clkcmu_vpp_core_p,
+	     MUX_CLKCMU_VPP_CORE, 0, 2),
+};
+
+static const struct samsung_div_clock cmu_cmu_div_clks[] __initconst = {
+	DIV(DOUT_PLL_SHARED0_DIV2, "dout_pll_shared0_div2",
+	    "mout_clkcmu_pll_shared0", DIV_PLL_SHARED0_DIV2, 0, 1),
+	DIV(DOUT_PLL_SHARED0_DIV3, "dout_pll_shared0_div3",
+	    "mout_clkcmu_pll_shared0", DIV_PLL_SHARED0_DIV3, 0, 2),
+	DIV(DOUT_PLL_SHARED0_DIV4, "dout_pll_shared0_div4",
+	    "dout_pll_shared0_div2", DIV_PLL_SHARED0_DIV4, 0, 1),
+	DIV(DOUT_PLL_SHARED1_DIV2, "dout_pll_shared1_div2",
+	    "mout_clkcmu_pll_shared1", DIV_PLL_SHARED1_DIV2, 0, 1),
+	DIV(DOUT_PLL_SHARED1_DIV3, "dout_pll_shared1_div3",
+	    "mout_clkcmu_pll_shared1", DIV_PLL_SHARED1_DIV3, 0, 2),
+	DIV(DOUT_PLL_SHARED1_DIV4, "dout_pll_shared1_div4",
+	    "dout_pll_shared1_div2", DIV_PLL_SHARED1_DIV4, 0, 1),
+	DIV(DOUT_CLKCMU_BUS_BUS, "dout_clkcmu_bus_bus",
+	    "mout_clkcmu_bus_bus", DIV_CLKCMU_BUS_BUS, 0, 4),
+	DIV(DOUT_CLKCMU_BUS_DLP, "dout_clkcmu_bus_dlp",
+	    "mout_clkcmu_bus_dlp", DIV_CLKCMU_BUS_DLP, 0, 4),
+	DIV(DOUT_CLKCMU_CORE_MAIN, "dout_clkcmu_core_main",
+	    "mout_clkcmu_core_bus", DIV_CLKCMU_CORE_MAIN, 0, 4),
+	DIV(DOUT_CLKCMU_CORE_DLP, "dout_clkcmu_core_dlp",
+	    "mout_clkcmu_core_dlp", DIV_CLKCMU_CORE_DLP, 0, 4),
+	DIV(DOUT_CLKCMU_CPUCL_SWITCH, "dout_clkcmu_cpucl_switch",
+	    "mout_clkcmu_cpucl_switch", DIV_CLKCMU_CPUCL_SWITCH, 0, 3),
+	DIV(DOUT_CLKCMU_FSYS_BUS, "dout_clkcmu_fsys_bus",
+	    "mout_clkcmu_fsys_bus", DIV_CLKCMU_FSYS_BUS, 0, 4),
+	DIV(DOUT_CLKCMU_FSYS_IP, "dout_clkcmu_fsys_ip",
+	    "mout_clkcmu_fsys_ip", DIV_CLKCMU_FSYS_IP, 0, 9),
+	DIV(DOUT_CLKCMU_FSYS_SCAN0, "dout_clkcmu_fsys_scan0",
+	    "mout_clkcmu_fsys_scan0", DIV_CLKCMU_FSYS_SCAN0, 0, 4),
+	DIV(DOUT_CLKCMU_FSYS_SCAN1, "dout_clkcmu_fsys_scan1",
+	    "mout_clkcmu_fsys_scan1", DIV_CLKCMU_FSYS_SCAN1, 0, 4),
+	DIV(DOUT_CLKCMU_IMEM_ACLK, "dout_clkcmu_imem_aclk",
+	    "mout_clkcmu_imem_imem", DIV_CLKCMU_IMEM_ACLK, 0, 4),
+	DIV(DOUT_CLKCMU_IMEM_JPEG, "dout_clkcmu_imem_jpeg",
+	    "mout_clkcmu_imem_jpeg", DIV_CLKCMU_IMEM_JPEG, 0, 4),
+	DIV_F(DOUT_CLKCMU_CDC_CORE, "dout_clkcmu_cdc_core",
+	      "mout_clkcmu_cdc_core", DIV_CLKCMU_CDC_CORE, 0, 4,
+	      CLK_SET_RATE_PARENT, 0),
+	DIV_F(DOUT_CLKCMU_DLP_CORE, "dout_clkcmu_dlp_core",
+	      "mout_clkcmu_dlp_core", DIV_CLKCMU_DLP_CORE, 0, 4,
+	      CLK_SET_RATE_PARENT, 0),
+	DIV(DOUT_CLKCMU_GPU_3D, "dout_clkcmu_gpu_3d",
+	    "mout_clkcmu_3d", DIV_CLKCMU_GPU_3D, 0, 3),
+	DIV(DOUT_CLKCMU_GPU_2D, "dout_clkcmu_gpu_2d",
+	    "mout_clkcmu_2d", DIV_CLKCMU_GPU_2D, 0, 4),
+	DIV(DOUT_CLKCMU_MIF_SWITCH, "dout_clkcmu_mif_switch",
+	    "mout_clkcmu_mif_switch", DIV_CLKCMU_MIF_SWITCH, 0, 4),
+	DIV(DOUT_CLKCMU_MIF_BUSP, "dout_clkcmu_mif_busp",
+	    "mout_clkcmu_mif_busp", DIV_CLKCMU_MIF_BUSP, 0, 3),
+	DIV(DOUT_CLKCMU_PERI_DISP, "dout_clkcmu_peri_disp",
+	    "mout_clkcmu_peri_disp", DIV_CLKCMU_PERI_DISP, 0, 4),
+	DIV(DOUT_CLKCMU_PERI_IP, "dout_clkcmu_peri_ip",
+	    "mout_clkcmu_peri_ip", DIV_CLKCMU_PERI_IP, 0, 4),
+	DIV(DOUT_CLKCMU_PERI_AUDIO, "dout_clkcmu_peri_audio",
+	    "mout_clkcmu_pll_audio", DIV_CLKCMU_PERI_AUDIO, 0, 4),
+	DIV(DOUT_CLKCMU_RSP_CORE, "dout_clkcmu_rsp_core",
+	    "mout_clkcmu_rsp_core", DIV_CLKCMU_RSP_CORE, 0, 4),
+	DIV_F(DOUT_CLKCMU_TRFM_CORE, "dout_clkcmu_trfm_core",
+	      "mout_clkcmu_trfm_core", DIV_CLKCMU_TRFM_CORE, 0, 4,
+	      CLK_SET_RATE_PARENT, 0),
+	DIV(DOUT_CLKCMU_VCA_ACE, "dout_clkcmu_vca_ace",
+	    "mout_clkcmu_vca_ace", DIV_CLKCMU_VCA_ACE, 0, 4),
+	DIV(DOUT_CLKCMU_VCA_OD, "dout_clkcmu_vca_od",
+	    "mout_clkcmu_vca_od", DIV_CLKCMU_VCA_OD, 0, 4),
+	DIV(DOUT_CLKCMU_VIO_CORE, "dout_clkcmu_vio_core",
+	    "mout_clkcmu_vio_core", DIV_CLKCMU_VIO_CORE, 0, 4),
+	DIV(DOUT_CLKCMU_VIO_AUDIO, "dout_clkcmu_vio_audio",
+	    "mout_clkcmu_pll_audio", DIV_CLKCMU_VIO_AUDIO, 0, 4),
+	DIV_F(DOUT_CLKCMU_VIP0_CORE, "dout_clkcmu_vip0_core",
+	      "mout_clkcmu_vip0_core", DIV_CLKCMU_VIP0_CORE, 0, 4,
+	      CLK_SET_RATE_PARENT, 0),
+	DIV_F(DOUT_CLKCMU_VIP1_CORE, "dout_clkcmu_vip1_core",
+	      "mout_clkcmu_vip1_core", DIV_CLKCMU_VIP1_CORE, 0, 4,
+	      CLK_SET_RATE_PARENT, 0),
+	DIV_F(DOUT_CLKCMU_VPP_CORE, "dout_clkcmu_vpp_core",
+	      "mout_clkcmu_vpp_core", DIV_CLKCMU_VPP_CORE, 0, 4,
+	      CLK_SET_RATE_PARENT, 0),
+};
+
+static const struct samsung_cmu_info cmu_cmu_info __initconst = {
+	.pll_clks		= cmu_cmu_pll_clks,
+	.nr_pll_clks		= ARRAY_SIZE(cmu_cmu_pll_clks),
+	.fixed_factor_clks	= cmu_fixed_factor_clks,
+	.nr_fixed_factor_clks	= ARRAY_SIZE(cmu_fixed_factor_clks),
+	.mux_clks		= cmu_cmu_mux_clks,
+	.nr_mux_clks		= ARRAY_SIZE(cmu_cmu_mux_clks),
+	.div_clks		= cmu_cmu_div_clks,
+	.nr_div_clks		= ARRAY_SIZE(cmu_cmu_div_clks),
+	.nr_clk_ids		= CMU_CMU_NR_CLK,
+	.clk_regs		= cmu_cmu_clk_regs,
+	.nr_clk_regs		= ARRAY_SIZE(cmu_cmu_clk_regs),
+};
+
+static void __init artpec8_clk_cmu_cmu_init(struct device_node *np)
+{
+	samsung_cmu_register_one(np, &cmu_cmu_info);
+}
+
+CLK_OF_DECLARE(artpec8_clk_cmu_cmu, "axis,artpec8-cmu-cmu",
+	       artpec8_clk_cmu_cmu_init);
+
 /* Register Offset definitions for CMU_IMEM (0x10010000) */
 #define PLL_CON0_MUX_CLK_IMEM_ACLK_USER			0x0100
 #define PLL_CON0_MUX_CLK_IMEM_JPEG_USER			0x0120
-- 
2.34.1




More information about the linux-arm-kernel mailing list