xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/arch-rockchip/cru_px30.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * (C) Copyright 2017 Rockchip Electronics Co., Ltd.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:     GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #ifndef _ASM_ARCH_CRU_px30_H
7*4882a593Smuzhiyun #define _ASM_ARCH_CRU_px30_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <common.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #define MHz		1000000
12*4882a593Smuzhiyun #define KHz		1000
13*4882a593Smuzhiyun #define OSC_HZ		(24 * MHz)
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define APLL_HZ		(600 * MHz)
16*4882a593Smuzhiyun #define GPLL_HZ		(1200 * MHz)
17*4882a593Smuzhiyun #define NPLL_HZ		(1188 * MHz)
18*4882a593Smuzhiyun #define ACLK_BUS_HZ	(200 * MHz)
19*4882a593Smuzhiyun #define HCLK_BUS_HZ	(150 * MHz)
20*4882a593Smuzhiyun #define PCLK_BUS_HZ	(100 * MHz)
21*4882a593Smuzhiyun #define ACLK_PERI_HZ	(200 * MHz)
22*4882a593Smuzhiyun #define HCLK_PERI_HZ	(150 * MHz)
23*4882a593Smuzhiyun #define PCLK_PMU_HZ	(100 * MHz)
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* PX30 pll id */
26*4882a593Smuzhiyun enum px30_pll_id {
27*4882a593Smuzhiyun 	APLL,
28*4882a593Smuzhiyun 	DPLL,
29*4882a593Smuzhiyun 	CPLL,
30*4882a593Smuzhiyun 	NPLL,
31*4882a593Smuzhiyun 	GPLL,
32*4882a593Smuzhiyun 	PLL_COUNT,
33*4882a593Smuzhiyun };
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun struct px30_clk_info {
36*4882a593Smuzhiyun 	unsigned long id;
37*4882a593Smuzhiyun 	char *name;
38*4882a593Smuzhiyun 	bool is_cru;
39*4882a593Smuzhiyun };
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /* Private data for the clock driver - used by rockchip_get_cru() */
42*4882a593Smuzhiyun struct px30_clk_priv {
43*4882a593Smuzhiyun 	struct px30_cru *cru;
44*4882a593Smuzhiyun 	ulong gpll_hz;
45*4882a593Smuzhiyun 	ulong armclk_hz;
46*4882a593Smuzhiyun 	ulong armclk_enter_hz;
47*4882a593Smuzhiyun 	ulong armclk_init_hz;
48*4882a593Smuzhiyun 	bool sync_kernel;
49*4882a593Smuzhiyun 	bool set_armclk_rate;
50*4882a593Smuzhiyun };
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun struct px30_pmuclk_priv {
53*4882a593Smuzhiyun 	struct px30_pmucru *pmucru;
54*4882a593Smuzhiyun 	ulong gpll_hz;
55*4882a593Smuzhiyun };
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun struct px30_pll {
58*4882a593Smuzhiyun 	unsigned int con0;
59*4882a593Smuzhiyun 	unsigned int con1;
60*4882a593Smuzhiyun 	unsigned int con2;
61*4882a593Smuzhiyun 	unsigned int con3;
62*4882a593Smuzhiyun 	unsigned int con4;
63*4882a593Smuzhiyun 	unsigned int reserved0[3];
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun struct px30_cru {
67*4882a593Smuzhiyun 	struct px30_pll pll[4];
68*4882a593Smuzhiyun 	unsigned int reserved1[8];
69*4882a593Smuzhiyun 	unsigned int mode;
70*4882a593Smuzhiyun 	unsigned int misc;
71*4882a593Smuzhiyun 	unsigned int reserved2[2];
72*4882a593Smuzhiyun 	unsigned int glb_cnt_th;
73*4882a593Smuzhiyun 	unsigned int glb_rst_st;
74*4882a593Smuzhiyun 	unsigned int glb_srst_fst;
75*4882a593Smuzhiyun 	unsigned int glb_srst_snd;
76*4882a593Smuzhiyun 	unsigned int glb_rst_con;
77*4882a593Smuzhiyun 	unsigned int reserved3[7];
78*4882a593Smuzhiyun 	unsigned int hwffc_con0;
79*4882a593Smuzhiyun 	unsigned int reserved4;
80*4882a593Smuzhiyun 	unsigned int hwffc_th;
81*4882a593Smuzhiyun 	unsigned int hwffc_intst;
82*4882a593Smuzhiyun 	unsigned int apll_con0_s;
83*4882a593Smuzhiyun 	unsigned int apll_con1_s;
84*4882a593Smuzhiyun 	unsigned int clksel_con0_s;
85*4882a593Smuzhiyun 	unsigned int reserved5;
86*4882a593Smuzhiyun 	unsigned int clksel_con[60];
87*4882a593Smuzhiyun 	unsigned int reserved6[4];
88*4882a593Smuzhiyun 	unsigned int clkgate_con[18];
89*4882a593Smuzhiyun 	unsigned int reserved7[(0x280 - 0x244) / 4 - 1];
90*4882a593Smuzhiyun 	unsigned int ssgtbl[32];
91*4882a593Smuzhiyun 	unsigned int softrst_con[12];
92*4882a593Smuzhiyun 	unsigned int reserved8[(0x380 - 0x32c) / 4 - 1];
93*4882a593Smuzhiyun 	unsigned int sdmmc_con[2];
94*4882a593Smuzhiyun 	unsigned int sdio_con[2];
95*4882a593Smuzhiyun 	unsigned int emmc_con[2];
96*4882a593Smuzhiyun 	unsigned int reserved9[(0x400 - 0x394) / 4 - 1];
97*4882a593Smuzhiyun 	unsigned int autocs_con[8];
98*4882a593Smuzhiyun };
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun check_member(px30_cru, autocs_con[7], 0x41c);
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun struct px30_pmucru {
103*4882a593Smuzhiyun 	struct px30_pll pll;
104*4882a593Smuzhiyun 	unsigned int pmu_mode;
105*4882a593Smuzhiyun 	unsigned int reserved1[7];
106*4882a593Smuzhiyun 	unsigned int pmu_clksel_con[6];
107*4882a593Smuzhiyun 	unsigned int reserved2[10];
108*4882a593Smuzhiyun 	unsigned int pmu_clkgate_con[2];
109*4882a593Smuzhiyun 	unsigned int reserved3[14];
110*4882a593Smuzhiyun 	unsigned int pmu_autocs_con[2];
111*4882a593Smuzhiyun };
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun check_member(px30_pmucru, pmu_autocs_con[1], 0xc4);
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun struct pll_rate_table {
116*4882a593Smuzhiyun 	unsigned long rate;
117*4882a593Smuzhiyun 	unsigned int fbdiv;
118*4882a593Smuzhiyun 	unsigned int postdiv1;
119*4882a593Smuzhiyun 	unsigned int refdiv;
120*4882a593Smuzhiyun 	unsigned int postdiv2;
121*4882a593Smuzhiyun 	unsigned int dsmpd;
122*4882a593Smuzhiyun 	unsigned int frac;
123*4882a593Smuzhiyun };
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun struct cpu_rate_table {
126*4882a593Smuzhiyun 	unsigned long rate;
127*4882a593Smuzhiyun 	unsigned int aclk_div;
128*4882a593Smuzhiyun 	unsigned int pclk_div;
129*4882a593Smuzhiyun };
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun enum {
132*4882a593Smuzhiyun 	/* PLLCON0*/
133*4882a593Smuzhiyun 	PLL_BP_SHIFT		= 15,
134*4882a593Smuzhiyun 	PLL_POSTDIV1_SHIFT	= 12,
135*4882a593Smuzhiyun 	PLL_POSTDIV1_MASK	= 7 << PLL_POSTDIV1_SHIFT,
136*4882a593Smuzhiyun 	PLL_FBDIV_SHIFT		= 0,
137*4882a593Smuzhiyun 	PLL_FBDIV_MASK		= 0xfff,
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun 	/* PLLCON1 */
140*4882a593Smuzhiyun 	PLL_PDSEL_SHIFT		= 15,
141*4882a593Smuzhiyun 	PLL_PD1_SHIFT		= 14,
142*4882a593Smuzhiyun 	PLL_PD_SHIFT		= 13,
143*4882a593Smuzhiyun 	PLL_PD_MASK		= 1 << PLL_PD_SHIFT,
144*4882a593Smuzhiyun 	PLL_DSMPD_SHIFT		= 12,
145*4882a593Smuzhiyun 	PLL_DSMPD_MASK		= 1 << PLL_DSMPD_SHIFT,
146*4882a593Smuzhiyun 	PLL_LOCK_STATUS_SHIFT	= 10,
147*4882a593Smuzhiyun 	PLL_LOCK_STATUS_MASK	= 1 << PLL_LOCK_STATUS_SHIFT,
148*4882a593Smuzhiyun 	PLL_POSTDIV2_SHIFT	= 6,
149*4882a593Smuzhiyun 	PLL_POSTDIV2_MASK	= 7 << PLL_POSTDIV2_SHIFT,
150*4882a593Smuzhiyun 	PLL_REFDIV_SHIFT	= 0,
151*4882a593Smuzhiyun 	PLL_REFDIV_MASK		= 0x3f,
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun 	/* PLLCON2 */
154*4882a593Smuzhiyun 	PLL_FOUT4PHASEPD_SHIFT	= 27,
155*4882a593Smuzhiyun 	PLL_FOUTVCOPD_SHIFT	= 26,
156*4882a593Smuzhiyun 	PLL_FOUTPOSTDIVPD_SHIFT	= 25,
157*4882a593Smuzhiyun 	PLL_DACPD_SHIFT		= 24,
158*4882a593Smuzhiyun 	PLL_FRAC_DIV	= 0xffffff,
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun 	/* CRU_MODE */
161*4882a593Smuzhiyun 	PLLMUX_FROM_XIN24M	= 0,
162*4882a593Smuzhiyun 	PLLMUX_FROM_PLL,
163*4882a593Smuzhiyun 	PLLMUX_FROM_RTC32K,
164*4882a593Smuzhiyun 	USBPHY480M_MODE_SHIFT	= 8,
165*4882a593Smuzhiyun 	USBPHY480M_MODE_MASK	= 3 << USBPHY480M_MODE_SHIFT,
166*4882a593Smuzhiyun 	NPLL_MODE_SHIFT		= 6,
167*4882a593Smuzhiyun 	NPLL_MODE_MASK		= 3 << NPLL_MODE_SHIFT,
168*4882a593Smuzhiyun 	DPLL_MODE_SHIFT		= 4,
169*4882a593Smuzhiyun 	DPLL_MODE_MASK		= 3 << DPLL_MODE_SHIFT,
170*4882a593Smuzhiyun 	CPLL_MODE_SHIFT		= 2,
171*4882a593Smuzhiyun 	CPLL_MODE_MASK		= 3 << CPLL_MODE_SHIFT,
172*4882a593Smuzhiyun 	APLL_MODE_SHIFT		= 0,
173*4882a593Smuzhiyun 	APLL_MODE_MASK		= 3 << APLL_MODE_SHIFT,
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun 	/* CRU_CLK_SEL0_CON */
176*4882a593Smuzhiyun 	CORE_ACLK_DIV_SHIFT	= 12,
177*4882a593Smuzhiyun 	CORE_ACLK_DIV_MASK	= 0x07 << CORE_ACLK_DIV_SHIFT,
178*4882a593Smuzhiyun 	CORE_DBG_DIV_SHIFT	= 8,
179*4882a593Smuzhiyun 	CORE_DBG_DIV_MASK	= 0x03 << CORE_DBG_DIV_SHIFT,
180*4882a593Smuzhiyun 	CORE_CLK_PLL_SEL_SHIFT	= 7,
181*4882a593Smuzhiyun 	CORE_CLK_PLL_SEL_MASK	= 1 << CORE_CLK_PLL_SEL_SHIFT,
182*4882a593Smuzhiyun 	CORE_CLK_PLL_SEL_APLL	= 0,
183*4882a593Smuzhiyun 	CORE_CLK_PLL_SEL_GPLL,
184*4882a593Smuzhiyun 	CORE_DIV_CON_SHIFT	= 0,
185*4882a593Smuzhiyun 	CORE_DIV_CON_MASK	= 0x0f << CORE_DIV_CON_SHIFT,
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun 	/* CRU_CLK_SEL3_CON */
188*4882a593Smuzhiyun 	ACLK_VO_PLL_SHIFT	= 6,
189*4882a593Smuzhiyun 	ACLK_VO_PLL_MASK	= 0x3 << ACLK_VO_PLL_SHIFT,
190*4882a593Smuzhiyun 	ACLK_VO_SEL_GPLL	= 0,
191*4882a593Smuzhiyun 	ACLK_VO_SEL_CPLL,
192*4882a593Smuzhiyun 	ACLK_VO_SEL_NPLL,
193*4882a593Smuzhiyun 	ACLK_VO_DIV_SHIFT	= 0,
194*4882a593Smuzhiyun 	ACLK_VO_DIV_MASK	= 0x1f << ACLK_VO_DIV_SHIFT,
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun 	/* CRU_CLK_SEL5_CON */
197*4882a593Smuzhiyun 	DCLK_VOPB_SEL_SHIFT	= 14,
198*4882a593Smuzhiyun 	DCLK_VOPB_SEL_MASK	= 0x3 << DCLK_VOPB_SEL_SHIFT,
199*4882a593Smuzhiyun 	DCLK_VOPB_SEL_DIVOUT	= 0,
200*4882a593Smuzhiyun 	DCLK_VOPB_SEL_FRACOUT,
201*4882a593Smuzhiyun 	DCLK_VOPB_SEL_24M,
202*4882a593Smuzhiyun 	DCLK_VOPB_PLL_SEL_SHIFT	= 11,
203*4882a593Smuzhiyun 	DCLK_VOPB_PLL_SEL_MASK	= 0x1 << DCLK_VOPB_PLL_SEL_SHIFT,
204*4882a593Smuzhiyun 	DCLK_VOPB_PLL_SEL_CPLL	= 0,
205*4882a593Smuzhiyun 	DCLK_VOPB_PLL_SEL_NPLL,
206*4882a593Smuzhiyun 	DCLK_VOPB_DIV_SHIFT	= 0,
207*4882a593Smuzhiyun 	DCLK_VOPB_DIV_MASK	= 0xff,
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun 	/* CRU_CLK_SEL8_CON */
210*4882a593Smuzhiyun 	DCLK_VOPL_SEL_SHIFT	= 14,
211*4882a593Smuzhiyun 	DCLK_VOPL_SEL_MASK	= 0x3 << DCLK_VOPL_SEL_SHIFT,
212*4882a593Smuzhiyun 	DCLK_VOPL_SEL_DIVOUT	= 0,
213*4882a593Smuzhiyun 	DCLK_VOPL_SEL_FRACOUT,
214*4882a593Smuzhiyun 	DCLK_VOPL_SEL_24M,
215*4882a593Smuzhiyun 	DCLK_VOPL_PLL_SEL_SHIFT	= 11,
216*4882a593Smuzhiyun 	DCLK_VOPL_PLL_SEL_MASK	= 0x1 << DCLK_VOPL_PLL_SEL_SHIFT,
217*4882a593Smuzhiyun 	DCLK_VOPL_PLL_SEL_NPLL	= 0,
218*4882a593Smuzhiyun 	DCLK_VOPL_PLL_SEL_CPLL,
219*4882a593Smuzhiyun 	DCLK_VOPL_DIV_SHIFT	= 0,
220*4882a593Smuzhiyun 	DCLK_VOPL_DIV_MASK	= 0xff,
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun 	/* CRU_CLK_SEL14_CON */
223*4882a593Smuzhiyun 	PERI_PLL_SEL_SHIFT	=15,
224*4882a593Smuzhiyun 	PERI_PLL_SEL_MASK	= 3 << PERI_PLL_SEL_SHIFT,
225*4882a593Smuzhiyun 	PERI_PLL_GPLL		= 0,
226*4882a593Smuzhiyun 	PERI_PLL_CPLL,
227*4882a593Smuzhiyun 	PERI_HCLK_DIV_SHIFT	= 8,
228*4882a593Smuzhiyun 	PERI_HCLK_DIV_MASK	= 0x1f << PERI_HCLK_DIV_SHIFT,
229*4882a593Smuzhiyun 	PERI_ACLK_DIV_SHIFT	= 0,
230*4882a593Smuzhiyun 	PERI_ACLK_DIV_MASK	= 0x1f << PERI_ACLK_DIV_SHIFT,
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 	/* CRU_CLKSEL15_CON */
233*4882a593Smuzhiyun 	NANDC_CLK_SEL_SHIFT	= 15,
234*4882a593Smuzhiyun 	NANDC_CLK_SEL_MASK	= 0x1 << NANDC_CLK_SEL_SHIFT,
235*4882a593Smuzhiyun 	NANDC_CLK_SEL_NANDC	= 0,
236*4882a593Smuzhiyun 	NANDC_CLK_SEL_NANDC_DIV50,
237*4882a593Smuzhiyun 	NANDC_DIV50_SHIFT	= 8,
238*4882a593Smuzhiyun 	NANDC_DIV50_MASK	= 0x1f << NANDC_DIV50_SHIFT,
239*4882a593Smuzhiyun 	NANDC_PLL_SHIFT		= 6,
240*4882a593Smuzhiyun 	NANDC_PLL_MASK		= 0x3 << NANDC_PLL_SHIFT,
241*4882a593Smuzhiyun 	NANDC_SEL_GPLL		= 0,
242*4882a593Smuzhiyun 	NANDC_SEL_CPLL,
243*4882a593Smuzhiyun 	NANDC_SEL_NPLL,
244*4882a593Smuzhiyun 	NANDC_DIV_SHIFT		= 0,
245*4882a593Smuzhiyun 	NANDC_DIV_MASK		= 0x1f << NANDC_DIV_SHIFT,
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun 	/* CRU_CLKSEL20_CON */
248*4882a593Smuzhiyun 	EMMC_PLL_SHIFT		= 14,
249*4882a593Smuzhiyun 	EMMC_PLL_MASK		= 3 << EMMC_PLL_SHIFT,
250*4882a593Smuzhiyun 	EMMC_SEL_GPLL		= 0,
251*4882a593Smuzhiyun 	EMMC_SEL_CPLL,
252*4882a593Smuzhiyun 	EMMC_SEL_NPLL,
253*4882a593Smuzhiyun 	EMMC_SEL_24M,
254*4882a593Smuzhiyun 	EMMC_DIV_SHIFT		= 0,
255*4882a593Smuzhiyun 	EMMC_DIV_MASK		= 0xff << EMMC_DIV_SHIFT,
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun 	/* CRU_CLKSEL21_CON */
258*4882a593Smuzhiyun 	EMMC_CLK_SEL_SHIFT	= 15,
259*4882a593Smuzhiyun 	EMMC_CLK_SEL_MASK	= 1 << EMMC_CLK_SEL_SHIFT,
260*4882a593Smuzhiyun 	EMMC_CLK_SEL_EMMC	= 0,
261*4882a593Smuzhiyun 	EMMC_CLK_SEL_EMMC_DIV50,
262*4882a593Smuzhiyun 	EMMC_DIV50_SHIFT	= 0,
263*4882a593Smuzhiyun 	EMMC_DIV50_MASK		= 0xff << EMMC_DIV_SHIFT,
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun 	/* CRU_CLKSEL22_CON */
266*4882a593Smuzhiyun 	GMAC_PLL_SEL_SHIFT	= 14,
267*4882a593Smuzhiyun 	GMAC_PLL_SEL_MASK	= 3 << GMAC_PLL_SEL_SHIFT,
268*4882a593Smuzhiyun 	GMAC_PLL_SEL_GPLL	= 0,
269*4882a593Smuzhiyun 	GMAC_PLL_SEL_CPLL,
270*4882a593Smuzhiyun 	GMAC_PLL_SEL_NPLL,
271*4882a593Smuzhiyun 	CLK_GMAC_DIV_SHIFT	= 8,
272*4882a593Smuzhiyun 	CLK_GMAC_DIV_MASK	= 0x1f << CLK_GMAC_DIV_SHIFT,
273*4882a593Smuzhiyun 	SFC_PLL_SEL_SHIFT	= 7,
274*4882a593Smuzhiyun 	SFC_PLL_SEL_MASK	= 1 << SFC_PLL_SEL_SHIFT,
275*4882a593Smuzhiyun 	SFC_DIV_CON_SHIFT	= 0,
276*4882a593Smuzhiyun 	SFC_DIV_CON_MASK	= 0x7f,
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun 	/* CRU_CLK_SEL23_CON */
279*4882a593Smuzhiyun 	BUS_PLL_SEL_SHIFT	=15,
280*4882a593Smuzhiyun 	BUS_PLL_SEL_MASK	= 1 << BUS_PLL_SEL_SHIFT,
281*4882a593Smuzhiyun 	BUS_PLL_SEL_GPLL	= 0,
282*4882a593Smuzhiyun 	BUS_PLL_SEL_CPLL,
283*4882a593Smuzhiyun 	BUS_ACLK_DIV_SHIFT	= 8,
284*4882a593Smuzhiyun 	BUS_ACLK_DIV_MASK	= 0x1f << BUS_ACLK_DIV_SHIFT,
285*4882a593Smuzhiyun 	RMII_CLK_SEL_SHIFT	= 7,
286*4882a593Smuzhiyun 	RMII_CLK_SEL_MASK	= 1 << RMII_CLK_SEL_SHIFT,
287*4882a593Smuzhiyun 	RMII_CLK_SEL_10M	= 0,
288*4882a593Smuzhiyun 	RMII_CLK_SEL_100M,
289*4882a593Smuzhiyun 	RMII_EXTCLK_SEL_SHIFT	= 6,
290*4882a593Smuzhiyun 	RMII_EXTCLK_SEL_MASK	= 1 << RMII_EXTCLK_SEL_SHIFT,
291*4882a593Smuzhiyun 	RMII_EXTCLK_SEL_INT	= 0,
292*4882a593Smuzhiyun 	RMII_EXTCLK_SEL_EXT,
293*4882a593Smuzhiyun 	PCLK_GMAC_DIV_SHIFT	= 0,
294*4882a593Smuzhiyun 	PCLK_GMAC_DIV_MASK	= 0x0f << PCLK_GMAC_DIV_SHIFT,
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun 	/* CRU_CLK_SEL24_CON */
297*4882a593Smuzhiyun 	BUS_PCLK_DIV_SHIFT	= 8,
298*4882a593Smuzhiyun 	BUS_PCLK_DIV_MASK	= 3 << BUS_PCLK_DIV_SHIFT,
299*4882a593Smuzhiyun 	BUS_HCLK_DIV_SHIFT	= 0,
300*4882a593Smuzhiyun 	BUS_HCLK_DIV_MASK	= 0x1f << BUS_HCLK_DIV_SHIFT,
301*4882a593Smuzhiyun 
302*4882a593Smuzhiyun 	/* CRU_CLK_SEL25_CON */
303*4882a593Smuzhiyun 	CRYPTO_APK_SEL_SHIFT	= 14,
304*4882a593Smuzhiyun 	CRYPTO_APK_PLL_SEL_MASK	= 3 << CRYPTO_APK_SEL_SHIFT,
305*4882a593Smuzhiyun 	CRYPTO_PLL_SEL_GPLL	= 0,
306*4882a593Smuzhiyun 	CRYPTO_PLL_SEL_CPLL,
307*4882a593Smuzhiyun 	CRYPTO_PLL_SEL_NPLL	= 0,
308*4882a593Smuzhiyun 	CRYPTO_APK_DIV_SHIFT	= 8,
309*4882a593Smuzhiyun 	CRYPTO_APK_DIV_MASK	= 0x1f << CRYPTO_APK_DIV_SHIFT,
310*4882a593Smuzhiyun 	CRYPTO_PLL_SEL_SHIFT	= 6,
311*4882a593Smuzhiyun 	CRYPTO_PLL_SEL_MASK	= 3 << CRYPTO_PLL_SEL_SHIFT,
312*4882a593Smuzhiyun 	CRYPTO_DIV_SHIFT	= 0,
313*4882a593Smuzhiyun 	CRYPTO_DIV_MASK		= 0x1f << CRYPTO_DIV_SHIFT,
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun 	/* CRU_CLK_SEL30_CON */
316*4882a593Smuzhiyun 	CLK_I2S1_DIV_CON_MASK	= 0x7f,
317*4882a593Smuzhiyun 	CLK_I2S1_PLL_SEL_MASK	= 0X1 << 8,
318*4882a593Smuzhiyun 	CLK_I2S1_PLL_SEL_GPLL	= 0X0 << 8,
319*4882a593Smuzhiyun 	CLK_I2S1_PLL_SEL_NPLL	= 0X1 << 8,
320*4882a593Smuzhiyun 	CLK_I2S1_SEL_MASK	= 0x3 << 10,
321*4882a593Smuzhiyun 	CLK_I2S1_SEL_I2S1	= 0x0 << 10,
322*4882a593Smuzhiyun 	CLK_I2S1_SEL_FRAC	= 0x1 << 10,
323*4882a593Smuzhiyun 	CLK_I2S1_SEL_MCLK_IN	= 0x2 << 10,
324*4882a593Smuzhiyun 	CLK_I2S1_SEL_OSC	= 0x3 << 10,
325*4882a593Smuzhiyun 	CLK_I2S1_OUT_SEL_MASK	= 0x1 << 15,
326*4882a593Smuzhiyun 	CLK_I2S1_OUT_SEL_I2S1	= 0x0 << 15,
327*4882a593Smuzhiyun 	CLK_I2S1_OUT_SEL_OSC	= 0x1 << 15,
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun 	/* CRU_CLK_SEL31_CON */
330*4882a593Smuzhiyun 	CLK_I2S1_FRAC_NUMERATOR_SHIFT	= 16,
331*4882a593Smuzhiyun 	CLK_I2S1_FRAC_NUMERATOR_MASK	= 0xffff << 16,
332*4882a593Smuzhiyun 	CLK_I2S1_FRAC_DENOMINATOR_SHIFT	= 0,
333*4882a593Smuzhiyun 	CLK_I2S1_FRAC_DENOMINATOR_MASK	= 0xffff,
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun 	/* CRU_CLK_SEL34_CON */
336*4882a593Smuzhiyun 	UART1_PLL_SEL_SHIFT	= 14,
337*4882a593Smuzhiyun 	UART1_PLL_SEL_MASK	= 3 << UART1_PLL_SEL_SHIFT,
338*4882a593Smuzhiyun 	UART1_PLL_SEL_GPLL	= 0,
339*4882a593Smuzhiyun 	UART1_PLL_SEL_24M,
340*4882a593Smuzhiyun 	UART1_PLL_SEL_480M,
341*4882a593Smuzhiyun 	UART1_PLL_SEL_NPLL,
342*4882a593Smuzhiyun 	UART1_DIV_CON_SHIFT	= 0,
343*4882a593Smuzhiyun 	UART1_DIV_CON_MASK	= 0x1f << UART1_DIV_CON_SHIFT,
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun 	/* CRU_CLK_SEL35_CON */
346*4882a593Smuzhiyun 	UART1_CLK_SEL_SHIFT	= 14,
347*4882a593Smuzhiyun 	UART1_CLK_SEL_MASK	= 3 << UART1_PLL_SEL_SHIFT,
348*4882a593Smuzhiyun 	UART1_CLK_SEL_UART1	= 0,
349*4882a593Smuzhiyun 	UART1_CLK_SEL_UART1_NP5,
350*4882a593Smuzhiyun 	UART1_CLK_SEL_UART1_FRAC,
351*4882a593Smuzhiyun 	UART1_DIVNP5_SHIFT	= 0,
352*4882a593Smuzhiyun 	UART1_DIVNP5_MASK	= 0x1f << UART1_DIVNP5_SHIFT,
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun 	/* CRU_CLK_SEL37_CON */
355*4882a593Smuzhiyun 	UART2_PLL_SEL_SHIFT	= 14,
356*4882a593Smuzhiyun 	UART2_PLL_SEL_MASK	= 3 << UART2_PLL_SEL_SHIFT,
357*4882a593Smuzhiyun 	UART2_PLL_SEL_GPLL	= 0,
358*4882a593Smuzhiyun 	UART2_PLL_SEL_24M,
359*4882a593Smuzhiyun 	UART2_PLL_SEL_480M,
360*4882a593Smuzhiyun 	UART2_PLL_SEL_NPLL,
361*4882a593Smuzhiyun 	UART2_DIV_CON_SHIFT	= 0,
362*4882a593Smuzhiyun 	UART2_DIV_CON_MASK	= 0x1f << UART2_DIV_CON_SHIFT,
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun 	/* CRU_CLK_SEL38_CON */
365*4882a593Smuzhiyun 	UART2_CLK_SEL_SHIFT	= 14,
366*4882a593Smuzhiyun 	UART2_CLK_SEL_MASK	= 3 << UART2_PLL_SEL_SHIFT,
367*4882a593Smuzhiyun 	UART2_CLK_SEL_UART2	= 0,
368*4882a593Smuzhiyun 	UART2_CLK_SEL_UART2_NP5,
369*4882a593Smuzhiyun 	UART2_CLK_SEL_UART2_FRAC,
370*4882a593Smuzhiyun 	UART2_DIVNP5_SHIFT	= 0,
371*4882a593Smuzhiyun 	UART2_DIVNP5_MASK	= 0x1f << UART2_DIVNP5_SHIFT,
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun 	/* CRU_CLK_SEL46_CON */
374*4882a593Smuzhiyun 	UART5_PLL_SEL_SHIFT	= 14,
375*4882a593Smuzhiyun 	UART5_PLL_SEL_MASK	= 3 << UART5_PLL_SEL_SHIFT,
376*4882a593Smuzhiyun 	UART5_PLL_SEL_GPLL	= 0,
377*4882a593Smuzhiyun 	UART5_PLL_SEL_24M,
378*4882a593Smuzhiyun 	UART5_PLL_SEL_480M,
379*4882a593Smuzhiyun 	UART5_PLL_SEL_NPLL,
380*4882a593Smuzhiyun 	UART5_DIV_CON_SHIFT	= 0,
381*4882a593Smuzhiyun 	UART5_DIV_CON_MASK	= 0x1f << UART5_DIV_CON_SHIFT,
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun 	/* CRU_CLK_SEL47_CON */
384*4882a593Smuzhiyun 	UART5_CLK_SEL_SHIFT	= 14,
385*4882a593Smuzhiyun 	UART5_CLK_SEL_MASK	= 3 << UART5_PLL_SEL_SHIFT,
386*4882a593Smuzhiyun 	UART5_CLK_SEL_UART5	= 0,
387*4882a593Smuzhiyun 	UART5_CLK_SEL_UART5_NP5,
388*4882a593Smuzhiyun 	UART5_CLK_SEL_UART5_FRAC,
389*4882a593Smuzhiyun 	UART5_DIVNP5_SHIFT	= 0,
390*4882a593Smuzhiyun 	UART5_DIVNP5_MASK	= 0x1f << UART5_DIVNP5_SHIFT,
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun 	/* CRU_CLK_SEL49_CON */
393*4882a593Smuzhiyun 	CLK_I2C_PLL_SEL_GPLL		= 0,
394*4882a593Smuzhiyun 	CLK_I2C_PLL_SEL_24M,
395*4882a593Smuzhiyun 	CLK_I2C_DIV_CON_MASK		= 0x7f,
396*4882a593Smuzhiyun 	CLK_I2C_PLL_SEL_MASK		= 1,
397*4882a593Smuzhiyun 	CLK_I2C1_PLL_SEL_SHIFT		= 15,
398*4882a593Smuzhiyun 	CLK_I2C1_DIV_CON_SHIFT		= 8,
399*4882a593Smuzhiyun 	CLK_I2C0_PLL_SEL_SHIFT		= 7,
400*4882a593Smuzhiyun 	CLK_I2C0_DIV_CON_SHIFT		= 0,
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun 	/* CRU_CLK_SEL50_CON */
403*4882a593Smuzhiyun 	CLK_I2C3_PLL_SEL_SHIFT		= 15,
404*4882a593Smuzhiyun 	CLK_I2C3_DIV_CON_SHIFT		= 8,
405*4882a593Smuzhiyun 	CLK_I2C2_PLL_SEL_SHIFT		= 7,
406*4882a593Smuzhiyun 	CLK_I2C2_DIV_CON_SHIFT		= 0,
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun 	/* CRU_CLK_SEL52_CON */
409*4882a593Smuzhiyun 	CLK_PWM_PLL_SEL_GPLL		= 0,
410*4882a593Smuzhiyun 	CLK_PWM_PLL_SEL_24M,
411*4882a593Smuzhiyun 	CLK_PWM_DIV_CON_MASK		= 0x7f,
412*4882a593Smuzhiyun 	CLK_PWM_PLL_SEL_MASK		= 1,
413*4882a593Smuzhiyun 	CLK_PWM1_PLL_SEL_SHIFT		= 15,
414*4882a593Smuzhiyun 	CLK_PWM1_DIV_CON_SHIFT		= 8,
415*4882a593Smuzhiyun 	CLK_PWM0_PLL_SEL_SHIFT		= 7,
416*4882a593Smuzhiyun 	CLK_PWM0_DIV_CON_SHIFT		= 0,
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun 	/* CRU_CLK_SEL53_CON */
419*4882a593Smuzhiyun 	CLK_SPI_PLL_SEL_GPLL		= 0,
420*4882a593Smuzhiyun 	CLK_SPI_PLL_SEL_24M,
421*4882a593Smuzhiyun 	CLK_SPI_DIV_CON_MASK		= 0x7f,
422*4882a593Smuzhiyun 	CLK_SPI_PLL_SEL_MASK		= 1,
423*4882a593Smuzhiyun 	CLK_SPI1_PLL_SEL_SHIFT		= 15,
424*4882a593Smuzhiyun 	CLK_SPI1_DIV_CON_SHIFT		= 8,
425*4882a593Smuzhiyun 	CLK_SPI0_PLL_SEL_SHIFT		= 7,
426*4882a593Smuzhiyun 	CLK_SPI0_DIV_CON_SHIFT		= 0,
427*4882a593Smuzhiyun 
428*4882a593Smuzhiyun 	/* CRU_CLK_SEL55_CON */
429*4882a593Smuzhiyun 	CLK_SARADC_DIV_CON_SHIFT	= 0,
430*4882a593Smuzhiyun 	CLK_SARADC_DIV_CON_MASK		= 0x7ff,
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun 	/* CRU_CLK_SEL56_CON */
433*4882a593Smuzhiyun 	CLK_OTP_USR_DIV_CON_SHIFT	= 4,
434*4882a593Smuzhiyun 	CLK_OTP_USR_DIV_CON_MASK	= 0x3 << CLK_OTP_USR_DIV_CON_SHIFT,
435*4882a593Smuzhiyun 	CLK_OTP_DIV_CON_SHIFT		= 0,
436*4882a593Smuzhiyun 	CLK_OTP_DIV_CON_MASK		= 0x7,
437*4882a593Smuzhiyun 	CLK_OTP_S_SEL_SHIFT		= 8,
438*4882a593Smuzhiyun 	CLK_OTP_S_SEL_MASK		= 1 << CLK_OTP_S_SEL_SHIFT,
439*4882a593Smuzhiyun 	CLK_OTP_S_SEL_XIN24M		= 0,
440*4882a593Smuzhiyun 	CLK_OTP_S_SEL_GPLL,
441*4882a593Smuzhiyun 	CLK_OTP_S_DIV_CON_SHIFT		= 0,
442*4882a593Smuzhiyun 	CLK_OTP_S_DIV_CON_MASK		= 0x1FF,
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun 	/* CRU_CLK_GATE10_CON */
445*4882a593Smuzhiyun 	CLK_I2S1_OUT_MCLK_PAD_MASK	= 0x1 << 9,
446*4882a593Smuzhiyun 	CLK_I2S1_OUT_MCLK_PAD_ENABLE	= 0x1 << 9,
447*4882a593Smuzhiyun 	CLK_I2S1_OUT_MCLK_PAD_DISABLE	= 0x0 << 9,
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun 	/* CRU_PMU_MODE */
450*4882a593Smuzhiyun 	GPLL_MODE_SHIFT			= 0,
451*4882a593Smuzhiyun 	GPLL_MODE_MASK			= 3 << GPLL_MODE_SHIFT,
452*4882a593Smuzhiyun 
453*4882a593Smuzhiyun 	/* CRU_PMU_CLK_SEL0_CON */
454*4882a593Smuzhiyun 	CLK_PMU_PCLK_DIV_SHIFT		= 0,
455*4882a593Smuzhiyun 	CLK_PMU_PCLK_DIV_MASK		= 0x1f << CLK_PMU_PCLK_DIV_SHIFT,
456*4882a593Smuzhiyun };
457*4882a593Smuzhiyun #endif
458