xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/arch-rockchip/cru_rv1126.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2019 Rockchip Electronics Co. Ltd.
4*4882a593Smuzhiyun  * Author: Finley Xiao <finley.xiao@rock-chips.com>
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _ASM_ARCH_CRU_RV1126_H
8*4882a593Smuzhiyun #define _ASM_ARCH_CRU_RV1126_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <common.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #define MHz		1000000
13*4882a593Smuzhiyun #define KHz		1000
14*4882a593Smuzhiyun #define OSC_HZ		(24 * MHz)
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT)
17*4882a593Smuzhiyun #define APLL_HZ		(1008 * MHz)
18*4882a593Smuzhiyun #else
19*4882a593Smuzhiyun #define APLL_HZ		(816 * MHz)
20*4882a593Smuzhiyun #endif
21*4882a593Smuzhiyun #define GPLL_HZ		(1188 * MHz)
22*4882a593Smuzhiyun #define CPLL_HZ		(500 * MHz)
23*4882a593Smuzhiyun #define HPLL_HZ		(1400 * MHz)
24*4882a593Smuzhiyun #define PCLK_PDPMU_HZ	(100 * MHz)
25*4882a593Smuzhiyun #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT)
26*4882a593Smuzhiyun #define ACLK_PDBUS_HZ	(396 * MHz)
27*4882a593Smuzhiyun #else
28*4882a593Smuzhiyun #define ACLK_PDBUS_HZ	(500 * MHz)
29*4882a593Smuzhiyun #endif
30*4882a593Smuzhiyun #define HCLK_PDBUS_HZ	(200 * MHz)
31*4882a593Smuzhiyun #define PCLK_PDBUS_HZ	(100 * MHz)
32*4882a593Smuzhiyun #define ACLK_PDPHP_HZ	(300 * MHz)
33*4882a593Smuzhiyun #define HCLK_PDPHP_HZ	(200 * MHz)
34*4882a593Smuzhiyun #define HCLK_PDCORE_HZ	(200 * MHz)
35*4882a593Smuzhiyun #define HCLK_PDAUDIO_HZ	(150 * MHz)
36*4882a593Smuzhiyun #define CLK_OSC0_DIV_HZ	(32768)
37*4882a593Smuzhiyun #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT)
38*4882a593Smuzhiyun #define ACLK_PDVI_HZ	(297 * MHz)
39*4882a593Smuzhiyun #define CLK_ISP_HZ	(297 * MHz)
40*4882a593Smuzhiyun #define ACLK_PDISPP_HZ	(297 * MHz)
41*4882a593Smuzhiyun #define CLK_ISPP_HZ	(237 * MHz)
42*4882a593Smuzhiyun #define ACLK_VOP_HZ	(300 * MHz)
43*4882a593Smuzhiyun #define DCLK_VOP_HZ	(65 * MHz)
44*4882a593Smuzhiyun #endif
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /* RV1126 pll id */
47*4882a593Smuzhiyun enum rv1126_pll_id {
48*4882a593Smuzhiyun 	APLL,
49*4882a593Smuzhiyun 	DPLL,
50*4882a593Smuzhiyun 	CPLL,
51*4882a593Smuzhiyun 	HPLL,
52*4882a593Smuzhiyun 	GPLL,
53*4882a593Smuzhiyun 	PLL_COUNT,
54*4882a593Smuzhiyun };
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun struct rv1126_clk_info {
57*4882a593Smuzhiyun 	unsigned long id;
58*4882a593Smuzhiyun 	char *name;
59*4882a593Smuzhiyun 	bool is_cru;
60*4882a593Smuzhiyun };
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun /* Private data for the clock driver - used by rockchip_get_cru() */
63*4882a593Smuzhiyun struct rv1126_pmuclk_priv {
64*4882a593Smuzhiyun 	struct rv1126_pmucru *pmucru;
65*4882a593Smuzhiyun 	ulong gpll_hz;
66*4882a593Smuzhiyun };
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun struct rv1126_clk_priv {
69*4882a593Smuzhiyun 	struct rv1126_cru *cru;
70*4882a593Smuzhiyun 	struct rv1126_grf *grf;
71*4882a593Smuzhiyun 	ulong gpll_hz;
72*4882a593Smuzhiyun 	ulong cpll_hz;
73*4882a593Smuzhiyun 	ulong hpll_hz;
74*4882a593Smuzhiyun 	ulong armclk_hz;
75*4882a593Smuzhiyun 	ulong armclk_enter_hz;
76*4882a593Smuzhiyun 	ulong armclk_init_hz;
77*4882a593Smuzhiyun 	bool sync_kernel;
78*4882a593Smuzhiyun 	bool set_armclk_rate;
79*4882a593Smuzhiyun };
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun struct rv1126_pll {
82*4882a593Smuzhiyun 	unsigned int con0;
83*4882a593Smuzhiyun 	unsigned int con1;
84*4882a593Smuzhiyun 	unsigned int con2;
85*4882a593Smuzhiyun 	unsigned int con3;
86*4882a593Smuzhiyun 	unsigned int con4;
87*4882a593Smuzhiyun 	unsigned int con5;
88*4882a593Smuzhiyun 	unsigned int con6;
89*4882a593Smuzhiyun 	unsigned int reserved0[1];
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun struct rv1126_pmucru {
93*4882a593Smuzhiyun 	unsigned int pmu_mode;
94*4882a593Smuzhiyun 	unsigned int reserved1[3];
95*4882a593Smuzhiyun 	struct rv1126_pll pll;
96*4882a593Smuzhiyun 	unsigned int offsetcal_status;
97*4882a593Smuzhiyun 	unsigned int reserved2[51];
98*4882a593Smuzhiyun 	unsigned int pmu_clksel_con[14];
99*4882a593Smuzhiyun 	unsigned int reserved3[18];
100*4882a593Smuzhiyun 	unsigned int pmu_clkgate_con[3];
101*4882a593Smuzhiyun 	unsigned int reserved4[29];
102*4882a593Smuzhiyun 	unsigned int pmu_softrst_con[2];
103*4882a593Smuzhiyun 	unsigned int reserved5[14];
104*4882a593Smuzhiyun 	unsigned int pmu_autocs_con[2];
105*4882a593Smuzhiyun };
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun check_member(rv1126_pmucru, pmu_autocs_con[1], 0x244);
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun struct rv1126_cru {
110*4882a593Smuzhiyun 	struct rv1126_pll pll[4];
111*4882a593Smuzhiyun 	unsigned int offsetcal_status[4];
112*4882a593Smuzhiyun 	unsigned int mode;
113*4882a593Smuzhiyun 	unsigned int reserved1[27];
114*4882a593Smuzhiyun 	unsigned int clksel_con[78];
115*4882a593Smuzhiyun 	unsigned int reserved2[18];
116*4882a593Smuzhiyun 	unsigned int clkgate_con[25];
117*4882a593Smuzhiyun 	unsigned int reserved3[7];
118*4882a593Smuzhiyun 	unsigned int softrst_con[15];
119*4882a593Smuzhiyun 	unsigned int reserved4[17];
120*4882a593Smuzhiyun 	unsigned int ssgtbl[32];
121*4882a593Smuzhiyun 	unsigned int glb_cnt_th;
122*4882a593Smuzhiyun 	unsigned int glb_rst_st;
123*4882a593Smuzhiyun 	unsigned int glb_srst_fst;
124*4882a593Smuzhiyun 	unsigned int glb_srst_snd;
125*4882a593Smuzhiyun 	unsigned int glb_rst_con;
126*4882a593Smuzhiyun 	unsigned int reserved5[11];
127*4882a593Smuzhiyun 	unsigned int sdmmc_con[2];
128*4882a593Smuzhiyun 	unsigned int sdio_con[2];
129*4882a593Smuzhiyun 	unsigned int emmc_con[2];
130*4882a593Smuzhiyun 	unsigned int reserved6[2];
131*4882a593Smuzhiyun 	unsigned int gmac_con;
132*4882a593Smuzhiyun 	unsigned int misc[2];
133*4882a593Smuzhiyun 	unsigned int reserved7[45];
134*4882a593Smuzhiyun 	unsigned int autocs_con[26];
135*4882a593Smuzhiyun };
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun check_member(rv1126_cru, autocs_con[25], 0x584);
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun struct pll_rate_table {
140*4882a593Smuzhiyun 	unsigned long rate;
141*4882a593Smuzhiyun 	unsigned int fbdiv;
142*4882a593Smuzhiyun 	unsigned int postdiv1;
143*4882a593Smuzhiyun 	unsigned int refdiv;
144*4882a593Smuzhiyun 	unsigned int postdiv2;
145*4882a593Smuzhiyun 	unsigned int dsmpd;
146*4882a593Smuzhiyun 	unsigned int frac;
147*4882a593Smuzhiyun };
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun struct cpu_rate_table {
150*4882a593Smuzhiyun 	unsigned long rate;
151*4882a593Smuzhiyun 	unsigned int aclk_div;
152*4882a593Smuzhiyun 	unsigned int pclk_div;
153*4882a593Smuzhiyun };
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun #define RV1126_PMU_MODE			0x0
156*4882a593Smuzhiyun #define RV1126_PMU_PLL_CON(x)		((x) * 0x4 + 0x10)
157*4882a593Smuzhiyun #define RV1126_PLL_CON(x)		((x) * 0x4)
158*4882a593Smuzhiyun #define RV1126_MODE_CON			0x90
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun enum {
161*4882a593Smuzhiyun 	/* CRU_PMU_CLK_SEL0_CON */
162*4882a593Smuzhiyun 	RTC32K_SEL_SHIFT	= 7,
163*4882a593Smuzhiyun 	RTC32K_SEL_MASK		= 0x3 << RTC32K_SEL_SHIFT,
164*4882a593Smuzhiyun 	RTC32K_SEL_PMUPVTM	= 0,
165*4882a593Smuzhiyun 	RTC32K_SEL_OSC1_32K,
166*4882a593Smuzhiyun 	RTC32K_SEL_OSC0_DIV32K,
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun 	/* CRU_PMU_CLK_SEL1_CON */
169*4882a593Smuzhiyun 	PCLK_PDPMU_DIV_SHIFT	= 0,
170*4882a593Smuzhiyun 	PCLK_PDPMU_DIV_MASK	= 0x1f,
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun 	/* CRU_PMU_CLK_SEL2_CON */
173*4882a593Smuzhiyun 	CLK_I2C0_DIV_SHIFT	= 0,
174*4882a593Smuzhiyun 	CLK_I2C0_DIV_MASK	= 0x7f,
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun 	/* CRU_PMU_CLK_SEL3_CON */
177*4882a593Smuzhiyun 	CLK_I2C2_DIV_SHIFT	= 0,
178*4882a593Smuzhiyun 	CLK_I2C2_DIV_MASK	= 0x7f,
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun 	/* CRU_PMU_CLK_SEL6_CON */
181*4882a593Smuzhiyun 	CLK_PWM1_SEL_SHIFT	= 15,
182*4882a593Smuzhiyun 	CLK_PWM1_SEL_MASK	= 1 << CLK_PWM1_SEL_SHIFT,
183*4882a593Smuzhiyun 	CLK_PWM1_SEL_XIN24M	= 0,
184*4882a593Smuzhiyun 	CLK_PWM1_SEL_GPLL,
185*4882a593Smuzhiyun 	CLK_PWM1_DIV_SHIFT	= 8,
186*4882a593Smuzhiyun 	CLK_PWM1_DIV_MASK	= 0x7f << CLK_PWM1_DIV_SHIFT,
187*4882a593Smuzhiyun 	CLK_PWM0_SEL_SHIFT	= 7,
188*4882a593Smuzhiyun 	CLK_PWM0_SEL_MASK	= 1 << CLK_PWM0_SEL_SHIFT,
189*4882a593Smuzhiyun 	CLK_PWM0_SEL_XIN24M	= 0,
190*4882a593Smuzhiyun 	CLK_PWM0_SEL_GPLL,
191*4882a593Smuzhiyun 	CLK_PWM0_DIV_SHIFT	= 0,
192*4882a593Smuzhiyun 	CLK_PWM0_DIV_MASK	= 0x7f,
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun 	/* CRU_PMU_CLK_SEL9_CON */
195*4882a593Smuzhiyun 	CLK_SPI0_SEL_SHIFT	= 7,
196*4882a593Smuzhiyun 	CLK_SPI0_SEL_MASK	= 1 << CLK_SPI0_SEL_SHIFT,
197*4882a593Smuzhiyun 	CLK_SPI0_SEL_GPLL	= 0,
198*4882a593Smuzhiyun 	CLK_SPI0_SEL_XIN24M,
199*4882a593Smuzhiyun 	CLK_SPI0_DIV_SHIFT	= 0,
200*4882a593Smuzhiyun 	CLK_SPI0_DIV_MASK	= 0x7f,
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun 	/* CRU_PMU_CLK_SEL13_CON */
203*4882a593Smuzhiyun 	CLK_RTC32K_FRAC_NUMERATOR_SHIFT		= 16,
204*4882a593Smuzhiyun 	CLK_RTC32K_FRAC_NUMERATOR_MASK		= 0xffff << 16,
205*4882a593Smuzhiyun 	CLK_RTC32K_FRAC_DENOMINATOR_SHIFT	= 0,
206*4882a593Smuzhiyun 	CLK_RTC32K_FRAC_DENOMINATOR_MASK	= 0xffff,
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun 	/* CRU_CLK_SEL0_CON */
209*4882a593Smuzhiyun 	CORE_HCLK_DIV_SHIFT	= 8,
210*4882a593Smuzhiyun 	CORE_HCLK_DIV_MASK	= 0x1f << CORE_HCLK_DIV_SHIFT,
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun 	/* CRU_CLK_SEL1_CON */
213*4882a593Smuzhiyun 	CORE_ACLK_DIV_SHIFT	= 4,
214*4882a593Smuzhiyun 	CORE_ACLK_DIV_MASK	= 0xf << CORE_ACLK_DIV_SHIFT,
215*4882a593Smuzhiyun 	CORE_DBG_DIV_SHIFT	= 0,
216*4882a593Smuzhiyun 	CORE_DBG_DIV_MASK	= 0x7,
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun 	/* CRU_CLK_SEL2_CON */
219*4882a593Smuzhiyun 	HCLK_PDBUS_SEL_SHIFT	= 15,
220*4882a593Smuzhiyun 	HCLK_PDBUS_SEL_MASK	= 1 << HCLK_PDBUS_SEL_SHIFT,
221*4882a593Smuzhiyun 	HCLK_PDBUS_SEL_GPLL	= 0,
222*4882a593Smuzhiyun 	HCLK_PDBUS_SEL_CPLL,
223*4882a593Smuzhiyun 	HCLK_PDBUS_DIV_SHIFT	= 8,
224*4882a593Smuzhiyun 	HCLK_PDBUS_DIV_MASK	= 0x1f << HCLK_PDBUS_DIV_SHIFT,
225*4882a593Smuzhiyun 	ACLK_PDBUS_SEL_SHIFT	= 6,
226*4882a593Smuzhiyun 	ACLK_PDBUS_SEL_MASK	= 0x3 << ACLK_PDBUS_SEL_SHIFT,
227*4882a593Smuzhiyun 	ACLK_PDBUS_SEL_GPLL	= 0,
228*4882a593Smuzhiyun 	ACLK_PDBUS_SEL_CPLL,
229*4882a593Smuzhiyun 	ACLK_PDBUS_SEL_DPLL,
230*4882a593Smuzhiyun 	ACLK_PDBUS_DIV_SHIFT	= 0,
231*4882a593Smuzhiyun 	ACLK_PDBUS_DIV_MASK	= 0x1f,
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	/* CRU_CLK_SEL3_CON */
234*4882a593Smuzhiyun 	CLK_SCR1_SEL_SHIFT	= 15,
235*4882a593Smuzhiyun 	CLK_SCR1_SEL_MASK	= 1 << CLK_SCR1_SEL_SHIFT,
236*4882a593Smuzhiyun 	CLK_SCR1_SEL_GPLL	= 0,
237*4882a593Smuzhiyun 	CLK_SCR1_SEL_CPLL,
238*4882a593Smuzhiyun 	CLK_SCR1_DIV_SHIFT	= 8,
239*4882a593Smuzhiyun 	CLK_SCR1_DIV_MASK	= 0x1f << CLK_SCR1_DIV_SHIFT,
240*4882a593Smuzhiyun 	PCLK_PDBUS_SEL_SHIFT	= 7,
241*4882a593Smuzhiyun 	PCLK_PDBUS_SEL_MASK	= 1 << PCLK_PDBUS_SEL_SHIFT,
242*4882a593Smuzhiyun 	PCLK_PDBUS_SEL_GPLL	= 0,
243*4882a593Smuzhiyun 	PCLK_PDBUS_SEL_CPLL,
244*4882a593Smuzhiyun 	PCLK_PDBUS_DIV_SHIFT	= 0,
245*4882a593Smuzhiyun 	PCLK_PDBUS_DIV_MASK	= 0x1f,
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun 	/* CRU_CLK_SEL4_CON */
248*4882a593Smuzhiyun 	ACLK_CRYPTO_SEL_SHIFT	= 7,
249*4882a593Smuzhiyun 	ACLK_CRYPTO_SEL_MASK	= 1 << ACLK_CRYPTO_SEL_SHIFT,
250*4882a593Smuzhiyun 	ACLK_CRYPTO_SEL_GPLL	= 0,
251*4882a593Smuzhiyun 	ACLK_CRYPTO_SEL_CPLL,
252*4882a593Smuzhiyun 	ACLK_CRYPTO_DIV_SHIFT	= 0,
253*4882a593Smuzhiyun 	ACLK_CRYPTO_DIV_MASK	= 0x1f,
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun 	/* CRU_CLK_SEL5_CON */
256*4882a593Smuzhiyun 	CLK_I2C3_DIV_SHIFT	= 8,
257*4882a593Smuzhiyun 	CLK_I2C3_DIV_MASK	= 0x7f << CLK_I2C3_DIV_SHIFT,
258*4882a593Smuzhiyun 	CLK_I2C1_DIV_SHIFT	= 0,
259*4882a593Smuzhiyun 	CLK_I2C1_DIV_MASK	= 0x7f,
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun 	/* CRU_CLK_SEL6_CON */
262*4882a593Smuzhiyun 	CLK_I2C5_DIV_SHIFT	= 8,
263*4882a593Smuzhiyun 	CLK_I2C5_DIV_MASK	= 0x7f << CLK_I2C5_DIV_SHIFT,
264*4882a593Smuzhiyun 	CLK_I2C4_DIV_SHIFT	= 0,
265*4882a593Smuzhiyun 	CLK_I2C4_DIV_MASK	= 0x7f,
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun 	/* CRU_CLK_SEL7_CON */
268*4882a593Smuzhiyun 	CLK_CRYPTO_PKA_SEL_SHIFT	= 15,
269*4882a593Smuzhiyun 	CLK_CRYPTO_PKA_SEL_MASK		= 1 << CLK_CRYPTO_PKA_SEL_SHIFT,
270*4882a593Smuzhiyun 	CLK_CRYPTO_PKA_SEL_GPLL		= 0,
271*4882a593Smuzhiyun 	CLK_CRYPTO_PKA_SEL_CPLL,
272*4882a593Smuzhiyun 	CLK_CRYPTO_PKA_DIV_SHIFT	= 8,
273*4882a593Smuzhiyun 	CLK_CRYPTO_PKA_DIV_MASK		= 0x1f << CLK_CRYPTO_PKA_DIV_SHIFT,
274*4882a593Smuzhiyun 	CLK_CRYPTO_CORE_SEL_SHIFT	= 7,
275*4882a593Smuzhiyun 	CLK_CRYPTO_CORE_SEL_MASK	= 1 << CLK_CRYPTO_CORE_SEL_SHIFT,
276*4882a593Smuzhiyun 	CLK_CRYPTO_CORE_SEL_GPLL	= 0,
277*4882a593Smuzhiyun 	CLK_CRYPTO_CORE_SEL_CPLL,
278*4882a593Smuzhiyun 	CLK_CRYPTO_CORE_DIV_SHIFT	= 0,
279*4882a593Smuzhiyun 	CLK_CRYPTO_CORE_DIV_MASK	= 0x1f,
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun 	/* CRU_CLK_SEL8_CON */
282*4882a593Smuzhiyun 	CLK_SPI1_SEL_SHIFT	= 8,
283*4882a593Smuzhiyun 	CLK_SPI1_SEL_MASK	= 1 << CLK_SPI1_SEL_SHIFT,
284*4882a593Smuzhiyun 	CLK_SPI1_SEL_GPLL	= 0,
285*4882a593Smuzhiyun 	CLK_SPI1_SEL_XIN24M,
286*4882a593Smuzhiyun 	CLK_SPI1_DIV_SHIFT	= 0,
287*4882a593Smuzhiyun 	CLK_SPI1_DIV_MASK	= 0x7f,
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun 	/* CRU_CLK_SEL9_CON */
290*4882a593Smuzhiyun 	CLK_PWM2_SEL_SHIFT	= 15,
291*4882a593Smuzhiyun 	CLK_PWM2_SEL_MASK	= 1 << CLK_PWM2_SEL_SHIFT,
292*4882a593Smuzhiyun 	CLK_PWM2_SEL_XIN24M	= 0,
293*4882a593Smuzhiyun 	CLK_PWM2_SEL_GPLL,
294*4882a593Smuzhiyun 	CLK_PWM2_DIV_SHIFT	= 8,
295*4882a593Smuzhiyun 	CLK_PWM2_DIV_MASK	= 0x7f << CLK_PWM2_DIV_SHIFT,
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun 	/* CRU_CLK_SEL20_CON */
298*4882a593Smuzhiyun 	CLK_SARADC_DIV_SHIFT	= 0,
299*4882a593Smuzhiyun 	CLK_SARADC_DIV_MASK	= 0x7ff,
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun 	/* CRU_CLK_SEL25_CON */
302*4882a593Smuzhiyun 	DCLK_DECOM_SEL_SHIFT	= 15,
303*4882a593Smuzhiyun 	DCLK_DECOM_SEL_MASK	= 1 << DCLK_DECOM_SEL_SHIFT,
304*4882a593Smuzhiyun 	DCLK_DECOM_SEL_GPLL	= 0,
305*4882a593Smuzhiyun 	DCLK_DECOM_SEL_CPLL,
306*4882a593Smuzhiyun 	DCLK_DECOM_DIV_SHIFT	= 8,
307*4882a593Smuzhiyun 	DCLK_DECOM_DIV_MASK	= 0x7f << DCLK_DECOM_DIV_SHIFT,
308*4882a593Smuzhiyun 
309*4882a593Smuzhiyun 	/* CRU_CLK_SEL26_CON */
310*4882a593Smuzhiyun 	HCLK_PDAUDIO_DIV_SHIFT	= 0,
311*4882a593Smuzhiyun 	HCLK_PDAUDIO_DIV_MASK	= 0x1f,
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun 	/* CRU_CLK_SEL45_CON */
314*4882a593Smuzhiyun 	ACLK_PDVO_SEL_SHIFT	= 7,
315*4882a593Smuzhiyun 	ACLK_PDVO_SEL_MASK	= 1 << ACLK_PDVO_SEL_SHIFT,
316*4882a593Smuzhiyun 	ACLK_PDVO_SEL_GPLL	= 0,
317*4882a593Smuzhiyun 	ACLK_PDVO_SEL_CPLL,
318*4882a593Smuzhiyun 	ACLK_PDVO_DIV_SHIFT	= 0,
319*4882a593Smuzhiyun 	ACLK_PDVO_DIV_MASK	= 0x1f,
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun 	/* CRU_CLK_SEL47_CON */
322*4882a593Smuzhiyun 	DCLK_VOP_SEL_SHIFT	= 8,
323*4882a593Smuzhiyun 	DCLK_VOP_SEL_MASK	= 1 << DCLK_VOP_SEL_SHIFT,
324*4882a593Smuzhiyun 	DCLK_VOP_SEL_GPLL	= 0,
325*4882a593Smuzhiyun 	DCLK_VOP_SEL_CPLL,
326*4882a593Smuzhiyun 	DCLK_VOP_DIV_SHIFT	= 0,
327*4882a593Smuzhiyun 	DCLK_VOP_DIV_MASK	= 0xff,
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT)
330*4882a593Smuzhiyun 	/* CRU_CLK_SEL49_CON */
331*4882a593Smuzhiyun 	ACLK_PDVI_SEL_SHIFT	= 6,
332*4882a593Smuzhiyun 	ACLK_PDVI_SEL_MASK	= 0x3 << ACLK_PDVI_SEL_SHIFT,
333*4882a593Smuzhiyun 	ACLK_PDVI_SEL_CPLL	= 0,
334*4882a593Smuzhiyun 	ACLK_PDVI_SEL_GPLL,
335*4882a593Smuzhiyun 	ACLK_PDVI_SEL_HPLL,
336*4882a593Smuzhiyun 	ACLK_PDVI_DIV_SHIFT	= 0,
337*4882a593Smuzhiyun 	ACLK_PDVI_DIV_MASK	= 0x1f,
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun 	/* CRU_CLK_SEL50_CON */
340*4882a593Smuzhiyun 	CLK_ISP_SEL_SHIFT	= 6,
341*4882a593Smuzhiyun 	CLK_ISP_SEL_MASK	= 0x3 << CLK_ISP_SEL_SHIFT,
342*4882a593Smuzhiyun 	CLK_ISP_SEL_GPLL	= 0,
343*4882a593Smuzhiyun 	CLK_ISP_SEL_CPLL,
344*4882a593Smuzhiyun 	CLK_ISP_SEL_HPLL,
345*4882a593Smuzhiyun 	CLK_ISP_DIV_SHIFT	= 0,
346*4882a593Smuzhiyun 	CLK_ISP_DIV_MASK	= 0x1f,
347*4882a593Smuzhiyun #endif
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun 	/* CRU_CLK_SEL53_CON */
350*4882a593Smuzhiyun 	HCLK_PDPHP_DIV_SHIFT	= 8,
351*4882a593Smuzhiyun 	HCLK_PDPHP_DIV_MASK	= 0x1f << HCLK_PDPHP_DIV_SHIFT,
352*4882a593Smuzhiyun 	ACLK_PDPHP_SEL_SHIFT	= 7,
353*4882a593Smuzhiyun 	ACLK_PDPHP_SEL_MASK	= 1 << ACLK_PDPHP_SEL_SHIFT,
354*4882a593Smuzhiyun 	ACLK_PDPHP_SEL_GPLL	= 0,
355*4882a593Smuzhiyun 	ACLK_PDPHP_SEL_CPLL,
356*4882a593Smuzhiyun 	ACLK_PDPHP_DIV_SHIFT	= 0,
357*4882a593Smuzhiyun 	ACLK_PDPHP_DIV_MASK	= 0x1f,
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun 	/* CRU_CLK_SEL57_CON */
360*4882a593Smuzhiyun 	EMMC_SEL_SHIFT	= 14,
361*4882a593Smuzhiyun 	EMMC_SEL_MASK	= 0x3 << EMMC_SEL_SHIFT,
362*4882a593Smuzhiyun 	EMMC_SEL_GPLL	= 0,
363*4882a593Smuzhiyun 	EMMC_SEL_CPLL,
364*4882a593Smuzhiyun 	EMMC_SEL_XIN24M,
365*4882a593Smuzhiyun 	EMMC_DIV_SHIFT	= 0,
366*4882a593Smuzhiyun 	EMMC_DIV_MASK	= 0xff,
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun 	/* CRU_CLK_SEL58_CON */
369*4882a593Smuzhiyun 	SCLK_SFC_SEL_SHIFT	= 15,
370*4882a593Smuzhiyun 	SCLK_SFC_SEL_MASK	= 0x1 << SCLK_SFC_SEL_SHIFT,
371*4882a593Smuzhiyun 	SCLK_SFC_SEL_CPLL	= 0,
372*4882a593Smuzhiyun 	SCLK_SFC_SEL_GPLL,
373*4882a593Smuzhiyun 	SCLK_SFC_DIV_SHIFT	= 0,
374*4882a593Smuzhiyun 	SCLK_SFC_DIV_MASK	= 0xff,
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun 	/* CRU_CLK_SEL59_CON */
377*4882a593Smuzhiyun 	CLK_NANDC_SEL_SHIFT	= 15,
378*4882a593Smuzhiyun 	CLK_NANDC_SEL_MASK	= 0x1 << CLK_NANDC_SEL_SHIFT,
379*4882a593Smuzhiyun 	CLK_NANDC_SEL_GPLL	= 0,
380*4882a593Smuzhiyun 	CLK_NANDC_SEL_CPLL,
381*4882a593Smuzhiyun 	CLK_NANDC_DIV_SHIFT	= 0,
382*4882a593Smuzhiyun 	CLK_NANDC_DIV_MASK	= 0xff,
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun 	/* CRU_CLK_SEL61_CON */
385*4882a593Smuzhiyun 	CLK_GMAC_OUT_SEL_SHIFT	= 15,
386*4882a593Smuzhiyun 	CLK_GMAC_OUT_SEL_MASK	= 0x1 << CLK_GMAC_OUT_SEL_SHIFT,
387*4882a593Smuzhiyun 	CLK_GMAC_OUT_SEL_CPLL	= 0,
388*4882a593Smuzhiyun 	CLK_GMAC_OUT_SEL_GPLL,
389*4882a593Smuzhiyun 	CLK_GMAC_OUT_DIV_SHIFT	= 8,
390*4882a593Smuzhiyun 	CLK_GMAC_OUT_DIV_MASK	= 0x1f << CLK_GMAC_OUT_DIV_SHIFT,
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun 	/* CRU_CLK_SEL63_CON */
393*4882a593Smuzhiyun 	PCLK_GMAC_DIV_SHIFT	= 8,
394*4882a593Smuzhiyun 	PCLK_GMAC_DIV_MASK	= 0x1f << PCLK_GMAC_DIV_SHIFT,
395*4882a593Smuzhiyun 	CLK_GMAC_SRC_SEL_SHIFT	= 7,
396*4882a593Smuzhiyun 	CLK_GMAC_SRC_SEL_MASK	= 0x1 << CLK_GMAC_SRC_SEL_SHIFT,
397*4882a593Smuzhiyun 	CLK_GMAC_SRC_SEL_CPLL	= 0,
398*4882a593Smuzhiyun 	CLK_GMAC_SRC_SEL_GPLL,
399*4882a593Smuzhiyun 	CLK_GMAC_SRC_DIV_SHIFT	= 0,
400*4882a593Smuzhiyun 	CLK_GMAC_SRC_DIV_MASK	= 0x1f << CLK_GMAC_SRC_DIV_SHIFT,
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT)
403*4882a593Smuzhiyun 	/* CRU_CLK_SEL68_CON */
404*4882a593Smuzhiyun 	ACLK_PDISPP_SEL_SHIFT	= 6,
405*4882a593Smuzhiyun 	ACLK_PDISPP_SEL_MASK	= 0x3 << ACLK_PDISPP_SEL_SHIFT,
406*4882a593Smuzhiyun 	ACLK_PDISPP_SEL_CPLL	= 0,
407*4882a593Smuzhiyun 	ACLK_PDISPP_SEL_GPLL,
408*4882a593Smuzhiyun 	ACLK_PDISPP_SEL_HPLL,
409*4882a593Smuzhiyun 	ACLK_PDISPP_DIV_SHIFT	= 0,
410*4882a593Smuzhiyun 	ACLK_PDISPP_DIV_MASK	= 0x1f,
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun 	/* CRU_CLK_SEL69_CON */
413*4882a593Smuzhiyun 	CLK_ISPP_SEL_SHIFT	= 6,
414*4882a593Smuzhiyun 	CLK_ISPP_SEL_MASK	= 0x3 << CLK_ISPP_SEL_SHIFT,
415*4882a593Smuzhiyun 	CLK_ISPP_SEL_CPLL	= 0,
416*4882a593Smuzhiyun 	CLK_ISPP_SEL_GPLL,
417*4882a593Smuzhiyun 	CLK_ISPP_SEL_HPLL,
418*4882a593Smuzhiyun 	CLK_ISPP_DIV_SHIFT	= 0,
419*4882a593Smuzhiyun 	CLK_ISPP_DIV_MASK	= 0x1f,
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun 	/* CRU_CLK_SEL73_CON */
422*4882a593Smuzhiyun 	MIPICSI_OUT_SEL_SHIFT	= 10,
423*4882a593Smuzhiyun 	MIPICSI_OUT_SEL_MASK	= 0x3 << MIPICSI_OUT_SEL_SHIFT,
424*4882a593Smuzhiyun 	MIPICSI_OUT_SEL_XIN24M	= 0,
425*4882a593Smuzhiyun 	MIPICSI_OUT_SEL_DIV,
426*4882a593Smuzhiyun 	MIPICSI_OUT_SEL_FRACDIV,
427*4882a593Smuzhiyun 	MIPICSI_OUT_DIV_SHIFT	= 0,
428*4882a593Smuzhiyun 	MIPICSI_OUT_DIV_MASK	= 0x1f,
429*4882a593Smuzhiyun #endif
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun 	/* CRU_GMAC_CON */
432*4882a593Smuzhiyun 	GMAC_SRC_M1_SEL_SHIFT	= 5,
433*4882a593Smuzhiyun 	GMAC_SRC_M1_SEL_MASK	= 0x1 << GMAC_SRC_M1_SEL_SHIFT,
434*4882a593Smuzhiyun 	GMAC_SRC_M1_SEL_INT	= 0,
435*4882a593Smuzhiyun 	GMAC_SRC_M1_SEL_EXT,
436*4882a593Smuzhiyun 	GMAC_MODE_SEL_SHIFT	= 4,
437*4882a593Smuzhiyun 	GMAC_MODE_SEL_MASK	= 0x1 << GMAC_MODE_SEL_SHIFT,
438*4882a593Smuzhiyun 	GMAC_RGMII_MODE		= 0,
439*4882a593Smuzhiyun 	GMAC_RMII_MODE,
440*4882a593Smuzhiyun 	RGMII_CLK_SEL_SHIFT	= 2,
441*4882a593Smuzhiyun 	RGMII_CLK_SEL_MASK	= 0x3 << RGMII_CLK_SEL_SHIFT,
442*4882a593Smuzhiyun 	RGMII_CLK_DIV0		= 0,
443*4882a593Smuzhiyun 	RGMII_CLK_DIV1,
444*4882a593Smuzhiyun 	RGMII_CLK_DIV50,
445*4882a593Smuzhiyun 	RGMII_CLK_DIV5,
446*4882a593Smuzhiyun 	RMII_CLK_SEL_SHIFT	= 1,
447*4882a593Smuzhiyun 	RMII_CLK_SEL_MASK	= 0x1 << RMII_CLK_SEL_SHIFT,
448*4882a593Smuzhiyun 	RMII_CLK_DIV20		= 0,
449*4882a593Smuzhiyun 	RMII_CLK_DIV2,
450*4882a593Smuzhiyun 	GMAC_SRC_M0_SEL_SHIFT	= 0,
451*4882a593Smuzhiyun 	GMAC_SRC_M0_SEL_MASK	= 0x1,
452*4882a593Smuzhiyun 	GMAC_SRC_M0_SEL_INT	= 0,
453*4882a593Smuzhiyun 	GMAC_SRC_M0_SEL_EXT,
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun 	/* GRF_IOFUNC_CON1 */
456*4882a593Smuzhiyun 	GMAC_SRC_SEL_SHIFT	= 12,
457*4882a593Smuzhiyun 	GMAC_SRC_SEL_MASK	= 1 << GMAC_SRC_SEL_SHIFT,
458*4882a593Smuzhiyun 	GMAC_SRC_SEL_M0		= 0,
459*4882a593Smuzhiyun 	GMAC_SRC_SEL_M1,
460*4882a593Smuzhiyun };
461*4882a593Smuzhiyun #endif
462