1 /* SPDX-License-Identifier: GPL-2.0+ */
3 * (C) Copyright 2017 Rockchip Electronics Co., Ltd.
5 #ifndef _ASM_ARCH_CRU_PX30_H
6 #define _ASM_ARCH_CRU_PX30_H
10 #define OSC_HZ (24 * MHz)
12 #define APLL_HZ (600 * MHz)
13 #define GPLL_HZ (1200 * MHz)
14 #define NPLL_HZ (1188 * MHz)
15 #define ACLK_BUS_HZ (200 * MHz)
16 #define HCLK_BUS_HZ (150 * MHz)
17 #define PCLK_BUS_HZ (100 * MHz)
18 #define ACLK_PERI_HZ (200 * MHz)
19 #define HCLK_PERI_HZ (150 * MHz)
20 #define PCLK_PMU_HZ (100 * MHz)
32 struct px30_clk_priv {
37 struct px30_pmuclk_priv {
38 struct px30_pmucru *pmucru;
48 unsigned int reserved0[3];
52 struct px30_pll pll[4];
53 unsigned int reserved1[8];
56 unsigned int reserved2[2];
57 unsigned int glb_cnt_th;
58 unsigned int glb_rst_st;
59 unsigned int glb_srst_fst;
60 unsigned int glb_srst_snd;
61 unsigned int glb_rst_con;
62 unsigned int reserved3[7];
63 unsigned int hwffc_con0;
64 unsigned int reserved4;
65 unsigned int hwffc_th;
66 unsigned int hwffc_intst;
67 unsigned int apll_con0_s;
68 unsigned int apll_con1_s;
69 unsigned int clksel_con0_s;
70 unsigned int reserved5;
71 unsigned int clksel_con[60];
72 unsigned int reserved6[4];
73 unsigned int clkgate_con[18];
74 unsigned int reserved7[(0x280 - 0x244) / 4 - 1];
75 unsigned int ssgtbl[32];
76 unsigned int softrst_con[12];
77 unsigned int reserved8[(0x380 - 0x32c) / 4 - 1];
78 unsigned int sdmmc_con[2];
79 unsigned int sdio_con[2];
80 unsigned int emmc_con[2];
81 unsigned int reserved9[(0x400 - 0x394) / 4 - 1];
82 unsigned int autocs_con[8];
85 check_member(px30_cru, autocs_con[7], 0x41c);
89 unsigned int pmu_mode;
90 unsigned int reserved1[7];
91 unsigned int pmu_clksel_con[6];
92 unsigned int reserved2[10];
93 unsigned int pmu_clkgate_con[2];
94 unsigned int reserved3[14];
95 unsigned int pmu_autocs_con[2];
98 check_member(px30_pmucru, pmu_autocs_con[1], 0xc4);
100 struct pll_rate_table {
103 unsigned int postdiv1;
105 unsigned int postdiv2;
110 struct cpu_rate_table {
112 unsigned int aclk_div;
113 unsigned int pclk_div;
119 PLL_POSTDIV1_SHIFT = 12,
120 PLL_POSTDIV1_MASK = 7 << PLL_POSTDIV1_SHIFT,
122 PLL_FBDIV_MASK = 0xfff,
125 PLL_PDSEL_SHIFT = 15,
128 PLL_PD_MASK = 1 << PLL_PD_SHIFT,
129 PLL_DSMPD_SHIFT = 12,
130 PLL_DSMPD_MASK = 1 << PLL_DSMPD_SHIFT,
131 PLL_LOCK_STATUS_SHIFT = 10,
132 PLL_LOCK_STATUS_MASK = 1 << PLL_LOCK_STATUS_SHIFT,
133 PLL_POSTDIV2_SHIFT = 6,
134 PLL_POSTDIV2_MASK = 7 << PLL_POSTDIV2_SHIFT,
135 PLL_REFDIV_SHIFT = 0,
136 PLL_REFDIV_MASK = 0x3f,
139 PLL_FOUT4PHASEPD_SHIFT = 27,
140 PLL_FOUTVCOPD_SHIFT = 26,
141 PLL_FOUTPOSTDIVPD_SHIFT = 25,
142 PLL_DACPD_SHIFT = 24,
143 PLL_FRAC_DIV = 0xffffff,
146 PLLMUX_FROM_XIN24M = 0,
149 USBPHY480M_MODE_SHIFT = 8,
150 USBPHY480M_MODE_MASK = 3 << USBPHY480M_MODE_SHIFT,
152 NPLL_MODE_MASK = 3 << NPLL_MODE_SHIFT,
154 DPLL_MODE_MASK = 3 << DPLL_MODE_SHIFT,
156 CPLL_MODE_MASK = 3 << CPLL_MODE_SHIFT,
158 APLL_MODE_MASK = 3 << APLL_MODE_SHIFT,
160 /* CRU_CLK_SEL0_CON */
161 CORE_ACLK_DIV_SHIFT = 12,
162 CORE_ACLK_DIV_MASK = 0x07 << CORE_ACLK_DIV_SHIFT,
163 CORE_DBG_DIV_SHIFT = 8,
164 CORE_DBG_DIV_MASK = 0x03 << CORE_DBG_DIV_SHIFT,
165 CORE_CLK_PLL_SEL_SHIFT = 7,
166 CORE_CLK_PLL_SEL_MASK = 1 << CORE_CLK_PLL_SEL_SHIFT,
167 CORE_CLK_PLL_SEL_APLL = 0,
168 CORE_CLK_PLL_SEL_GPLL,
169 CORE_DIV_CON_SHIFT = 0,
170 CORE_DIV_CON_MASK = 0x0f << CORE_DIV_CON_SHIFT,
172 /* CRU_CLK_SEL3_CON */
173 ACLK_VO_PLL_SHIFT = 6,
174 ACLK_VO_PLL_MASK = 0x3 << ACLK_VO_PLL_SHIFT,
175 ACLK_VO_SEL_GPLL = 0,
178 ACLK_VO_DIV_SHIFT = 0,
179 ACLK_VO_DIV_MASK = 0x1f << ACLK_VO_DIV_SHIFT,
181 /* CRU_CLK_SEL5_CON */
182 DCLK_VOPB_SEL_SHIFT = 14,
183 DCLK_VOPB_SEL_MASK = 0x3 << DCLK_VOPB_SEL_SHIFT,
184 DCLK_VOPB_SEL_DIVOUT = 0,
185 DCLK_VOPB_SEL_FRACOUT,
187 DCLK_VOPB_PLL_SEL_SHIFT = 11,
188 DCLK_VOPB_PLL_SEL_MASK = 0x1 << DCLK_VOPB_PLL_SEL_SHIFT,
189 DCLK_VOPB_PLL_SEL_CPLL = 0,
190 DCLK_VOPB_PLL_SEL_NPLL,
191 DCLK_VOPB_DIV_SHIFT = 0,
192 DCLK_VOPB_DIV_MASK = 0xff,
194 /* CRU_CLK_SEL8_CON */
195 DCLK_VOPL_SEL_SHIFT = 14,
196 DCLK_VOPL_SEL_MASK = 0x3 << DCLK_VOPL_SEL_SHIFT,
197 DCLK_VOPL_SEL_DIVOUT = 0,
198 DCLK_VOPL_SEL_FRACOUT,
200 DCLK_VOPL_PLL_SEL_SHIFT = 11,
201 DCLK_VOPL_PLL_SEL_MASK = 0x1 << DCLK_VOPL_PLL_SEL_SHIFT,
202 DCLK_VOPL_PLL_SEL_NPLL = 0,
203 DCLK_VOPL_PLL_SEL_CPLL,
204 DCLK_VOPL_DIV_SHIFT = 0,
205 DCLK_VOPL_DIV_MASK = 0xff,
207 /* CRU_CLK_SEL14_CON */
208 PERI_PLL_SEL_SHIFT = 15,
209 PERI_PLL_SEL_MASK = 3 << PERI_PLL_SEL_SHIFT,
212 PERI_HCLK_DIV_SHIFT = 8,
213 PERI_HCLK_DIV_MASK = 0x1f << PERI_HCLK_DIV_SHIFT,
214 PERI_ACLK_DIV_SHIFT = 0,
215 PERI_ACLK_DIV_MASK = 0x1f << PERI_ACLK_DIV_SHIFT,
217 /* CRU_CLKSEL15_CON */
218 NANDC_CLK_SEL_SHIFT = 15,
219 NANDC_CLK_SEL_MASK = 0x1 << NANDC_CLK_SEL_SHIFT,
220 NANDC_CLK_SEL_NANDC = 0,
221 NANDC_CLK_SEL_NANDC_DIV50,
222 NANDC_DIV50_SHIFT = 8,
223 NANDC_DIV50_MASK = 0x1f << NANDC_DIV50_SHIFT,
225 NANDC_PLL_MASK = 0x3 << NANDC_PLL_SHIFT,
230 NANDC_DIV_MASK = 0x1f << NANDC_DIV_SHIFT,
232 /* CRU_CLKSEL20_CON */
234 EMMC_PLL_MASK = 3 << EMMC_PLL_SHIFT,
240 EMMC_DIV_MASK = 0xff << EMMC_DIV_SHIFT,
242 /* CRU_CLKSEL21_CON */
243 EMMC_CLK_SEL_SHIFT = 15,
244 EMMC_CLK_SEL_MASK = 1 << EMMC_CLK_SEL_SHIFT,
245 EMMC_CLK_SEL_EMMC = 0,
246 EMMC_CLK_SEL_EMMC_DIV50,
247 EMMC_DIV50_SHIFT = 0,
248 EMMC_DIV50_MASK = 0xff << EMMC_DIV_SHIFT,
250 /* CRU_CLKSEL22_CON */
251 GMAC_PLL_SEL_SHIFT = 14,
252 GMAC_PLL_SEL_MASK = 3 << GMAC_PLL_SEL_SHIFT,
253 GMAC_PLL_SEL_GPLL = 0,
256 CLK_GMAC_DIV_SHIFT = 8,
257 CLK_GMAC_DIV_MASK = 0x1f << CLK_GMAC_DIV_SHIFT,
258 SFC_PLL_SEL_SHIFT = 7,
259 SFC_PLL_SEL_MASK = 1 << SFC_PLL_SEL_SHIFT,
260 SFC_DIV_CON_SHIFT = 0,
261 SFC_DIV_CON_MASK = 0x7f,
263 /* CRU_CLK_SEL23_CON */
264 BUS_PLL_SEL_SHIFT = 15,
265 BUS_PLL_SEL_MASK = 1 << BUS_PLL_SEL_SHIFT,
266 BUS_PLL_SEL_GPLL = 0,
268 BUS_ACLK_DIV_SHIFT = 8,
269 BUS_ACLK_DIV_MASK = 0x1f << BUS_ACLK_DIV_SHIFT,
270 RMII_CLK_SEL_SHIFT = 7,
271 RMII_CLK_SEL_MASK = 1 << RMII_CLK_SEL_SHIFT,
272 RMII_CLK_SEL_10M = 0,
274 RMII_EXTCLK_SEL_SHIFT = 6,
275 RMII_EXTCLK_SEL_MASK = 1 << RMII_EXTCLK_SEL_SHIFT,
276 RMII_EXTCLK_SEL_INT = 0,
278 PCLK_GMAC_DIV_SHIFT = 0,
279 PCLK_GMAC_DIV_MASK = 0x0f << PCLK_GMAC_DIV_SHIFT,
281 /* CRU_CLK_SEL24_CON */
282 BUS_PCLK_DIV_SHIFT = 8,
283 BUS_PCLK_DIV_MASK = 3 << BUS_PCLK_DIV_SHIFT,
284 BUS_HCLK_DIV_SHIFT = 0,
285 BUS_HCLK_DIV_MASK = 0x1f << BUS_HCLK_DIV_SHIFT,
287 /* CRU_CLK_SEL25_CON */
288 CRYPTO_APK_SEL_SHIFT = 14,
289 CRYPTO_APK_PLL_SEL_MASK = 3 << CRYPTO_APK_SEL_SHIFT,
290 CRYPTO_PLL_SEL_GPLL = 0,
292 CRYPTO_PLL_SEL_NPLL = 0,
293 CRYPTO_APK_DIV_SHIFT = 8,
294 CRYPTO_APK_DIV_MASK = 0x1f << CRYPTO_APK_DIV_SHIFT,
295 CRYPTO_PLL_SEL_SHIFT = 6,
296 CRYPTO_PLL_SEL_MASK = 3 << CRYPTO_PLL_SEL_SHIFT,
297 CRYPTO_DIV_SHIFT = 0,
298 CRYPTO_DIV_MASK = 0x1f << CRYPTO_DIV_SHIFT,
300 /* CRU_CLK_SEL30_CON */
301 CLK_I2S1_DIV_CON_MASK = 0x7f,
302 CLK_I2S1_PLL_SEL_MASK = 0X1 << 8,
303 CLK_I2S1_PLL_SEL_GPLL = 0X0 << 8,
304 CLK_I2S1_PLL_SEL_NPLL = 0X1 << 8,
305 CLK_I2S1_SEL_MASK = 0x3 << 10,
306 CLK_I2S1_SEL_I2S1 = 0x0 << 10,
307 CLK_I2S1_SEL_FRAC = 0x1 << 10,
308 CLK_I2S1_SEL_MCLK_IN = 0x2 << 10,
309 CLK_I2S1_SEL_OSC = 0x3 << 10,
310 CLK_I2S1_OUT_SEL_MASK = 0x1 << 15,
311 CLK_I2S1_OUT_SEL_I2S1 = 0x0 << 15,
312 CLK_I2S1_OUT_SEL_OSC = 0x1 << 15,
314 /* CRU_CLK_SEL31_CON */
315 CLK_I2S1_FRAC_NUMERATOR_SHIFT = 16,
316 CLK_I2S1_FRAC_NUMERATOR_MASK = 0xffff << 16,
317 CLK_I2S1_FRAC_DENOMINATOR_SHIFT = 0,
318 CLK_I2S1_FRAC_DENOMINATOR_MASK = 0xffff,
320 /* CRU_CLK_SEL34_CON */
321 UART1_PLL_SEL_SHIFT = 14,
322 UART1_PLL_SEL_MASK = 3 << UART1_PLL_SEL_SHIFT,
323 UART1_PLL_SEL_GPLL = 0,
327 UART1_DIV_CON_SHIFT = 0,
328 UART1_DIV_CON_MASK = 0x1f << UART1_DIV_CON_SHIFT,
330 /* CRU_CLK_SEL35_CON */
331 UART1_CLK_SEL_SHIFT = 14,
332 UART1_CLK_SEL_MASK = 3 << UART1_PLL_SEL_SHIFT,
333 UART1_CLK_SEL_UART1 = 0,
334 UART1_CLK_SEL_UART1_NP5,
335 UART1_CLK_SEL_UART1_FRAC,
336 UART1_DIVNP5_SHIFT = 0,
337 UART1_DIVNP5_MASK = 0x1f << UART1_DIVNP5_SHIFT,
339 /* CRU_CLK_SEL37_CON */
340 UART2_PLL_SEL_SHIFT = 14,
341 UART2_PLL_SEL_MASK = 3 << UART2_PLL_SEL_SHIFT,
342 UART2_PLL_SEL_GPLL = 0,
346 UART2_DIV_CON_SHIFT = 0,
347 UART2_DIV_CON_MASK = 0x1f << UART2_DIV_CON_SHIFT,
349 /* CRU_CLK_SEL38_CON */
350 UART2_CLK_SEL_SHIFT = 14,
351 UART2_CLK_SEL_MASK = 3 << UART2_PLL_SEL_SHIFT,
352 UART2_CLK_SEL_UART2 = 0,
353 UART2_CLK_SEL_UART2_NP5,
354 UART2_CLK_SEL_UART2_FRAC,
355 UART2_DIVNP5_SHIFT = 0,
356 UART2_DIVNP5_MASK = 0x1f << UART2_DIVNP5_SHIFT,
358 /* CRU_CLK_SEL40_CON */
359 UART3_PLL_SEL_SHIFT = 14,
360 UART3_PLL_SEL_MASK = 3 << UART3_PLL_SEL_SHIFT,
361 UART3_PLL_SEL_GPLL = 0,
365 UART3_DIV_CON_SHIFT = 0,
366 UART3_DIV_CON_MASK = 0x1f << UART3_DIV_CON_SHIFT,
368 /* CRU_CLK_SEL41_CON */
369 UART3_CLK_SEL_SHIFT = 14,
370 UART3_CLK_SEL_MASK = 3 << UART3_PLL_SEL_SHIFT,
371 UART3_CLK_SEL_UART3 = 0,
372 UART3_CLK_SEL_UART3_NP5,
373 UART3_CLK_SEL_UART3_FRAC,
374 UART3_DIVNP5_SHIFT = 0,
375 UART3_DIVNP5_MASK = 0x1f << UART3_DIVNP5_SHIFT,
377 /* CRU_CLK_SEL46_CON */
378 UART5_PLL_SEL_SHIFT = 14,
379 UART5_PLL_SEL_MASK = 3 << UART5_PLL_SEL_SHIFT,
380 UART5_PLL_SEL_GPLL = 0,
384 UART5_DIV_CON_SHIFT = 0,
385 UART5_DIV_CON_MASK = 0x1f << UART5_DIV_CON_SHIFT,
387 /* CRU_CLK_SEL47_CON */
388 UART5_CLK_SEL_SHIFT = 14,
389 UART5_CLK_SEL_MASK = 3 << UART5_PLL_SEL_SHIFT,
390 UART5_CLK_SEL_UART5 = 0,
391 UART5_CLK_SEL_UART5_NP5,
392 UART5_CLK_SEL_UART5_FRAC,
393 UART5_DIVNP5_SHIFT = 0,
394 UART5_DIVNP5_MASK = 0x1f << UART5_DIVNP5_SHIFT,
396 /* CRU_CLK_SEL49_CON */
397 CLK_I2C_PLL_SEL_GPLL = 0,
399 CLK_I2C_DIV_CON_MASK = 0x7f,
400 CLK_I2C_PLL_SEL_MASK = 1,
401 CLK_I2C1_PLL_SEL_SHIFT = 15,
402 CLK_I2C1_DIV_CON_SHIFT = 8,
403 CLK_I2C0_PLL_SEL_SHIFT = 7,
404 CLK_I2C0_DIV_CON_SHIFT = 0,
406 /* CRU_CLK_SEL50_CON */
407 CLK_I2C3_PLL_SEL_SHIFT = 15,
408 CLK_I2C3_DIV_CON_SHIFT = 8,
409 CLK_I2C2_PLL_SEL_SHIFT = 7,
410 CLK_I2C2_DIV_CON_SHIFT = 0,
412 /* CRU_CLK_SEL52_CON */
413 CLK_PWM_PLL_SEL_GPLL = 0,
415 CLK_PWM_DIV_CON_MASK = 0x7f,
416 CLK_PWM_PLL_SEL_MASK = 1,
417 CLK_PWM1_PLL_SEL_SHIFT = 15,
418 CLK_PWM1_DIV_CON_SHIFT = 8,
419 CLK_PWM0_PLL_SEL_SHIFT = 7,
420 CLK_PWM0_DIV_CON_SHIFT = 0,
422 /* CRU_CLK_SEL53_CON */
423 CLK_SPI_PLL_SEL_GPLL = 0,
425 CLK_SPI_DIV_CON_MASK = 0x7f,
426 CLK_SPI_PLL_SEL_MASK = 1,
427 CLK_SPI1_PLL_SEL_SHIFT = 15,
428 CLK_SPI1_DIV_CON_SHIFT = 8,
429 CLK_SPI0_PLL_SEL_SHIFT = 7,
430 CLK_SPI0_DIV_CON_SHIFT = 0,
432 /* CRU_CLK_SEL55_CON */
433 CLK_SARADC_DIV_CON_SHIFT = 0,
434 CLK_SARADC_DIV_CON_MASK = 0x7ff,
436 /* CRU_CLK_GATE10_CON */
437 CLK_I2S1_OUT_MCLK_PAD_MASK = 0x1 << 9,
438 CLK_I2S1_OUT_MCLK_PAD_ENABLE = 0x1 << 9,
439 CLK_I2S1_OUT_MCLK_PAD_DISABLE = 0x0 << 9,
443 GPLL_MODE_MASK = 3 << GPLL_MODE_SHIFT,
445 /* CRU_PMU_CLK_SEL0_CON */
446 CLK_PMU_PCLK_DIV_SHIFT = 0,
447 CLK_PMU_PCLK_DIV_MASK = 0x1f << CLK_PMU_PCLK_DIV_SHIFT,