1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
4  * Author: Chanho Park <chanho61.park@samsung.com>
5  *
6  * Common Clock Framework support for ExynosAuto V9 SoC.
7  */
8 
9 #include <linux/clk.h>
10 #include <linux/clk-provider.h>
11 #include <linux/of.h>
12 #include <linux/platform_device.h>
13 
14 #include <dt-bindings/clock/samsung,exynosautov9.h>
15 
16 #include "clk.h"
17 #include "clk-exynos-arm64.h"
18 
19 /* NOTE: Must be equal to the last clock ID increased by one */
20 #define CLKS_NR_TOP			(GOUT_CLKCMU_PERIS_BUS + 1)
21 #define CLKS_NR_BUSMC			(CLK_GOUT_BUSMC_SPDMA_PCLK + 1)
22 #define CLKS_NR_CORE			(CLK_GOUT_CORE_CMU_CORE_PCLK + 1)
23 #define CLKS_NR_FSYS0			(CLK_GOUT_FSYS0_PCIE_GEN3B_4L_CLK + 1)
24 #define CLKS_NR_FSYS1			(CLK_GOUT_FSYS1_USB30_1_ACLK + 1)
25 #define CLKS_NR_FSYS2			(CLK_GOUT_FSYS2_UFS_EMBD1_UNIPRO + 1)
26 #define CLKS_NR_PERIC0			(CLK_GOUT_PERIC0_PCLK_11 + 1)
27 #define CLKS_NR_PERIC1			(CLK_GOUT_PERIC1_PCLK_11 + 1)
28 #define CLKS_NR_PERIS			(CLK_GOUT_WDT_CLUSTER1 + 1)
29 
30 /* ---- CMU_TOP ------------------------------------------------------------ */
31 
32 /* Register Offset definitions for CMU_TOP (0x1b240000) */
33 #define PLL_LOCKTIME_PLL_SHARED0		0x0000
34 #define PLL_LOCKTIME_PLL_SHARED1		0x0004
35 #define PLL_LOCKTIME_PLL_SHARED2		0x0008
36 #define PLL_LOCKTIME_PLL_SHARED3		0x000c
37 #define PLL_LOCKTIME_PLL_SHARED4		0x0010
38 #define PLL_CON0_PLL_SHARED0			0x0100
39 #define PLL_CON3_PLL_SHARED0			0x010c
40 #define PLL_CON0_PLL_SHARED1			0x0140
41 #define PLL_CON3_PLL_SHARED1			0x014c
42 #define PLL_CON0_PLL_SHARED2			0x0180
43 #define PLL_CON3_PLL_SHARED2			0x018c
44 #define PLL_CON0_PLL_SHARED3			0x01c0
45 #define PLL_CON3_PLL_SHARED3			0x01cc
46 #define PLL_CON0_PLL_SHARED4			0x0200
47 #define PLL_CON3_PLL_SHARED4			0x020c
48 
49 /* MUX */
50 #define CLK_CON_MUX_MUX_CLKCMU_ACC_BUS		0x1000
51 #define CLK_CON_MUX_MUX_CLKCMU_APM_BUS		0x1004
52 #define CLK_CON_MUX_MUX_CLKCMU_AUD_BUS		0x1008
53 #define CLK_CON_MUX_MUX_CLKCMU_AUD_CPU		0x100c
54 #define CLK_CON_MUX_MUX_CLKCMU_BUSC_BUS		0x1010
55 #define CLK_CON_MUX_MUX_CLKCMU_BUSMC_BUS	0x1018
56 #define CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST	0x101c
57 #define CLK_CON_MUX_MUX_CLKCMU_CORE_BUS		0x1020
58 #define CLK_CON_MUX_MUX_CLKCMU_CPUCL0_CLUSTER	0x1024
59 #define CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH	0x102c
60 #define CLK_CON_MUX_MUX_CLKCMU_CPUCL1_CLUSTER	0x1030
61 #define CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH	0x1034
62 #define CLK_CON_MUX_MUX_CLKCMU_DPTX_BUS		0x1040
63 #define CLK_CON_MUX_MUX_CLKCMU_DPTX_DPGTC	0x1044
64 #define CLK_CON_MUX_MUX_CLKCMU_DPUM_BUS		0x1048
65 #define CLK_CON_MUX_MUX_CLKCMU_DPUS0_BUS	0x104c
66 #define CLK_CON_MUX_MUX_CLKCMU_DPUS1_BUS	0x1050
67 #define CLK_CON_MUX_MUX_CLKCMU_FSYS0_BUS	0x1054
68 #define CLK_CON_MUX_MUX_CLKCMU_FSYS0_PCIE	0x1058
69 #define CLK_CON_MUX_MUX_CLKCMU_FSYS1_BUS	0x105c
70 #define CLK_CON_MUX_MUX_CLKCMU_FSYS1_MMC_CARD	0x1060
71 #define CLK_CON_MUX_MUX_CLKCMU_FSYS1_USBDRD	0x1064
72 #define CLK_CON_MUX_MUX_CLKCMU_FSYS2_BUS	0x1068
73 #define CLK_CON_MUX_MUX_CLKCMU_FSYS2_ETHERNET	0x106c
74 #define CLK_CON_MUX_MUX_CLKCMU_FSYS2_UFS_EMBD	0x1070
75 #define CLK_CON_MUX_MUX_CLKCMU_G2D_G2D		0x1074
76 #define CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL		0x1078
77 #define CLK_CON_MUX_MUX_CLKCMU_G3D00_SWITCH	0x107c
78 #define CLK_CON_MUX_MUX_CLKCMU_G3D01_SWITCH	0x1080
79 #define CLK_CON_MUX_MUX_CLKCMU_G3D1_SWITCH	0x1084
80 #define CLK_CON_MUX_MUX_CLKCMU_ISPB_BUS		0x108c
81 #define CLK_CON_MUX_MUX_CLKCMU_MFC_MFC		0x1090
82 #define CLK_CON_MUX_MUX_CLKCMU_MFC_WFD		0x1094
83 #define CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH	0x109c
84 #define CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP		0x1098
85 #define CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH	0x109c
86 #define CLK_CON_MUX_MUX_CLKCMU_NPU_BUS		0x10a0
87 #define CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS	0x10a4
88 #define CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP	0x10a8
89 #define CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS	0x10ac
90 #define CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP	0x10b0
91 #define CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS	0x10b4
92 #define CLK_CON_MUX_MUX_CMU_CMUREF		0x10c0
93 
94 /* DIV */
95 #define CLK_CON_DIV_CLKCMU_ACC_BUS		0x1800
96 #define CLK_CON_DIV_CLKCMU_APM_BUS		0x1804
97 #define CLK_CON_DIV_CLKCMU_AUD_BUS		0x1808
98 #define CLK_CON_DIV_CLKCMU_AUD_CPU		0x180c
99 #define CLK_CON_DIV_CLKCMU_BUSC_BUS		0x1810
100 #define CLK_CON_DIV_CLKCMU_BUSMC_BUS		0x1818
101 #define CLK_CON_DIV_CLKCMU_CORE_BUS		0x181c
102 #define CLK_CON_DIV_CLKCMU_CPUCL0_CLUSTER	0x1820
103 #define CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH	0x1828
104 #define CLK_CON_DIV_CLKCMU_CPUCL1_CLUSTER	0x182c
105 #define CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH	0x1830
106 #define CLK_CON_DIV_CLKCMU_DPTX_BUS		0x183c
107 #define CLK_CON_DIV_CLKCMU_DPTX_DPGTC		0x1840
108 #define CLK_CON_DIV_CLKCMU_DPUM_BUS		0x1844
109 #define CLK_CON_DIV_CLKCMU_DPUS0_BUS		0x1848
110 #define CLK_CON_DIV_CLKCMU_DPUS1_BUS		0x184c
111 #define CLK_CON_DIV_CLKCMU_FSYS0_BUS		0x1850
112 #define CLK_CON_DIV_CLKCMU_FSYS0_PCIE		0x1854
113 #define CLK_CON_DIV_CLKCMU_FSYS1_BUS		0x1858
114 #define CLK_CON_DIV_CLKCMU_FSYS1_USBDRD		0x185c
115 #define CLK_CON_DIV_CLKCMU_FSYS2_BUS		0x1860
116 #define CLK_CON_DIV_CLKCMU_FSYS2_ETHERNET	0x1864
117 #define CLK_CON_DIV_CLKCMU_FSYS2_UFS_EMBD	0x1868
118 #define CLK_CON_DIV_CLKCMU_G2D_G2D		0x186c
119 #define CLK_CON_DIV_CLKCMU_G2D_MSCL		0x1870
120 #define CLK_CON_DIV_CLKCMU_G3D00_SWITCH		0x1874
121 #define CLK_CON_DIV_CLKCMU_G3D01_SWITCH		0x1878
122 #define CLK_CON_DIV_CLKCMU_G3D1_SWITCH		0x187c
123 #define CLK_CON_DIV_CLKCMU_ISPB_BUS		0x1884
124 #define CLK_CON_DIV_CLKCMU_MFC_MFC		0x1888
125 #define CLK_CON_DIV_CLKCMU_MFC_WFD		0x188c
126 #define CLK_CON_DIV_CLKCMU_MIF_BUSP		0x1890
127 #define CLK_CON_DIV_CLKCMU_NPU_BUS		0x1894
128 #define CLK_CON_DIV_CLKCMU_PERIC0_BUS		0x1898
129 #define CLK_CON_DIV_CLKCMU_PERIC0_IP		0x189c
130 #define CLK_CON_DIV_CLKCMU_PERIC1_BUS		0x18a0
131 #define CLK_CON_DIV_CLKCMU_PERIC1_IP		0x18a4
132 #define CLK_CON_DIV_CLKCMU_PERIS_BUS		0x18a8
133 #define CLK_CON_DIV_DIV_CLKCMU_CMU_BOOST	0x18b4
134 
135 #define CLK_CON_DIV_PLL_SHARED0_DIV2		0x18b8
136 #define CLK_CON_DIV_PLL_SHARED0_DIV3		0x18bc
137 #define CLK_CON_DIV_PLL_SHARED1_DIV2		0x18c0
138 #define CLK_CON_DIV_PLL_SHARED1_DIV3		0x18c4
139 #define CLK_CON_DIV_PLL_SHARED1_DIV4		0x18c8
140 #define CLK_CON_DIV_PLL_SHARED2_DIV2		0x18cc
141 #define CLK_CON_DIV_PLL_SHARED2_DIV3		0x18d0
142 #define CLK_CON_DIV_PLL_SHARED2_DIV4		0x18d4
143 #define CLK_CON_DIV_PLL_SHARED4_DIV2		0x18d4
144 #define CLK_CON_DIV_PLL_SHARED4_DIV4		0x18d8
145 
146 /* GATE */
147 #define CLK_CON_GAT_CLKCMU_CMU_BUSC_BOOST	0x2000
148 #define CLK_CON_GAT_CLKCMU_CMU_BUSMC_BOOST	0x2004
149 #define CLK_CON_GAT_CLKCMU_CMU_CORE_BOOST	0x2008
150 #define CLK_CON_GAT_CLKCMU_CMU_CPUCL0_BOOST	0x2010
151 #define CLK_CON_GAT_CLKCMU_CMU_CPUCL1_BOOST	0x2018
152 #define CLK_CON_GAT_CLKCMU_CMU_MIF_BOOST	0x2020
153 #define CLK_CON_GAT_GATE_CLKCMU_FSYS1_MMC_CARD	0x2024
154 #define CLK_CON_GAT_GATE_CLKCMU_MIF_SWITCH	0x2028
155 #define CLK_CON_GAT_GATE_CLKCMU_ACC_BUS		0x202c
156 #define CLK_CON_GAT_GATE_CLKCMU_APM_BUS		0x2030
157 #define CLK_CON_GAT_GATE_CLKCMU_AUD_BUS		0x2034
158 #define CLK_CON_GAT_GATE_CLKCMU_AUD_CPU		0x2038
159 #define CLK_CON_GAT_GATE_CLKCMU_BUSC_BUS	0x203c
160 #define CLK_CON_GAT_GATE_CLKCMU_BUSMC_BUS	0x2044
161 #define CLK_CON_GAT_GATE_CLKCMU_CMU_BOOST	0x2048
162 #define CLK_CON_GAT_GATE_CLKCMU_CORE_BUS	0x204c
163 #define CLK_CON_GAT_GATE_CLKCMU_CPUCL0_CLUSTER	0x2050
164 #define CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH	0x2058
165 #define CLK_CON_GAT_GATE_CLKCMU_CPUCL1_CLUSTER	0x205c
166 #define CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH	0x2060
167 #define CLK_CON_GAT_GATE_CLKCMU_DPTX_BUS	0x206c
168 #define CLK_CON_GAT_GATE_CLKCMU_DPTX_DPGTC	0x2070
169 #define CLK_CON_GAT_GATE_CLKCMU_DPUM_BUS	0x2060
170 #define CLK_CON_GAT_GATE_CLKCMU_DPUS0_BUS	0x2064
171 #define CLK_CON_GAT_GATE_CLKCMU_DPUS1_BUS	0x207c
172 #define CLK_CON_GAT_GATE_CLKCMU_FSYS0_BUS	0x2080
173 #define CLK_CON_GAT_GATE_CLKCMU_FSYS0_PCIE	0x2084
174 #define CLK_CON_GAT_GATE_CLKCMU_FSYS1_BUS	0x2088
175 #define CLK_CON_GAT_GATE_CLKCMU_FSYS1_USBDRD	0x208c
176 #define CLK_CON_GAT_GATE_CLKCMU_FSYS2_BUS	0x2090
177 #define CLK_CON_GAT_GATE_CLKCMU_FSYS2_ETHERNET	0x2094
178 #define CLK_CON_GAT_GATE_CLKCMU_FSYS2_UFS_EMBD	0x2098
179 #define CLK_CON_GAT_GATE_CLKCMU_G2D_G2D		0x209c
180 #define CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL	0x20a0
181 #define CLK_CON_GAT_GATE_CLKCMU_G3D00_SWITCH	0x20a4
182 #define CLK_CON_GAT_GATE_CLKCMU_G3D01_SWITCH	0x20a8
183 #define CLK_CON_GAT_GATE_CLKCMU_G3D1_SWITCH	0x20ac
184 #define CLK_CON_GAT_GATE_CLKCMU_ISPB_BUS	0x20b4
185 #define CLK_CON_GAT_GATE_CLKCMU_MFC_MFC		0x20b8
186 #define CLK_CON_GAT_GATE_CLKCMU_MFC_WFD		0x20bc
187 #define CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP	0x20c0
188 #define CLK_CON_GAT_GATE_CLKCMU_NPU_BUS		0x20c4
189 #define CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS	0x20c8
190 #define CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP	0x20cc
191 #define CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS	0x20d0
192 #define CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP	0x20d4
193 #define CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS	0x20d8
194 
195 static const unsigned long top_clk_regs[] __initconst = {
196 	PLL_LOCKTIME_PLL_SHARED0,
197 	PLL_LOCKTIME_PLL_SHARED1,
198 	PLL_LOCKTIME_PLL_SHARED2,
199 	PLL_LOCKTIME_PLL_SHARED3,
200 	PLL_LOCKTIME_PLL_SHARED4,
201 	PLL_CON0_PLL_SHARED0,
202 	PLL_CON3_PLL_SHARED0,
203 	PLL_CON0_PLL_SHARED1,
204 	PLL_CON3_PLL_SHARED1,
205 	PLL_CON0_PLL_SHARED2,
206 	PLL_CON3_PLL_SHARED2,
207 	PLL_CON0_PLL_SHARED3,
208 	PLL_CON3_PLL_SHARED3,
209 	PLL_CON0_PLL_SHARED4,
210 	PLL_CON3_PLL_SHARED4,
211 	CLK_CON_MUX_MUX_CLKCMU_ACC_BUS,
212 	CLK_CON_MUX_MUX_CLKCMU_APM_BUS,
213 	CLK_CON_MUX_MUX_CLKCMU_AUD_BUS,
214 	CLK_CON_MUX_MUX_CLKCMU_AUD_CPU,
215 	CLK_CON_MUX_MUX_CLKCMU_BUSC_BUS,
216 	CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST,
217 	CLK_CON_MUX_MUX_CLKCMU_CORE_BUS,
218 	CLK_CON_MUX_MUX_CLKCMU_CPUCL0_CLUSTER,
219 	CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH,
220 	CLK_CON_MUX_MUX_CLKCMU_CPUCL1_CLUSTER,
221 	CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH,
222 	CLK_CON_MUX_MUX_CLKCMU_DPTX_BUS,
223 	CLK_CON_MUX_MUX_CLKCMU_DPTX_DPGTC,
224 	CLK_CON_MUX_MUX_CLKCMU_DPUM_BUS,
225 	CLK_CON_MUX_MUX_CLKCMU_DPUS0_BUS,
226 	CLK_CON_MUX_MUX_CLKCMU_DPUS1_BUS,
227 	CLK_CON_MUX_MUX_CLKCMU_FSYS0_BUS,
228 	CLK_CON_MUX_MUX_CLKCMU_FSYS0_PCIE,
229 	CLK_CON_MUX_MUX_CLKCMU_FSYS1_BUS,
230 	CLK_CON_MUX_MUX_CLKCMU_FSYS1_MMC_CARD,
231 	CLK_CON_MUX_MUX_CLKCMU_FSYS1_USBDRD,
232 	CLK_CON_MUX_MUX_CLKCMU_FSYS2_BUS,
233 	CLK_CON_MUX_MUX_CLKCMU_FSYS2_ETHERNET,
234 	CLK_CON_MUX_MUX_CLKCMU_FSYS2_UFS_EMBD,
235 	CLK_CON_MUX_MUX_CLKCMU_G2D_G2D,
236 	CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL,
237 	CLK_CON_MUX_MUX_CLKCMU_G3D00_SWITCH,
238 	CLK_CON_MUX_MUX_CLKCMU_G3D01_SWITCH,
239 	CLK_CON_MUX_MUX_CLKCMU_G3D1_SWITCH,
240 	CLK_CON_MUX_MUX_CLKCMU_ISPB_BUS,
241 	CLK_CON_MUX_MUX_CLKCMU_MFC_MFC,
242 	CLK_CON_MUX_MUX_CLKCMU_MFC_WFD,
243 	CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH,
244 	CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP,
245 	CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH,
246 	CLK_CON_MUX_MUX_CLKCMU_NPU_BUS,
247 	CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS,
248 	CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP,
249 	CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS,
250 	CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP,
251 	CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS,
252 	CLK_CON_MUX_MUX_CMU_CMUREF,
253 	CLK_CON_DIV_CLKCMU_ACC_BUS,
254 	CLK_CON_DIV_CLKCMU_APM_BUS,
255 	CLK_CON_DIV_CLKCMU_AUD_BUS,
256 	CLK_CON_DIV_CLKCMU_AUD_CPU,
257 	CLK_CON_DIV_CLKCMU_BUSC_BUS,
258 	CLK_CON_DIV_CLKCMU_BUSMC_BUS,
259 	CLK_CON_DIV_CLKCMU_CORE_BUS,
260 	CLK_CON_DIV_CLKCMU_CPUCL0_CLUSTER,
261 	CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH,
262 	CLK_CON_DIV_CLKCMU_CPUCL1_CLUSTER,
263 	CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH,
264 	CLK_CON_DIV_CLKCMU_DPTX_BUS,
265 	CLK_CON_DIV_CLKCMU_DPTX_DPGTC,
266 	CLK_CON_DIV_CLKCMU_DPUM_BUS,
267 	CLK_CON_DIV_CLKCMU_DPUS0_BUS,
268 	CLK_CON_DIV_CLKCMU_DPUS1_BUS,
269 	CLK_CON_DIV_CLKCMU_FSYS0_BUS,
270 	CLK_CON_DIV_CLKCMU_FSYS0_PCIE,
271 	CLK_CON_DIV_CLKCMU_FSYS1_BUS,
272 	CLK_CON_DIV_CLKCMU_FSYS1_USBDRD,
273 	CLK_CON_DIV_CLKCMU_FSYS2_BUS,
274 	CLK_CON_DIV_CLKCMU_FSYS2_ETHERNET,
275 	CLK_CON_DIV_CLKCMU_FSYS2_UFS_EMBD,
276 	CLK_CON_DIV_CLKCMU_G2D_G2D,
277 	CLK_CON_DIV_CLKCMU_G2D_MSCL,
278 	CLK_CON_DIV_CLKCMU_G3D00_SWITCH,
279 	CLK_CON_DIV_CLKCMU_G3D01_SWITCH,
280 	CLK_CON_DIV_CLKCMU_G3D1_SWITCH,
281 	CLK_CON_DIV_CLKCMU_ISPB_BUS,
282 	CLK_CON_DIV_CLKCMU_MFC_MFC,
283 	CLK_CON_DIV_CLKCMU_MFC_WFD,
284 	CLK_CON_DIV_CLKCMU_MIF_BUSP,
285 	CLK_CON_DIV_CLKCMU_NPU_BUS,
286 	CLK_CON_DIV_CLKCMU_PERIC0_BUS,
287 	CLK_CON_DIV_CLKCMU_PERIC0_IP,
288 	CLK_CON_DIV_CLKCMU_PERIC1_BUS,
289 	CLK_CON_DIV_CLKCMU_PERIC1_IP,
290 	CLK_CON_DIV_CLKCMU_PERIS_BUS,
291 	CLK_CON_DIV_DIV_CLKCMU_CMU_BOOST,
292 	CLK_CON_DIV_PLL_SHARED0_DIV2,
293 	CLK_CON_DIV_PLL_SHARED0_DIV3,
294 	CLK_CON_DIV_PLL_SHARED1_DIV2,
295 	CLK_CON_DIV_PLL_SHARED1_DIV3,
296 	CLK_CON_DIV_PLL_SHARED1_DIV4,
297 	CLK_CON_DIV_PLL_SHARED2_DIV2,
298 	CLK_CON_DIV_PLL_SHARED2_DIV3,
299 	CLK_CON_DIV_PLL_SHARED2_DIV4,
300 	CLK_CON_DIV_PLL_SHARED4_DIV2,
301 	CLK_CON_DIV_PLL_SHARED4_DIV4,
302 	CLK_CON_GAT_CLKCMU_CMU_BUSC_BOOST,
303 	CLK_CON_GAT_CLKCMU_CMU_BUSMC_BOOST,
304 	CLK_CON_GAT_CLKCMU_CMU_CORE_BOOST,
305 	CLK_CON_GAT_CLKCMU_CMU_CPUCL0_BOOST,
306 	CLK_CON_GAT_CLKCMU_CMU_CPUCL1_BOOST,
307 	CLK_CON_GAT_CLKCMU_CMU_MIF_BOOST,
308 	CLK_CON_GAT_GATE_CLKCMU_FSYS1_MMC_CARD,
309 	CLK_CON_GAT_GATE_CLKCMU_MIF_SWITCH,
310 	CLK_CON_GAT_GATE_CLKCMU_ACC_BUS,
311 	CLK_CON_GAT_GATE_CLKCMU_APM_BUS,
312 	CLK_CON_GAT_GATE_CLKCMU_AUD_BUS,
313 	CLK_CON_GAT_GATE_CLKCMU_AUD_CPU,
314 	CLK_CON_GAT_GATE_CLKCMU_BUSC_BUS,
315 	CLK_CON_GAT_GATE_CLKCMU_BUSMC_BUS,
316 	CLK_CON_GAT_GATE_CLKCMU_CMU_BOOST,
317 	CLK_CON_GAT_GATE_CLKCMU_CORE_BUS,
318 	CLK_CON_GAT_GATE_CLKCMU_CPUCL0_CLUSTER,
319 	CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH,
320 	CLK_CON_GAT_GATE_CLKCMU_CPUCL1_CLUSTER,
321 	CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH,
322 	CLK_CON_GAT_GATE_CLKCMU_DPTX_BUS,
323 	CLK_CON_GAT_GATE_CLKCMU_DPTX_DPGTC,
324 	CLK_CON_GAT_GATE_CLKCMU_DPUM_BUS,
325 	CLK_CON_GAT_GATE_CLKCMU_DPUS0_BUS,
326 	CLK_CON_GAT_GATE_CLKCMU_DPUS1_BUS,
327 	CLK_CON_GAT_GATE_CLKCMU_FSYS0_BUS,
328 	CLK_CON_GAT_GATE_CLKCMU_FSYS0_PCIE,
329 	CLK_CON_GAT_GATE_CLKCMU_FSYS1_BUS,
330 	CLK_CON_GAT_GATE_CLKCMU_FSYS1_USBDRD,
331 	CLK_CON_GAT_GATE_CLKCMU_FSYS2_BUS,
332 	CLK_CON_GAT_GATE_CLKCMU_FSYS2_ETHERNET,
333 	CLK_CON_GAT_GATE_CLKCMU_FSYS2_UFS_EMBD,
334 	CLK_CON_GAT_GATE_CLKCMU_G2D_G2D,
335 	CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL,
336 	CLK_CON_GAT_GATE_CLKCMU_G3D00_SWITCH,
337 	CLK_CON_GAT_GATE_CLKCMU_G3D01_SWITCH,
338 	CLK_CON_GAT_GATE_CLKCMU_G3D1_SWITCH,
339 	CLK_CON_GAT_GATE_CLKCMU_ISPB_BUS,
340 	CLK_CON_GAT_GATE_CLKCMU_MFC_MFC,
341 	CLK_CON_GAT_GATE_CLKCMU_MFC_WFD,
342 	CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP,
343 	CLK_CON_GAT_GATE_CLKCMU_NPU_BUS,
344 	CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS,
345 	CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP,
346 	CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS,
347 	CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP,
348 	CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS,
349 };
350 
351 static const struct samsung_pll_clock top_pll_clks[] __initconst = {
352 	/* CMU_TOP_PURECLKCOMP */
353 	PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared0_pll", "oscclk",
354 	    PLL_LOCKTIME_PLL_SHARED0, PLL_CON3_PLL_SHARED0, NULL),
355 	PLL(pll_0822x, FOUT_SHARED1_PLL, "fout_shared1_pll", "oscclk",
356 	    PLL_LOCKTIME_PLL_SHARED1, PLL_CON3_PLL_SHARED1, NULL),
357 	PLL(pll_0822x, FOUT_SHARED2_PLL, "fout_shared2_pll", "oscclk",
358 	    PLL_LOCKTIME_PLL_SHARED2, PLL_CON3_PLL_SHARED2, NULL),
359 	PLL(pll_0822x, FOUT_SHARED3_PLL, "fout_shared3_pll", "oscclk",
360 	    PLL_LOCKTIME_PLL_SHARED3, PLL_CON3_PLL_SHARED3, NULL),
361 	PLL(pll_0822x, FOUT_SHARED4_PLL, "fout_shared4_pll", "oscclk",
362 	    PLL_LOCKTIME_PLL_SHARED4, PLL_CON3_PLL_SHARED4, NULL),
363 };
364 
365 /* List of parent clocks for Muxes in CMU_TOP */
366 PNAME(mout_shared0_pll_p) = { "oscclk", "fout_shared0_pll" };
367 PNAME(mout_shared1_pll_p) = { "oscclk", "fout_shared1_pll" };
368 PNAME(mout_shared2_pll_p) = { "oscclk", "fout_shared2_pll" };
369 PNAME(mout_shared3_pll_p) = { "oscclk", "fout_shared3_pll" };
370 PNAME(mout_shared4_pll_p) = { "oscclk", "fout_shared4_pll" };
371 
372 PNAME(mout_clkcmu_cmu_boost_p) = { "dout_shared2_div3", "dout_shared1_div4",
373 				   "dout_shared2_div4", "dout_shared4_div4" };
374 PNAME(mout_clkcmu_cmu_cmuref_p) = { "oscclk", "dout_cmu_boost" };
375 PNAME(mout_clkcmu_acc_bus_p) = { "dout_shared1_div3", "dout_shared2_div3",
376 				 "dout_shared1_div4", "dout_shared2_div4" };
377 PNAME(mout_clkcmu_apm_bus_p) = { "dout_shared2_div3", "dout_shared1_div4",
378 				 "dout_shared2_div4", "dout_shared4_div4" };
379 PNAME(mout_clkcmu_aud_cpu_p) = { "dout_shared0_div2", "dout_shared1_div2",
380 				 "dout_shared2_div2", "dout_shared0_div3",
381 				 "dout_shared4_div2", "dout_shared1_div3",
382 				 "fout_shared3_pll" };
383 PNAME(mout_clkcmu_aud_bus_p) = { "dout_shared4_div2", "dout_shared1_div3",
384 				  "dout_shared2_div3", "dout_shared1_div4" };
385 PNAME(mout_clkcmu_busc_bus_p) = { "dout_shared2_div3", "dout_shared1_div4",
386 				  "dout_shared2_div4", "dout_shared4_div4" };
387 PNAME(mout_clkcmu_core_bus_p) = { "dout_shared0_div2", "dout_shared1_div2",
388 				  "dout_shared2_div2", "dout_shared0_div3",
389 				  "dout_shared4_div2", "dout_shared1_div3",
390 				  "dout_shared2_div3", "fout_shared3_pll" };
391 PNAME(mout_clkcmu_cpucl0_switch_p) = {
392 	"dout_shared0_div2", "dout_shared1_div2",
393 	"dout_shared2_div2", "dout_shared4_div2" };
394 PNAME(mout_clkcmu_cpucl0_cluster_p) = {
395 	"fout_shared2_pll", "fout_shared4_pll",
396 	"dout_shared0_div2", "dout_shared1_div2",
397 	"dout_shared2_div2", "dout_shared4_div2",
398 	"dout_shared2_div3", "fout_shared3_pll" };
399 PNAME(mout_clkcmu_dptx_bus_p) = { "dout_shared4_div2", "dout_shared2_div3",
400 				  "dout_shared1_div4", "dout_shared2_div4" };
401 PNAME(mout_clkcmu_dptx_dpgtc_p) = { "oscclk", "dout_shared2_div3",
402 				    "dout_shared2_div4", "dout_shared4_div4" };
403 PNAME(mout_clkcmu_dpum_bus_p) = { "dout_shared1_div3", "dout_shared2_div3",
404 				  "dout_shared1_div4", "dout_shared2_div4",
405 				  "dout_shared4_div4", "fout_shared3_pll" };
406 PNAME(mout_clkcmu_fsys0_bus_p)	= {
407 	"dout_shared4_div2", "dout_shared2_div3",
408 	"dout_shared1_div4", "dout_shared2_div4" };
409 PNAME(mout_clkcmu_fsys0_pcie_p) = { "oscclk", "dout_shared2_div4" };
410 PNAME(mout_clkcmu_fsys1_bus_p)	= { "dout_shared2_div3", "dout_shared1_div4",
411 				    "dout_shared2_div4", "dout_shared4_div4" };
412 PNAME(mout_clkcmu_fsys1_usbdrd_p) = {
413 	"oscclk", "dout_shared2_div3",
414 	"dout_shared2_div4", "dout_shared4_div4" };
415 PNAME(mout_clkcmu_fsys1_mmc_card_p) = {
416 	"oscclk", "dout_shared2_div2",
417 	"dout_shared4_div2", "dout_shared2_div3" };
418 PNAME(mout_clkcmu_fsys2_ethernet_p) = {
419 	"oscclk", "dout_shared2_div2",
420 	"dout_shared0_div3", "dout_shared2_div3",
421 	"dout_shared1_div4", "fout_shared3_pll" };
422 PNAME(mout_clkcmu_g2d_g2d_p) = { "dout_shared2_div2", "dout_shared0_div3",
423 				 "dout_shared4_div2", "dout_shared1_div3",
424 				 "dout_shared2_div3", "dout_shared1_div4",
425 				 "dout_shared2_div4", "dout_shared4_div4" };
426 PNAME(mout_clkcmu_g3d0_switch_p) = { "dout_shared0_div2", "dout_shared1_div2",
427 				     "dout_shared2_div2", "dout_shared4_div2" };
428 PNAME(mout_clkcmu_g3d1_switch_p) = { "dout_shared2_div2", "dout_shared4_div2",
429 				     "dout_shared2_div3", "dout_shared1_div4" };
430 PNAME(mout_clkcmu_mif_switch_p) = { "fout_shared0_pll", "fout_shared1_pll",
431 				    "fout_shared2_pll", "fout_shared4_pll",
432 				    "dout_shared0_div2", "dout_shared1_div2",
433 				    "dout_shared2_div2", "fout_shared3_pll" };
434 PNAME(mout_clkcmu_npu_bus_p) = { "dout_shared1_div2", "dout_shared2_div2",
435 				 "dout_shared0_div3", "dout_shared4_div2",
436 				 "dout_shared1_div3", "dout_shared2_div3",
437 				 "dout_shared1_div4", "fout_shared3_pll" };
438 PNAME(mout_clkcmu_peric0_bus_p) = { "dout_shared2_div3", "dout_shared2_div4" };
439 
440 static const struct samsung_mux_clock top_mux_clks[] __initconst = {
441 	/* CMU_TOP_PURECLKCOMP */
442 	MUX(MOUT_SHARED0_PLL, "mout_shared0_pll", mout_shared0_pll_p,
443 	    PLL_CON0_PLL_SHARED0, 4, 1),
444 	MUX(MOUT_SHARED1_PLL, "mout_shared1_pll", mout_shared1_pll_p,
445 	    PLL_CON0_PLL_SHARED1, 4, 1),
446 	MUX(MOUT_SHARED2_PLL, "mout_shared2_pll", mout_shared2_pll_p,
447 	    PLL_CON0_PLL_SHARED2, 4, 1),
448 	MUX(MOUT_SHARED3_PLL, "mout_shared3_pll", mout_shared3_pll_p,
449 	    PLL_CON0_PLL_SHARED3, 4, 1),
450 	MUX(MOUT_SHARED4_PLL, "mout_shared4_pll", mout_shared4_pll_p,
451 	    PLL_CON0_PLL_SHARED4, 4, 1),
452 
453 	/* BOOST */
454 	MUX(MOUT_CLKCMU_CMU_BOOST, "mout_clkcmu_cmu_boost",
455 	    mout_clkcmu_cmu_boost_p, CLK_CON_MUX_MUX_CLKCMU_CMU_BOOST, 0, 2),
456 	MUX(MOUT_CLKCMU_CMU_CMUREF, "mout_clkcmu_cmu_cmuref",
457 	    mout_clkcmu_cmu_cmuref_p, CLK_CON_MUX_MUX_CMU_CMUREF, 0, 1),
458 
459 	/* ACC */
460 	MUX(MOUT_CLKCMU_ACC_BUS, "mout_clkcmu_acc_bus", mout_clkcmu_acc_bus_p,
461 	    CLK_CON_MUX_MUX_CLKCMU_ACC_BUS, 0, 2),
462 
463 	/* APM */
464 	MUX(MOUT_CLKCMU_APM_BUS, "mout_clkcmu_apm_bus", mout_clkcmu_apm_bus_p,
465 	    CLK_CON_MUX_MUX_CLKCMU_APM_BUS, 0, 2),
466 
467 	/* AUD */
468 	MUX(MOUT_CLKCMU_AUD_CPU, "mout_clkcmu_aud_cpu", mout_clkcmu_aud_cpu_p,
469 	    CLK_CON_MUX_MUX_CLKCMU_AUD_CPU, 0, 3),
470 	MUX(MOUT_CLKCMU_AUD_BUS, "mout_clkcmu_aud_bus", mout_clkcmu_aud_bus_p,
471 	    CLK_CON_MUX_MUX_CLKCMU_AUD_BUS, 0, 2),
472 
473 	/* BUSC */
474 	MUX(MOUT_CLKCMU_BUSC_BUS, "mout_clkcmu_busc_bus",
475 	    mout_clkcmu_busc_bus_p, CLK_CON_MUX_MUX_CLKCMU_BUSC_BUS, 0, 2),
476 
477 	/* BUSMC */
478 	MUX(MOUT_CLKCMU_BUSMC_BUS, "mout_clkcmu_busmc_bus",
479 	    mout_clkcmu_busc_bus_p, CLK_CON_MUX_MUX_CLKCMU_BUSMC_BUS, 0, 2),
480 
481 	/* CORE */
482 	MUX(MOUT_CLKCMU_CORE_BUS, "mout_clkcmu_core_bus",
483 	    mout_clkcmu_core_bus_p, CLK_CON_MUX_MUX_CLKCMU_CORE_BUS, 0, 3),
484 
485 	/* CPUCL0 */
486 	MUX(MOUT_CLKCMU_CPUCL0_SWITCH, "mout_clkcmu_cpucl0_switch",
487 	    mout_clkcmu_cpucl0_switch_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL0_SWITCH,
488 	    0, 2),
489 	MUX(MOUT_CLKCMU_CPUCL0_CLUSTER, "mout_clkcmu_cpucl0_cluster",
490 	    mout_clkcmu_cpucl0_cluster_p,
491 	    CLK_CON_MUX_MUX_CLKCMU_CPUCL0_CLUSTER, 0, 3),
492 
493 	/* CPUCL1 */
494 	MUX(MOUT_CLKCMU_CPUCL1_SWITCH, "mout_clkcmu_cpucl1_switch",
495 	    mout_clkcmu_cpucl0_switch_p, CLK_CON_MUX_MUX_CLKCMU_CPUCL1_SWITCH,
496 	    0, 2),
497 	MUX(MOUT_CLKCMU_CPUCL1_CLUSTER, "mout_clkcmu_cpucl1_cluster",
498 	    mout_clkcmu_cpucl0_cluster_p,
499 	    CLK_CON_MUX_MUX_CLKCMU_CPUCL1_CLUSTER, 0, 3),
500 
501 	/* DPTX */
502 	MUX(MOUT_CLKCMU_DPTX_BUS, "mout_clkcmu_dptx_bus",
503 	    mout_clkcmu_dptx_bus_p, CLK_CON_MUX_MUX_CLKCMU_DPTX_BUS, 0, 2),
504 	MUX(MOUT_CLKCMU_DPTX_DPGTC, "mout_clkcmu_dptx_dpgtc",
505 	    mout_clkcmu_dptx_dpgtc_p, CLK_CON_MUX_MUX_CLKCMU_DPTX_DPGTC, 0, 2),
506 
507 	/* DPUM */
508 	MUX(MOUT_CLKCMU_DPUM_BUS, "mout_clkcmu_dpum_bus",
509 	    mout_clkcmu_dpum_bus_p, CLK_CON_MUX_MUX_CLKCMU_DPUM_BUS, 0, 3),
510 
511 	/* DPUS */
512 	MUX(MOUT_CLKCMU_DPUS0_BUS, "mout_clkcmu_dpus0_bus",
513 	    mout_clkcmu_dpum_bus_p, CLK_CON_MUX_MUX_CLKCMU_DPUS0_BUS, 0, 3),
514 	MUX(MOUT_CLKCMU_DPUS1_BUS, "mout_clkcmu_dpus1_bus",
515 	    mout_clkcmu_dpum_bus_p, CLK_CON_MUX_MUX_CLKCMU_DPUS1_BUS, 0, 3),
516 
517 	/* FSYS0 */
518 	MUX(MOUT_CLKCMU_FSYS0_BUS, "mout_clkcmu_fsys0_bus",
519 	    mout_clkcmu_fsys0_bus_p, CLK_CON_MUX_MUX_CLKCMU_FSYS0_BUS, 0, 2),
520 	MUX(MOUT_CLKCMU_FSYS0_PCIE, "mout_clkcmu_fsys0_pcie",
521 	    mout_clkcmu_fsys0_pcie_p, CLK_CON_MUX_MUX_CLKCMU_FSYS0_PCIE, 0, 1),
522 
523 	/* FSYS1 */
524 	MUX(MOUT_CLKCMU_FSYS1_BUS, "mout_clkcmu_fsys1_bus",
525 	    mout_clkcmu_fsys1_bus_p, CLK_CON_MUX_MUX_CLKCMU_FSYS1_BUS, 0, 2),
526 	MUX(MOUT_CLKCMU_FSYS1_USBDRD, "mout_clkcmu_fsys1_usbdrd",
527 	    mout_clkcmu_fsys1_usbdrd_p, CLK_CON_MUX_MUX_CLKCMU_FSYS1_USBDRD,
528 	    0, 2),
529 	MUX(MOUT_CLKCMU_FSYS1_MMC_CARD, "mout_clkcmu_fsys1_mmc_card",
530 	    mout_clkcmu_fsys1_mmc_card_p,
531 	    CLK_CON_MUX_MUX_CLKCMU_FSYS1_MMC_CARD, 0, 2),
532 
533 	/* FSYS2 */
534 	MUX(MOUT_CLKCMU_FSYS2_BUS, "mout_clkcmu_fsys2_bus",
535 	    mout_clkcmu_fsys0_bus_p, CLK_CON_MUX_MUX_CLKCMU_FSYS2_BUS, 0, 2),
536 	MUX(MOUT_CLKCMU_FSYS2_UFS_EMBD, "mout_clkcmu_fsys2_ufs_embd",
537 	    mout_clkcmu_fsys1_usbdrd_p, CLK_CON_MUX_MUX_CLKCMU_FSYS2_UFS_EMBD,
538 	    0, 2),
539 	MUX(MOUT_CLKCMU_FSYS2_ETHERNET, "mout_clkcmu_fsys2_ethernet",
540 	    mout_clkcmu_fsys2_ethernet_p,
541 	    CLK_CON_MUX_MUX_CLKCMU_FSYS2_ETHERNET, 0, 3),
542 
543 	/* G2D */
544 	MUX(MOUT_CLKCMU_G2D_G2D, "mout_clkcmu_g2d_g2d", mout_clkcmu_g2d_g2d_p,
545 	    CLK_CON_MUX_MUX_CLKCMU_G2D_G2D, 0, 3),
546 	MUX(MOUT_CLKCMU_G2D_MSCL, "mout_clkcmu_g2d_mscl",
547 	    mout_clkcmu_fsys1_bus_p, CLK_CON_MUX_MUX_CLKCMU_G2D_MSCL, 0, 2),
548 
549 	/* G3D0 */
550 	MUX(MOUT_CLKCMU_G3D00_SWITCH, "mout_clkcmu_g3d00_switch",
551 	    mout_clkcmu_g3d0_switch_p, CLK_CON_MUX_MUX_CLKCMU_G3D00_SWITCH,
552 	    0, 2),
553 	MUX(MOUT_CLKCMU_G3D01_SWITCH, "mout_clkcmu_g3d01_switch",
554 	    mout_clkcmu_g3d0_switch_p, CLK_CON_MUX_MUX_CLKCMU_G3D01_SWITCH,
555 	    0, 2),
556 
557 	/* G3D1 */
558 	MUX(MOUT_CLKCMU_G3D1_SWITCH, "mout_clkcmu_g3d1_switch",
559 	    mout_clkcmu_g3d1_switch_p, CLK_CON_MUX_MUX_CLKCMU_G3D1_SWITCH,
560 	    0, 2),
561 
562 	/* ISPB */
563 	MUX(MOUT_CLKCMU_ISPB_BUS, "mout_clkcmu_ispb_bus",
564 	    mout_clkcmu_acc_bus_p, CLK_CON_MUX_MUX_CLKCMU_ISPB_BUS, 0, 2),
565 
566 	/* MFC */
567 	MUX(MOUT_CLKCMU_MFC_MFC, "mout_clkcmu_mfc_mfc",
568 	    mout_clkcmu_g3d1_switch_p, CLK_CON_MUX_MUX_CLKCMU_MFC_MFC, 0, 2),
569 	MUX(MOUT_CLKCMU_MFC_WFD, "mout_clkcmu_mfc_wfd",
570 	    mout_clkcmu_fsys0_bus_p, CLK_CON_MUX_MUX_CLKCMU_MFC_WFD, 0, 2),
571 
572 	/* MIF */
573 	MUX(MOUT_CLKCMU_MIF_SWITCH, "mout_clkcmu_mif_switch",
574 	    mout_clkcmu_mif_switch_p, CLK_CON_MUX_MUX_CLKCMU_MIF_SWITCH, 0, 3),
575 	MUX(MOUT_CLKCMU_MIF_BUSP, "mout_clkcmu_mif_busp",
576 	    mout_clkcmu_fsys1_bus_p, CLK_CON_MUX_MUX_CLKCMU_MIF_BUSP, 0, 2),
577 
578 	/* NPU */
579 	MUX(MOUT_CLKCMU_NPU_BUS, "mout_clkcmu_npu_bus", mout_clkcmu_npu_bus_p,
580 	    CLK_CON_MUX_MUX_CLKCMU_NPU_BUS, 0, 3),
581 
582 	/* PERIC0 */
583 	MUX(MOUT_CLKCMU_PERIC0_BUS, "mout_clkcmu_peric0_bus",
584 	    mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC0_BUS, 0, 1),
585 	MUX(MOUT_CLKCMU_PERIC0_IP, "mout_clkcmu_peric0_ip",
586 	    mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC0_IP, 0, 1),
587 
588 	/* PERIC1 */
589 	MUX(MOUT_CLKCMU_PERIC1_BUS, "mout_clkcmu_peric1_bus",
590 	    mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC1_BUS, 0, 1),
591 	MUX(MOUT_CLKCMU_PERIC1_IP, "mout_clkcmu_peric1_ip",
592 	    mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIC1_IP, 0, 1),
593 
594 	/* PERIS */
595 	MUX(MOUT_CLKCMU_PERIS_BUS, "mout_clkcmu_peris_bus",
596 	    mout_clkcmu_peric0_bus_p, CLK_CON_MUX_MUX_CLKCMU_PERIS_BUS, 0, 1),
597 };
598 
599 static const struct samsung_div_clock top_div_clks[] __initconst = {
600 	/* CMU_TOP_PURECLKCOMP */
601 	DIV(DOUT_SHARED0_DIV3, "dout_shared0_div3", "mout_shared0_pll",
602 	    CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2),
603 	DIV(DOUT_SHARED0_DIV2, "dout_shared0_div2", "mout_shared0_pll",
604 	    CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1),
605 
606 	DIV(DOUT_SHARED1_DIV3, "dout_shared1_div3", "mout_shared1_pll",
607 	    CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2),
608 	DIV(DOUT_SHARED1_DIV2, "dout_shared1_div2", "mout_shared1_pll",
609 	    CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1),
610 	DIV(DOUT_SHARED1_DIV4, "dout_shared1_div4", "dout_shared1_div2",
611 	    CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1),
612 
613 	DIV(DOUT_SHARED2_DIV3, "dout_shared2_div3", "mout_shared2_pll",
614 	    CLK_CON_DIV_PLL_SHARED2_DIV3, 0, 2),
615 	DIV(DOUT_SHARED2_DIV2, "dout_shared2_div2", "mout_shared2_pll",
616 	    CLK_CON_DIV_PLL_SHARED2_DIV2, 0, 1),
617 	DIV(DOUT_SHARED2_DIV4, "dout_shared2_div4", "dout_shared2_div2",
618 	    CLK_CON_DIV_PLL_SHARED2_DIV4, 0, 1),
619 
620 	DIV(DOUT_SHARED4_DIV2, "dout_shared4_div2", "mout_shared4_pll",
621 	    CLK_CON_DIV_PLL_SHARED4_DIV2, 0, 1),
622 	DIV(DOUT_SHARED4_DIV4, "dout_shared4_div4", "dout_shared4_div2",
623 	    CLK_CON_DIV_PLL_SHARED4_DIV4, 0, 1),
624 
625 	/* BOOST */
626 	DIV(DOUT_CLKCMU_CMU_BOOST, "dout_clkcmu_cmu_boost",
627 	    "gout_clkcmu_cmu_boost", CLK_CON_DIV_DIV_CLKCMU_CMU_BOOST, 0, 2),
628 
629 	/* ACC */
630 	DIV(DOUT_CLKCMU_ACC_BUS, "dout_clkcmu_acc_bus", "gout_clkcmu_acc_bus",
631 	    CLK_CON_DIV_CLKCMU_ACC_BUS, 0, 4),
632 
633 	/* APM */
634 	DIV(DOUT_CLKCMU_APM_BUS, "dout_clkcmu_apm_bus", "gout_clkcmu_apm_bus",
635 	    CLK_CON_DIV_CLKCMU_APM_BUS, 0, 3),
636 
637 	/* AUD */
638 	DIV(DOUT_CLKCMU_AUD_CPU, "dout_clkcmu_aud_cpu", "gout_clkcmu_aud_cpu",
639 	    CLK_CON_DIV_CLKCMU_AUD_CPU, 0, 3),
640 	DIV(DOUT_CLKCMU_AUD_BUS, "dout_clkcmu_aud_bus", "gout_clkcmu_aud_bus",
641 	    CLK_CON_DIV_CLKCMU_AUD_BUS, 0, 4),
642 
643 	/* BUSC */
644 	DIV(DOUT_CLKCMU_BUSC_BUS, "dout_clkcmu_busc_bus",
645 	    "gout_clkcmu_busc_bus", CLK_CON_DIV_CLKCMU_BUSC_BUS, 0, 4),
646 
647 	/* BUSMC */
648 	DIV(DOUT_CLKCMU_BUSMC_BUS, "dout_clkcmu_busmc_bus",
649 	    "gout_clkcmu_busmc_bus", CLK_CON_DIV_CLKCMU_BUSMC_BUS, 0, 4),
650 
651 	/* CORE */
652 	DIV(DOUT_CLKCMU_CORE_BUS, "dout_clkcmu_core_bus",
653 	    "gout_clkcmu_core_bus", CLK_CON_DIV_CLKCMU_CORE_BUS, 0, 4),
654 
655 	/* CPUCL0 */
656 	DIV(DOUT_CLKCMU_CPUCL0_SWITCH, "dout_clkcmu_cpucl0_switch",
657 	    "gout_clkcmu_cpucl0_switch", CLK_CON_DIV_CLKCMU_CPUCL0_SWITCH,
658 	    0, 3),
659 	DIV(DOUT_CLKCMU_CPUCL0_CLUSTER, "dout_clkcmu_cpucl0_cluster",
660 	    "gout_clkcmu_cpucl0_cluster", CLK_CON_DIV_CLKCMU_CPUCL0_CLUSTER,
661 	    0, 3),
662 
663 	/* CPUCL1 */
664 	DIV(DOUT_CLKCMU_CPUCL1_SWITCH, "dout_clkcmu_cpucl1_switch",
665 	    "gout_clkcmu_cpucl1_switch", CLK_CON_DIV_CLKCMU_CPUCL1_SWITCH,
666 	    0, 3),
667 	DIV(DOUT_CLKCMU_CPUCL1_CLUSTER, "dout_clkcmu_cpucl1_cluster",
668 	    "gout_clkcmu_cpucl1_cluster", CLK_CON_DIV_CLKCMU_CPUCL1_CLUSTER,
669 	    0, 3),
670 
671 	/* DPTX */
672 	DIV(DOUT_CLKCMU_DPTX_BUS, "dout_clkcmu_dptx_bus",
673 	    "gout_clkcmu_dptx_bus", CLK_CON_DIV_CLKCMU_DPTX_BUS, 0, 4),
674 	DIV(DOUT_CLKCMU_DPTX_DPGTC, "dout_clkcmu_dptx_dpgtc",
675 	    "gout_clkcmu_dptx_dpgtc", CLK_CON_DIV_CLKCMU_DPTX_DPGTC, 0, 3),
676 
677 	/* DPUM */
678 	DIV(DOUT_CLKCMU_DPUM_BUS, "dout_clkcmu_dpum_bus",
679 	    "gout_clkcmu_dpum_bus", CLK_CON_DIV_CLKCMU_DPUM_BUS, 0, 4),
680 
681 	/* DPUS */
682 	DIV(DOUT_CLKCMU_DPUS0_BUS, "dout_clkcmu_dpus0_bus",
683 	    "gout_clkcmu_dpus0_bus", CLK_CON_DIV_CLKCMU_DPUS0_BUS, 0, 4),
684 	DIV(DOUT_CLKCMU_DPUS1_BUS, "dout_clkcmu_dpus1_bus",
685 	    "gout_clkcmu_dpus1_bus", CLK_CON_DIV_CLKCMU_DPUS1_BUS, 0, 4),
686 
687 	/* FSYS0 */
688 	DIV(DOUT_CLKCMU_FSYS0_BUS, "dout_clkcmu_fsys0_bus",
689 	    "gout_clkcmu_fsys0_bus", CLK_CON_DIV_CLKCMU_FSYS0_BUS, 0, 4),
690 
691 	/* FSYS1 */
692 	DIV(DOUT_CLKCMU_FSYS1_BUS, "dout_clkcmu_fsys1_bus",
693 	    "gout_clkcmu_fsys1_bus", CLK_CON_DIV_CLKCMU_FSYS1_BUS, 0, 4),
694 	DIV(DOUT_CLKCMU_FSYS1_USBDRD, "dout_clkcmu_fsys1_usbdrd",
695 	    "gout_clkcmu_fsys1_usbdrd", CLK_CON_DIV_CLKCMU_FSYS1_USBDRD, 0, 4),
696 
697 	/* FSYS2 */
698 	DIV(DOUT_CLKCMU_FSYS2_BUS, "dout_clkcmu_fsys2_bus",
699 	    "gout_clkcmu_fsys2_bus", CLK_CON_DIV_CLKCMU_FSYS2_BUS, 0, 4),
700 	DIV(DOUT_CLKCMU_FSYS2_UFS_EMBD, "dout_clkcmu_fsys2_ufs_embd",
701 	    "gout_clkcmu_fsys2_ufs_embd", CLK_CON_DIV_CLKCMU_FSYS2_UFS_EMBD,
702 	    0, 3),
703 	DIV(DOUT_CLKCMU_FSYS2_ETHERNET, "dout_clkcmu_fsys2_ethernet",
704 	    "gout_clkcmu_fsys2_ethernet", CLK_CON_DIV_CLKCMU_FSYS2_ETHERNET,
705 	    0, 3),
706 
707 	/* G2D */
708 	DIV(DOUT_CLKCMU_G2D_G2D, "dout_clkcmu_g2d_g2d", "gout_clkcmu_g2d_g2d",
709 	    CLK_CON_DIV_CLKCMU_G2D_G2D, 0, 4),
710 	DIV(DOUT_CLKCMU_G2D_MSCL, "dout_clkcmu_g2d_mscl",
711 	    "gout_clkcmu_g2d_mscl", CLK_CON_DIV_CLKCMU_G2D_MSCL, 0, 4),
712 
713 	/* G3D0 */
714 	DIV(DOUT_CLKCMU_G3D00_SWITCH, "dout_clkcmu_g3d00_switch",
715 	    "gout_clkcmu_g3d00_switch", CLK_CON_DIV_CLKCMU_G3D00_SWITCH, 0, 3),
716 	DIV(DOUT_CLKCMU_G3D01_SWITCH, "dout_clkcmu_g3d01_switch",
717 	    "gout_clkcmu_g3d01_switch", CLK_CON_DIV_CLKCMU_G3D01_SWITCH, 0, 3),
718 
719 	/* G3D1 */
720 	DIV(DOUT_CLKCMU_G3D1_SWITCH, "dout_clkcmu_g3d1_switch",
721 	    "gout_clkcmu_g3d1_switch", CLK_CON_DIV_CLKCMU_G3D1_SWITCH, 0, 3),
722 
723 	/* ISPB */
724 	DIV(DOUT_CLKCMU_ISPB_BUS, "dout_clkcmu_ispb_bus",
725 	    "gout_clkcmu_ispb_bus", CLK_CON_DIV_CLKCMU_ISPB_BUS, 0, 4),
726 
727 	/* MFC */
728 	DIV(DOUT_CLKCMU_MFC_MFC, "dout_clkcmu_mfc_mfc", "gout_clkcmu_mfc_mfc",
729 	    CLK_CON_DIV_CLKCMU_MFC_MFC, 0, 4),
730 	DIV(DOUT_CLKCMU_MFC_WFD, "dout_clkcmu_mfc_wfd", "gout_clkcmu_mfc_wfd",
731 	    CLK_CON_DIV_CLKCMU_MFC_WFD, 0, 4),
732 
733 	/* MIF */
734 	DIV(DOUT_CLKCMU_MIF_BUSP, "dout_clkcmu_mif_busp",
735 	    "gout_clkcmu_mif_busp", CLK_CON_DIV_CLKCMU_MIF_BUSP, 0, 4),
736 
737 	/* NPU */
738 	DIV(DOUT_CLKCMU_NPU_BUS, "dout_clkcmu_npu_bus", "gout_clkcmu_npu_bus",
739 	    CLK_CON_DIV_CLKCMU_NPU_BUS, 0, 4),
740 
741 	/* PERIC0 */
742 	DIV(DOUT_CLKCMU_PERIC0_BUS, "dout_clkcmu_peric0_bus",
743 	    "gout_clkcmu_peric0_bus", CLK_CON_DIV_CLKCMU_PERIC0_BUS, 0, 4),
744 	DIV(DOUT_CLKCMU_PERIC0_IP, "dout_clkcmu_peric0_ip",
745 	    "gout_clkcmu_peric0_ip", CLK_CON_DIV_CLKCMU_PERIC0_IP, 0, 4),
746 
747 	/* PERIC1 */
748 	DIV(DOUT_CLKCMU_PERIC1_BUS, "dout_clkcmu_peric1_bus",
749 	    "gout_clkcmu_peric1_bus", CLK_CON_DIV_CLKCMU_PERIC1_BUS, 0, 4),
750 	DIV(DOUT_CLKCMU_PERIC1_IP, "dout_clkcmu_peric1_ip",
751 	    "gout_clkcmu_peric1_ip", CLK_CON_DIV_CLKCMU_PERIC1_IP, 0, 4),
752 
753 	/* PERIS */
754 	DIV(DOUT_CLKCMU_PERIS_BUS, "dout_clkcmu_peris_bus",
755 	    "gout_clkcmu_peris_bus", CLK_CON_DIV_CLKCMU_PERIS_BUS, 0, 4),
756 };
757 
758 static const struct samsung_fixed_factor_clock top_fixed_factor_clks[] __initconst = {
759 	FFACTOR(DOUT_CLKCMU_FSYS0_PCIE, "dout_clkcmu_fsys0_pcie",
760 		"gout_clkcmu_fsys0_pcie", 1, 4, 0),
761 };
762 
763 static const struct samsung_gate_clock top_gate_clks[] __initconst = {
764 	/* BOOST */
765 	GATE(GOUT_CLKCMU_CMU_BOOST, "gout_clkcmu_cmu_boost",
766 	     "mout_clkcmu_cmu_boost", CLK_CON_GAT_GATE_CLKCMU_CMU_BOOST,
767 	     21, 0, 0),
768 
769 	GATE(GOUT_CLKCMU_CPUCL0_BOOST, "gout_clkcmu_cpucl0_boost",
770 	     "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_CPUCL0_BOOST, 21, 0, 0),
771 	GATE(GOUT_CLKCMU_CPUCL1_BOOST, "gout_clkcmu_cpucl1_boost",
772 	     "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_CPUCL1_BOOST, 21, 0, 0),
773 	GATE(GOUT_CLKCMU_CORE_BOOST, "gout_clkcmu_core_boost",
774 	     "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_CORE_BOOST, 21, 0, 0),
775 	GATE(GOUT_CLKCMU_BUSC_BOOST, "gout_clkcmu_busc_boost",
776 	     "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_BUSC_BOOST, 21, 0, 0),
777 
778 	GATE(GOUT_CLKCMU_BUSMC_BOOST, "gout_clkcmu_busmc_boost",
779 	     "dout_cmu_boost", CLK_CON_GAT_CLKCMU_CMU_BUSMC_BOOST, 21, 0, 0),
780 	GATE(GOUT_CLKCMU_MIF_BOOST, "gout_clkcmu_mif_boost", "dout_cmu_boost",
781 	     CLK_CON_GAT_CLKCMU_CMU_MIF_BOOST, 21, 0, 0),
782 
783 	/* ACC */
784 	GATE(GOUT_CLKCMU_ACC_BUS, "gout_clkcmu_acc_bus", "mout_clkcmu_acc_bus",
785 	     CLK_CON_GAT_GATE_CLKCMU_ACC_BUS, 21, 0, 0),
786 
787 	/* APM */
788 	GATE(GOUT_CLKCMU_APM_BUS, "gout_clkcmu_apm_bus", "mout_clkcmu_apm_bus",
789 	     CLK_CON_GAT_GATE_CLKCMU_APM_BUS, 21, CLK_IGNORE_UNUSED, 0),
790 
791 	/* AUD */
792 	GATE(GOUT_CLKCMU_AUD_CPU, "gout_clkcmu_aud_cpu", "mout_clkcmu_aud_cpu",
793 	     CLK_CON_GAT_GATE_CLKCMU_AUD_CPU, 21, 0, 0),
794 	GATE(GOUT_CLKCMU_AUD_BUS, "gout_clkcmu_aud_bus", "mout_clkcmu_aud_bus",
795 	     CLK_CON_GAT_GATE_CLKCMU_AUD_BUS, 21, 0, 0),
796 
797 	/* BUSC */
798 	GATE(GOUT_CLKCMU_BUSC_BUS, "gout_clkcmu_busc_bus",
799 	     "mout_clkcmu_busc_bus", CLK_CON_GAT_GATE_CLKCMU_BUSC_BUS, 21,
800 	     CLK_IS_CRITICAL, 0),
801 
802 	/* BUSMC */
803 	GATE(GOUT_CLKCMU_BUSMC_BUS, "gout_clkcmu_busmc_bus",
804 	     "mout_clkcmu_busmc_bus", CLK_CON_GAT_GATE_CLKCMU_BUSMC_BUS, 21,
805 	     CLK_IS_CRITICAL, 0),
806 
807 	/* CORE */
808 	GATE(GOUT_CLKCMU_CORE_BUS, "gout_clkcmu_core_bus",
809 	     "mout_clkcmu_core_bus", CLK_CON_GAT_GATE_CLKCMU_CORE_BUS,
810 	     21, 0, 0),
811 
812 	/* CPUCL0 */
813 	GATE(GOUT_CLKCMU_CPUCL0_SWITCH, "gout_clkcmu_cpucl0_switch",
814 	     "mout_clkcmu_cpucl0_switch",
815 	     CLK_CON_GAT_GATE_CLKCMU_CPUCL0_SWITCH, 21, CLK_IGNORE_UNUSED, 0),
816 	GATE(GOUT_CLKCMU_CPUCL0_CLUSTER, "gout_clkcmu_cpucl0_cluster",
817 	     "mout_clkcmu_cpucl0_cluster",
818 	     CLK_CON_GAT_GATE_CLKCMU_CPUCL0_CLUSTER, 21, CLK_IGNORE_UNUSED, 0),
819 
820 	/* CPUCL1 */
821 	GATE(GOUT_CLKCMU_CPUCL1_SWITCH, "gout_clkcmu_cpucl1_switch",
822 	     "mout_clkcmu_cpucl1_switch",
823 	     CLK_CON_GAT_GATE_CLKCMU_CPUCL1_SWITCH, 21, CLK_IGNORE_UNUSED, 0),
824 	GATE(GOUT_CLKCMU_CPUCL1_CLUSTER, "gout_clkcmu_cpucl1_cluster",
825 	     "mout_clkcmu_cpucl1_cluster",
826 	     CLK_CON_GAT_GATE_CLKCMU_CPUCL1_CLUSTER, 21, CLK_IGNORE_UNUSED, 0),
827 
828 	/* DPTX */
829 	GATE(GOUT_CLKCMU_DPTX_BUS, "gout_clkcmu_dptx_bus",
830 	     "mout_clkcmu_dptx_bus", CLK_CON_GAT_GATE_CLKCMU_DPTX_BUS,
831 	     21, 0, 0),
832 	GATE(GOUT_CLKCMU_DPTX_DPGTC, "gout_clkcmu_dptx_dpgtc",
833 	     "mout_clkcmu_dptx_dpgtc", CLK_CON_GAT_GATE_CLKCMU_DPTX_DPGTC,
834 	     21, 0, 0),
835 
836 	/* DPUM */
837 	GATE(GOUT_CLKCMU_DPUM_BUS, "gout_clkcmu_dpum_bus",
838 	     "mout_clkcmu_dpum_bus", CLK_CON_GAT_GATE_CLKCMU_DPUM_BUS,
839 	     21, 0, 0),
840 
841 	/* DPUS */
842 	GATE(GOUT_CLKCMU_DPUS0_BUS, "gout_clkcmu_dpus0_bus",
843 	     "mout_clkcmu_dpus0_bus", CLK_CON_GAT_GATE_CLKCMU_DPUS0_BUS,
844 	     21, 0, 0),
845 	GATE(GOUT_CLKCMU_DPUS1_BUS, "gout_clkcmu_dpus1_bus",
846 	     "mout_clkcmu_dpus1_bus", CLK_CON_GAT_GATE_CLKCMU_DPUS1_BUS,
847 	     21, 0, 0),
848 
849 	/* FSYS0 */
850 	GATE(GOUT_CLKCMU_FSYS0_BUS, "gout_clkcmu_fsys0_bus",
851 	     "mout_clkcmu_fsys0_bus", CLK_CON_GAT_GATE_CLKCMU_FSYS0_BUS,
852 	     21, 0, 0),
853 	GATE(GOUT_CLKCMU_FSYS0_PCIE, "gout_clkcmu_fsys0_pcie",
854 	     "mout_clkcmu_fsys0_pcie", CLK_CON_GAT_GATE_CLKCMU_FSYS0_PCIE,
855 	     21, 0, 0),
856 
857 	/* FSYS1 */
858 	GATE(GOUT_CLKCMU_FSYS1_BUS, "gout_clkcmu_fsys1_bus",
859 	     "mout_clkcmu_fsys1_bus", CLK_CON_GAT_GATE_CLKCMU_FSYS1_BUS,
860 	     21, 0, 0),
861 	GATE(GOUT_CLKCMU_FSYS1_USBDRD, "gout_clkcmu_fsys1_usbdrd",
862 	     "mout_clkcmu_fsys1_usbdrd", CLK_CON_GAT_GATE_CLKCMU_FSYS1_USBDRD,
863 	     21, 0, 0),
864 	GATE(GOUT_CLKCMU_FSYS1_MMC_CARD, "gout_clkcmu_fsys1_mmc_card",
865 	     "mout_clkcmu_fsys1_mmc_card",
866 	     CLK_CON_GAT_GATE_CLKCMU_FSYS1_MMC_CARD, 21, 0, 0),
867 
868 	/* FSYS2 */
869 	GATE(GOUT_CLKCMU_FSYS2_BUS, "gout_clkcmu_fsys2_bus",
870 	     "mout_clkcmu_fsys2_bus", CLK_CON_GAT_GATE_CLKCMU_FSYS2_BUS,
871 	     21, 0, 0),
872 	GATE(GOUT_CLKCMU_FSYS2_UFS_EMBD, "gout_clkcmu_fsys2_ufs_embd",
873 	     "mout_clkcmu_fsys2_ufs_embd",
874 	     CLK_CON_GAT_GATE_CLKCMU_FSYS2_UFS_EMBD, 21, 0, 0),
875 	GATE(GOUT_CLKCMU_FSYS2_ETHERNET, "gout_clkcmu_fsys2_ethernet",
876 	     "mout_clkcmu_fsys2_ethernet",
877 	     CLK_CON_GAT_GATE_CLKCMU_FSYS2_ETHERNET, 21, 0, 0),
878 
879 	/* G2D */
880 	GATE(GOUT_CLKCMU_G2D_G2D, "gout_clkcmu_g2d_g2d",
881 	     "mout_clkcmu_g2d_g2d", CLK_CON_GAT_GATE_CLKCMU_G2D_G2D, 21, 0, 0),
882 	GATE(GOUT_CLKCMU_G2D_MSCL, "gout_clkcmu_g2d_mscl",
883 	     "mout_clkcmu_g2d_mscl", CLK_CON_GAT_GATE_CLKCMU_G2D_MSCL,
884 	     21, 0, 0),
885 
886 	/* G3D0 */
887 	GATE(GOUT_CLKCMU_G3D00_SWITCH, "gout_clkcmu_g3d00_switch",
888 	     "mout_clkcmu_g3d00_switch", CLK_CON_GAT_GATE_CLKCMU_G3D00_SWITCH,
889 	     21, 0, 0),
890 	GATE(GOUT_CLKCMU_G3D01_SWITCH, "gout_clkcmu_g3d01_switch",
891 	     "mout_clkcmu_g3d01_switch", CLK_CON_GAT_GATE_CLKCMU_G3D01_SWITCH,
892 	     21, 0, 0),
893 
894 	/* G3D1 */
895 	GATE(GOUT_CLKCMU_G3D1_SWITCH, "gout_clkcmu_g3d1_switch",
896 	     "mout_clkcmu_g3d1_switch", CLK_CON_GAT_GATE_CLKCMU_G3D1_SWITCH,
897 	     21, 0, 0),
898 
899 	/* ISPB */
900 	GATE(GOUT_CLKCMU_ISPB_BUS, "gout_clkcmu_ispb_bus",
901 	     "mout_clkcmu_ispb_bus", CLK_CON_GAT_GATE_CLKCMU_ISPB_BUS,
902 	     21, 0, 0),
903 
904 	/* MFC */
905 	GATE(GOUT_CLKCMU_MFC_MFC, "gout_clkcmu_mfc_mfc", "mout_clkcmu_mfc_mfc",
906 	     CLK_CON_GAT_GATE_CLKCMU_MFC_MFC, 21, 0, 0),
907 	GATE(GOUT_CLKCMU_MFC_WFD, "gout_clkcmu_mfc_wfd", "mout_clkcmu_mfc_wfd",
908 	     CLK_CON_GAT_GATE_CLKCMU_MFC_WFD, 21, 0, 0),
909 
910 	/* MIF */
911 	GATE(GOUT_CLKCMU_MIF_SWITCH, "gout_clkcmu_mif_switch",
912 	     "mout_clkcmu_mif_switch", CLK_CON_GAT_GATE_CLKCMU_MIF_SWITCH,
913 	     21, CLK_IGNORE_UNUSED, 0),
914 	GATE(GOUT_CLKCMU_MIF_BUSP, "gout_clkcmu_mif_busp",
915 	     "mout_clkcmu_mif_busp", CLK_CON_GAT_GATE_CLKCMU_MIF_BUSP,
916 	     21, CLK_IGNORE_UNUSED, 0),
917 
918 	/* NPU */
919 	GATE(GOUT_CLKCMU_NPU_BUS, "gout_clkcmu_npu_bus", "mout_clkcmu_npu_bus",
920 	     CLK_CON_GAT_GATE_CLKCMU_NPU_BUS, 21, 0, 0),
921 
922 	/* PERIC0 */
923 	GATE(GOUT_CLKCMU_PERIC0_BUS, "gout_clkcmu_peric0_bus",
924 	     "mout_clkcmu_peric0_bus", CLK_CON_GAT_GATE_CLKCMU_PERIC0_BUS,
925 	     21, 0, 0),
926 	GATE(GOUT_CLKCMU_PERIC0_IP, "gout_clkcmu_peric0_ip",
927 	     "mout_clkcmu_peric0_ip", CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP,
928 	     21, 0, 0),
929 
930 	/* PERIC1 */
931 	GATE(GOUT_CLKCMU_PERIC1_BUS, "gout_clkcmu_peric1_bus",
932 	     "mout_clkcmu_peric1_bus", CLK_CON_GAT_GATE_CLKCMU_PERIC1_BUS,
933 	     21, 0, 0),
934 	GATE(GOUT_CLKCMU_PERIC1_IP, "gout_clkcmu_peric1_ip",
935 	     "mout_clkcmu_peric1_ip", CLK_CON_GAT_GATE_CLKCMU_PERIC1_IP,
936 	     21, 0, 0),
937 
938 	/* PERIS */
939 	GATE(GOUT_CLKCMU_PERIS_BUS, "gout_clkcmu_peris_bus",
940 	     "mout_clkcmu_peris_bus", CLK_CON_GAT_GATE_CLKCMU_PERIS_BUS,
941 	     21, CLK_IGNORE_UNUSED, 0),
942 };
943 
944 static const struct samsung_cmu_info top_cmu_info __initconst = {
945 	.pll_clks		= top_pll_clks,
946 	.nr_pll_clks		= ARRAY_SIZE(top_pll_clks),
947 	.mux_clks		= top_mux_clks,
948 	.nr_mux_clks		= ARRAY_SIZE(top_mux_clks),
949 	.div_clks		= top_div_clks,
950 	.nr_div_clks		= ARRAY_SIZE(top_div_clks),
951 	.fixed_factor_clks	= top_fixed_factor_clks,
952 	.nr_fixed_factor_clks	= ARRAY_SIZE(top_fixed_factor_clks),
953 	.gate_clks		= top_gate_clks,
954 	.nr_gate_clks		= ARRAY_SIZE(top_gate_clks),
955 	.nr_clk_ids		= CLKS_NR_TOP,
956 	.clk_regs		= top_clk_regs,
957 	.nr_clk_regs		= ARRAY_SIZE(top_clk_regs),
958 };
959 
exynosautov9_cmu_top_init(struct device_node * np)960 static void __init exynosautov9_cmu_top_init(struct device_node *np)
961 {
962 	exynos_arm64_register_cmu(NULL, np, &top_cmu_info);
963 }
964 
965 /* Register CMU_TOP early, as it's a dependency for other early domains */
966 CLK_OF_DECLARE(exynosautov9_cmu_top, "samsung,exynosautov9-cmu-top",
967 	       exynosautov9_cmu_top_init);
968 
969 /* ---- CMU_BUSMC ---------------------------------------------------------- */
970 
971 /* Register Offset definitions for CMU_BUSMC (0x1b200000) */
972 #define PLL_CON0_MUX_CLKCMU_BUSMC_BUS_USER				0x0600
973 #define CLK_CON_DIV_DIV_CLK_BUSMC_BUSP					0x1800
974 #define CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_PDMA0_IPCLKPORT_PCLK		0x2078
975 #define CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_SPDMA_IPCLKPORT_PCLK		0x2080
976 
977 static const unsigned long busmc_clk_regs[] __initconst = {
978 	PLL_CON0_MUX_CLKCMU_BUSMC_BUS_USER,
979 	CLK_CON_DIV_DIV_CLK_BUSMC_BUSP,
980 	CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_PDMA0_IPCLKPORT_PCLK,
981 	CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_SPDMA_IPCLKPORT_PCLK,
982 };
983 
984 /* List of parent clocks for Muxes in CMU_BUSMC */
985 PNAME(mout_busmc_bus_user_p) = { "oscclk", "dout_clkcmu_busmc_bus" };
986 
987 static const struct samsung_mux_clock busmc_mux_clks[] __initconst = {
988 	MUX(CLK_MOUT_BUSMC_BUS_USER, "mout_busmc_bus_user",
989 	    mout_busmc_bus_user_p, PLL_CON0_MUX_CLKCMU_BUSMC_BUS_USER, 4, 1),
990 };
991 
992 static const struct samsung_div_clock busmc_div_clks[] __initconst = {
993 	DIV(CLK_DOUT_BUSMC_BUSP, "dout_busmc_busp", "mout_busmc_bus_user",
994 	    CLK_CON_DIV_DIV_CLK_BUSMC_BUSP, 0, 3),
995 };
996 
997 static const struct samsung_gate_clock busmc_gate_clks[] __initconst = {
998 	GATE(CLK_GOUT_BUSMC_PDMA0_PCLK, "gout_busmc_pdma0_pclk",
999 	     "dout_busmc_busp",
1000 	     CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_PDMA0_IPCLKPORT_PCLK, 21,
1001 	     0, 0),
1002 	GATE(CLK_GOUT_BUSMC_SPDMA_PCLK, "gout_busmc_spdma_pclk",
1003 	     "dout_busmc_busp",
1004 	     CLK_CON_GAT_GOUT_BLK_BUSMC_UID_QE_SPDMA_IPCLKPORT_PCLK, 21,
1005 	     0, 0),
1006 };
1007 
1008 static const struct samsung_cmu_info busmc_cmu_info __initconst = {
1009 	.mux_clks		= busmc_mux_clks,
1010 	.nr_mux_clks		= ARRAY_SIZE(busmc_mux_clks),
1011 	.div_clks		= busmc_div_clks,
1012 	.nr_div_clks		= ARRAY_SIZE(busmc_div_clks),
1013 	.gate_clks		= busmc_gate_clks,
1014 	.nr_gate_clks		= ARRAY_SIZE(busmc_gate_clks),
1015 	.nr_clk_ids		= CLKS_NR_BUSMC,
1016 	.clk_regs		= busmc_clk_regs,
1017 	.nr_clk_regs		= ARRAY_SIZE(busmc_clk_regs),
1018 	.clk_name		= "dout_clkcmu_busmc_bus",
1019 };
1020 
1021 /* ---- CMU_CORE ----------------------------------------------------------- */
1022 
1023 /* Register Offset definitions for CMU_CORE (0x1b030000) */
1024 #define PLL_CON0_MUX_CLKCMU_CORE_BUS_USER				0x0600
1025 #define CLK_CON_MUX_MUX_CORE_CMUREF					0x1000
1026 #define CLK_CON_DIV_DIV_CLK_CORE_BUSP					0x1800
1027 #define CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_CLK			0x2000
1028 #define CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_PCLK			0x2004
1029 #define CLK_CON_GAT_CLK_BLK_CORE_UID_CORE_CMU_CORE_IPCLKPORT_PCLK	0x2008
1030 
1031 static const unsigned long core_clk_regs[] __initconst = {
1032 	PLL_CON0_MUX_CLKCMU_CORE_BUS_USER,
1033 	CLK_CON_MUX_MUX_CORE_CMUREF,
1034 	CLK_CON_DIV_DIV_CLK_CORE_BUSP,
1035 	CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_CLK,
1036 	CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_PCLK,
1037 	CLK_CON_GAT_CLK_BLK_CORE_UID_CORE_CMU_CORE_IPCLKPORT_PCLK,
1038 };
1039 
1040 /* List of parent clocks for Muxes in CMU_CORE */
1041 PNAME(mout_core_bus_user_p) = { "oscclk", "dout_clkcmu_core_bus" };
1042 
1043 static const struct samsung_mux_clock core_mux_clks[] __initconst = {
1044 	MUX(CLK_MOUT_CORE_BUS_USER, "mout_core_bus_user", mout_core_bus_user_p,
1045 	    PLL_CON0_MUX_CLKCMU_CORE_BUS_USER, 4, 1),
1046 };
1047 
1048 static const struct samsung_div_clock core_div_clks[] __initconst = {
1049 	DIV(CLK_DOUT_CORE_BUSP, "dout_core_busp", "mout_core_bus_user",
1050 	    CLK_CON_DIV_DIV_CLK_CORE_BUSP, 0, 3),
1051 };
1052 
1053 static const struct samsung_gate_clock core_gate_clks[] __initconst = {
1054 	GATE(CLK_GOUT_CORE_CCI_CLK, "gout_core_cci_clk", "mout_core_bus_user",
1055 	     CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_CLK, 21,
1056 	     CLK_IS_CRITICAL, 0),
1057 	GATE(CLK_GOUT_CORE_CCI_PCLK, "gout_core_cci_pclk", "dout_core_busp",
1058 	     CLK_CON_GAT_CLK_BLK_CORE_UID_CCI_IPCLKPORT_PCLK, 21,
1059 	     CLK_IS_CRITICAL, 0),
1060 	GATE(CLK_GOUT_CORE_CMU_CORE_PCLK, "gout_core_cmu_core_pclk",
1061 	     "dout_core_busp",
1062 	     CLK_CON_GAT_CLK_BLK_CORE_UID_CORE_CMU_CORE_IPCLKPORT_PCLK, 21,
1063 	     CLK_IS_CRITICAL, 0),
1064 };
1065 
1066 static const struct samsung_cmu_info core_cmu_info __initconst = {
1067 	.mux_clks		= core_mux_clks,
1068 	.nr_mux_clks		= ARRAY_SIZE(core_mux_clks),
1069 	.div_clks		= core_div_clks,
1070 	.nr_div_clks		= ARRAY_SIZE(core_div_clks),
1071 	.gate_clks		= core_gate_clks,
1072 	.nr_gate_clks		= ARRAY_SIZE(core_gate_clks),
1073 	.nr_clk_ids		= CLKS_NR_CORE,
1074 	.clk_regs		= core_clk_regs,
1075 	.nr_clk_regs		= ARRAY_SIZE(core_clk_regs),
1076 	.clk_name		= "dout_clkcmu_core_bus",
1077 };
1078 
1079 /* ---- CMU_FSYS0 ---------------------------------------------------------- */
1080 
1081 /* Register Offset definitions for CMU_FSYS2 (0x17700000) */
1082 #define PLL_CON0_MUX_CLKCMU_FSYS0_BUS_USER	0x0600
1083 #define PLL_CON0_MUX_CLKCMU_FSYS0_PCIE_USER	0x0610
1084 #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK	0x2000
1085 
1086 #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_PHY_REFCLK_IN	0x2004
1087 #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PHY_REFCLK_IN	0x2008
1088 #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_PHY_REFCLK_IN	0x200c
1089 #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PHY_REFCLK_IN	0x2010
1090 #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_PHY_REFCLK_IN	0x2014
1091 #define CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PHY_REFCLK_IN	0x2018
1092 
1093 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_DBI_ACLK	0x205c
1094 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_MSTR_ACLK	0x2060
1095 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_SLV_ACLK	0x2064
1096 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_DBI_ACLK	0x206c
1097 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_MSTR_ACLK	0x2070
1098 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_SLV_ACLK	0x2074
1099 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PIPE_CLK	0x207c
1100 
1101 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_DBI_ACLK	0x2084
1102 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_MSTR_ACLK	0x2088
1103 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_SLV_ACLK	0x208c
1104 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_DBI_ACLK	0x2094
1105 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_MSTR_ACLK	0x2098
1106 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_SLV_ACLK	0x209c
1107 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PIPE_CLK	0x20a4
1108 
1109 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_DBI_ACLK		0x20ac
1110 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_MSTR_ACLK	0x20b0
1111 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_SLV_ACLK		0x20b4
1112 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_DBI_ACLK		0x20bc
1113 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_MSTR_ACLK	0x20c0
1114 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_SLV_ACLK		0x20c4
1115 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PIPE_CLK		0x20cc
1116 
1117 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L0_CLK		0x20d4
1118 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L1_CLK		0x20d8
1119 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_4L_CLK		0x20dc
1120 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L0_CLK		0x20e0
1121 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L1_CLK		0x20e4
1122 #define CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_4L_CLK		0x20e8
1123 
1124 
1125 static const unsigned long fsys0_clk_regs[] __initconst = {
1126 	PLL_CON0_MUX_CLKCMU_FSYS0_BUS_USER,
1127 	PLL_CON0_MUX_CLKCMU_FSYS0_PCIE_USER,
1128 	CLK_CON_GAT_CLK_BLK_FSYS0_UID_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK,
1129 	CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_PHY_REFCLK_IN,
1130 	CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PHY_REFCLK_IN,
1131 	CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_PHY_REFCLK_IN,
1132 	CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PHY_REFCLK_IN,
1133 	CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_PHY_REFCLK_IN,
1134 	CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PHY_REFCLK_IN,
1135 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_DBI_ACLK,
1136 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_MSTR_ACLK,
1137 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_SLV_ACLK,
1138 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_DBI_ACLK,
1139 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_MSTR_ACLK,
1140 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_SLV_ACLK,
1141 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PIPE_CLK,
1142 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_DBI_ACLK,
1143 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_MSTR_ACLK,
1144 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_SLV_ACLK,
1145 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_DBI_ACLK,
1146 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_MSTR_ACLK,
1147 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_SLV_ACLK,
1148 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PIPE_CLK,
1149 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_DBI_ACLK,
1150 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_MSTR_ACLK,
1151 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_SLV_ACLK,
1152 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_DBI_ACLK,
1153 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_MSTR_ACLK,
1154 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_SLV_ACLK,
1155 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PIPE_CLK,
1156 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L0_CLK,
1157 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L1_CLK,
1158 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_4L_CLK,
1159 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L0_CLK,
1160 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L1_CLK,
1161 	CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_4L_CLK,
1162 };
1163 
1164 /* List of parent clocks for Muxes in CMU_FSYS0 */
1165 PNAME(mout_fsys0_bus_user_p) = { "oscclk", "dout_clkcmu_fsys0_bus" };
1166 PNAME(mout_fsys0_pcie_user_p) = { "oscclk", "dout_clkcmu_fsys0_pcie" };
1167 
1168 static const struct samsung_mux_clock fsys0_mux_clks[] __initconst = {
1169 	MUX(CLK_MOUT_FSYS0_BUS_USER, "mout_fsys0_bus_user",
1170 	    mout_fsys0_bus_user_p, PLL_CON0_MUX_CLKCMU_FSYS0_BUS_USER, 4, 1),
1171 	MUX(CLK_MOUT_FSYS0_PCIE_USER, "mout_fsys0_pcie_user",
1172 	    mout_fsys0_pcie_user_p, PLL_CON0_MUX_CLKCMU_FSYS0_PCIE_USER, 4, 1),
1173 };
1174 
1175 static const struct samsung_gate_clock fsys0_gate_clks[] __initconst = {
1176 	GATE(CLK_GOUT_FSYS0_BUS_PCLK, "gout_fsys0_bus_pclk",
1177 	     "mout_fsys0_bus_user",
1178 	     CLK_CON_GAT_CLK_BLK_FSYS0_UID_FSYS0_CMU_FSYS0_IPCLKPORT_PCLK,
1179 	     21, CLK_IGNORE_UNUSED, 0),
1180 
1181 	/* Gen3 2L0 */
1182 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X1_REFCLK,
1183 	     "gout_fsys0_pcie_gen3_2l0_x1_refclk", "mout_fsys0_pcie_user",
1184 	     CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_PHY_REFCLK_IN,
1185 	     21, 0, 0),
1186 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X2_REFCLK,
1187 	     "gout_fsys0_pcie_gen3_2l0_x2_refclk", "mout_fsys0_pcie_user",
1188 	     CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_PHY_REFCLK_IN,
1189 	     21, 0, 0),
1190 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X1_DBI_ACLK,
1191 	     "gout_fsys0_pcie_gen3_2l0_x1_dbi_aclk", "mout_fsys0_bus_user",
1192 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_DBI_ACLK,
1193 	     21, 0, 0),
1194 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X1_MSTR_ACLK,
1195 	     "gout_fsys0_pcie_gen3_2l0_x1_mstr_aclk", "mout_fsys0_bus_user",
1196 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_MSTR_ACLK,
1197 	     21, 0, 0),
1198 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X1_SLV_ACLK,
1199 	     "gout_fsys0_pcie_gen3_2l0_x1_slv_aclk", "mout_fsys0_bus_user",
1200 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X1_SLV_ACLK,
1201 	     21, 0, 0),
1202 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X2_DBI_ACLK,
1203 	     "gout_fsys0_pcie_gen3_2l0_x2_dbi_aclk", "mout_fsys0_bus_user",
1204 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_DBI_ACLK,
1205 	     21, 0, 0),
1206 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X2_MSTR_ACLK,
1207 	     "gout_fsys0_pcie_gen3_2l0_x2_mstr_aclk", "mout_fsys0_bus_user",
1208 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_MSTR_ACLK,
1209 	     21, 0, 0),
1210 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L0_X2_SLV_ACLK,
1211 	     "gout_fsys0_pcie_gen3_2l0_x2_slv_aclk", "mout_fsys0_bus_user",
1212 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L0_X2_SLV_ACLK,
1213 	     21, 0, 0),
1214 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3A_2L0_CLK,
1215 	     "gout_fsys0_pcie_gen3a_2l0_clk", "mout_fsys0_pcie_user",
1216 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L0_CLK,
1217 	     21, 0, 0),
1218 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3B_2L0_CLK,
1219 	     "gout_fsys0_pcie_gen3b_2l0_clk", "mout_fsys0_pcie_user",
1220 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L0_CLK,
1221 	     21, 0, 0),
1222 
1223 	/* Gen3 2L1 */
1224 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X1_REFCLK,
1225 	     "gout_fsys0_pcie_gen3_2l1_x1_refclk", "mout_fsys0_pcie_user",
1226 	     CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_PHY_REFCLK_IN,
1227 	     21, 0, 0),
1228 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X2_REFCLK,
1229 	     "gout_fsys0_pcie_gen3_2l1_x2_refclk", "mout_fsys0_pcie_user",
1230 	     CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_PHY_REFCLK_IN,
1231 	     21, 0, 0),
1232 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X1_DBI_ACLK,
1233 	     "gout_fsys0_pcie_gen3_2l1_x1_dbi_aclk", "mout_fsys0_bus_user",
1234 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_DBI_ACLK,
1235 	     21, 0, 0),
1236 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X1_MSTR_ACLK,
1237 	     "gout_fsys0_pcie_gen3_2l1_x1_mstr_aclk", "mout_fsys0_bus_user",
1238 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_MSTR_ACLK,
1239 	     21, 0, 0),
1240 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X1_SLV_ACLK,
1241 	     "gout_fsys0_pcie_gen3_2l1_x1_slv_aclk", "mout_fsys0_bus_user",
1242 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X1_SLV_ACLK,
1243 	     21, 0, 0),
1244 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X2_DBI_ACLK,
1245 	     "gout_fsys0_pcie_gen3_2l1_x2_dbi_aclk", "mout_fsys0_bus_user",
1246 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_DBI_ACLK,
1247 	     21, 0, 0),
1248 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X2_MSTR_ACLK,
1249 	     "gout_fsys0_pcie_gen3_2l1_x2_mstr_aclk", "mout_fsys0_bus_user",
1250 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_MSTR_ACLK,
1251 	     21, 0, 0),
1252 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_2L1_X2_SLV_ACLK,
1253 	     "gout_fsys0_pcie_gen3_2l1_x2_slv_aclk", "mout_fsys0_bus_user",
1254 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_2L1_X2_SLV_ACLK,
1255 	     21, 0, 0),
1256 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3A_2L1_CLK,
1257 	     "gout_fsys0_pcie_gen3a_2l1_clk", "mout_fsys0_pcie_user",
1258 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_2L1_CLK,
1259 	     21, 0, 0),
1260 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3B_2L1_CLK,
1261 	     "gout_fsys0_pcie_gen3b_2l1_clk", "mout_fsys0_pcie_user",
1262 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_2L1_CLK,
1263 	     21, 0, 0),
1264 
1265 	/* Gen3 4L */
1266 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X2_REFCLK,
1267 	     "gout_fsys0_pcie_gen3_4l_x2_refclk", "mout_fsys0_pcie_user",
1268 	     CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_PHY_REFCLK_IN,
1269 	     21, 0, 0),
1270 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X4_REFCLK,
1271 	     "gout_fsys0_pcie_gen3_4l_x4_refclk", "mout_fsys0_pcie_user",
1272 	     CLK_CON_GAT_CLK_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_PHY_REFCLK_IN,
1273 	     21, 0, 0),
1274 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X2_DBI_ACLK,
1275 	     "gout_fsys0_pcie_gen3_4l_x2_dbi_aclk", "mout_fsys0_bus_user",
1276 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_DBI_ACLK,
1277 	     21, 0, 0),
1278 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X2_MSTR_ACLK,
1279 	     "gout_fsys0_pcie_gen3_4l_x2_mstr_aclk", "mout_fsys0_bus_user",
1280 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_MSTR_ACLK,
1281 	     21, 0, 0),
1282 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X2_SLV_ACLK,
1283 	     "gout_fsys0_pcie_gen3_4l_x2_slv_aclk", "mout_fsys0_bus_user",
1284 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X2_SLV_ACLK,
1285 	     21, 0, 0),
1286 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X4_DBI_ACLK,
1287 	     "gout_fsys0_pcie_gen3_4l_x4_dbi_aclk", "mout_fsys0_bus_user",
1288 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_DBI_ACLK,
1289 	     21, 0, 0),
1290 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X4_MSTR_ACLK,
1291 	     "gout_fsys0_pcie_gen3_4l_x4_mstr_aclk", "mout_fsys0_bus_user",
1292 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_MSTR_ACLK,
1293 	     21, 0, 0),
1294 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3_4L_X4_SLV_ACLK,
1295 	     "gout_fsys0_pcie_gen3_4l_x4_slv_aclk", "mout_fsys0_bus_user",
1296 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3_4L_X4_SLV_ACLK,
1297 	     21, 0, 0),
1298 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3A_4L_CLK,
1299 	     "gout_fsys0_pcie_gen3a_4l_clk", "mout_fsys0_pcie_user",
1300 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3A_4L_CLK,
1301 	     21, 0, 0),
1302 	GATE(CLK_GOUT_FSYS0_PCIE_GEN3B_4L_CLK,
1303 	     "gout_fsys0_pcie_gen3b_4l_clk", "mout_fsys0_pcie_user",
1304 	     CLK_CON_GAT_GOUT_BLK_FSYS0_UID_PCIE_GEN3B_4L_CLK,
1305 	     21, 0, 0),
1306 };
1307 
1308 static const struct samsung_cmu_info fsys0_cmu_info __initconst = {
1309 	.mux_clks		= fsys0_mux_clks,
1310 	.nr_mux_clks		= ARRAY_SIZE(fsys0_mux_clks),
1311 	.gate_clks		= fsys0_gate_clks,
1312 	.nr_gate_clks		= ARRAY_SIZE(fsys0_gate_clks),
1313 	.nr_clk_ids		= CLKS_NR_FSYS0,
1314 	.clk_regs		= fsys0_clk_regs,
1315 	.nr_clk_regs		= ARRAY_SIZE(fsys0_clk_regs),
1316 	.clk_name		= "dout_clkcmu_fsys0_bus",
1317 };
1318 
1319 /* ---- CMU_FSYS1 ---------------------------------------------------------- */
1320 
1321 /* Register Offset definitions for CMU_FSYS1 (0x17040000) */
1322 #define PLL_LOCKTIME_PLL_MMC			0x0000
1323 #define PLL_CON0_PLL_MMC			0x0100
1324 #define PLL_CON3_PLL_MMC			0x010c
1325 #define PLL_CON0_MUX_CLKCMU_FSYS1_BUS_USER	0x0600
1326 #define PLL_CON0_MUX_CLKCMU_FSYS1_MMC_CARD_USER	0x0610
1327 #define PLL_CON0_MUX_CLKCMU_FSYS1_USBDRD_USER	0x0620
1328 
1329 #define CLK_CON_MUX_MUX_CLK_FSYS1_MMC_CARD	0x1000
1330 #define CLK_CON_DIV_DIV_CLK_FSYS1_MMC_CARD	0x1800
1331 
1332 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_FSYS1_CMU_FSYS1_IPCLKPORT_PCLK	0x2018
1333 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_MMC_CARD_IPCLKPORT_SDCLKIN	0x202c
1334 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_MMC_CARD_IPCLKPORT_I_ACLK	0x2028
1335 
1336 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB20DRD_0_REF_CLK_40		0x204c
1337 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB20DRD_1_REF_CLK_40		0x2058
1338 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB30DRD_0_REF_CLK_40		0x2064
1339 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB30DRD_1_REF_CLK_40		0x2070
1340 
1341 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB2_0_IPCLKPORT_ACLK	0x2074
1342 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB2_1_IPCLKPORT_ACLK	0x2078
1343 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB3_0_IPCLKPORT_ACLK	0x207c
1344 #define CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB3_1_IPCLKPORT_ACLK	0x2080
1345 
1346 static const unsigned long fsys1_clk_regs[] __initconst = {
1347 	PLL_CON0_MUX_CLKCMU_FSYS1_BUS_USER,
1348 };
1349 
1350 static const struct samsung_pll_clock fsys1_pll_clks[] __initconst = {
1351 	PLL(pll_0831x, FOUT_MMC_PLL, "fout_mmc_pll", "oscclk",
1352 	    PLL_LOCKTIME_PLL_MMC, PLL_CON3_PLL_MMC, NULL),
1353 };
1354 
1355 /* List of parent clocks for Muxes in CMU_FSYS1 */
1356 PNAME(mout_fsys1_bus_user_p) = { "oscclk", "dout_clkcmu_fsys1_bus" };
1357 PNAME(mout_fsys1_mmc_pll_p) = { "oscclk", "fout_mmc_pll" };
1358 PNAME(mout_fsys1_mmc_card_user_p) = { "oscclk", "gout_clkcmu_fsys1_mmc_card" };
1359 PNAME(mout_fsys1_usbdrd_user_p) = { "oscclk", "dout_clkcmu_fsys1_usbdrd" };
1360 PNAME(mout_fsys1_mmc_card_p) = { "mout_fsys1_mmc_card_user",
1361 				 "mout_fsys1_mmc_pll" };
1362 
1363 static const struct samsung_mux_clock fsys1_mux_clks[] __initconst = {
1364 	MUX(CLK_MOUT_FSYS1_BUS_USER, "mout_fsys1_bus_user",
1365 	    mout_fsys1_bus_user_p, PLL_CON0_MUX_CLKCMU_FSYS1_BUS_USER, 4, 1),
1366 	MUX(CLK_MOUT_FSYS1_MMC_PLL, "mout_fsys1_mmc_pll", mout_fsys1_mmc_pll_p,
1367 	    PLL_CON0_PLL_MMC, 4, 1),
1368 	MUX(CLK_MOUT_FSYS1_MMC_CARD_USER, "mout_fsys1_mmc_card_user",
1369 	    mout_fsys1_mmc_card_user_p, PLL_CON0_MUX_CLKCMU_FSYS1_MMC_CARD_USER,
1370 	    4, 1),
1371 	MUX(CLK_MOUT_FSYS1_USBDRD_USER, "mout_fsys1_usbdrd_user",
1372 	    mout_fsys1_usbdrd_user_p, PLL_CON0_MUX_CLKCMU_FSYS1_USBDRD_USER,
1373 	    4, 1),
1374 	MUX(CLK_MOUT_FSYS1_MMC_CARD, "mout_fsys1_mmc_card",
1375 	    mout_fsys1_mmc_card_p, CLK_CON_MUX_MUX_CLK_FSYS1_MMC_CARD,
1376 	    0, 1),
1377 };
1378 
1379 static const struct samsung_div_clock fsys1_div_clks[] __initconst = {
1380 	DIV(CLK_DOUT_FSYS1_MMC_CARD, "dout_fsys1_mmc_card",
1381 	    "mout_fsys1_mmc_card",
1382 	    CLK_CON_DIV_DIV_CLK_FSYS1_MMC_CARD, 0, 9),
1383 };
1384 
1385 static const struct samsung_gate_clock fsys1_gate_clks[] __initconst = {
1386 	GATE(CLK_GOUT_FSYS1_PCLK, "gout_fsys1_pclk", "mout_fsys1_bus_user",
1387 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_FSYS1_CMU_FSYS1_IPCLKPORT_PCLK,
1388 	     21, CLK_IGNORE_UNUSED, 0),
1389 	GATE(CLK_GOUT_FSYS1_MMC_CARD_SDCLKIN, "gout_fsys1_mmc_card_sdclkin",
1390 	     "dout_fsys1_mmc_card",
1391 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_MMC_CARD_IPCLKPORT_SDCLKIN,
1392 	     21, CLK_SET_RATE_PARENT, 0),
1393 	GATE(CLK_GOUT_FSYS1_MMC_CARD_ACLK, "gout_fsys1_mmc_card_aclk",
1394 	     "dout_fsys1_mmc_card",
1395 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_MMC_CARD_IPCLKPORT_I_ACLK,
1396 	     21, 0, 0),
1397 	GATE(CLK_GOUT_FSYS1_USB20DRD_0_REFCLK, "gout_fsys1_usb20drd_0_refclk",
1398 	     "mout_fsys1_usbdrd_user",
1399 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB20DRD_0_REF_CLK_40,
1400 	     21, 0, 0),
1401 	GATE(CLK_GOUT_FSYS1_USB20DRD_1_REFCLK, "gout_fsys1_usb20drd_1_refclk",
1402 	     "mout_fsys1_usbdrd_user",
1403 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB20DRD_1_REF_CLK_40,
1404 	     21, 0, 0),
1405 	GATE(CLK_GOUT_FSYS1_USB30DRD_0_REFCLK, "gout_fsys1_usb30drd_0_refclk",
1406 	     "mout_fsys1_usbdrd_user",
1407 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB30DRD_0_REF_CLK_40,
1408 	     21, 0, 0),
1409 	GATE(CLK_GOUT_FSYS1_USB30DRD_1_REFCLK, "gout_fsys1_usb30drd_1_refclk",
1410 	     "mout_fsys1_usbdrd_user",
1411 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_USB30DRD_1_REF_CLK_40,
1412 	     21, 0, 0),
1413 	GATE(CLK_GOUT_FSYS1_USB20_0_ACLK, "gout_fsys1_usb20_0_aclk",
1414 	     "mout_fsys1_usbdrd_user",
1415 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB2_0_IPCLKPORT_ACLK,
1416 	     21, 0, 0),
1417 	GATE(CLK_GOUT_FSYS1_USB20_1_ACLK, "gout_fsys1_usb20_1_aclk",
1418 	     "mout_fsys1_usbdrd_user",
1419 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB2_1_IPCLKPORT_ACLK,
1420 	     21, 0, 0),
1421 	GATE(CLK_GOUT_FSYS1_USB30_0_ACLK, "gout_fsys1_usb30_0_aclk",
1422 	     "mout_fsys1_usbdrd_user",
1423 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB3_0_IPCLKPORT_ACLK,
1424 	     21, 0, 0),
1425 	GATE(CLK_GOUT_FSYS1_USB30_1_ACLK, "gout_fsys1_usb30_1_aclk",
1426 	     "mout_fsys1_usbdrd_user",
1427 	     CLK_CON_GAT_GOUT_BLK_FSYS1_UID_US_D_USB3_1_IPCLKPORT_ACLK,
1428 	     21, 0, 0),
1429 };
1430 
1431 static const struct samsung_cmu_info fsys1_cmu_info __initconst = {
1432 	.pll_clks		= fsys1_pll_clks,
1433 	.nr_pll_clks		= ARRAY_SIZE(fsys1_pll_clks),
1434 	.mux_clks		= fsys1_mux_clks,
1435 	.nr_mux_clks		= ARRAY_SIZE(fsys1_mux_clks),
1436 	.div_clks		= fsys1_div_clks,
1437 	.nr_div_clks		= ARRAY_SIZE(fsys1_div_clks),
1438 	.gate_clks		= fsys1_gate_clks,
1439 	.nr_gate_clks		= ARRAY_SIZE(fsys1_gate_clks),
1440 	.nr_clk_ids		= CLKS_NR_FSYS1,
1441 	.clk_regs		= fsys1_clk_regs,
1442 	.nr_clk_regs		= ARRAY_SIZE(fsys1_clk_regs),
1443 	.clk_name		= "dout_clkcmu_fsys1_bus",
1444 };
1445 
1446 /* ---- CMU_FSYS2 ---------------------------------------------------------- */
1447 
1448 /* Register Offset definitions for CMU_FSYS2 (0x17c00000) */
1449 #define PLL_CON0_MUX_CLKCMU_FSYS2_BUS_USER	0x0600
1450 #define PLL_CON0_MUX_CLKCMU_FSYS2_UFS_EMBD_USER	0x0620
1451 #define PLL_CON0_MUX_CLKCMU_FSYS2_ETHERNET_USER	0x0610
1452 #define CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_ACLK	0x2098
1453 #define CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_CLK_UNIPRO	0x209c
1454 #define CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_ACLK	0x20a4
1455 #define CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_CLK_UNIPRO	0x20a8
1456 
1457 static const unsigned long fsys2_clk_regs[] __initconst = {
1458 	PLL_CON0_MUX_CLKCMU_FSYS2_BUS_USER,
1459 	PLL_CON0_MUX_CLKCMU_FSYS2_UFS_EMBD_USER,
1460 	PLL_CON0_MUX_CLKCMU_FSYS2_ETHERNET_USER,
1461 	CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_ACLK,
1462 	CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_CLK_UNIPRO,
1463 	CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_ACLK,
1464 	CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_CLK_UNIPRO,
1465 };
1466 
1467 /* List of parent clocks for Muxes in CMU_FSYS2 */
1468 PNAME(mout_fsys2_bus_user_p) = { "oscclk", "dout_clkcmu_fsys2_bus" };
1469 PNAME(mout_fsys2_ufs_embd_user_p) = { "oscclk", "dout_clkcmu_fsys2_ufs_embd" };
1470 PNAME(mout_fsys2_ethernet_user_p) = { "oscclk", "dout_clkcmu_fsys2_ethernet" };
1471 
1472 static const struct samsung_mux_clock fsys2_mux_clks[] __initconst = {
1473 	MUX(CLK_MOUT_FSYS2_BUS_USER, "mout_fsys2_bus_user",
1474 	    mout_fsys2_bus_user_p, PLL_CON0_MUX_CLKCMU_FSYS2_BUS_USER, 4, 1),
1475 	MUX(CLK_MOUT_FSYS2_UFS_EMBD_USER, "mout_fsys2_ufs_embd_user",
1476 	    mout_fsys2_ufs_embd_user_p,
1477 	    PLL_CON0_MUX_CLKCMU_FSYS2_UFS_EMBD_USER, 4, 1),
1478 	MUX(CLK_MOUT_FSYS2_ETHERNET_USER, "mout_fsys2_ethernet_user",
1479 	    mout_fsys2_ethernet_user_p,
1480 	    PLL_CON0_MUX_CLKCMU_FSYS2_ETHERNET_USER, 4, 1),
1481 };
1482 
1483 static const struct samsung_gate_clock fsys2_gate_clks[] __initconst = {
1484 	GATE(CLK_GOUT_FSYS2_UFS_EMBD0_ACLK, "gout_fsys2_ufs_embd0_aclk",
1485 	     "mout_fsys2_ufs_embd_user",
1486 	     CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_ACLK, 21,
1487 	     0, 0),
1488 	GATE(CLK_GOUT_FSYS2_UFS_EMBD0_UNIPRO, "gout_fsys2_ufs_embd0_unipro",
1489 	     "mout_fsys2_ufs_embd_user",
1490 	     CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD0_IPCLKPORT_I_CLK_UNIPRO,
1491 	     21, 0, 0),
1492 	GATE(CLK_GOUT_FSYS2_UFS_EMBD1_ACLK, "gout_fsys2_ufs_embd1_aclk",
1493 	     "mout_fsys2_ufs_embd_user",
1494 	     CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_ACLK, 21,
1495 	     0, 0),
1496 	GATE(CLK_GOUT_FSYS2_UFS_EMBD1_UNIPRO, "gout_fsys2_ufs_embd1_unipro",
1497 	     "mout_fsys2_ufs_embd_user",
1498 	     CLK_CON_GAT_GOUT_BLK_FSYS2_UID_UFS_EMBD1_IPCLKPORT_I_CLK_UNIPRO,
1499 	     21, 0, 0),
1500 };
1501 
1502 static const struct samsung_cmu_info fsys2_cmu_info __initconst = {
1503 	.mux_clks		= fsys2_mux_clks,
1504 	.nr_mux_clks		= ARRAY_SIZE(fsys2_mux_clks),
1505 	.gate_clks		= fsys2_gate_clks,
1506 	.nr_gate_clks		= ARRAY_SIZE(fsys2_gate_clks),
1507 	.nr_clk_ids		= CLKS_NR_FSYS2,
1508 	.clk_regs		= fsys2_clk_regs,
1509 	.nr_clk_regs		= ARRAY_SIZE(fsys2_clk_regs),
1510 	.clk_name		= "dout_clkcmu_fsys2_bus",
1511 };
1512 
1513 /* ---- CMU_PERIC0 --------------------------------------------------------- */
1514 
1515 /* Register Offset definitions for CMU_PERIC0 (0x10200000) */
1516 #define PLL_CON0_MUX_CLKCMU_PERIC0_BUS_USER	0x0600
1517 #define PLL_CON0_MUX_CLKCMU_PERIC0_IP_USER	0x0610
1518 #define CLK_CON_MUX_MUX_CLK_PERIC0_USI00_USI	0x1000
1519 #define CLK_CON_MUX_MUX_CLK_PERIC0_USI01_USI	0x1004
1520 #define CLK_CON_MUX_MUX_CLK_PERIC0_USI02_USI	0x1008
1521 #define CLK_CON_MUX_MUX_CLK_PERIC0_USI03_USI	0x100c
1522 #define CLK_CON_MUX_MUX_CLK_PERIC0_USI04_USI	0x1010
1523 #define CLK_CON_MUX_MUX_CLK_PERIC0_USI05_USI	0x1014
1524 #define CLK_CON_MUX_MUX_CLK_PERIC0_USI_I2C	0x1018
1525 #define CLK_CON_DIV_DIV_CLK_PERIC0_USI00_USI	0x1800
1526 #define CLK_CON_DIV_DIV_CLK_PERIC0_USI01_USI	0x1804
1527 #define CLK_CON_DIV_DIV_CLK_PERIC0_USI02_USI	0x1808
1528 #define CLK_CON_DIV_DIV_CLK_PERIC0_USI03_USI	0x180c
1529 #define CLK_CON_DIV_DIV_CLK_PERIC0_USI04_USI	0x1810
1530 #define CLK_CON_DIV_DIV_CLK_PERIC0_USI05_USI	0x1814
1531 #define CLK_CON_DIV_DIV_CLK_PERIC0_USI_I2C	0x1818
1532 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_0	0x2014
1533 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_1	0x2018
1534 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_2	0x2024
1535 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_3	0x2028
1536 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_4	0x202c
1537 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_5	0x2030
1538 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_6	0x2034
1539 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_7	0x2038
1540 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_8	0x203c
1541 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_9	0x2040
1542 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_10	0x201c
1543 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_11	0x2020
1544 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_0	0x2044
1545 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_1	0x2048
1546 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_2	0x2058
1547 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_3	0x205c
1548 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_4	0x2060
1549 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_5	0x2064
1550 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_6	0x2068
1551 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_7	0x206c
1552 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_8	0x2070
1553 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_9	0x2074
1554 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_10	0x204c
1555 #define CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_11	0x2050
1556 
1557 static const unsigned long peric0_clk_regs[] __initconst = {
1558 	PLL_CON0_MUX_CLKCMU_PERIC0_BUS_USER,
1559 	PLL_CON0_MUX_CLKCMU_PERIC0_IP_USER,
1560 	CLK_CON_MUX_MUX_CLK_PERIC0_USI00_USI,
1561 	CLK_CON_MUX_MUX_CLK_PERIC0_USI01_USI,
1562 	CLK_CON_MUX_MUX_CLK_PERIC0_USI02_USI,
1563 	CLK_CON_MUX_MUX_CLK_PERIC0_USI03_USI,
1564 	CLK_CON_MUX_MUX_CLK_PERIC0_USI04_USI,
1565 	CLK_CON_MUX_MUX_CLK_PERIC0_USI05_USI,
1566 	CLK_CON_MUX_MUX_CLK_PERIC0_USI_I2C,
1567 	CLK_CON_DIV_DIV_CLK_PERIC0_USI00_USI,
1568 	CLK_CON_DIV_DIV_CLK_PERIC0_USI01_USI,
1569 	CLK_CON_DIV_DIV_CLK_PERIC0_USI02_USI,
1570 	CLK_CON_DIV_DIV_CLK_PERIC0_USI03_USI,
1571 	CLK_CON_DIV_DIV_CLK_PERIC0_USI04_USI,
1572 	CLK_CON_DIV_DIV_CLK_PERIC0_USI05_USI,
1573 	CLK_CON_DIV_DIV_CLK_PERIC0_USI_I2C,
1574 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_0,
1575 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_1,
1576 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_2,
1577 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_3,
1578 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_4,
1579 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_5,
1580 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_6,
1581 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_7,
1582 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_8,
1583 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_9,
1584 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_10,
1585 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_11,
1586 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_0,
1587 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_1,
1588 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_2,
1589 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_3,
1590 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_4,
1591 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_7,
1592 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_5,
1593 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_6,
1594 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_8,
1595 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_9,
1596 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_10,
1597 	CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_11,
1598 };
1599 
1600 /* List of parent clocks for Muxes in CMU_PERIC0 */
1601 PNAME(mout_peric0_bus_user_p) = { "oscclk", "dout_clkcmu_peric0_bus" };
1602 PNAME(mout_peric0_ip_user_p) = { "oscclk", "dout_clkcmu_peric0_ip" };
1603 PNAME(mout_peric0_usi_p) = { "oscclk", "mout_peric0_ip_user" };
1604 
1605 static const struct samsung_mux_clock peric0_mux_clks[] __initconst = {
1606 	MUX(CLK_MOUT_PERIC0_BUS_USER, "mout_peric0_bus_user",
1607 	    mout_peric0_bus_user_p, PLL_CON0_MUX_CLKCMU_PERIC0_BUS_USER, 4, 1),
1608 	MUX(CLK_MOUT_PERIC0_IP_USER, "mout_peric0_ip_user",
1609 	    mout_peric0_ip_user_p, PLL_CON0_MUX_CLKCMU_PERIC0_IP_USER, 4, 1),
1610 	/* USI00 ~ USI05 */
1611 	MUX(CLK_MOUT_PERIC0_USI00_USI, "mout_peric0_usi00_usi",
1612 	    mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI00_USI, 0, 1),
1613 	MUX(CLK_MOUT_PERIC0_USI01_USI, "mout_peric0_usi01_usi",
1614 	    mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI01_USI, 0, 1),
1615 	MUX(CLK_MOUT_PERIC0_USI02_USI, "mout_peric0_usi02_usi",
1616 	    mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI02_USI, 0, 1),
1617 	MUX(CLK_MOUT_PERIC0_USI03_USI, "mout_peric0_usi03_usi",
1618 	    mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI03_USI, 0, 1),
1619 	MUX(CLK_MOUT_PERIC0_USI04_USI, "mout_peric0_usi04_usi",
1620 	    mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI04_USI, 0, 1),
1621 	MUX(CLK_MOUT_PERIC0_USI05_USI, "mout_peric0_usi05_usi",
1622 	    mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI05_USI, 0, 1),
1623 	/* USI_I2C */
1624 	MUX(CLK_MOUT_PERIC0_USI_I2C, "mout_peric0_usi_i2c",
1625 	    mout_peric0_usi_p, CLK_CON_MUX_MUX_CLK_PERIC0_USI_I2C, 0, 1),
1626 };
1627 
1628 static const struct samsung_div_clock peric0_div_clks[] __initconst = {
1629 	/* USI00 ~ USI05 */
1630 	DIV(CLK_DOUT_PERIC0_USI00_USI, "dout_peric0_usi00_usi",
1631 	    "mout_peric0_usi00_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI00_USI,
1632 	    0, 4),
1633 	DIV(CLK_DOUT_PERIC0_USI01_USI, "dout_peric0_usi01_usi",
1634 	    "mout_peric0_usi01_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI01_USI,
1635 	    0, 4),
1636 	DIV(CLK_DOUT_PERIC0_USI02_USI, "dout_peric0_usi02_usi",
1637 	    "mout_peric0_usi02_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI02_USI,
1638 	    0, 4),
1639 	DIV(CLK_DOUT_PERIC0_USI03_USI, "dout_peric0_usi03_usi",
1640 	    "mout_peric0_usi03_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI03_USI,
1641 	    0, 4),
1642 	DIV(CLK_DOUT_PERIC0_USI04_USI, "dout_peric0_usi04_usi",
1643 	    "mout_peric0_usi04_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI04_USI,
1644 	    0, 4),
1645 	DIV(CLK_DOUT_PERIC0_USI05_USI, "dout_peric0_usi05_usi",
1646 	    "mout_peric0_usi05_usi", CLK_CON_DIV_DIV_CLK_PERIC0_USI05_USI,
1647 	    0, 4),
1648 	/* USI_I2C */
1649 	DIV(CLK_DOUT_PERIC0_USI_I2C, "dout_peric0_usi_i2c",
1650 	    "mout_peric0_usi_i2c", CLK_CON_DIV_DIV_CLK_PERIC0_USI_I2C, 0, 4),
1651 };
1652 
1653 static const struct samsung_gate_clock peric0_gate_clks[] __initconst = {
1654 	/* IPCLK */
1655 	GATE(CLK_GOUT_PERIC0_IPCLK_0, "gout_peric0_ipclk_0",
1656 	     "dout_peric0_usi00_usi",
1657 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_0,
1658 	     21, 0, 0),
1659 	GATE(CLK_GOUT_PERIC0_IPCLK_1, "gout_peric0_ipclk_1",
1660 	     "dout_peric0_usi_i2c",
1661 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_1,
1662 	     21, 0, 0),
1663 	GATE(CLK_GOUT_PERIC0_IPCLK_2, "gout_peric0_ipclk_2",
1664 	     "dout_peric0_usi01_usi",
1665 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_2,
1666 	     21, 0, 0),
1667 	GATE(CLK_GOUT_PERIC0_IPCLK_3, "gout_peric0_ipclk_3",
1668 	     "dout_peric0_usi_i2c",
1669 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_3,
1670 	     21, 0, 0),
1671 	GATE(CLK_GOUT_PERIC0_IPCLK_4, "gout_peric0_ipclk_4",
1672 	     "dout_peric0_usi02_usi",
1673 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_4,
1674 	     21, 0, 0),
1675 	GATE(CLK_GOUT_PERIC0_IPCLK_5, "gout_peric0_ipclk_5",
1676 	     "dout_peric0_usi_i2c",
1677 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_5,
1678 	     21, 0, 0),
1679 	GATE(CLK_GOUT_PERIC0_IPCLK_6, "gout_peric0_ipclk_6",
1680 	     "dout_peric0_usi03_usi",
1681 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_6,
1682 	     21, 0, 0),
1683 	GATE(CLK_GOUT_PERIC0_IPCLK_7, "gout_peric0_ipclk_7",
1684 	     "dout_peric0_usi_i2c",
1685 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_7,
1686 	     21, 0, 0),
1687 	GATE(CLK_GOUT_PERIC0_IPCLK_8, "gout_peric0_ipclk_8",
1688 	     "dout_peric0_usi04_usi",
1689 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_8,
1690 	     21, 0, 0),
1691 	GATE(CLK_GOUT_PERIC0_IPCLK_9, "gout_peric0_ipclk_9",
1692 	     "dout_peric0_usi_i2c",
1693 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_9,
1694 	     21, 0, 0),
1695 	GATE(CLK_GOUT_PERIC0_IPCLK_10, "gout_peric0_ipclk_10",
1696 	     "dout_peric0_usi05_usi",
1697 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_10,
1698 	     21, 0, 0),
1699 	GATE(CLK_GOUT_PERIC0_IPCLK_11, "gout_peric0_ipclk_11",
1700 	     "dout_peric0_usi_i2c",
1701 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_IPCLK_11,
1702 	     21, 0, 0),
1703 
1704 	/* PCLK */
1705 	GATE(CLK_GOUT_PERIC0_PCLK_0, "gout_peric0_pclk_0",
1706 	     "mout_peric0_bus_user",
1707 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_0,
1708 	     21, 0, 0),
1709 	GATE(CLK_GOUT_PERIC0_PCLK_1, "gout_peric0_pclk_1",
1710 	     "mout_peric0_bus_user",
1711 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_1,
1712 	     21, 0, 0),
1713 	GATE(CLK_GOUT_PERIC0_PCLK_2, "gout_peric0_pclk_2",
1714 	     "mout_peric0_bus_user",
1715 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_2,
1716 	     21, 0, 0),
1717 	GATE(CLK_GOUT_PERIC0_PCLK_3, "gout_peric0_pclk_3",
1718 	     "mout_peric0_bus_user",
1719 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_3,
1720 	     21, 0, 0),
1721 	GATE(CLK_GOUT_PERIC0_PCLK_4, "gout_peric0_pclk_4",
1722 	     "mout_peric0_bus_user",
1723 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_4,
1724 	     21, 0, 0),
1725 	GATE(CLK_GOUT_PERIC0_PCLK_5, "gout_peric0_pclk_5",
1726 	     "mout_peric0_bus_user",
1727 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_5,
1728 	     21, 0, 0),
1729 	GATE(CLK_GOUT_PERIC0_PCLK_6, "gout_peric0_pclk_6",
1730 	     "mout_peric0_bus_user",
1731 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_6,
1732 	     21, 0, 0),
1733 	GATE(CLK_GOUT_PERIC0_PCLK_7, "gout_peric0_pclk_7",
1734 	     "mout_peric0_bus_user",
1735 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_7,
1736 	     21, 0, 0),
1737 	GATE(CLK_GOUT_PERIC0_PCLK_8, "gout_peric0_pclk_8",
1738 	     "mout_peric0_bus_user",
1739 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_8,
1740 	     21, 0, 0),
1741 	GATE(CLK_GOUT_PERIC0_PCLK_9, "gout_peric0_pclk_9",
1742 	     "mout_peric0_bus_user",
1743 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_9,
1744 	     21, 0, 0),
1745 	GATE(CLK_GOUT_PERIC0_PCLK_10, "gout_peric0_pclk_10",
1746 	     "mout_peric0_bus_user",
1747 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_10,
1748 	     21, 0, 0),
1749 	GATE(CLK_GOUT_PERIC0_PCLK_11, "gout_peric0_pclk_11",
1750 	     "mout_peric0_bus_user",
1751 	     CLK_CON_GAT_GOUT_BLK_PERIC0_UID_PERIC0_TOP0_IPCLKPORT_PCLK_11,
1752 	     21, 0, 0),
1753 };
1754 
1755 static const struct samsung_cmu_info peric0_cmu_info __initconst = {
1756 	.mux_clks		= peric0_mux_clks,
1757 	.nr_mux_clks		= ARRAY_SIZE(peric0_mux_clks),
1758 	.div_clks		= peric0_div_clks,
1759 	.nr_div_clks		= ARRAY_SIZE(peric0_div_clks),
1760 	.gate_clks		= peric0_gate_clks,
1761 	.nr_gate_clks		= ARRAY_SIZE(peric0_gate_clks),
1762 	.nr_clk_ids		= CLKS_NR_PERIC0,
1763 	.clk_regs		= peric0_clk_regs,
1764 	.nr_clk_regs		= ARRAY_SIZE(peric0_clk_regs),
1765 	.clk_name		= "dout_clkcmu_peric0_bus",
1766 };
1767 
1768 /* ---- CMU_PERIC1 --------------------------------------------------------- */
1769 
1770 /* Register Offset definitions for CMU_PERIC1 (0x10800000) */
1771 #define PLL_CON0_MUX_CLKCMU_PERIC1_BUS_USER	0x0600
1772 #define PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER	0x0610
1773 #define CLK_CON_MUX_MUX_CLK_PERIC1_USI06_USI	0x1000
1774 #define CLK_CON_MUX_MUX_CLK_PERIC1_USI07_USI	0x1004
1775 #define CLK_CON_MUX_MUX_CLK_PERIC1_USI08_USI	0x1008
1776 #define CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI	0x100c
1777 #define CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI	0x1010
1778 #define CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI	0x1014
1779 #define CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C	0x1018
1780 #define CLK_CON_DIV_DIV_CLK_PERIC1_USI06_USI	0x1800
1781 #define CLK_CON_DIV_DIV_CLK_PERIC1_USI07_USI	0x1804
1782 #define CLK_CON_DIV_DIV_CLK_PERIC1_USI08_USI	0x1808
1783 #define CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI	0x180c
1784 #define CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI	0x1810
1785 #define CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI	0x1814
1786 #define CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C	0x1818
1787 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_0	0x2014
1788 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_1	0x2018
1789 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_2	0x2024
1790 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_3	0x2028
1791 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_4	0x202c
1792 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_5	0x2030
1793 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_6	0x2034
1794 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_7	0x2038
1795 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_8	0x203c
1796 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_9	0x2040
1797 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_10	0x201c
1798 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_11	0x2020
1799 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_0	0x2044
1800 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_1	0x2048
1801 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_2	0x2054
1802 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_3	0x2058
1803 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_4	0x205c
1804 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_5	0x2060
1805 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_6	0x2064
1806 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_7	0x2068
1807 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_8	0x206c
1808 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_9	0x2070
1809 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_10	0x204c
1810 #define CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_11	0x2050
1811 
1812 static const unsigned long peric1_clk_regs[] __initconst = {
1813 	PLL_CON0_MUX_CLKCMU_PERIC1_BUS_USER,
1814 	PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER,
1815 	CLK_CON_MUX_MUX_CLK_PERIC1_USI06_USI,
1816 	CLK_CON_MUX_MUX_CLK_PERIC1_USI07_USI,
1817 	CLK_CON_MUX_MUX_CLK_PERIC1_USI08_USI,
1818 	CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI,
1819 	CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI,
1820 	CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI,
1821 	CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C,
1822 	CLK_CON_DIV_DIV_CLK_PERIC1_USI06_USI,
1823 	CLK_CON_DIV_DIV_CLK_PERIC1_USI07_USI,
1824 	CLK_CON_DIV_DIV_CLK_PERIC1_USI08_USI,
1825 	CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI,
1826 	CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI,
1827 	CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI,
1828 	CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C,
1829 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_0,
1830 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_1,
1831 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_2,
1832 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_3,
1833 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_4,
1834 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_5,
1835 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_6,
1836 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_7,
1837 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_8,
1838 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_9,
1839 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_10,
1840 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_11,
1841 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_0,
1842 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_1,
1843 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_2,
1844 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_3,
1845 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_4,
1846 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_5,
1847 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_6,
1848 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_7,
1849 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_8,
1850 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_9,
1851 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_10,
1852 	CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_11,
1853 };
1854 
1855 /* List of parent clocks for Muxes in CMU_PERIC1 */
1856 PNAME(mout_peric1_bus_user_p) = { "oscclk", "dout_clkcmu_peric1_bus" };
1857 PNAME(mout_peric1_ip_user_p) = { "oscclk", "dout_clkcmu_peric1_ip" };
1858 PNAME(mout_peric1_usi_p) = { "oscclk", "mout_peric1_ip_user" };
1859 
1860 static const struct samsung_mux_clock peric1_mux_clks[] __initconst = {
1861 	MUX(CLK_MOUT_PERIC1_BUS_USER, "mout_peric1_bus_user",
1862 	    mout_peric1_bus_user_p, PLL_CON0_MUX_CLKCMU_PERIC1_BUS_USER, 4, 1),
1863 	MUX(CLK_MOUT_PERIC1_IP_USER, "mout_peric1_ip_user",
1864 	    mout_peric1_ip_user_p, PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER, 4, 1),
1865 	/* USI06 ~ USI11 */
1866 	MUX(CLK_MOUT_PERIC1_USI06_USI, "mout_peric1_usi06_usi",
1867 	    mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI06_USI, 0, 1),
1868 	MUX(CLK_MOUT_PERIC1_USI07_USI, "mout_peric1_usi07_usi",
1869 	    mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI07_USI, 0, 1),
1870 	MUX(CLK_MOUT_PERIC1_USI08_USI, "mout_peric1_usi08_usi",
1871 	    mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI08_USI, 0, 1),
1872 	MUX(CLK_MOUT_PERIC1_USI09_USI, "mout_peric1_usi09_usi",
1873 	    mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI, 0, 1),
1874 	MUX(CLK_MOUT_PERIC1_USI10_USI, "mout_peric1_usi10_usi",
1875 	    mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI, 0, 1),
1876 	MUX(CLK_MOUT_PERIC1_USI11_USI, "mout_peric1_usi11_usi",
1877 	    mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI, 0, 1),
1878 	/* USI_I2C */
1879 	MUX(CLK_MOUT_PERIC1_USI_I2C, "mout_peric1_usi_i2c",
1880 	    mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C, 0, 1),
1881 };
1882 
1883 static const struct samsung_div_clock peric1_div_clks[] __initconst = {
1884 	/* USI06 ~ USI11 */
1885 	DIV(CLK_DOUT_PERIC1_USI06_USI, "dout_peric1_usi06_usi",
1886 	    "mout_peric1_usi06_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI06_USI,
1887 	    0, 4),
1888 	DIV(CLK_DOUT_PERIC1_USI07_USI, "dout_peric1_usi07_usi",
1889 	    "mout_peric1_usi07_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI07_USI,
1890 	    0, 4),
1891 	DIV(CLK_DOUT_PERIC1_USI08_USI, "dout_peric1_usi08_usi",
1892 	    "mout_peric1_usi08_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI08_USI,
1893 	    0, 4),
1894 	DIV(CLK_DOUT_PERIC1_USI09_USI, "dout_peric1_usi09_usi",
1895 	    "mout_peric1_usi09_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI,
1896 	    0, 4),
1897 	DIV(CLK_DOUT_PERIC1_USI10_USI, "dout_peric1_usi10_usi",
1898 	    "mout_peric1_usi10_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI,
1899 	    0, 4),
1900 	DIV(CLK_DOUT_PERIC1_USI11_USI, "dout_peric1_usi11_usi",
1901 	    "mout_peric1_usi11_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI,
1902 	    0, 4),
1903 	/* USI_I2C */
1904 	DIV(CLK_DOUT_PERIC1_USI_I2C, "dout_peric1_usi_i2c",
1905 	    "mout_peric1_usi_i2c", CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C, 0, 4),
1906 };
1907 
1908 static const struct samsung_gate_clock peric1_gate_clks[] __initconst = {
1909 	/* IPCLK */
1910 	GATE(CLK_GOUT_PERIC1_IPCLK_0, "gout_peric1_ipclk_0",
1911 	     "dout_peric1_usi06_usi",
1912 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_0,
1913 	     21, 0, 0),
1914 	GATE(CLK_GOUT_PERIC1_IPCLK_1, "gout_peric1_ipclk_1",
1915 	     "dout_peric1_usi_i2c",
1916 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_1,
1917 	     21, 0, 0),
1918 	GATE(CLK_GOUT_PERIC1_IPCLK_2, "gout_peric1_ipclk_2",
1919 	     "dout_peric1_usi07_usi",
1920 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_2,
1921 	     21, 0, 0),
1922 	GATE(CLK_GOUT_PERIC1_IPCLK_3, "gout_peric1_ipclk_3",
1923 	     "dout_peric1_usi_i2c",
1924 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_3,
1925 	     21, 0, 0),
1926 	GATE(CLK_GOUT_PERIC1_IPCLK_4, "gout_peric1_ipclk_4",
1927 	     "dout_peric1_usi08_usi",
1928 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_4,
1929 	     21, 0, 0),
1930 	GATE(CLK_GOUT_PERIC1_IPCLK_5, "gout_peric1_ipclk_5",
1931 	     "dout_peric1_usi_i2c",
1932 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_5,
1933 	     21, 0, 0),
1934 	GATE(CLK_GOUT_PERIC1_IPCLK_6, "gout_peric1_ipclk_6",
1935 	     "dout_peric1_usi09_usi",
1936 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_6,
1937 	     21, 0, 0),
1938 	GATE(CLK_GOUT_PERIC1_IPCLK_7, "gout_peric1_ipclk_7",
1939 	     "dout_peric1_usi_i2c",
1940 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_7,
1941 	     21, 0, 0),
1942 	GATE(CLK_GOUT_PERIC1_IPCLK_8, "gout_peric1_ipclk_8",
1943 	     "dout_peric1_usi10_usi",
1944 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_8,
1945 	     21, 0, 0),
1946 	GATE(CLK_GOUT_PERIC1_IPCLK_9, "gout_peric1_ipclk_9",
1947 	     "dout_peric1_usi_i2c",
1948 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_9,
1949 	     21, 0, 0),
1950 	GATE(CLK_GOUT_PERIC1_IPCLK_10, "gout_peric1_ipclk_10",
1951 	     "dout_peric1_usi11_usi",
1952 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_10,
1953 	     21, 0, 0),
1954 	GATE(CLK_GOUT_PERIC1_IPCLK_11, "gout_peric1_ipclk_11",
1955 	     "dout_peric1_usi_i2c",
1956 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_IPCLK_11,
1957 	     21, 0, 0),
1958 
1959 	/* PCLK */
1960 	GATE(CLK_GOUT_PERIC1_PCLK_0, "gout_peric1_pclk_0",
1961 	     "mout_peric1_bus_user",
1962 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_0,
1963 	     21, 0, 0),
1964 	GATE(CLK_GOUT_PERIC1_PCLK_1, "gout_peric1_pclk_1",
1965 	     "mout_peric1_bus_user",
1966 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_1,
1967 	     21, 0, 0),
1968 	GATE(CLK_GOUT_PERIC1_PCLK_2, "gout_peric1_pclk_2",
1969 	     "mout_peric1_bus_user",
1970 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_2,
1971 	     21, 0, 0),
1972 	GATE(CLK_GOUT_PERIC1_PCLK_3, "gout_peric1_pclk_3",
1973 	     "mout_peric1_bus_user",
1974 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_3,
1975 	     21, 0, 0),
1976 	GATE(CLK_GOUT_PERIC1_PCLK_4, "gout_peric1_pclk_4",
1977 	     "mout_peric1_bus_user",
1978 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_4,
1979 	     21, 0, 0),
1980 	GATE(CLK_GOUT_PERIC1_PCLK_5, "gout_peric1_pclk_5",
1981 	     "mout_peric1_bus_user",
1982 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_5,
1983 	     21, 0, 0),
1984 	GATE(CLK_GOUT_PERIC1_PCLK_6, "gout_peric1_pclk_6",
1985 	     "mout_peric1_bus_user",
1986 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_6,
1987 	     21, 0, 0),
1988 	GATE(CLK_GOUT_PERIC1_PCLK_7, "gout_peric1_pclk_7",
1989 	     "mout_peric1_bus_user",
1990 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_7,
1991 	     21, 0, 0),
1992 	GATE(CLK_GOUT_PERIC1_PCLK_8, "gout_peric1_pclk_8",
1993 	     "mout_peric1_bus_user",
1994 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_8,
1995 	     21, 0, 0),
1996 	GATE(CLK_GOUT_PERIC1_PCLK_9, "gout_peric1_pclk_9",
1997 	     "mout_peric1_bus_user",
1998 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_9,
1999 	     21, 0, 0),
2000 	GATE(CLK_GOUT_PERIC1_PCLK_10, "gout_peric1_pclk_10",
2001 	     "mout_peric1_bus_user",
2002 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_10,
2003 	     21, 0, 0),
2004 	GATE(CLK_GOUT_PERIC1_PCLK_11, "gout_peric1_pclk_11",
2005 	     "mout_peric1_bus_user",
2006 	     CLK_CON_GAT_GOUT_BLK_PERIC1_UID_PERIC1_TOP0_IPCLKPORT_PCLK_11,
2007 	     21, 0, 0),
2008 };
2009 
2010 static const struct samsung_cmu_info peric1_cmu_info __initconst = {
2011 	.mux_clks		= peric1_mux_clks,
2012 	.nr_mux_clks		= ARRAY_SIZE(peric1_mux_clks),
2013 	.div_clks		= peric1_div_clks,
2014 	.nr_div_clks		= ARRAY_SIZE(peric1_div_clks),
2015 	.gate_clks		= peric1_gate_clks,
2016 	.nr_gate_clks		= ARRAY_SIZE(peric1_gate_clks),
2017 	.nr_clk_ids		= CLKS_NR_PERIC1,
2018 	.clk_regs		= peric1_clk_regs,
2019 	.nr_clk_regs		= ARRAY_SIZE(peric1_clk_regs),
2020 	.clk_name		= "dout_clkcmu_peric1_bus",
2021 };
2022 
2023 /* ---- CMU_PERIS ---------------------------------------------------------- */
2024 
2025 /* Register Offset definitions for CMU_PERIS (0x10020000) */
2026 #define PLL_CON0_MUX_CLKCMU_PERIS_BUS_USER	0x0600
2027 #define CLK_CON_GAT_GOUT_BLK_PERIS_UID_SYSREG_PERIS_IPCLKPORT_PCLK	0x2058
2028 #define CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER0_IPCLKPORT_PCLK	0x205c
2029 #define CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER1_IPCLKPORT_PCLK	0x2060
2030 
2031 static const unsigned long peris_clk_regs[] __initconst = {
2032 	PLL_CON0_MUX_CLKCMU_PERIS_BUS_USER,
2033 	CLK_CON_GAT_GOUT_BLK_PERIS_UID_SYSREG_PERIS_IPCLKPORT_PCLK,
2034 	CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER0_IPCLKPORT_PCLK,
2035 	CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER1_IPCLKPORT_PCLK,
2036 };
2037 
2038 /* List of parent clocks for Muxes in CMU_PERIS */
2039 PNAME(mout_peris_bus_user_p) = { "oscclk", "dout_clkcmu_peris_bus" };
2040 
2041 static const struct samsung_mux_clock peris_mux_clks[] __initconst = {
2042 	MUX(CLK_MOUT_PERIS_BUS_USER, "mout_peris_bus_user",
2043 	    mout_peris_bus_user_p, PLL_CON0_MUX_CLKCMU_PERIS_BUS_USER, 4, 1),
2044 };
2045 
2046 static const struct samsung_gate_clock peris_gate_clks[] __initconst = {
2047 	GATE(CLK_GOUT_SYSREG_PERIS_PCLK, "gout_sysreg_peris_pclk",
2048 	     "mout_peris_bus_user",
2049 	     CLK_CON_GAT_GOUT_BLK_PERIS_UID_SYSREG_PERIS_IPCLKPORT_PCLK,
2050 	     21, CLK_IGNORE_UNUSED, 0),
2051 	GATE(CLK_GOUT_WDT_CLUSTER0, "gout_wdt_cluster0", "mout_peris_bus_user",
2052 	     CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER0_IPCLKPORT_PCLK,
2053 	     21, 0, 0),
2054 	GATE(CLK_GOUT_WDT_CLUSTER1, "gout_wdt_cluster1", "mout_peris_bus_user",
2055 	     CLK_CON_GAT_GOUT_BLK_PERIS_UID_WDT_CLUSTER1_IPCLKPORT_PCLK,
2056 	     21, 0, 0),
2057 };
2058 
2059 static const struct samsung_cmu_info peris_cmu_info __initconst = {
2060 	.mux_clks		= peris_mux_clks,
2061 	.nr_mux_clks		= ARRAY_SIZE(peris_mux_clks),
2062 	.gate_clks		= peris_gate_clks,
2063 	.nr_gate_clks		= ARRAY_SIZE(peris_gate_clks),
2064 	.nr_clk_ids		= CLKS_NR_PERIS,
2065 	.clk_regs		= peris_clk_regs,
2066 	.nr_clk_regs		= ARRAY_SIZE(peris_clk_regs),
2067 	.clk_name		= "dout_clkcmu_peris_bus",
2068 };
2069 
exynosautov9_cmu_probe(struct platform_device * pdev)2070 static int __init exynosautov9_cmu_probe(struct platform_device *pdev)
2071 {
2072 	const struct samsung_cmu_info *info;
2073 	struct device *dev = &pdev->dev;
2074 
2075 	info = of_device_get_match_data(dev);
2076 	exynos_arm64_register_cmu(dev, dev->of_node, info);
2077 
2078 	return 0;
2079 }
2080 
2081 static const struct of_device_id exynosautov9_cmu_of_match[] = {
2082 	{
2083 		.compatible = "samsung,exynosautov9-cmu-busmc",
2084 		.data = &busmc_cmu_info,
2085 	}, {
2086 		.compatible = "samsung,exynosautov9-cmu-core",
2087 		.data = &core_cmu_info,
2088 	}, {
2089 		.compatible = "samsung,exynosautov9-cmu-fsys0",
2090 		.data = &fsys0_cmu_info,
2091 	}, {
2092 		.compatible = "samsung,exynosautov9-cmu-fsys1",
2093 		.data = &fsys1_cmu_info,
2094 	}, {
2095 		.compatible = "samsung,exynosautov9-cmu-fsys2",
2096 		.data = &fsys2_cmu_info,
2097 	}, {
2098 		.compatible = "samsung,exynosautov9-cmu-peric0",
2099 		.data = &peric0_cmu_info,
2100 	}, {
2101 		.compatible = "samsung,exynosautov9-cmu-peric1",
2102 		.data = &peric1_cmu_info,
2103 	}, {
2104 		.compatible = "samsung,exynosautov9-cmu-peris",
2105 		.data = &peris_cmu_info,
2106 	}, {
2107 	},
2108 };
2109 
2110 static struct platform_driver exynosautov9_cmu_driver __refdata = {
2111 	.driver = {
2112 		.name = "exynosautov9-cmu",
2113 		.of_match_table = exynosautov9_cmu_of_match,
2114 		.suppress_bind_attrs = true,
2115 	},
2116 	.probe = exynosautov9_cmu_probe,
2117 };
2118 
exynosautov9_cmu_init(void)2119 static int __init exynosautov9_cmu_init(void)
2120 {
2121 	return platform_driver_register(&exynosautov9_cmu_driver);
2122 }
2123 core_initcall(exynosautov9_cmu_init);
2124