xref: /linux/drivers/clk/samsung/clk-artpec9.c (revision 0fc8f6200d2313278fbf4539bbab74677c685531)
1*85cc5be6SGyoungBo Min // SPDX-License-Identifier: GPL-2.0-only
2*85cc5be6SGyoungBo Min /*
3*85cc5be6SGyoungBo Min  * Copyright (c) 2025 Samsung Electronics Co., Ltd.
4*85cc5be6SGyoungBo Min  *             https://www.samsung.com
5*85cc5be6SGyoungBo Min  * Copyright (c) 2025  Axis Communications AB.
6*85cc5be6SGyoungBo Min  *             https://www.axis.com
7*85cc5be6SGyoungBo Min  *
8*85cc5be6SGyoungBo Min  * Common Clock Framework support for ARTPEC-9 SoC.
9*85cc5be6SGyoungBo Min  */
10*85cc5be6SGyoungBo Min 
11*85cc5be6SGyoungBo Min #include <linux/clk-provider.h>
12*85cc5be6SGyoungBo Min #include <linux/platform_device.h>
13*85cc5be6SGyoungBo Min #include <dt-bindings/clock/axis,artpec9-clk.h>
14*85cc5be6SGyoungBo Min 
15*85cc5be6SGyoungBo Min #include "clk.h"
16*85cc5be6SGyoungBo Min #include "clk-exynos-arm64.h"
17*85cc5be6SGyoungBo Min 
18*85cc5be6SGyoungBo Min /* NOTE: Must be equal to the last clock ID increased by one */
19*85cc5be6SGyoungBo Min #define CMU_CMU_NR_CLK				(CLK_DOUT_CMU_VIO_AUDIO + 1)
20*85cc5be6SGyoungBo Min #define CMU_BUS_NR_CLK				(CLK_MOUT_BUS_ACLK_USER + 1)
21*85cc5be6SGyoungBo Min #define CMU_CORE_NR_CLK				(CLK_MOUT_CORE_ACLK_USER + 1)
22*85cc5be6SGyoungBo Min #define CMU_CPUCL_NR_CLK			(CLK_GOUT_CPUCL_CSSYS_IPCLKPORT_PCLKDBG + 1)
23*85cc5be6SGyoungBo Min #define CMU_FSYS0_NR_CLK			(CLK_GOUT_FSYS0_PWM_IPCLKPORT_I_PCLK_S0 + 1)
24*85cc5be6SGyoungBo Min #define CMU_FSYS1_NR_CLK			(CLK_GOUT_FSYS1_XHB_USB_IPCLKPORT_CLK + 1)
25*85cc5be6SGyoungBo Min #define CMU_IMEM_NR_CLK				(CLK_GOUT_IMEM_PCLK_TMU0_APBIF + 1)
26*85cc5be6SGyoungBo Min #define CMU_PERI_NR_CLK				(CLK_GOUT_PERI_UART2_SCLK_UART + 1)
27*85cc5be6SGyoungBo Min 
28*85cc5be6SGyoungBo Min /* Register Offset definitions for CMU_CMU (0x12c00000) */
29*85cc5be6SGyoungBo Min #define PLL_LOCKTIME_PLL_AUDIO					0x0000
30*85cc5be6SGyoungBo Min #define PLL_LOCKTIME_PLL_SHARED0				0x0004
31*85cc5be6SGyoungBo Min #define PLL_LOCKTIME_PLL_SHARED1				0x0008
32*85cc5be6SGyoungBo Min #define PLL_CON0_PLL_AUDIO					0x0100
33*85cc5be6SGyoungBo Min #define PLL_CON0_PLL_SHARED0					0x0120
34*85cc5be6SGyoungBo Min #define PLL_CON0_PLL_SHARED1					0x0140
35*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_BUS					0x1000
36*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_CDC_CORE				0x1004
37*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_CORE_MAIN				0x1008
38*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_CPUCL_SWITCH				0x100c
39*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_VIO_AUDIO				0x1010
40*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_DLP_CORE				0x1014
41*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_FSYS0_BUS				0x1018
42*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_FSYS0_IP				0x101c
43*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_FSYS1_BUS				0x1020
44*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_FSYS1_SCAN0				0x1024
45*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_FSYS1_SCAN1				0x1028
46*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_GPU_2D				0x102c
47*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_GPU_3D				0x1030
48*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_IMEM_ACLK				0x1034
49*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_IMEM_CA5				0x1038
50*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_IMEM_JPEG				0x103c
51*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_IMEM_SSS				0x1040
52*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_IPA_CORE				0x1044
53*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_MIF_BUSP				0x1048
54*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_MIF_SWITCH				0x104c
55*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_PERI_DISP				0x1050
56*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_PERI_IP				0x1054
57*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_RSP_CORE				0x1058
58*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_TRFM					0x105c
59*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_VIO_CORE				0x1060
60*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_VIO_CORE_L				0x1064
61*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_VIP0					0x1068
62*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_VIP1					0x106c
63*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLKCMU_VPP_CORE				0x1070
64*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_ADD					0x1800
65*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_BUS					0x1804
66*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_CDC_CORE				0x1808
67*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_CORE_MAIN				0x180c
68*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_CPUCL_SWITCH				0x1810
69*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_DLP_CORE				0x1814
70*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_FSYS0_BUS				0x1818
71*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_FSYS0_IP				0x181c
72*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_FSYS1_BUS				0x1820
73*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_FSYS1_SCAN0				0x1824
74*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_FSYS1_SCAN1				0x1828
75*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_GPU_2D				0x182c
76*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_GPU_3D				0x1830
77*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_IMEM_ACLK				0x1834
78*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_IMEM_CA5				0x1838
79*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_IMEM_JPEG				0x183c
80*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_IMEM_SSS				0x1840
81*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_IPA_CORE				0x1844
82*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_LCPU					0x1848
83*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_MIF_BUSP				0x184c
84*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_MIF_SWITCH				0x1850
85*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_PERI_DISP				0x1854
86*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_PERI_IP				0x1858
87*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_RSP_CORE				0x185c
88*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_TRFM					0x1860
89*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_VIO_AUDIO				0x1864
90*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_VIO_CORE				0x1868
91*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_VIO_CORE_L				0x186c
92*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_VIP0					0x1870
93*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_VIP1					0x1874
94*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLKCMU_VPP_CORE				0x1878
95*85cc5be6SGyoungBo Min #define CLK_CON_DIV_PLL_SHARED0_DIV2				0x187c
96*85cc5be6SGyoungBo Min #define CLK_CON_DIV_PLL_SHARED0_DIV3				0x1880
97*85cc5be6SGyoungBo Min #define CLK_CON_DIV_PLL_SHARED0_DIV4				0x1884
98*85cc5be6SGyoungBo Min #define CLK_CON_DIV_PLL_SHARED1_DIV2				0x1888
99*85cc5be6SGyoungBo Min #define CLK_CON_DIV_PLL_SHARED1_DIV3				0x188c
100*85cc5be6SGyoungBo Min #define CLK_CON_DIV_PLL_SHARED1_DIV4				0x1890
101*85cc5be6SGyoungBo Min 
102*85cc5be6SGyoungBo Min static const unsigned long cmu_cmu_clk_regs[] __initconst = {
103*85cc5be6SGyoungBo Min 	PLL_LOCKTIME_PLL_AUDIO,
104*85cc5be6SGyoungBo Min 	PLL_LOCKTIME_PLL_SHARED0,
105*85cc5be6SGyoungBo Min 	PLL_LOCKTIME_PLL_SHARED1,
106*85cc5be6SGyoungBo Min 	PLL_CON0_PLL_AUDIO,
107*85cc5be6SGyoungBo Min 	PLL_CON0_PLL_SHARED0,
108*85cc5be6SGyoungBo Min 	PLL_CON0_PLL_SHARED1,
109*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_BUS,
110*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_CDC_CORE,
111*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_CORE_MAIN,
112*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_CPUCL_SWITCH,
113*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_DLP_CORE,
114*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_FSYS0_BUS,
115*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_FSYS0_IP,
116*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_FSYS1_BUS,
117*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_FSYS1_SCAN0,
118*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_FSYS1_SCAN1,
119*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_GPU_2D,
120*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_GPU_3D,
121*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_IMEM_ACLK,
122*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_IMEM_CA5,
123*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_IMEM_JPEG,
124*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_IMEM_SSS,
125*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_IPA_CORE,
126*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_MIF_BUSP,
127*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_MIF_SWITCH,
128*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_PERI_DISP,
129*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_PERI_IP,
130*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_RSP_CORE,
131*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_TRFM,
132*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_VIO_CORE,
133*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_VIO_CORE_L,
134*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_VIP0,
135*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_VIP1,
136*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLKCMU_VPP_CORE,
137*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_ADD,
138*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_BUS,
139*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_CDC_CORE,
140*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_CORE_MAIN,
141*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_CPUCL_SWITCH,
142*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_VIO_AUDIO,
143*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_DLP_CORE,
144*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_FSYS0_BUS,
145*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_FSYS0_IP,
146*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_FSYS1_BUS,
147*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_FSYS1_SCAN0,
148*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_FSYS1_SCAN1,
149*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_GPU_2D,
150*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_GPU_3D,
151*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_IMEM_ACLK,
152*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_IMEM_CA5,
153*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_IMEM_JPEG,
154*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_IMEM_SSS,
155*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_IPA_CORE,
156*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_LCPU,
157*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_MIF_BUSP,
158*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_MIF_SWITCH,
159*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_PERI_DISP,
160*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_PERI_IP,
161*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_RSP_CORE,
162*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_TRFM,
163*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_VIO_AUDIO,
164*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_VIO_CORE,
165*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_VIO_CORE_L,
166*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_VIP0,
167*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_VIP1,
168*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLKCMU_VPP_CORE,
169*85cc5be6SGyoungBo Min 	CLK_CON_DIV_PLL_SHARED0_DIV2,
170*85cc5be6SGyoungBo Min 	CLK_CON_DIV_PLL_SHARED0_DIV3,
171*85cc5be6SGyoungBo Min 	CLK_CON_DIV_PLL_SHARED0_DIV4,
172*85cc5be6SGyoungBo Min 	CLK_CON_DIV_PLL_SHARED1_DIV2,
173*85cc5be6SGyoungBo Min 	CLK_CON_DIV_PLL_SHARED1_DIV3,
174*85cc5be6SGyoungBo Min 	CLK_CON_DIV_PLL_SHARED1_DIV4,
175*85cc5be6SGyoungBo Min };
176*85cc5be6SGyoungBo Min 
177*85cc5be6SGyoungBo Min static const struct samsung_pll_rate_table artpec9_pll_audio_rates[] __initconst = {
178*85cc5be6SGyoungBo Min 	PLL_A9FRACO_RATE(25 * MHZ, 589824000U, 94, 1, 3, 6238440),
179*85cc5be6SGyoungBo Min };
180*85cc5be6SGyoungBo Min 
181*85cc5be6SGyoungBo Min static const struct samsung_pll_clock cmu_cmu_pll_clks[] __initconst = {
182*85cc5be6SGyoungBo Min 	PLL(pll_a9fracm, CLK_FOUT_SHARED0_PLL, "fout_pll_shared0", "fin_pll",
183*85cc5be6SGyoungBo Min 	    PLL_LOCKTIME_PLL_SHARED0, PLL_CON0_PLL_SHARED0, NULL),
184*85cc5be6SGyoungBo Min 	PLL(pll_a9fracm, CLK_FOUT_SHARED1_PLL, "fout_pll_shared1", "fin_pll",
185*85cc5be6SGyoungBo Min 	    PLL_LOCKTIME_PLL_SHARED1, PLL_CON0_PLL_SHARED1, NULL),
186*85cc5be6SGyoungBo Min 	PLL(pll_a9fraco, CLK_FOUT_AUDIO_PLL, "fout_pll_audio", "fin_pll",
187*85cc5be6SGyoungBo Min 	    PLL_LOCKTIME_PLL_AUDIO, PLL_CON0_PLL_AUDIO, artpec9_pll_audio_rates),
188*85cc5be6SGyoungBo Min };
189*85cc5be6SGyoungBo Min 
190*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_bus_bus_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div2",
191*85cc5be6SGyoungBo Min 				 "dout_pll_shared1_div3", "dout_pll_shared1_div4" };
192*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_cdc_core_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div3",
193*85cc5be6SGyoungBo Min 				  "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
194*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_core_main_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div2",
195*85cc5be6SGyoungBo Min 				   "dout_pll_shared1_div3", "dout_pll_shared1_div4" };
196*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_cpucl_switch_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div2",
197*85cc5be6SGyoungBo Min 				      "dout_pll_shared0_div3", "dout_pll_shared1_div3" };
198*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_dlp_core_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
199*85cc5be6SGyoungBo Min 				  "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
200*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_fsys0_bus_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
201*85cc5be6SGyoungBo Min 				   "dout_pll_shared1_div4", "dout_pll_shared1_div2" };
202*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_fsys0_ip_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div3",
203*85cc5be6SGyoungBo Min 				  "dout_pll_shared1_div2", "dout_pll_shared0_div3" };
204*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_fsys1_bus_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
205*85cc5be6SGyoungBo Min 				   "dout_pll_shared1_div2", "dout_pll_shared0_div4" };
206*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_fsys1_scan0_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div4" };
207*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_fsys1_scan1_p) = { "dout_pll_shared1_div3", "dout_pll_shared1_div4" };
208*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_gpu_3d_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
209*85cc5be6SGyoungBo Min 				"dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
210*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_gpu_2d_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
211*85cc5be6SGyoungBo Min 				"dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
212*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_imem_aclk_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
213*85cc5be6SGyoungBo Min 				   "dout_pll_shared1_div4", "dout_pll_shared1_div2" };
214*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_imem_ca5_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div2",
215*85cc5be6SGyoungBo Min 				  "dout_pll_shared1_div3", "mout_clk_pll_shared1" };
216*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_imem_jpeg_p) = { "dout_pll_shared0_div2", "dout_pll_shared0_div3",
217*85cc5be6SGyoungBo Min 				   "dout_pll_shared1_div2", "dout_pll_shared1_div3" };
218*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_imem_sss_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div2" };
219*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_ipa_core_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
220*85cc5be6SGyoungBo Min 				  "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
221*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_mif_switch_p) = { "fout_pll_shared1", "mout_clkcmu_pll_shared0",
222*85cc5be6SGyoungBo Min 				    "dout_pll_shared0_div2", "dout_pll_shared0_div3" };
223*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_mif_busp_p) = { "dout_pll_shared1_div3", "dout_pll_shared1_div4",
224*85cc5be6SGyoungBo Min 				  "dout_pll_shared0_div4", "dout_pll_shared0_div2" };
225*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_peri_disp_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
226*85cc5be6SGyoungBo Min 				   "dout_pll_shared1_div4", "dout_pll_shared1_div2" };
227*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_peri_ip_p) = { "fout_pll_fsys1", "dout_pll_shared1_2",
228*85cc5be6SGyoungBo Min 				 "dout_pll_shared1_div4", "dout_pll_shared0_div2" };
229*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_rsp_core_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
230*85cc5be6SGyoungBo Min 				  "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
231*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_trfm_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
232*85cc5be6SGyoungBo Min 			      "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
233*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_vio_core_l_p) = { "dout_pll_shared0_div2", "dout_pll_shared1_div3",
234*85cc5be6SGyoungBo Min 				    "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
235*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_vio_core_p) = { "fout_pll_fsys1", "dout_pll_shared0_div2",
236*85cc5be6SGyoungBo Min 				  "dout_pll_shared1_div3", "dout_pll_shared1_div2" };
237*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_vio_audio_p) = { "fout_pll_audio", "mout_clkcmu_pll_audio" };
238*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_vip0_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
239*85cc5be6SGyoungBo Min 			      "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
240*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_vip1_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
241*85cc5be6SGyoungBo Min 			      "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
242*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_vpp_core_p) = { "dout_pll_shared1_div3", "dout_pll_shared0_div2",
243*85cc5be6SGyoungBo Min 				  "dout_pll_shared1_div2", "mout_clk_pll_fsys1" };
244*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_pll_shared0_p) = { "fin_pll", "fout_pll_shared0" };
245*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_pll_shared1_p) = { "fin_pll", "fout_pll_shared1" };
246*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_pll_audio_p) = { "fin_pll", "fout_pll_audio" };
247*85cc5be6SGyoungBo Min 
248*85cc5be6SGyoungBo Min static const struct samsung_mux_clock cmu_cmu_mux_clks[] __initconst = {
249*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_pll_shared0", mout_clkcmu_pll_shared0_p, PLL_CON0_PLL_SHARED0, 4, 1),
250*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_pll_shared1", mout_clkcmu_pll_shared1_p, PLL_CON0_PLL_SHARED1, 4, 1),
251*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_pll_audio", mout_clkcmu_pll_audio_p, PLL_CON0_PLL_AUDIO, 4, 1),
252*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_bus_bus", mout_clkcmu_bus_bus_p, CLK_CON_MUX_CLKCMU_BUS, 0, 2),
253*85cc5be6SGyoungBo Min 	nMUX(0, "mout_clkcmu_cdc_core", mout_clkcmu_cdc_core_p, CLK_CON_MUX_CLKCMU_CDC_CORE, 0, 2),
254*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_core_main", mout_clkcmu_core_main_p,
255*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_CORE_MAIN, 0, 2),
256*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_cpucl_switch", mout_clkcmu_cpucl_switch_p,
257*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_CPUCL_SWITCH, 0, 2),
258*85cc5be6SGyoungBo Min 	nMUX(0, "mout_clkcmu_dlp_core", mout_clkcmu_dlp_core_p, CLK_CON_MUX_CLKCMU_DLP_CORE, 0, 2),
259*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_fsys0_bus", mout_clkcmu_fsys0_bus_p,
260*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_FSYS0_BUS, 0, 2),
261*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_fsys0_ip", mout_clkcmu_fsys0_ip_p, CLK_CON_MUX_CLKCMU_FSYS0_IP, 0, 2),
262*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_fsys1_bus", mout_clkcmu_fsys1_bus_p,
263*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_FSYS1_BUS, 0, 2),
264*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_fsys1_scan0", mout_clkcmu_fsys1_scan0_p,
265*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_FSYS1_SCAN0, 0, 1),
266*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_fsys1_scan1", mout_clkcmu_fsys1_scan1_p,
267*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_FSYS1_SCAN1, 0, 1),
268*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_gpu_2d", mout_clkcmu_gpu_2d_p, CLK_CON_MUX_CLKCMU_GPU_2D, 0, 2),
269*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_gpu_3d", mout_clkcmu_gpu_3d_p, CLK_CON_MUX_CLKCMU_GPU_3D, 0, 2),
270*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_imem_aclk", mout_clkcmu_imem_aclk_p,
271*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_IMEM_ACLK, 0, 2),
272*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_imem_ca5", mout_clkcmu_imem_ca5_p, CLK_CON_MUX_CLKCMU_IMEM_CA5, 0, 2),
273*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_imem_jpeg", mout_clkcmu_imem_jpeg_p,
274*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_IMEM_JPEG, 0, 2),
275*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_imem_sss", mout_clkcmu_imem_sss_p, CLK_CON_MUX_CLKCMU_IMEM_SSS, 0, 1),
276*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_ipa_core", mout_clkcmu_ipa_core_p, CLK_CON_MUX_CLKCMU_IPA_CORE, 0, 2),
277*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_mif_busp", mout_clkcmu_mif_busp_p, CLK_CON_MUX_CLKCMU_MIF_BUSP, 0, 2),
278*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_mif_switch", mout_clkcmu_mif_switch_p,
279*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_MIF_SWITCH, 0, 2),
280*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_peri_disp", mout_clkcmu_peri_disp_p,
281*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_PERI_DISP, 0, 2),
282*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_peri_ip", mout_clkcmu_peri_ip_p, CLK_CON_MUX_CLKCMU_PERI_IP, 0, 2),
283*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_rsp_core", mout_clkcmu_rsp_core_p, CLK_CON_MUX_CLKCMU_RSP_CORE, 0, 2),
284*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_trfm", mout_clkcmu_trfm_p, CLK_CON_MUX_CLKCMU_TRFM, 0, 2),
285*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_vio_core", mout_clkcmu_vio_core_p, CLK_CON_MUX_CLKCMU_VIO_CORE, 0, 2),
286*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_vio_core_l", mout_clkcmu_vio_core_l_p,
287*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_VIO_CORE_L, 0, 2),
288*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_vio_audio", mout_clkcmu_vio_audio_p,
289*85cc5be6SGyoungBo Min 	    CLK_CON_MUX_CLKCMU_VIO_AUDIO, 0, 1),
290*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_vip0", mout_clkcmu_vip0_p, CLK_CON_MUX_CLKCMU_VIP0, 0, 2),
291*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_vip1", mout_clkcmu_vip1_p, CLK_CON_MUX_CLKCMU_VIP1, 0, 2),
292*85cc5be6SGyoungBo Min 	MUX(0, "mout_clkcmu_vpp_core", mout_clkcmu_vpp_core_p, CLK_CON_MUX_CLKCMU_VPP_CORE, 0, 2),
293*85cc5be6SGyoungBo Min };
294*85cc5be6SGyoungBo Min 
295*85cc5be6SGyoungBo Min static const struct samsung_div_clock cmu_cmu_div_clks[] __initconst = {
296*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_ADD, "dout_clkcmu_add", "gate_clkcmu_add", CLK_CON_DIV_CLKCMU_ADD, 0, 8),
297*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_BUS, "dout_clkcmu_bus",
298*85cc5be6SGyoungBo Min 	    "gate_clkcmu_bus_bus", CLK_CON_DIV_CLKCMU_BUS, 0, 4),
299*85cc5be6SGyoungBo Min 	DIV_F(CLK_DOUT_CMU_CDC_CORE, "dout_clkcmu_cdc_core",
300*85cc5be6SGyoungBo Min 	      "gate_clkcmu_cdc_core", CLK_CON_DIV_CLKCMU_CDC_CORE, 0, 4, CLK_SET_RATE_PARENT, 0),
301*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_CORE_MAIN, "dout_clkcmu_core_main",
302*85cc5be6SGyoungBo Min 	    "gate_clkcmu_core_main", CLK_CON_DIV_CLKCMU_CORE_MAIN, 0, 4),
303*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_CPUCL_SWITCH, "dout_clkcmu_cpucl_switch",
304*85cc5be6SGyoungBo Min 	    "gate_clkcmu_cpucl_switch", CLK_CON_DIV_CLKCMU_CPUCL_SWITCH, 0, 3),
305*85cc5be6SGyoungBo Min 	DIV_F(CLK_DOUT_CMU_DLP_CORE, "dout_clkcmu_dlp_core",
306*85cc5be6SGyoungBo Min 	      "gate_clkcmu_dlp_core", CLK_CON_DIV_CLKCMU_DLP_CORE, 0, 4, CLK_SET_RATE_PARENT, 0),
307*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_FSYS0_BUS, "dout_clkcmu_fsys0_bus",
308*85cc5be6SGyoungBo Min 	    "gate_clkcmu_fsys0_bus", CLK_CON_DIV_CLKCMU_FSYS0_BUS, 0, 4),
309*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_FSYS0_IP, "dout_clkcmu_fsys0_ip",
310*85cc5be6SGyoungBo Min 	    "gate_clkcmu_fsys0_ip", CLK_CON_DIV_CLKCMU_FSYS0_IP, 0, 9),
311*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_FSYS1_BUS, "dout_clkcmu_fsys1_bus",
312*85cc5be6SGyoungBo Min 	    "gate_clkcmu_fsys1_bus", CLK_CON_DIV_CLKCMU_FSYS1_BUS, 0, 4),
313*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_FSYS1_SCAN0, "dout_clkcmu_fsys1_scan0",
314*85cc5be6SGyoungBo Min 	    "gate_clkcmu_fsys1_scan0", CLK_CON_DIV_CLKCMU_FSYS1_SCAN0, 0, 4),
315*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_FSYS1_SCAN1, "dout_clkcmu_fsys1_scan1",
316*85cc5be6SGyoungBo Min 	    "gate_clkcmu_fsys1_scan1", CLK_CON_DIV_CLKCMU_FSYS1_SCAN1, 0, 4),
317*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_GPU_2D, "dout_clkcmu_gpu_2d",
318*85cc5be6SGyoungBo Min 	    "gate_clkcmu_gpu_2d", CLK_CON_DIV_CLKCMU_GPU_2D, 0, 4),
319*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_GPU_3D, "dout_clkcmu_gpu_3d",
320*85cc5be6SGyoungBo Min 	    "gate_clkcmu_gpu_3d", CLK_CON_DIV_CLKCMU_GPU_3D, 0, 4),
321*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_IMEM_ACLK, "dout_clkcmu_imem_aclk",
322*85cc5be6SGyoungBo Min 	    "gate_clkcmu_imem_aclk", CLK_CON_DIV_CLKCMU_IMEM_ACLK, 0, 4),
323*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_IMEM_CA5, "dout_clkcmu_imem_ca5",
324*85cc5be6SGyoungBo Min 	    "gate_clkcmu_imem_ca5", CLK_CON_DIV_CLKCMU_IMEM_CA5, 0, 4),
325*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_IMEM_JPEG, "dout_clkcmu_imem_jpeg",
326*85cc5be6SGyoungBo Min 	    "gate_clkcmu_imem_jpeg", CLK_CON_DIV_CLKCMU_IMEM_JPEG, 0, 4),
327*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_IMEM_SSS, "dout_clkcmu_imem_sss",
328*85cc5be6SGyoungBo Min 	    "gate_clkcmu_imem_sss", CLK_CON_DIV_CLKCMU_IMEM_SSS, 0, 4),
329*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_IPA_CORE, "dout_clkcmu_ipa_core",
330*85cc5be6SGyoungBo Min 	    "gate_clkcmu_ipa_core", CLK_CON_DIV_CLKCMU_IPA_CORE, 0, 4),
331*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_LCPU, "dout_clkcmu_lcpu",
332*85cc5be6SGyoungBo Min 	    "gate_clkcmu_lcpu", CLK_CON_DIV_CLKCMU_LCPU, 0, 4),
333*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_MIF_BUSP, "dout_clkcmu_mif_busp",
334*85cc5be6SGyoungBo Min 	    "gate_clkcmu_mif_busp", CLK_CON_DIV_CLKCMU_MIF_BUSP, 0, 3),
335*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_MIF_SWITCH, "dout_clkcmu_mif_switch",
336*85cc5be6SGyoungBo Min 	    "gate_clkcmu_mif_switch", CLK_CON_DIV_CLKCMU_MIF_SWITCH, 0, 4),
337*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_PERI_DISP, "dout_clkcmu_peri_disp",
338*85cc5be6SGyoungBo Min 	    "gate_clkcmu_peri_disp", CLK_CON_DIV_CLKCMU_PERI_DISP, 0, 4),
339*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_PERI_IP, "dout_clkcmu_peri_ip",
340*85cc5be6SGyoungBo Min 	    "gate_clkcmu_peri_ip", CLK_CON_DIV_CLKCMU_PERI_IP, 0, 4),
341*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_RSP_CORE, "dout_clkcmu_rsp_core",
342*85cc5be6SGyoungBo Min 	    "gate_clkcmu_rsp_core", CLK_CON_DIV_CLKCMU_RSP_CORE, 0, 4),
343*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_TRFM, "dout_clkcmu_trfm",
344*85cc5be6SGyoungBo Min 	    "gate_clkcmu_trfm", CLK_CON_DIV_CLKCMU_TRFM, 0, 4),
345*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_VIO_CORE, "dout_clkcmu_vio_core",
346*85cc5be6SGyoungBo Min 	    "gate_clkcmu_vio_core", CLK_CON_DIV_CLKCMU_VIO_CORE, 0, 4),
347*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_VIO_CORE_L, "dout_clkcmu_vio_core_l",
348*85cc5be6SGyoungBo Min 	    "gate_clkcmu_vio_core_l", CLK_CON_DIV_CLKCMU_VIO_CORE_L, 0, 4),
349*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_VIO_AUDIO, "dout_clkcmu_vio_audio",
350*85cc5be6SGyoungBo Min 	    "gate_clkcmu_vio_audio", CLK_CON_DIV_CLKCMU_VIO_AUDIO, 0, 4),
351*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_VIP0, "dout_clkcmu_vip0",
352*85cc5be6SGyoungBo Min 	    "gate_clkcmu_vip0", CLK_CON_DIV_CLKCMU_VIP0, 0, 4),
353*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_VIP1, "dout_clkcmu_vip1",
354*85cc5be6SGyoungBo Min 	    "gate_clkcmu_vip1", CLK_CON_DIV_CLKCMU_VIP1, 0, 4),
355*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CMU_VPP_CORE, "dout_clkcmu_vpp_core",
356*85cc5be6SGyoungBo Min 	    "gate_clkcmu_vpp_core", CLK_CON_DIV_CLKCMU_VPP_CORE, 0, 4),
357*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_SHARED0_DIV2, "dout_pll_shared0_div2",
358*85cc5be6SGyoungBo Min 	    "mout_clkcmu_pll_shared0", CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1),
359*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_SHARED0_DIV3, "dout_pll_shared0_div3",
360*85cc5be6SGyoungBo Min 	    "mout_clkcmu_pll_shared0", CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2),
361*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_SHARED0_DIV4, "dout_pll_shared0_div4",
362*85cc5be6SGyoungBo Min 	    "dout_pll_shared0_div2", CLK_CON_DIV_PLL_SHARED0_DIV4, 0, 1),
363*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_SHARED1_DIV2, "dout_pll_shared1_div2",
364*85cc5be6SGyoungBo Min 	    "mout_clkcmu_pll_shared1", CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1),
365*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_SHARED1_DIV3, "dout_pll_shared1_div3",
366*85cc5be6SGyoungBo Min 	    "mout_clkcmu_pll_shared1", CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2),
367*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_SHARED1_DIV4, "dout_pll_shared1_div4",
368*85cc5be6SGyoungBo Min 	    "dout_pll_shared1_div2", CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1),
369*85cc5be6SGyoungBo Min };
370*85cc5be6SGyoungBo Min 
371*85cc5be6SGyoungBo Min static const struct samsung_cmu_info cmu_cmu_info __initconst = {
372*85cc5be6SGyoungBo Min 	.pll_clks		= cmu_cmu_pll_clks,
373*85cc5be6SGyoungBo Min 	.nr_pll_clks		= ARRAY_SIZE(cmu_cmu_pll_clks),
374*85cc5be6SGyoungBo Min 	.mux_clks		= cmu_cmu_mux_clks,
375*85cc5be6SGyoungBo Min 	.nr_mux_clks		= ARRAY_SIZE(cmu_cmu_mux_clks),
376*85cc5be6SGyoungBo Min 	.div_clks		= cmu_cmu_div_clks,
377*85cc5be6SGyoungBo Min 	.nr_div_clks		= ARRAY_SIZE(cmu_cmu_div_clks),
378*85cc5be6SGyoungBo Min 	.nr_clk_ids		= CMU_CMU_NR_CLK,
379*85cc5be6SGyoungBo Min 	.clk_regs		= cmu_cmu_clk_regs,
380*85cc5be6SGyoungBo Min 	.nr_clk_regs		= ARRAY_SIZE(cmu_cmu_clk_regs),
381*85cc5be6SGyoungBo Min };
382*85cc5be6SGyoungBo Min 
383*85cc5be6SGyoungBo Min /* Register Offset definitions for CMU_BUS (0x13410000) */
384*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_BUS_ACLK_USER				0x0100
385*85cc5be6SGyoungBo Min 
386*85cc5be6SGyoungBo Min static const unsigned long cmu_bus_clk_regs[] __initconst = {
387*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_BUS_ACLK_USER,
388*85cc5be6SGyoungBo Min };
389*85cc5be6SGyoungBo Min 
390*85cc5be6SGyoungBo Min PNAME(mout_clk_bus_aclk_user_p) = {"fin_pll", "dout_clkcmu_bus_bus",};
391*85cc5be6SGyoungBo Min 
392*85cc5be6SGyoungBo Min static const struct samsung_mux_clock cmu_bus_mux_clks[] __initconst = {
393*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_BUS_ACLK_USER, "mout_clk_bus_aclk_user", mout_clk_bus_aclk_user_p,
394*85cc5be6SGyoungBo Min 	    PLL_CON0_MUX_CLK_BUS_ACLK_USER, 4, 1),
395*85cc5be6SGyoungBo Min };
396*85cc5be6SGyoungBo Min 
397*85cc5be6SGyoungBo Min static const struct samsung_cmu_info cmu_bus_info __initconst = {
398*85cc5be6SGyoungBo Min 	.mux_clks		= cmu_bus_mux_clks,
399*85cc5be6SGyoungBo Min 	.nr_mux_clks		= ARRAY_SIZE(cmu_bus_mux_clks),
400*85cc5be6SGyoungBo Min 	.nr_clk_ids		= CMU_BUS_NR_CLK,
401*85cc5be6SGyoungBo Min 	.clk_regs		= cmu_bus_clk_regs,
402*85cc5be6SGyoungBo Min 	.nr_clk_regs		= ARRAY_SIZE(cmu_bus_clk_regs),
403*85cc5be6SGyoungBo Min };
404*85cc5be6SGyoungBo Min 
405*85cc5be6SGyoungBo Min /* Register Offset definitions for CMU_CORE (0x12c10000) */
406*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_CORE_ACLK_USER				0x0100
407*85cc5be6SGyoungBo Min 
408*85cc5be6SGyoungBo Min static const unsigned long cmu_core_clk_regs[] __initconst = {
409*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_CORE_ACLK_USER,
410*85cc5be6SGyoungBo Min };
411*85cc5be6SGyoungBo Min 
412*85cc5be6SGyoungBo Min PNAME(mout_clk_core_aclk_user_p) = {"fin_pll", "dout_clkcmu_core_main",};
413*85cc5be6SGyoungBo Min 
414*85cc5be6SGyoungBo Min static const struct samsung_mux_clock cmu_core_mux_clks[] __initconst = {
415*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_CORE_ACLK_USER, "mout_clk_core_aclk_user", mout_clk_core_aclk_user_p,
416*85cc5be6SGyoungBo Min 	    PLL_CON0_MUX_CLK_CORE_ACLK_USER, 4, 1),
417*85cc5be6SGyoungBo Min };
418*85cc5be6SGyoungBo Min 
419*85cc5be6SGyoungBo Min static const struct samsung_cmu_info cmu_core_info __initconst = {
420*85cc5be6SGyoungBo Min 	.mux_clks		= cmu_core_mux_clks,
421*85cc5be6SGyoungBo Min 	.nr_mux_clks		= ARRAY_SIZE(cmu_core_mux_clks),
422*85cc5be6SGyoungBo Min 	.nr_clk_ids		= CMU_CORE_NR_CLK,
423*85cc5be6SGyoungBo Min 	.clk_regs		= cmu_core_clk_regs,
424*85cc5be6SGyoungBo Min 	.nr_clk_regs		= ARRAY_SIZE(cmu_core_clk_regs),
425*85cc5be6SGyoungBo Min };
426*85cc5be6SGyoungBo Min 
427*85cc5be6SGyoungBo Min /* Register Offset definitions for CMU_CPUCL (0x12810000) */
428*85cc5be6SGyoungBo Min #define PLL_LOCKTIME_PLL0_CPUCL					0x0000
429*85cc5be6SGyoungBo Min #define PLL_LOCKTIME_PLL1_CPUCL					0x0008
430*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLKCMU_CPUCL_SWITCH_SCU_USER		0x0100
431*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLKCMU_CPUCL_SWITCH_USER			0x0120
432*85cc5be6SGyoungBo Min #define PLL_CON0_PLL0_CPUCL					0x0140
433*85cc5be6SGyoungBo Min #define PLL_CON0_PLL1_CPUCL					0x0160
434*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLK_CPUCL_PLL				0x1000
435*85cc5be6SGyoungBo Min #define CLK_CON_MUX_CLK_CPUCL_PLL_SCU				0x1004
436*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_CPUCL_CLUSTER_PERIPHCLK			0x1800
437*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_CPUCL_CLUSTER_GICCLK			0x1804
438*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_CPUCL_CLUSTER_PCLK			0x1808
439*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_CPUCL_CMUREF				0x180c
440*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_CPUCL_CPU				0x1810
441*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_CPUCL_CLUSTER_ATCLK			0x1818
442*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_CPUCL_CLUSTER_SCU			0x181c
443*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_CPUCL_DBG				0x1820
444*85cc5be6SGyoungBo Min #define CLK_CON_GAT_CLK_CLUSTER_CPU				0x2008
445*85cc5be6SGyoungBo Min #define CLK_CON_GAT_CLK_CPUCL_SHORTSTOP				0x200c
446*85cc5be6SGyoungBo Min #define CSSYS_IPCLKPORT_ATCLK					0x2070
447*85cc5be6SGyoungBo Min #define CSSYS_IPCLKPORT_PCLKDBG					0x2074
448*85cc5be6SGyoungBo Min #define DMYQCH_CON_CSSYS_QCH					0x3000
449*85cc5be6SGyoungBo Min #define DMYQCH_CON_CLUSTER_QCH_CORECLK0				0x3104
450*85cc5be6SGyoungBo Min #define DMYQCH_CON_CLUSTER_QCH_CORECLK1				0x3108
451*85cc5be6SGyoungBo Min #define DMYQCH_CON_CLUSTER_QCH_CORECLK2				0x310c
452*85cc5be6SGyoungBo Min #define DMYQCH_CON_CLUSTER_QCH_CORECLK3				0x3110
453*85cc5be6SGyoungBo Min #define DMYQCH_CON_CLUSTER_QCH_CORECLK4				0x3114
454*85cc5be6SGyoungBo Min #define DMYQCH_CON_CLUSTER_QCH_CORECLK5				0x3118
455*85cc5be6SGyoungBo Min #define DMYQCH_CON_CLUSTER_QCH_PERIPHCLK			0x311c
456*85cc5be6SGyoungBo Min 
457*85cc5be6SGyoungBo Min static const unsigned long cmu_cpucl_clk_regs[] __initconst = {
458*85cc5be6SGyoungBo Min 	PLL_LOCKTIME_PLL0_CPUCL,
459*85cc5be6SGyoungBo Min 	PLL_LOCKTIME_PLL1_CPUCL,
460*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLKCMU_CPUCL_SWITCH_SCU_USER,
461*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLKCMU_CPUCL_SWITCH_USER,
462*85cc5be6SGyoungBo Min 	PLL_CON0_PLL0_CPUCL,
463*85cc5be6SGyoungBo Min 	PLL_CON0_PLL1_CPUCL,
464*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLK_CPUCL_PLL,
465*85cc5be6SGyoungBo Min 	CLK_CON_MUX_CLK_CPUCL_PLL_SCU,
466*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_CPUCL_CLUSTER_PERIPHCLK,
467*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_CPUCL_CLUSTER_GICCLK,
468*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_CPUCL_CLUSTER_PCLK,
469*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_CPUCL_CMUREF,
470*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_CPUCL_CPU,
471*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_CPUCL_CLUSTER_ATCLK,
472*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_CPUCL_CLUSTER_SCU,
473*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_CPUCL_DBG,
474*85cc5be6SGyoungBo Min 	CLK_CON_GAT_CLK_CLUSTER_CPU,
475*85cc5be6SGyoungBo Min 	CLK_CON_GAT_CLK_CPUCL_SHORTSTOP,
476*85cc5be6SGyoungBo Min 	CSSYS_IPCLKPORT_ATCLK,
477*85cc5be6SGyoungBo Min 	CSSYS_IPCLKPORT_PCLKDBG,
478*85cc5be6SGyoungBo Min 	DMYQCH_CON_CSSYS_QCH,
479*85cc5be6SGyoungBo Min 	DMYQCH_CON_CLUSTER_QCH_CORECLK0,
480*85cc5be6SGyoungBo Min 	DMYQCH_CON_CLUSTER_QCH_CORECLK1,
481*85cc5be6SGyoungBo Min 	DMYQCH_CON_CLUSTER_QCH_CORECLK2,
482*85cc5be6SGyoungBo Min 	DMYQCH_CON_CLUSTER_QCH_CORECLK3,
483*85cc5be6SGyoungBo Min 	DMYQCH_CON_CLUSTER_QCH_CORECLK4,
484*85cc5be6SGyoungBo Min 	DMYQCH_CON_CLUSTER_QCH_CORECLK5,
485*85cc5be6SGyoungBo Min 	DMYQCH_CON_CLUSTER_QCH_PERIPHCLK,
486*85cc5be6SGyoungBo Min };
487*85cc5be6SGyoungBo Min 
488*85cc5be6SGyoungBo Min /* rate_table must be in descending order  */
489*85cc5be6SGyoungBo Min static const struct samsung_pll_rate_table artpec9_pll_cpucl_rates[] __initconst = {
490*85cc5be6SGyoungBo Min 	PLL_35XX_RATE(25 * MHZ, 1400000000U, 56, 1, 0),
491*85cc5be6SGyoungBo Min 	PLL_35XX_RATE(25 * MHZ, 1100000000U, 44, 1, 0),
492*85cc5be6SGyoungBo Min 	PLL_35XX_RATE(25 * MHZ,  850000000U, 34, 1, 0),
493*85cc5be6SGyoungBo Min };
494*85cc5be6SGyoungBo Min 
495*85cc5be6SGyoungBo Min static const struct samsung_pll_clock cmu_cpucl_pll_clks[] __initconst = {
496*85cc5be6SGyoungBo Min 	PLL(pll_a9fracm, CLK_FOUT_CPUCL_PLL0, "fout_pll0_cpucl", "fin_pll",
497*85cc5be6SGyoungBo Min 	    PLL_LOCKTIME_PLL0_CPUCL, PLL_CON0_PLL0_CPUCL, artpec9_pll_cpucl_rates),
498*85cc5be6SGyoungBo Min 	PLL(pll_a9fracm, CLK_FOUT_CPUCL_PLL1, "fout_pll1_cpucl", "fin_pll",
499*85cc5be6SGyoungBo Min 	    PLL_LOCKTIME_PLL1_CPUCL, PLL_CON0_PLL1_CPUCL, artpec9_pll_cpucl_rates),
500*85cc5be6SGyoungBo Min };
501*85cc5be6SGyoungBo Min 
502*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_cpucl_switch_scu_user_p) = { "fin_pll", "dout_clkcmu_cpucl_switch" };
503*85cc5be6SGyoungBo Min PNAME(mout_clkcmu_cpucl_switch_user_p) = { "fin_pll", "dout_clkcmu_cpucl_switch" };
504*85cc5be6SGyoungBo Min PNAME(mout_pll0_cpucl_p) = { "fin_pll", "fout_pll0_cpucl" };
505*85cc5be6SGyoungBo Min PNAME(mout_clk_cpucl_pll0_p) = { "mout_pll0_cpucl", "mout_clkcmu_cpucl_switch_user" };
506*85cc5be6SGyoungBo Min PNAME(mout_pll1_cpucl_p) = { "fin_pll", "fout_pll1_cpucl" };
507*85cc5be6SGyoungBo Min PNAME(mout_clk_cpucl_pll_scu_p) = { "mout_pll1_cpucl", "mout_clkcmu_cpucl_switch_scu_user" };
508*85cc5be6SGyoungBo Min 
509*85cc5be6SGyoungBo Min static const struct samsung_mux_clock cmu_cpucl_mux_clks[] __initconst = {
510*85cc5be6SGyoungBo Min 	MUX_F(0, "mout_pll0_cpucl", mout_pll0_cpucl_p,
511*85cc5be6SGyoungBo Min 	      PLL_CON0_PLL0_CPUCL, 4, 1, CLK_SET_RATE_PARENT | CLK_RECALC_NEW_RATES, 0),
512*85cc5be6SGyoungBo Min 	MUX_F(0, "mout_pll1_cpucl", mout_pll1_cpucl_p,
513*85cc5be6SGyoungBo Min 	      PLL_CON0_PLL1_CPUCL, 4, 1, CLK_SET_RATE_PARENT | CLK_RECALC_NEW_RATES, 0),
514*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_CPUCL_SWITCH_SCU_USER, "mout_clkcmu_cpucl_switch_scu_user",
515*85cc5be6SGyoungBo Min 	    mout_clkcmu_cpucl_switch_scu_user_p, PLL_CON0_MUX_CLKCMU_CPUCL_SWITCH_SCU_USER, 4, 1),
516*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_CPUCL_SWITCH_USER, "mout_clkcmu_cpucl_switch_user",
517*85cc5be6SGyoungBo Min 	    mout_clkcmu_cpucl_switch_user_p, PLL_CON0_MUX_CLKCMU_CPUCL_SWITCH_USER, 4, 1),
518*85cc5be6SGyoungBo Min 	MUX_F(CLK_MOUT_CPUCL_PLL0, "mout_clk_cpucl_pll0",
519*85cc5be6SGyoungBo Min 	      mout_clk_cpucl_pll0_p, CLK_CON_MUX_CLK_CPUCL_PLL, 0, 1, CLK_SET_RATE_PARENT, 0),
520*85cc5be6SGyoungBo Min 	MUX_F(CLK_MOUT_CPUCL_PLL_SCU, "mout_clk_cpucl_pll_scu", mout_clk_cpucl_pll_scu_p,
521*85cc5be6SGyoungBo Min 	      CLK_CON_MUX_CLK_CPUCL_PLL_SCU, 0, 1, CLK_SET_RATE_PARENT, 0),
522*85cc5be6SGyoungBo Min };
523*85cc5be6SGyoungBo Min 
524*85cc5be6SGyoungBo Min static const struct samsung_fixed_factor_clock cpucl_ffactor_clks[] __initconst = {
525*85cc5be6SGyoungBo Min 	FFACTOR(CLK_DOUT_CPUCL_CPU, "dout_clk_cpucl_cpu",
526*85cc5be6SGyoungBo Min 		"mout_clk_cpucl_pll0", 1, 1, CLK_SET_RATE_PARENT),
527*85cc5be6SGyoungBo Min };
528*85cc5be6SGyoungBo Min 
529*85cc5be6SGyoungBo Min static const struct samsung_div_clock cmu_cpucl_div_clks[] __initconst = {
530*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CPUCL_CLUSTER_PERIPHCLK, "dout_clk_cluster_periphclk",
531*85cc5be6SGyoungBo Min 	    "clk_con_gat_clk_cluster_cpu", CLK_CON_DIV_CLK_CPUCL_CLUSTER_PERIPHCLK, 0, 4),
532*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CPUCL_CLUSTER_GICCLK, "dout_clk_cluster_gicclk",
533*85cc5be6SGyoungBo Min 	    "clk_con_gat_clk_cluster_cpu", CLK_CON_DIV_CLK_CPUCL_CLUSTER_GICCLK, 0, 4),
534*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CPUCL_CLUSTER_PCLK, "dout_clk_cluster_pclk",
535*85cc5be6SGyoungBo Min 	    "clk_con_gat_clk_cluster_cpu", CLK_CON_DIV_CLK_CPUCL_CLUSTER_PCLK, 0, 4),
536*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CPUCL_CMUREF, "dout_clk_cpucl_cmuref",
537*85cc5be6SGyoungBo Min 	    "dout_clk_cpucl_cpu", CLK_CON_DIV_CLK_CPUCL_CMUREF, 0, 3),
538*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CPUCL_CLUSTER_ATCLK, "dout_clk_cluster_atclk",
539*85cc5be6SGyoungBo Min 	    "clk_con_gat_clk_cluster_cpu", CLK_CON_DIV_CLK_CPUCL_CLUSTER_ATCLK, 0, 4),
540*85cc5be6SGyoungBo Min 	DIV_F(CLK_DOUT_CPUCL_CLUSTER_SCU, "dout_clk_cluster_scu", "mout_clk_cpucl_pll_scu",
541*85cc5be6SGyoungBo Min 	      CLK_CON_DIV_CLK_CPUCL_CLUSTER_SCU, 0, 4, CLK_SET_RATE_PARENT, 0),
542*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_CPUCL_DBG, "dout_clk_cpucl_dbg",
543*85cc5be6SGyoungBo Min 	    "dout_clk_cpucl_cpu", CLK_CON_DIV_CLK_CPUCL_DBG, 0, 4),
544*85cc5be6SGyoungBo Min };
545*85cc5be6SGyoungBo Min 
546*85cc5be6SGyoungBo Min static const struct samsung_gate_clock cmu_cpucl_gate_clks[] __initconst = {
547*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_CPUCL_CLUSTER_CPU, "clk_con_gat_clk_cluster_cpu",
548*85cc5be6SGyoungBo Min 	     "clk_con_gat_clk_cpucl_shortstop", CLK_CON_GAT_CLK_CLUSTER_CPU, 21,
549*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
550*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_CPUCL_SHORTSTOP, "clk_con_gat_clk_cpucl_shortstop", "dout_clk_cpucl_cpu",
551*85cc5be6SGyoungBo Min 	     CLK_CON_GAT_CLK_CPUCL_SHORTSTOP, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
552*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_CPUCL_CSSYS_IPCLKPORT_ATCLK, "cssys_ipclkport_atclk", "dout_clk_cpucl_dbg",
553*85cc5be6SGyoungBo Min 	     CSSYS_IPCLKPORT_ATCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
554*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_CPUCL_CSSYS_IPCLKPORT_PCLKDBG, "cssys_ipclkport_pclkdbg",
555*85cc5be6SGyoungBo Min 	     "dout_clk_cpucl_dbg", CSSYS_IPCLKPORT_PCLKDBG, 21,
556*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
557*85cc5be6SGyoungBo Min };
558*85cc5be6SGyoungBo Min 
559*85cc5be6SGyoungBo Min static const struct samsung_cmu_info cmu_cpucl_info __initconst = {
560*85cc5be6SGyoungBo Min 	.pll_clks		= cmu_cpucl_pll_clks,
561*85cc5be6SGyoungBo Min 	.nr_pll_clks		= ARRAY_SIZE(cmu_cpucl_pll_clks),
562*85cc5be6SGyoungBo Min 	.fixed_factor_clks	= cpucl_ffactor_clks,
563*85cc5be6SGyoungBo Min 	.nr_fixed_factor_clks	= ARRAY_SIZE(cpucl_ffactor_clks),
564*85cc5be6SGyoungBo Min 	.mux_clks		= cmu_cpucl_mux_clks,
565*85cc5be6SGyoungBo Min 	.nr_mux_clks		= ARRAY_SIZE(cmu_cpucl_mux_clks),
566*85cc5be6SGyoungBo Min 	.div_clks		= cmu_cpucl_div_clks,
567*85cc5be6SGyoungBo Min 	.nr_div_clks		= ARRAY_SIZE(cmu_cpucl_div_clks),
568*85cc5be6SGyoungBo Min 	.gate_clks              = cmu_cpucl_gate_clks,
569*85cc5be6SGyoungBo Min 	.nr_gate_clks           = ARRAY_SIZE(cmu_cpucl_gate_clks),
570*85cc5be6SGyoungBo Min 	.nr_clk_ids		= CMU_CPUCL_NR_CLK,
571*85cc5be6SGyoungBo Min 	.clk_regs		= cmu_cpucl_clk_regs,
572*85cc5be6SGyoungBo Min 	.nr_clk_regs		= ARRAY_SIZE(cmu_cpucl_clk_regs),
573*85cc5be6SGyoungBo Min };
574*85cc5be6SGyoungBo Min 
575*85cc5be6SGyoungBo Min /* Register Offset definitions for CMU_FSYS0 (0x14410000) */
576*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_FSYS0_BUS_USER				0x0100
577*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_FSYS0_IP_USER				0x0120
578*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_FSYS0_MAIN_USER			0x0140
579*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_125				0x1800
580*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_ADC				0x1804
581*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_BUS_300				0x1808
582*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_EQOS0				0x1814
583*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_EQOS1				0x1818
584*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_EQOS_250				0x181C
585*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_MMC_CARD0				0x1820
586*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_MMC_CARD1				0x1824
587*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_MMC_CARD2				0x1828
588*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_QSPI				0x182c
589*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS0_SFMC_NAND				0x1830
590*85cc5be6SGyoungBo Min #define CLK_CON_FSYS0_I2C0_IPCLKPORT_I_PCLK			0x2040
591*85cc5be6SGyoungBo Min #define CLK_CON_FSYS0_I2C1_IPCLKPORT_I_PCLK			0x2044
592*85cc5be6SGyoungBo Min #define CLK_CON_MMC0_IPCLKPORT_I_ACLK				0x2078
593*85cc5be6SGyoungBo Min #define CLK_CON_MMC1_IPCLKPORT_I_ACLK				0x2080
594*85cc5be6SGyoungBo Min #define CLK_CON_MMC2_IPCLKPORT_I_ACLK				0x2088
595*85cc5be6SGyoungBo Min #define CLK_CON_PWM_IPCLKPORT_I_PCLK_S0				0x2090
596*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_ADC_WRAP_QCH				0x3000
597*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_EQOS_TOP0_QCH			0x3004
598*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_EQOS_TOP1_QCH			0x3008
599*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_FSYS0_I3C0_QCH			0x3010
600*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_FSYS0_I3C1_QCH			0x3014
601*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_MMC0_QCH				0x3018
602*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_MMC1_QCH				0x301c
603*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_MMC2_QCH				0x3020
604*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_QSPI_QCH				0x3024
605*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_SFMC_QCH				0x3028
606*85cc5be6SGyoungBo Min 
607*85cc5be6SGyoungBo Min static const unsigned long cmu_fsys0_clk_regs[] __initconst = {
608*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_FSYS0_BUS_USER,
609*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_FSYS0_IP_USER,
610*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_FSYS0_MAIN_USER,
611*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_125,
612*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_ADC,
613*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_BUS_300,
614*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_EQOS0,
615*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_EQOS1,
616*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_EQOS_250,
617*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_MMC_CARD0,
618*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_MMC_CARD1,
619*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_MMC_CARD2,
620*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_QSPI,
621*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS0_SFMC_NAND,
622*85cc5be6SGyoungBo Min 	CLK_CON_FSYS0_I2C0_IPCLKPORT_I_PCLK,
623*85cc5be6SGyoungBo Min 	CLK_CON_FSYS0_I2C1_IPCLKPORT_I_PCLK,
624*85cc5be6SGyoungBo Min 	CLK_CON_MMC0_IPCLKPORT_I_ACLK,
625*85cc5be6SGyoungBo Min 	CLK_CON_MMC1_IPCLKPORT_I_ACLK,
626*85cc5be6SGyoungBo Min 	CLK_CON_MMC2_IPCLKPORT_I_ACLK,
627*85cc5be6SGyoungBo Min 	CLK_CON_PWM_IPCLKPORT_I_PCLK_S0,
628*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_ADC_WRAP_QCH,
629*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_EQOS_TOP0_QCH,
630*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_EQOS_TOP1_QCH,
631*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_FSYS0_I3C0_QCH,
632*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_FSYS0_I3C1_QCH,
633*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_MMC0_QCH,
634*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_MMC1_QCH,
635*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_MMC2_QCH,
636*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_QSPI_QCH,
637*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_SFMC_QCH,
638*85cc5be6SGyoungBo Min };
639*85cc5be6SGyoungBo Min 
640*85cc5be6SGyoungBo Min PNAME(mout_fsys0_bus_user_p) = { "fin_pll", "dout_clkcmu_fsys0_bus" };
641*85cc5be6SGyoungBo Min PNAME(mout_fsys0_ip_user_p) = { "fin_pll", "dout_clkcmu_fsys0_ip" };
642*85cc5be6SGyoungBo Min PNAME(mout_fsys0_main_user_p) = { "fin_pll", "fout_pll_fsys1" };
643*85cc5be6SGyoungBo Min 
644*85cc5be6SGyoungBo Min static const struct samsung_mux_clock cmu_fsys0_mux_clks[] __initconst = {
645*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_FSYS0_BUS_USER, "mout_fsys0_bus_user",
646*85cc5be6SGyoungBo Min 	    mout_fsys0_bus_user_p, PLL_CON0_MUX_CLK_FSYS0_BUS_USER, 4, 1),
647*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_FSYS0_IP_USER, "mout_fsys0_ip_user",
648*85cc5be6SGyoungBo Min 	    mout_fsys0_ip_user_p, PLL_CON0_MUX_CLK_FSYS0_IP_USER, 4, 1),
649*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_FSYS0_MAIN_USER, "mout_fsys0_main_user",
650*85cc5be6SGyoungBo Min 	    mout_fsys0_main_user_p, PLL_CON0_MUX_CLK_FSYS0_MAIN_USER, 4, 1),
651*85cc5be6SGyoungBo Min };
652*85cc5be6SGyoungBo Min 
653*85cc5be6SGyoungBo Min static const struct samsung_div_clock cmu_fsys0_div_clks[] __initconst = {
654*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_125, "dout_fsys0_125", "mout_fsys0_main_user",
655*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_125, 0, 5),
656*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_ADC, "dout_fsys0_adc", "mout_fsys0_main_user",
657*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_ADC, 0, 7),
658*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_BUS_300, "dout_fsys0_bus_300", "mout_fsys0_bus_user",
659*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_BUS_300, 0, 4),
660*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_EQOS0, "dout_fsys0_eqos0", "dout_fsys0_eqos_250",
661*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_EQOS0, 0, 7),
662*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_EQOS1, "dout_fsys0_eqos1", "dout_fsys0_eqos_250",
663*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_EQOS1, 0, 7),
664*85cc5be6SGyoungBo Min 	DIV(0, "dout_fsys0_eqos_250", "mout_fsys0_main_user",
665*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_EQOS_250, 0, 4),
666*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_MMC_CARD0, "dout_fsys0_mmc_card0", "mout_fsys0_ip_user",
667*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_MMC_CARD0, 0, 10),
668*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_MMC_CARD1, "dout_fsys0_mmc_card1", "mout_fsys0_ip_user",
669*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_MMC_CARD1, 0, 10),
670*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_MMC_CARD2, "dout_fsys0_mmc_card2", "mout_fsys0_ip_user",
671*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_MMC_CARD2, 0, 10),
672*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_QSPI, "dout_fsys0_qspi", "mout_fsys0_ip_user",
673*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_QSPI, 0, 4),
674*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS0_SFMC_NAND, "dout_fsys0_sfmc_nand", "mout_fsys0_ip_user",
675*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS0_SFMC_NAND, 0, 4),
676*85cc5be6SGyoungBo Min };
677*85cc5be6SGyoungBo Min 
678*85cc5be6SGyoungBo Min static const struct samsung_gate_clock cmu_fsys0_gate_clks[] __initconst = {
679*85cc5be6SGyoungBo Min 	GATE(0, "adc_wrap_ipclkport_clk", "dout_fsys0_adc",
680*85cc5be6SGyoungBo Min 	     CLK_CON_DMYQCH_CON_ADC_WRAP_QCH, 1, CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
681*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_EQOS_TOP0_IPCLKPORT_ACLK_I, "eqos_top0_ipclkport_aclk_i",
682*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_EQOS_TOP0_QCH, 1, CLK_SET_RATE_PARENT, 0),
683*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_EQOS_TOP0_IPCLKPORT_CLK_CSR_I, "eqos_top0_ipclkport_clk_csr_i",
684*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_EQOS_TOP0_QCH, 1, CLK_SET_RATE_PARENT, 0),
685*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_EQOS_TOP0_IPCLKPORT_I_RGMII_PHASE_CLK_250,
686*85cc5be6SGyoungBo Min 	     "eqos_top0_ipclkport_i_rgmii_phase_clk_250",
687*85cc5be6SGyoungBo Min 	     "dout_fsys0_eqos_250", CLK_CON_DMYQCH_CON_EQOS_TOP0_QCH, 1, CLK_SET_RATE_PARENT, 0),
688*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_EQOS_TOP0_IPCLKPORT_I_RGMII_TXCLK, "eqos_top0_ipclkport_i_rgmii_txclk",
689*85cc5be6SGyoungBo Min 	     "dout_fsys0_eqos0", CLK_CON_DMYQCH_CON_EQOS_TOP0_QCH, 1, CLK_SET_RATE_PARENT, 0),
690*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_EQOS_TOP1_IPCLKPORT_I_RGMII_PHASE_CLK_250,
691*85cc5be6SGyoungBo Min 	     "eqos_top1_ipclkport_i_rgmii_phase_clk_250",
692*85cc5be6SGyoungBo Min 	     "dout_fsys0_eqos_250", CLK_CON_DMYQCH_CON_EQOS_TOP1_QCH, 1, CLK_SET_RATE_PARENT, 0),
693*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_EQOS_TOP1_IPCLKPORT_I_RGMII_TXCLK, "eqos_top1_ipclkport_i_rgmii_txclk",
694*85cc5be6SGyoungBo Min 	     "dout_fsys0_eqos1", CLK_CON_DMYQCH_CON_EQOS_TOP1_QCH, 1, CLK_SET_RATE_PARENT, 0),
695*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_EQOS_TOP1_IPCLKPORT_ACLK_I, "eqos_top1_ipclkport_aclk_i",
696*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_EQOS_TOP1_QCH, 1, CLK_SET_RATE_PARENT, 0),
697*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_EQOS_TOP1_IPCLKPORT_CLK_CSR_I, "eqos_top1_ipclkport_clk_csr_i",
698*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_EQOS_TOP1_QCH, 1, CLK_SET_RATE_PARENT, 0),
699*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I3C0_IPCLKPORT_I_APB_S_PCLK, "i3c0_ipclkport_i_apb_s_pclk",
700*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_FSYS0_I3C0_QCH, 1,
701*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
702*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I3C0_IPCLKPORT_I_CORE_CLK, "i3c0_ipclkport_i_core_clk",
703*85cc5be6SGyoungBo Min 	     "dout_fsys0_125", CLK_CON_DMYQCH_CON_FSYS0_I3C0_QCH, 1, CLK_SET_RATE_PARENT, 0),
704*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I3C0_IPCLKPORT_I_DMA_CLK, "i3c0_ipclkport_i_dma_clk",
705*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_FSYS0_I3C0_QCH,
706*85cc5be6SGyoungBo Min 	     1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
707*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I3C0_IPCLKPORT_I_HDR_TX_CLK, "i3c0_ipclkport_i_hdr_tx_clk",
708*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_FSYS0_I3C0_QCH,
709*85cc5be6SGyoungBo Min 	     1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
710*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I3C1_IPCLKPORT_I_APB_S_PCLK, "i3c1_ipclkport_i_apb_s_pclk",
711*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_FSYS0_I3C1_QCH,
712*85cc5be6SGyoungBo Min 	     1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
713*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I3C1_IPCLKPORT_I_CORE_CLK, "i3c1_ipclkport_i_core_clk",
714*85cc5be6SGyoungBo Min 	     "dout_fsys0_125", CLK_CON_DMYQCH_CON_FSYS0_I3C1_QCH, 1, CLK_SET_RATE_PARENT, 0),
715*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I3C1_IPCLKPORT_I_DMA_CLK, "i3c1_ipclkport_i_dma_clk",
716*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_FSYS0_I3C1_QCH,
717*85cc5be6SGyoungBo Min 	     1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
718*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I3C1_IPCLKPORT_I_HDR_TX_CLK, "i3c1_ipclkport_i_hdr_tx_clk",
719*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_FSYS0_I3C1_QCH,
720*85cc5be6SGyoungBo Min 	     1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
721*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_MMC0_IPCLKPORT_SDCLKIN, "mmc0_ipclkport_sdclkin",
722*85cc5be6SGyoungBo Min 	     "dout_fsys0_mmc_card0", CLK_CON_DMYQCH_CON_MMC0_QCH, 1, CLK_SET_RATE_PARENT, 0),
723*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_MMC1_IPCLKPORT_SDCLKIN, "mmc1_ipclkport_sdclkin",
724*85cc5be6SGyoungBo Min 	     "dout_fsys0_mmc_card1", CLK_CON_DMYQCH_CON_MMC1_QCH, 1, CLK_SET_RATE_PARENT, 0),
725*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_MMC2_IPCLKPORT_SDCLKIN, "mmc2_ipclkport_sdclkin",
726*85cc5be6SGyoungBo Min 	     "dout_fsys0_mmc_card2", CLK_CON_DMYQCH_CON_MMC2_QCH, 1, CLK_SET_RATE_PARENT, 0),
727*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_QSPI_IPCLKPORT_HCLK, "qspi_ipclkport_hclk",
728*85cc5be6SGyoungBo Min 	     "dout_fsys0_bus_300", CLK_CON_DMYQCH_CON_QSPI_QCH, 1, CLK_SET_RATE_PARENT, 0),
729*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_QSPI_IPCLKPORT_SSI_CLK, "qspi_ipclkport_ssi_clk", "dout_fsys0_qspi",
730*85cc5be6SGyoungBo Min 	     CLK_CON_DMYQCH_CON_QSPI_QCH, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
731*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_SFMC_IPCLKPORT_I_ACLK_NAND, "sfmc_ipclkport_i_aclk_nand",
732*85cc5be6SGyoungBo Min 	     "dout_fsys0_sfmc_nand", CLK_CON_DMYQCH_CON_SFMC_QCH, 1, CLK_SET_RATE_PARENT, 0),
733*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I2C0_IPCLKPORT_I_PCLK, "i2c0_ipclkport_i_pclk", "dout_fsys0_bus_300",
734*85cc5be6SGyoungBo Min 	     CLK_CON_FSYS0_I2C0_IPCLKPORT_I_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
735*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_I2C1_IPCLKPORT_I_PCLK, "i2c1_ipclkport_i_pclk", "dout_fsys0_bus_300",
736*85cc5be6SGyoungBo Min 	     CLK_CON_FSYS0_I2C1_IPCLKPORT_I_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
737*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_MMC0_IPCLKPORT_I_ACLK, "mmc0_ipclkport_i_aclk", "dout_fsys0_bus_300",
738*85cc5be6SGyoungBo Min 	     CLK_CON_MMC0_IPCLKPORT_I_ACLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
739*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_MMC1_IPCLKPORT_I_ACLK, "mmc1_ipclkport_i_aclk", "dout_fsys0_bus_300",
740*85cc5be6SGyoungBo Min 	     CLK_CON_MMC1_IPCLKPORT_I_ACLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
741*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_MMC2_IPCLKPORT_I_ACLK, "mmc2_ipclkport_i_aclk", "dout_fsys0_bus_300",
742*85cc5be6SGyoungBo Min 	     CLK_CON_MMC2_IPCLKPORT_I_ACLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
743*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS0_PWM_IPCLKPORT_I_PCLK_S0, "pwm_ipclkport_i_pclk", "dout_fsys0_bus_300",
744*85cc5be6SGyoungBo Min 	     CLK_CON_PWM_IPCLKPORT_I_PCLK_S0, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
745*85cc5be6SGyoungBo Min };
746*85cc5be6SGyoungBo Min 
747*85cc5be6SGyoungBo Min static const struct samsung_cmu_info cmu_fsys0_info __initconst = {
748*85cc5be6SGyoungBo Min 	.mux_clks		= cmu_fsys0_mux_clks,
749*85cc5be6SGyoungBo Min 	.nr_mux_clks		= ARRAY_SIZE(cmu_fsys0_mux_clks),
750*85cc5be6SGyoungBo Min 	.div_clks		= cmu_fsys0_div_clks,
751*85cc5be6SGyoungBo Min 	.nr_div_clks		= ARRAY_SIZE(cmu_fsys0_div_clks),
752*85cc5be6SGyoungBo Min 	.gate_clks              = cmu_fsys0_gate_clks,
753*85cc5be6SGyoungBo Min 	.nr_gate_clks           = ARRAY_SIZE(cmu_fsys0_gate_clks),
754*85cc5be6SGyoungBo Min 	.nr_clk_ids		= CMU_FSYS0_NR_CLK,
755*85cc5be6SGyoungBo Min 	.clk_regs		= cmu_fsys0_clk_regs,
756*85cc5be6SGyoungBo Min 	.nr_clk_regs		= ARRAY_SIZE(cmu_fsys0_clk_regs),
757*85cc5be6SGyoungBo Min };
758*85cc5be6SGyoungBo Min 
759*85cc5be6SGyoungBo Min /* Register Offset definitions for CMU_FSYS1 (0x14c10000) */
760*85cc5be6SGyoungBo Min #define PLL_LOCKTIME_PLL_FSYS1						0x0000
761*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_FSYS1_BUS_USER					0x0100
762*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_FSYS1_SCAN0_USER				0x0120
763*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_FSYS1_SCAN1_USER				0x0140
764*85cc5be6SGyoungBo Min #define PLL_CON0_PLL_FSYS1						0x0160
765*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS1_200					0x1808
766*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS1_BUS_300					0x1810
767*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS1_OTP_MEM					0x1814
768*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_FSYS1_PCIE_PHY_REFCLK_SYSPLL			0x1818
769*85cc5be6SGyoungBo Min #define CLK_CON_FSYS1_UART0_IPCLKPORT_I_PCLK				0x202c
770*85cc5be6SGyoungBo Min #define CLK_CON_FSYS1_UART0_IPCLKPORT_I_SCLK_UART			0x2030
771*85cc5be6SGyoungBo Min #define CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_PHY_APB2CR_PCLK_300		0x205c
772*85cc5be6SGyoungBo Min #define CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_DBI_ACLK_SOC		0x2068
773*85cc5be6SGyoungBo Min #define CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_MSTR_ACLK_SOC	0x206c
774*85cc5be6SGyoungBo Min #define CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_SLV_ACLK_SOC		0x2070
775*85cc5be6SGyoungBo Min #define CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_DBI_ACLK_SOC		0x2078
776*85cc5be6SGyoungBo Min #define CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_MSTR_ACLK_SOC	0x2080
777*85cc5be6SGyoungBo Min #define CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_SLV_ACLK_SOC		0x2084
778*85cc5be6SGyoungBo Min #define CLK_CON_USB20DRD_IPCLKPORT_ACLK_PHYCTRL_20			0x209c
779*85cc5be6SGyoungBo Min #define CLK_CON_USB20DRD_IPCLKPORT_BUS_CLK_EARLY			0x20a0
780*85cc5be6SGyoungBo Min #define CLK_CON_XHB_AHBBR_FSYS1_IPCLKPORT_CLK				0x20a8
781*85cc5be6SGyoungBo Min #define CLK_CON_XHB_USB_IPCLKPORT_CLK					0x20ac
782*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_TZ400_QCH					0x3004
783*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_PCIE_TOP_QCH_PHY_100				0x309c
784*85cc5be6SGyoungBo Min #define CLK_CON_QCH_CON_MMU_FSYS1_QCH_U_TBU_0_0				0x3050
785*85cc5be6SGyoungBo Min #define CLK_CON_QCH_CON_MMU_FSYS1_QCH_U_TBU_1_0				0x3058
786*85cc5be6SGyoungBo Min 
787*85cc5be6SGyoungBo Min static const unsigned long cmu_fsys1_clk_regs[] __initconst = {
788*85cc5be6SGyoungBo Min 	PLL_LOCKTIME_PLL_FSYS1,
789*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_FSYS1_BUS_USER,
790*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_FSYS1_SCAN0_USER,
791*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_FSYS1_SCAN1_USER,
792*85cc5be6SGyoungBo Min 	PLL_CON0_PLL_FSYS1,
793*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS1_200,
794*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS1_BUS_300,
795*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS1_OTP_MEM,
796*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_FSYS1_PCIE_PHY_REFCLK_SYSPLL,
797*85cc5be6SGyoungBo Min 	CLK_CON_FSYS1_UART0_IPCLKPORT_I_PCLK,
798*85cc5be6SGyoungBo Min 	CLK_CON_FSYS1_UART0_IPCLKPORT_I_SCLK_UART,
799*85cc5be6SGyoungBo Min 	CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_PHY_APB2CR_PCLK_300,
800*85cc5be6SGyoungBo Min 	CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_DBI_ACLK_SOC,
801*85cc5be6SGyoungBo Min 	CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_MSTR_ACLK_SOC,
802*85cc5be6SGyoungBo Min 	CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_SLV_ACLK_SOC,
803*85cc5be6SGyoungBo Min 	CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_DBI_ACLK_SOC,
804*85cc5be6SGyoungBo Min 	CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_MSTR_ACLK_SOC,
805*85cc5be6SGyoungBo Min 	CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_SLV_ACLK_SOC,
806*85cc5be6SGyoungBo Min 	CLK_CON_USB20DRD_IPCLKPORT_ACLK_PHYCTRL_20,
807*85cc5be6SGyoungBo Min 	CLK_CON_USB20DRD_IPCLKPORT_BUS_CLK_EARLY,
808*85cc5be6SGyoungBo Min 	CLK_CON_XHB_AHBBR_FSYS1_IPCLKPORT_CLK,
809*85cc5be6SGyoungBo Min 	CLK_CON_XHB_USB_IPCLKPORT_CLK,
810*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_TZ400_QCH,
811*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_PCIE_TOP_QCH_PHY_100,
812*85cc5be6SGyoungBo Min 	CLK_CON_QCH_CON_MMU_FSYS1_QCH_U_TBU_0_0,
813*85cc5be6SGyoungBo Min 	CLK_CON_QCH_CON_MMU_FSYS1_QCH_U_TBU_1_0
814*85cc5be6SGyoungBo Min };
815*85cc5be6SGyoungBo Min 
816*85cc5be6SGyoungBo Min static const struct samsung_pll_rate_table artpec9_pll_fsys1_rates[] __initconst = {
817*85cc5be6SGyoungBo Min 	PLL_35XX_RATE(25 * MHZ, 2000000000U, 80, 1, 0),
818*85cc5be6SGyoungBo Min };
819*85cc5be6SGyoungBo Min 
820*85cc5be6SGyoungBo Min static const struct samsung_pll_clock cmu_fsys1_pll_clks[] __initconst = {
821*85cc5be6SGyoungBo Min 	PLL(pll_a9fracm, CLK_FOUT_FSYS1_PLL, "fout_pll_fsys1", "fin_pll",
822*85cc5be6SGyoungBo Min 	    PLL_LOCKTIME_PLL_FSYS1, PLL_CON0_PLL_FSYS1, artpec9_pll_fsys1_rates),
823*85cc5be6SGyoungBo Min };
824*85cc5be6SGyoungBo Min 
825*85cc5be6SGyoungBo Min PNAME(mout_fsys1_scan0_user_p) = { "fin_pll", "dout_clkcmu_fsys1_scan0" };
826*85cc5be6SGyoungBo Min PNAME(mout_fsys1_scan1_user_p) = { "fin_pll", "dout_clkcmu_fsys1_scan1" };
827*85cc5be6SGyoungBo Min PNAME(mout_fsys1_bus_user_p) = { "fin_pll", "dout_clkcmu_fsys1_bus" };
828*85cc5be6SGyoungBo Min PNAME(mout_fsys_pll_fsys_p) = { "fin_pll", "fout_pll_fsys1" };
829*85cc5be6SGyoungBo Min 
830*85cc5be6SGyoungBo Min static const struct samsung_mux_clock cmu_fsys1_mux_clks[] __initconst = {
831*85cc5be6SGyoungBo Min 	MUX(0, "mout_clk_pll_fsys1", mout_fsys_pll_fsys_p, PLL_CON0_PLL_FSYS1, 4, 1),
832*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_FSYS1_SCAN0_USER, "mout_fsys1_scan0_user",
833*85cc5be6SGyoungBo Min 	    mout_fsys1_scan0_user_p, PLL_CON0_MUX_CLK_FSYS1_SCAN0_USER, 4, 1),
834*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_FSYS1_SCAN1_USER, "mout_fsys1_scan1_user",
835*85cc5be6SGyoungBo Min 	    mout_fsys1_scan1_user_p, PLL_CON0_MUX_CLK_FSYS1_SCAN1_USER, 4, 1),
836*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_FSYS1_BUS_USER, "mout_fsys1_bus_user",
837*85cc5be6SGyoungBo Min 	    mout_fsys1_bus_user_p, PLL_CON0_MUX_CLK_FSYS1_BUS_USER, 4, 1),
838*85cc5be6SGyoungBo Min };
839*85cc5be6SGyoungBo Min 
840*85cc5be6SGyoungBo Min static const struct samsung_div_clock cmu_fsys1_div_clks[] __initconst = {
841*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS1_200, "dout_fsys1_200", "mout_clk_pll_fsys1",
842*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS1_200, 0, 4),
843*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS1_BUS_300, "dout_fsys1_bus_300", "mout_fsys1_bus_user",
844*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS1_BUS_300, 0, 4),
845*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS1_OTP_MEM, "dout_fsys1_otp_mem", "fin_pll",
846*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_FSYS1_OTP_MEM, 0, 4),
847*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_FSYS1_PCIE_PHY_REFCLK_SYSPLL, "dout_fsys1_pcie_phy_refclk_syspll",
848*85cc5be6SGyoungBo Min 	    "mout_clk_pll_fsys1", CLK_CON_DIV_CLK_FSYS1_PCIE_PHY_REFCLK_SYSPLL, 0, 5),
849*85cc5be6SGyoungBo Min };
850*85cc5be6SGyoungBo Min 
851*85cc5be6SGyoungBo Min static const struct samsung_gate_clock cmu_fsys1_gate_clks[] __initconst = {
852*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_IPCLKPORT_PCIE_PHY_APB2CR_PCLK_100,
853*85cc5be6SGyoungBo Min 	     "pcie_top_ipclkport_pcie_phy_apb2cr_pclk_100", "dout_fsys1_pcie_phy_refclk_syspll",
854*85cc5be6SGyoungBo Min 	     CLK_CON_DMYQCH_CON_PCIE_TOP_QCH_PHY_100, 1, CLK_SET_RATE_PARENT, 0),
855*85cc5be6SGyoungBo Min 	GATE(0, "tzc400_ipclkport_aclk0", "mout_fsys1_bus_user",
856*85cc5be6SGyoungBo Min 	     CLK_CON_DMYQCH_CON_TZ400_QCH, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
857*85cc5be6SGyoungBo Min 	GATE(0, "tzc400_ipclkport_aclk1", "mout_fsys1_bus_user",
858*85cc5be6SGyoungBo Min 	     CLK_CON_DMYQCH_CON_TZ400_QCH, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
859*85cc5be6SGyoungBo Min 	GATE(0, "tzc400_ipclkport_pclk", "dout_fsys1_bus_300",
860*85cc5be6SGyoungBo Min 	     CLK_CON_DMYQCH_CON_TZ400_QCH, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
861*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_UART0_PCLK, "uart", "dout_fsys1_bus_300",
862*85cc5be6SGyoungBo Min 	     CLK_CON_FSYS1_UART0_IPCLKPORT_I_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
863*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_UART0_SCLK_UART, "clk_uart_baud0", "dout_fsys1_200",
864*85cc5be6SGyoungBo Min 	     CLK_CON_FSYS1_UART0_IPCLKPORT_I_SCLK_UART, 21,
865*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
866*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_IPCLKPORT_PCIE_PHY_APB2CR_PCLK_300,
867*85cc5be6SGyoungBo Min 	     "pcie_top_ipclkport_pcie_phy_apb2cr_pclk_300", "dout_fsys1_bus_300",
868*85cc5be6SGyoungBo Min 	     CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_PHY_APB2CR_PCLK_300, 21,
869*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
870*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_IPCLKPORT_PCIE_SUB_CON_X1_DBI_ACLK_SOC,
871*85cc5be6SGyoungBo Min 	     "pcie_top_ipclkport_pcie_sub_con_x1_dbi_aclk_soc", "dout_fsys1_bus_300",
872*85cc5be6SGyoungBo Min 	     CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_DBI_ACLK_SOC,
873*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
874*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_IPCLKPORT_PCIE_SUB_CON_X1_MSTR_ACLK_SOC,
875*85cc5be6SGyoungBo Min 	     "pcie_top_ipclkport_pcie_sub_con_x1_mstr_aclk_soc", "mout_fsys1_bus_user",
876*85cc5be6SGyoungBo Min 	     CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_MSTR_ACLK_SOC,
877*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
878*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_IPCLKPORT_PCIE_SUB_CON_X1_SLV_ACLK_SOC,
879*85cc5be6SGyoungBo Min 	     "pcie_top_ipclkport_pcie_sub_con_x1_slv_aclk_soc", "mout_fsys1_bus_user",
880*85cc5be6SGyoungBo Min 	     CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X1_SLV_ACLK_SOC,
881*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
882*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_IPCLKPORT_PCIE_SUB_CON_X2_DBI_ACLK_SOC,
883*85cc5be6SGyoungBo Min 	     "pcie_top_ipclkport_pcie_sub_con_x2_dbi_aclk_soc", "dout_fsys1_bus_300",
884*85cc5be6SGyoungBo Min 	     CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_DBI_ACLK_SOC,
885*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
886*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_IPCLKPORT_PCIE_SUB_CON_X2_MSTR_ACLK_SOC,
887*85cc5be6SGyoungBo Min 	     "pcie_top_ipclkport_pcie_sub_con_x2_mstr_aclk_soc", "mout_fsys1_bus_user",
888*85cc5be6SGyoungBo Min 	     CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_MSTR_ACLK_SOC,
889*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
890*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_IPCLKPORT_PCIE_SUB_CON_X2_SLV_ACLK_SOC,
891*85cc5be6SGyoungBo Min 	     "pcie_top_ipclkport_pcie_sub_con_x2_slv_aclk_soc", "mout_fsys1_bus_user",
892*85cc5be6SGyoungBo Min 	     CLK_CON_PCIE_TOP_IPCLKPORT_PCIE_SUB_CON_X2_SLV_ACLK_SOC,
893*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
894*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_USB20DRD_IPCLKPORT_ACLK_PHYCTRL_20,
895*85cc5be6SGyoungBo Min 	     "usb20drd_ipclkport_aclk_phyctrl_20", "dout_fsys1_bus_300",
896*85cc5be6SGyoungBo Min 	     CLK_CON_USB20DRD_IPCLKPORT_ACLK_PHYCTRL_20,
897*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
898*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_USB20DRD_IPCLKPORT_BUS_CLK_EARLY, "usb20drd_ipclkport_bus_clk_early",
899*85cc5be6SGyoungBo Min 	     "dout_fsys1_bus_300", CLK_CON_USB20DRD_IPCLKPORT_BUS_CLK_EARLY,
900*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
901*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_XHB_AHBBR_FSYS1_IPCLKPORT_CLK, "xhb_ahbbr_fsys1_ipclkport_clk",
902*85cc5be6SGyoungBo Min 	     "dout_fsys1_bus_300", CLK_CON_XHB_AHBBR_FSYS1_IPCLKPORT_CLK,
903*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
904*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_FSYS1_XHB_USB_IPCLKPORT_CLK, "xhb_usb_ipclkport_clk", "dout_fsys1_bus_300",
905*85cc5be6SGyoungBo Min 	     CLK_CON_XHB_USB_IPCLKPORT_CLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
906*85cc5be6SGyoungBo Min 	GATE(0, "qch_con_mmu_fsys1_qch_u_tbu_0_0", "mout_fsys1_bus_user",
907*85cc5be6SGyoungBo Min 	     CLK_CON_QCH_CON_MMU_FSYS1_QCH_U_TBU_0_0, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
908*85cc5be6SGyoungBo Min 	GATE(0, "qch_con_mmu_fsys1_qch_u_tbu_1_0", "mout_fsys1_bus_user",
909*85cc5be6SGyoungBo Min 	     CLK_CON_QCH_CON_MMU_FSYS1_QCH_U_TBU_1_0, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
910*85cc5be6SGyoungBo Min };
911*85cc5be6SGyoungBo Min 
912*85cc5be6SGyoungBo Min static const struct samsung_cmu_info cmu_fsys1_info __initconst = {
913*85cc5be6SGyoungBo Min 	.pll_clks		= cmu_fsys1_pll_clks,
914*85cc5be6SGyoungBo Min 	.nr_pll_clks		= ARRAY_SIZE(cmu_fsys1_pll_clks),
915*85cc5be6SGyoungBo Min 	.mux_clks		= cmu_fsys1_mux_clks,
916*85cc5be6SGyoungBo Min 	.nr_mux_clks		= ARRAY_SIZE(cmu_fsys1_mux_clks),
917*85cc5be6SGyoungBo Min 	.div_clks		= cmu_fsys1_div_clks,
918*85cc5be6SGyoungBo Min 	.nr_div_clks		= ARRAY_SIZE(cmu_fsys1_div_clks),
919*85cc5be6SGyoungBo Min 	.gate_clks              = cmu_fsys1_gate_clks,
920*85cc5be6SGyoungBo Min 	.nr_gate_clks           = ARRAY_SIZE(cmu_fsys1_gate_clks),
921*85cc5be6SGyoungBo Min 	.nr_clk_ids		= CMU_FSYS1_NR_CLK,
922*85cc5be6SGyoungBo Min 	.clk_regs		= cmu_fsys1_clk_regs,
923*85cc5be6SGyoungBo Min 	.nr_clk_regs		= ARRAY_SIZE(cmu_fsys1_clk_regs),
924*85cc5be6SGyoungBo Min };
925*85cc5be6SGyoungBo Min 
926*85cc5be6SGyoungBo Min /* Register Offset definitions for CMU_IMEM (0x10010000) */
927*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_IMEM_ACLK_USER				0x0100
928*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_IMEM_CA5_USER				0x0120
929*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_IMEM_JPEG_USER				0x0140
930*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_IMEM_SSS_USER				0x0160
931*85cc5be6SGyoungBo Min #define CLK_CON_MCT0_IPCLKPORT_PCLK					0x20b4
932*85cc5be6SGyoungBo Min #define CLK_CON_MCT1_IPCLKPORT_PCLK					0x20b8
933*85cc5be6SGyoungBo Min #define CLK_CON_MCT2_IPCLKPORT_PCLK					0x20bc
934*85cc5be6SGyoungBo Min #define CLK_CON_MCT3_IPCLKPORT_PCLK					0x20c0
935*85cc5be6SGyoungBo Min #define CLK_CON_TMU_APB_IPCLKPORT_PCLK					0x20d4
936*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_CA5_0_QCH					0x3008
937*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_CA5_1_QCH					0x3018
938*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_INTMEM_QCH					0x3020
939*85cc5be6SGyoungBo Min #define CLK_CON_QCH_CON_GIC_CA55_QCHANNEL_SLAVE_0			0x306c
940*85cc5be6SGyoungBo Min #define CLK_CON_QCH_CON_GIC_CA5_0_QCH					0x3078
941*85cc5be6SGyoungBo Min #define CLK_CON_QCH_CON_GIC_CA5_1_QCH					0x307c
942*85cc5be6SGyoungBo Min #define CLK_CON_QCH_CON_MMU_IMEM_QCH_U_TBU_0_0				0x30ac
943*85cc5be6SGyoungBo Min #define CLK_CON_QCH_CON_MMU_IMEM_QCH_U_TBU_1_0				0x30b4
944*85cc5be6SGyoungBo Min 
945*85cc5be6SGyoungBo Min static const unsigned long cmu_imem_clk_regs[] __initconst = {
946*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_IMEM_ACLK_USER,
947*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_IMEM_CA5_USER,
948*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_IMEM_JPEG_USER,
949*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_IMEM_SSS_USER,
950*85cc5be6SGyoungBo Min 	CLK_CON_MCT0_IPCLKPORT_PCLK,
951*85cc5be6SGyoungBo Min 	CLK_CON_MCT1_IPCLKPORT_PCLK,
952*85cc5be6SGyoungBo Min 	CLK_CON_MCT2_IPCLKPORT_PCLK,
953*85cc5be6SGyoungBo Min 	CLK_CON_MCT3_IPCLKPORT_PCLK,
954*85cc5be6SGyoungBo Min 	CLK_CON_TMU_APB_IPCLKPORT_PCLK,
955*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_CA5_0_QCH,
956*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_CA5_1_QCH,
957*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_INTMEM_QCH,
958*85cc5be6SGyoungBo Min 	CLK_CON_QCH_CON_GIC_CA55_QCHANNEL_SLAVE_0,
959*85cc5be6SGyoungBo Min 	CLK_CON_QCH_CON_GIC_CA5_0_QCH,
960*85cc5be6SGyoungBo Min 	CLK_CON_QCH_CON_GIC_CA5_1_QCH,
961*85cc5be6SGyoungBo Min 	CLK_CON_QCH_CON_MMU_IMEM_QCH_U_TBU_0_0,
962*85cc5be6SGyoungBo Min 	CLK_CON_QCH_CON_MMU_IMEM_QCH_U_TBU_1_0
963*85cc5be6SGyoungBo Min };
964*85cc5be6SGyoungBo Min 
965*85cc5be6SGyoungBo Min PNAME(mout_imem_aclk_user_p) = { "fin_pll", "dout_clkcmu_imem_aclk" };
966*85cc5be6SGyoungBo Min PNAME(mout_imem_ca5_user_p) = { "fin_pll", "dout_clkcmu_imem_ca5" };
967*85cc5be6SGyoungBo Min PNAME(mout_imem_jpeg_user_p) = { "fin_pll", "dout_clkcmu_imem_jpeg" };
968*85cc5be6SGyoungBo Min PNAME(mout_imem_sss_user_p) = { "fin_pll", "dout_clkcmu_imem_sss" };
969*85cc5be6SGyoungBo Min 
970*85cc5be6SGyoungBo Min static const struct samsung_mux_clock cmu_imem_mux_clks[] __initconst = {
971*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_IMEM_ACLK_USER, "mout_clk_imem_aclk_user",
972*85cc5be6SGyoungBo Min 	    mout_imem_aclk_user_p, PLL_CON0_MUX_CLK_IMEM_ACLK_USER, 4, 1),
973*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_IMEM_CA5_USER, "mout_clk_imem_ca5_user",
974*85cc5be6SGyoungBo Min 	    mout_imem_ca5_user_p, PLL_CON0_MUX_CLK_IMEM_CA5_USER, 4, 1),
975*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_IMEM_SSS_USER, "mout_clk_imem_sss_user",
976*85cc5be6SGyoungBo Min 	    mout_imem_sss_user_p, PLL_CON0_MUX_CLK_IMEM_SSS_USER, 4, 1),
977*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_IMEM_JPEG_USER, "mout_clk_imem_jpeg_user",
978*85cc5be6SGyoungBo Min 	    mout_imem_jpeg_user_p, PLL_CON0_MUX_CLK_IMEM_JPEG_USER, 4, 1),
979*85cc5be6SGyoungBo Min };
980*85cc5be6SGyoungBo Min 
981*85cc5be6SGyoungBo Min static const struct samsung_fixed_factor_clock imem_ffactor_clks[] __initconst = {
982*85cc5be6SGyoungBo Min 	FFACTOR(CLK_DOUT_IMEM_PCLK, "dout_clk_imem_pclk", "mout_clk_imem_aclk_user", 1, 2, 0),
983*85cc5be6SGyoungBo Min };
984*85cc5be6SGyoungBo Min 
985*85cc5be6SGyoungBo Min static const struct samsung_gate_clock cmu_imem_gate_clks[] __initconst = {
986*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_CA5_0_IPCLKPORT_ATCLK, "ca5_0_ipclkport_atclk",
987*85cc5be6SGyoungBo Min 	     "mout_clk_imem_ca5_user", CLK_CON_DMYQCH_CON_CA5_0_QCH, 1, CLK_SET_RATE_PARENT, 0),
988*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_CA5_0_IPCLKPORT_CLKIN, "ca5_0_ipclkport_clkin",
989*85cc5be6SGyoungBo Min 	     "mout_clk_imem_ca5_user", CLK_CON_DMYQCH_CON_CA5_0_QCH, 1, CLK_SET_RATE_PARENT, 0),
990*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_CA5_0_IPCLKPORT_PCLK_DBG, "ca5_0_ipclkport_pclk_dbg",
991*85cc5be6SGyoungBo Min 	     "mout_clk_imem_ca5_user", CLK_CON_DMYQCH_CON_CA5_0_QCH, 1, CLK_SET_RATE_PARENT, 0),
992*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_CA5_1_IPCLKPORT_ATCLK, "ca5_1_ipclkport_atclk",
993*85cc5be6SGyoungBo Min 	     "mout_clk_imem_ca5_user", CLK_CON_DMYQCH_CON_CA5_1_QCH, 1, CLK_SET_RATE_PARENT, 0),
994*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_CA5_1_IPCLKPORT_CLKIN, "ca5_1_ipclkport_clkin",
995*85cc5be6SGyoungBo Min 	     "mout_clk_imem_ca5_user", CLK_CON_DMYQCH_CON_CA5_1_QCH, 1, CLK_SET_RATE_PARENT, 0),
996*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_CA5_1_IPCLKPORT_PCLK_DBG, "ca5_1_ipclkport_pclk_dbg",
997*85cc5be6SGyoungBo Min 	     "mout_clk_imem_ca5_user", CLK_CON_DMYQCH_CON_CA5_1_QCH, 1, CLK_SET_RATE_PARENT, 0),
998*85cc5be6SGyoungBo Min 	GATE(0, "intmem_ipclkport_aclk", "mout_clk_imem_aclk_user",
999*85cc5be6SGyoungBo Min 	     CLK_CON_DMYQCH_CON_INTMEM_QCH, 1, CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
1000*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_MCT0_PCLK, "mct0", "dout_clk_imem_pclk",
1001*85cc5be6SGyoungBo Min 	     CLK_CON_MCT0_IPCLKPORT_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1002*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_MCT1_PCLK, "mct1", "dout_clk_imem_pclk",
1003*85cc5be6SGyoungBo Min 	     CLK_CON_MCT1_IPCLKPORT_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1004*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_MCT2_PCLK, "mct2", "dout_clk_imem_pclk",
1005*85cc5be6SGyoungBo Min 	     CLK_CON_MCT2_IPCLKPORT_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1006*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_MCT3_PCLK, "mct3", "dout_clk_imem_pclk",
1007*85cc5be6SGyoungBo Min 	     CLK_CON_MCT3_IPCLKPORT_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1008*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_IMEM_PCLK_TMU0_APBIF, "tmu_apb_ipclkport_pclk", "dout_clk_imem_pclk",
1009*85cc5be6SGyoungBo Min 	     CLK_CON_TMU_APB_IPCLKPORT_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1010*85cc5be6SGyoungBo Min 	GATE(0, "qch_con_gic_ca55_qchannel_slave_0", "dout_clk_imem_pclk",
1011*85cc5be6SGyoungBo Min 	     CLK_CON_QCH_CON_GIC_CA55_QCHANNEL_SLAVE_0, 1,
1012*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1013*85cc5be6SGyoungBo Min 	GATE(0, "qch_con_gic_ca5_0_qch", "dout_clk_imem_pclk",
1014*85cc5be6SGyoungBo Min 	     CLK_CON_QCH_CON_GIC_CA5_0_QCH, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1015*85cc5be6SGyoungBo Min 	GATE(0, "qch_con_gic_ca5_1_qch", "dout_clk_imem_pclk",
1016*85cc5be6SGyoungBo Min 	     CLK_CON_QCH_CON_GIC_CA5_1_QCH, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1017*85cc5be6SGyoungBo Min 	GATE(0, "qch_con_mmu_imem_qch_u_tbu_0_0", "mout_clk_imem_ca5_user",
1018*85cc5be6SGyoungBo Min 	     CLK_CON_QCH_CON_MMU_IMEM_QCH_U_TBU_0_0, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1019*85cc5be6SGyoungBo Min 	GATE(0, "qch_con_mmu_imem_qch_u_tbu_1_0", "mout_clk_imem_ca5_user",
1020*85cc5be6SGyoungBo Min 	     CLK_CON_QCH_CON_MMU_IMEM_QCH_U_TBU_1_0, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1021*85cc5be6SGyoungBo Min };
1022*85cc5be6SGyoungBo Min 
1023*85cc5be6SGyoungBo Min static const struct samsung_cmu_info cmu_imem_info __initconst = {
1024*85cc5be6SGyoungBo Min 	.fixed_factor_clks	= imem_ffactor_clks,
1025*85cc5be6SGyoungBo Min 	.nr_fixed_factor_clks	= ARRAY_SIZE(imem_ffactor_clks),
1026*85cc5be6SGyoungBo Min 	.mux_clks		= cmu_imem_mux_clks,
1027*85cc5be6SGyoungBo Min 	.nr_mux_clks		= ARRAY_SIZE(cmu_imem_mux_clks),
1028*85cc5be6SGyoungBo Min 	.gate_clks              = cmu_imem_gate_clks,
1029*85cc5be6SGyoungBo Min 	.nr_gate_clks           = ARRAY_SIZE(cmu_imem_gate_clks),
1030*85cc5be6SGyoungBo Min 	.nr_clk_ids		= CMU_IMEM_NR_CLK,
1031*85cc5be6SGyoungBo Min 	.clk_regs		= cmu_imem_clk_regs,
1032*85cc5be6SGyoungBo Min 	.nr_clk_regs		= ARRAY_SIZE(cmu_imem_clk_regs),
1033*85cc5be6SGyoungBo Min };
1034*85cc5be6SGyoungBo Min 
1035*85cc5be6SGyoungBo Min static void __init artpec9_cmu_imem_init(struct device_node *np)
1036*85cc5be6SGyoungBo Min {
1037*85cc5be6SGyoungBo Min 	exynos_arm64_register_cmu(NULL, np, &cmu_imem_info);
1038*85cc5be6SGyoungBo Min }
1039*85cc5be6SGyoungBo Min 
1040*85cc5be6SGyoungBo Min CLK_OF_DECLARE(artpec9_cmu_imem, "axis,artpec9-cmu-imem", artpec9_cmu_imem_init);
1041*85cc5be6SGyoungBo Min 
1042*85cc5be6SGyoungBo Min /* Register Offset definitions for CMU_PERI (0x14010000) */
1043*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_PERI_DISP_USER				0x0100
1044*85cc5be6SGyoungBo Min #define PLL_CON0_MUX_CLK_PERI_IP_USER				0x0120
1045*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_PERI_125				0x1800
1046*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_PERI_PCLK				0x180c
1047*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_PERI_SPI				0x1810
1048*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_PERI_UART1				0x1814
1049*85cc5be6SGyoungBo Min #define CLK_CON_DIV_CLK_PERI_UART2				0x1818
1050*85cc5be6SGyoungBo Min #define CLK_CON_APB_ASYNC_DSIM_IPCLKPORT_PCLKS				0x2000
1051*85cc5be6SGyoungBo Min #define CLK_CON_PERI_I2C2_IPCLKPORT_I_PCLK				0x202c
1052*85cc5be6SGyoungBo Min #define CLK_CON_PERI_I2C3_IPCLKPORT_I_PCLK				0x2030
1053*85cc5be6SGyoungBo Min #define CLK_CON_PERI_SPI0_IPCLKPORT_I_PCLK				0x2054
1054*85cc5be6SGyoungBo Min #define CLK_CON_PERI_SPI0_IPCLKPORT_I_SCLK_SPI				0x2058
1055*85cc5be6SGyoungBo Min #define CLK_CON_PERI_UART1_IPCLKPORT_I_PCLK				0x205c
1056*85cc5be6SGyoungBo Min #define CLK_CON_PERI_UART1_IPCLKPORT_I_SCLK_UART			0x2060
1057*85cc5be6SGyoungBo Min #define CLK_CON_PERI_UART2_IPCLKPORT_I_PCLK				0x2064
1058*85cc5be6SGyoungBo Min #define CLK_CON_PERI_UART2_IPCLKPORT_I_SCLK_UART			0x2068
1059*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_DMA4DSIM_QCH					0x3000
1060*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_PERI_I3C2_QCH				0x3004
1061*85cc5be6SGyoungBo Min #define CLK_CON_DMYQCH_CON_PERI_I3C3_QCH				0x3008
1062*85cc5be6SGyoungBo Min 
1063*85cc5be6SGyoungBo Min static const unsigned long cmu_peri_clk_regs[] __initconst = {
1064*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_PERI_DISP_USER,
1065*85cc5be6SGyoungBo Min 	PLL_CON0_MUX_CLK_PERI_IP_USER,
1066*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_PERI_125,
1067*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_PERI_PCLK,
1068*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_PERI_SPI,
1069*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_PERI_UART1,
1070*85cc5be6SGyoungBo Min 	CLK_CON_DIV_CLK_PERI_UART2,
1071*85cc5be6SGyoungBo Min 	CLK_CON_APB_ASYNC_DSIM_IPCLKPORT_PCLKS,
1072*85cc5be6SGyoungBo Min 	CLK_CON_PERI_I2C2_IPCLKPORT_I_PCLK,
1073*85cc5be6SGyoungBo Min 	CLK_CON_PERI_I2C3_IPCLKPORT_I_PCLK,
1074*85cc5be6SGyoungBo Min 	CLK_CON_PERI_SPI0_IPCLKPORT_I_PCLK,
1075*85cc5be6SGyoungBo Min 	CLK_CON_PERI_SPI0_IPCLKPORT_I_SCLK_SPI,
1076*85cc5be6SGyoungBo Min 	CLK_CON_PERI_UART1_IPCLKPORT_I_PCLK,
1077*85cc5be6SGyoungBo Min 	CLK_CON_PERI_UART1_IPCLKPORT_I_SCLK_UART,
1078*85cc5be6SGyoungBo Min 	CLK_CON_PERI_UART2_IPCLKPORT_I_PCLK,
1079*85cc5be6SGyoungBo Min 	CLK_CON_PERI_UART2_IPCLKPORT_I_SCLK_UART,
1080*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_DMA4DSIM_QCH,
1081*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_PERI_I3C2_QCH,
1082*85cc5be6SGyoungBo Min 	CLK_CON_DMYQCH_CON_PERI_I3C3_QCH,
1083*85cc5be6SGyoungBo Min };
1084*85cc5be6SGyoungBo Min 
1085*85cc5be6SGyoungBo Min PNAME(mout_peri_ip_user_p) = { "fin_pll", "dout_clkcmu_peri_ip" };
1086*85cc5be6SGyoungBo Min PNAME(mout_peri_disp_user_p) = { "fin_pll", "dout_clkcmu_peri_disp" };
1087*85cc5be6SGyoungBo Min 
1088*85cc5be6SGyoungBo Min static const struct samsung_mux_clock cmu_peri_mux_clks[] __initconst = {
1089*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_PERI_IP_USER, "mout_peri_ip_user", mout_peri_ip_user_p,
1090*85cc5be6SGyoungBo Min 	    PLL_CON0_MUX_CLK_PERI_IP_USER, 4, 1),
1091*85cc5be6SGyoungBo Min 	MUX(CLK_MOUT_PERI_DISP_USER, "mout_peri_disp_user", mout_peri_disp_user_p,
1092*85cc5be6SGyoungBo Min 	    PLL_CON0_MUX_CLK_PERI_DISP_USER, 4, 1),
1093*85cc5be6SGyoungBo Min };
1094*85cc5be6SGyoungBo Min 
1095*85cc5be6SGyoungBo Min static const struct samsung_div_clock cmu_peri_div_clks[] __initconst = {
1096*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_PERI_125, "dout_peri_125", "mout_peri_ip_user",
1097*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_PERI_125, 0, 4),
1098*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_PERI_PCLK, "dout_peri_pclk", "mout_peri_ip_user",
1099*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_PERI_PCLK, 0, 4),
1100*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_PERI_SPI, "dout_peri_spi", "mout_peri_ip_user",
1101*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_PERI_SPI, 0, 13),
1102*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_PERI_UART1, "dout_peri_uart1", "mout_peri_ip_user",
1103*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_PERI_UART1, 0, 10),
1104*85cc5be6SGyoungBo Min 	DIV(CLK_DOUT_PERI_UART2, "dout_peri_uart2", "mout_peri_ip_user",
1105*85cc5be6SGyoungBo Min 	    CLK_CON_DIV_CLK_PERI_UART2, 0, 10),
1106*85cc5be6SGyoungBo Min };
1107*85cc5be6SGyoungBo Min 
1108*85cc5be6SGyoungBo Min static const struct samsung_gate_clock cmu_peri_gate_clks[] __initconst = {
1109*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_DMA4DSIM_IPCLKPORT_CLK_APB_CLK, "dma4dsim_ipclkport_clk_apb_clk",
1110*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_DMYQCH_CON_DMA4DSIM_QCH, 1, CLK_SET_RATE_PARENT, 0),
1111*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_DMA4DSIM_IPCLKPORT_CLK_AXI_CLK, "dma4dsim_ipclkport_clk_axi_clk",
1112*85cc5be6SGyoungBo Min 	     "mout_peri_disp_user", CLK_CON_DMYQCH_CON_DMA4DSIM_QCH, 1, CLK_SET_RATE_PARENT, 0),
1113*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I3C2_IPCLKPORT_I_APB_S_PCLK, "peri_i3c2_ipclkport_i_apb_s_pclk",
1114*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_DMYQCH_CON_PERI_I3C2_QCH, 1,
1115*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1116*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I3C2_IPCLKPORT_I_CORE_CLK, "peri_i3c2_ipclkport_i_core_clk",
1117*85cc5be6SGyoungBo Min 	     "dout_peri_125", CLK_CON_DMYQCH_CON_PERI_I3C2_QCH, 1, CLK_SET_RATE_PARENT, 0),
1118*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I3C2_IPCLKPORT_I_DMA_CLK, "peri_i3c2_ipclkport_i_dma_clk",
1119*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_DMYQCH_CON_PERI_I3C2_QCH, 1,
1120*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1121*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I3C2_IPCLKPORT_I_HDR_TX_CLK, "peri_i3c2_ipclkport_i_hdr_tx_clk",
1122*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_DMYQCH_CON_PERI_I3C2_QCH, 1,
1123*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1124*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I3C3_IPCLKPORT_I_APB_S_PCLK, "peri_i3c3_ipclkport_i_apb_s_pclk",
1125*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_DMYQCH_CON_PERI_I3C3_QCH, 1,
1126*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1127*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I3C3_IPCLKPORT_I_CORE_CLK, "peri_i3c3_ipclkport_i_core_clk",
1128*85cc5be6SGyoungBo Min 	     "dout_peri_125", CLK_CON_DMYQCH_CON_PERI_I3C3_QCH, 1, CLK_SET_RATE_PARENT, 0),
1129*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I3C3_IPCLKPORT_I_DMA_CLK, "peri_i3c3_ipclkport_i_dma_clk",
1130*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_DMYQCH_CON_PERI_I3C3_QCH, 1,
1131*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1132*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I3C3_IPCLKPORT_I_HDR_TX_CLK, "peri_i3c3_ipclkport_i_hdr_tx_clk",
1133*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_DMYQCH_CON_PERI_I3C3_QCH, 1,
1134*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1135*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_APB_ASYNC_DSIM_IPCLKPORT_PCLKS, "apb_async_dsim_ipclkport_pclks",
1136*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_APB_ASYNC_DSIM_IPCLKPORT_PCLKS, 21,
1137*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1138*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I2C2_IPCLKPORT_I_PCLK, "peri_i2c2_ipclkport_i_pclk",
1139*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_PERI_I2C2_IPCLKPORT_I_PCLK, 21,
1140*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1141*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_I2C3_IPCLKPORT_I_PCLK, "peri_i2c3_ipclkport_i_pclk",
1142*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_PERI_I2C3_IPCLKPORT_I_PCLK, 21,
1143*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1144*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_SPI0_PCLK, "peri_spi0_ipclkport_i_pclk",
1145*85cc5be6SGyoungBo Min 	     "dout_peri_pclk", CLK_CON_PERI_SPI0_IPCLKPORT_I_PCLK, 21,
1146*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1147*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_SPI0_SCLK_SPI, "peri_spi0_ipclkport_i_sclk_spi",
1148*85cc5be6SGyoungBo Min 	     "dout_peri_spi", CLK_CON_PERI_SPI0_IPCLKPORT_I_SCLK_SPI, 21,
1149*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1150*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_UART1_PCLK, "uart1", "dout_peri_pclk",
1151*85cc5be6SGyoungBo Min 	     CLK_CON_PERI_UART1_IPCLKPORT_I_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1152*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_UART1_SCLK_UART, "clk_uart_baud1", "dout_peri_uart1",
1153*85cc5be6SGyoungBo Min 	     CLK_CON_PERI_UART1_IPCLKPORT_I_SCLK_UART, 21,
1154*85cc5be6SGyoungBo Min 	     CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1155*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_UART2_PCLK, "uart2", "dout_peri_pclk",
1156*85cc5be6SGyoungBo Min 	     CLK_CON_PERI_UART2_IPCLKPORT_I_PCLK, 21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1157*85cc5be6SGyoungBo Min 	GATE(CLK_GOUT_PERI_UART2_SCLK_UART, "clk_uart_baud2", "dout_peri_uart2",
1158*85cc5be6SGyoungBo Min 	     CLK_CON_PERI_UART2_IPCLKPORT_I_SCLK_UART,
1159*85cc5be6SGyoungBo Min 	     21, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 0),
1160*85cc5be6SGyoungBo Min };
1161*85cc5be6SGyoungBo Min 
1162*85cc5be6SGyoungBo Min static const struct samsung_cmu_info cmu_peri_info __initconst = {
1163*85cc5be6SGyoungBo Min 	.mux_clks		= cmu_peri_mux_clks,
1164*85cc5be6SGyoungBo Min 	.nr_mux_clks		= ARRAY_SIZE(cmu_peri_mux_clks),
1165*85cc5be6SGyoungBo Min 	.div_clks		= cmu_peri_div_clks,
1166*85cc5be6SGyoungBo Min 	.nr_div_clks		= ARRAY_SIZE(cmu_peri_div_clks),
1167*85cc5be6SGyoungBo Min 	.gate_clks              = cmu_peri_gate_clks,
1168*85cc5be6SGyoungBo Min 	.nr_gate_clks           = ARRAY_SIZE(cmu_peri_gate_clks),
1169*85cc5be6SGyoungBo Min 	.nr_clk_ids		= CMU_PERI_NR_CLK,
1170*85cc5be6SGyoungBo Min 	.clk_regs		= cmu_peri_clk_regs,
1171*85cc5be6SGyoungBo Min 	.nr_clk_regs		= ARRAY_SIZE(cmu_peri_clk_regs),
1172*85cc5be6SGyoungBo Min };
1173*85cc5be6SGyoungBo Min 
1174*85cc5be6SGyoungBo Min static int __init artpec9_cmu_probe(struct platform_device *pdev)
1175*85cc5be6SGyoungBo Min {
1176*85cc5be6SGyoungBo Min 	const struct samsung_cmu_info *info;
1177*85cc5be6SGyoungBo Min 	struct device *dev = &pdev->dev;
1178*85cc5be6SGyoungBo Min 
1179*85cc5be6SGyoungBo Min 	info = of_device_get_match_data(dev);
1180*85cc5be6SGyoungBo Min 	exynos_arm64_register_cmu(dev, dev->of_node, info);
1181*85cc5be6SGyoungBo Min 
1182*85cc5be6SGyoungBo Min 	return 0;
1183*85cc5be6SGyoungBo Min }
1184*85cc5be6SGyoungBo Min 
1185*85cc5be6SGyoungBo Min static const struct of_device_id artpec9_cmu_of_match[] = {
1186*85cc5be6SGyoungBo Min 	{
1187*85cc5be6SGyoungBo Min 		.compatible = "axis,artpec9-cmu-cmu",
1188*85cc5be6SGyoungBo Min 		.data = &cmu_cmu_info,
1189*85cc5be6SGyoungBo Min 	}, {
1190*85cc5be6SGyoungBo Min 		.compatible = "axis,artpec9-cmu-bus",
1191*85cc5be6SGyoungBo Min 		.data = &cmu_bus_info,
1192*85cc5be6SGyoungBo Min 	}, {
1193*85cc5be6SGyoungBo Min 		.compatible = "axis,artpec9-cmu-core",
1194*85cc5be6SGyoungBo Min 		.data = &cmu_core_info,
1195*85cc5be6SGyoungBo Min 	}, {
1196*85cc5be6SGyoungBo Min 		.compatible = "axis,artpec9-cmu-cpucl",
1197*85cc5be6SGyoungBo Min 		.data = &cmu_cpucl_info,
1198*85cc5be6SGyoungBo Min 	}, {
1199*85cc5be6SGyoungBo Min 		.compatible = "axis,artpec9-cmu-fsys0",
1200*85cc5be6SGyoungBo Min 		.data = &cmu_fsys0_info,
1201*85cc5be6SGyoungBo Min 	}, {
1202*85cc5be6SGyoungBo Min 		.compatible = "axis,artpec9-cmu-fsys1",
1203*85cc5be6SGyoungBo Min 		.data = &cmu_fsys1_info,
1204*85cc5be6SGyoungBo Min 	}, {
1205*85cc5be6SGyoungBo Min 		.compatible = "axis,artpec9-cmu-peri",
1206*85cc5be6SGyoungBo Min 		.data = &cmu_peri_info,
1207*85cc5be6SGyoungBo Min 	}, {
1208*85cc5be6SGyoungBo Min 	},
1209*85cc5be6SGyoungBo Min };
1210*85cc5be6SGyoungBo Min 
1211*85cc5be6SGyoungBo Min static struct platform_driver artpec9_cmu_driver __refdata = {
1212*85cc5be6SGyoungBo Min 	.driver = {
1213*85cc5be6SGyoungBo Min 		.name = "artpec9-cmu",
1214*85cc5be6SGyoungBo Min 		.of_match_table = artpec9_cmu_of_match,
1215*85cc5be6SGyoungBo Min 		.suppress_bind_attrs = true,
1216*85cc5be6SGyoungBo Min 	},
1217*85cc5be6SGyoungBo Min 	.probe = artpec9_cmu_probe,
1218*85cc5be6SGyoungBo Min };
1219*85cc5be6SGyoungBo Min 
1220*85cc5be6SGyoungBo Min static int __init artpec9_cmu_init(void)
1221*85cc5be6SGyoungBo Min {
1222*85cc5be6SGyoungBo Min 	return platform_driver_register(&artpec9_cmu_driver);
1223*85cc5be6SGyoungBo Min }
1224*85cc5be6SGyoungBo Min core_initcall(artpec9_cmu_init);
1225