xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/arch-rockchip/cru_rk3368.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3*4882a593Smuzhiyun  * Author: Andy Yan <andy.yan@rock-chips.com>
4*4882a593Smuzhiyun  * SPDX-License-Identifier:     GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #ifndef _ASM_ARCH_CRU_RK3368_H
7*4882a593Smuzhiyun #define _ASM_ARCH_CRU_RK3368_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <common.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun /* RK3368 clock numbers */
13*4882a593Smuzhiyun enum rk3368_pll_id {
14*4882a593Smuzhiyun 	APLLB,
15*4882a593Smuzhiyun 	APLLL,
16*4882a593Smuzhiyun 	DPLL,
17*4882a593Smuzhiyun 	CPLL,
18*4882a593Smuzhiyun 	GPLL,
19*4882a593Smuzhiyun 	NPLL,
20*4882a593Smuzhiyun 	PLL_COUNT,
21*4882a593Smuzhiyun };
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun struct rk3368_clk_info {
24*4882a593Smuzhiyun 	unsigned long id;
25*4882a593Smuzhiyun 	char *name;
26*4882a593Smuzhiyun 	bool is_cru;
27*4882a593Smuzhiyun };
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun struct rk3368_cru {
30*4882a593Smuzhiyun 	struct rk3368_pll {
31*4882a593Smuzhiyun 		unsigned int con0;
32*4882a593Smuzhiyun 		unsigned int con1;
33*4882a593Smuzhiyun 		unsigned int con2;
34*4882a593Smuzhiyun 		unsigned int con3;
35*4882a593Smuzhiyun 	} pll[6];
36*4882a593Smuzhiyun 	unsigned int reserved[0x28];
37*4882a593Smuzhiyun 	unsigned int clksel_con[56];
38*4882a593Smuzhiyun 	unsigned int reserved1[8];
39*4882a593Smuzhiyun 	unsigned int clkgate_con[25];
40*4882a593Smuzhiyun 	unsigned int reserved2[7];
41*4882a593Smuzhiyun 	unsigned int glb_srst_fst_val;
42*4882a593Smuzhiyun 	unsigned int glb_srst_snd_val;
43*4882a593Smuzhiyun 	unsigned int reserved3[0x1e];
44*4882a593Smuzhiyun 	unsigned int softrst_con[15];
45*4882a593Smuzhiyun 	unsigned int reserved4[0x11];
46*4882a593Smuzhiyun 	unsigned int misc_con;
47*4882a593Smuzhiyun 	unsigned int glb_cnt_th;
48*4882a593Smuzhiyun 	unsigned int glb_rst_con;
49*4882a593Smuzhiyun 	unsigned int glb_rst_st;
50*4882a593Smuzhiyun 	unsigned int reserved5[0x1c];
51*4882a593Smuzhiyun 	unsigned int sdmmc_con[2];
52*4882a593Smuzhiyun 	unsigned int sdio0_con[2];
53*4882a593Smuzhiyun 	unsigned int sdio1_con[2];
54*4882a593Smuzhiyun 	unsigned int emmc_con[2];
55*4882a593Smuzhiyun };
56*4882a593Smuzhiyun check_member(rk3368_cru, emmc_con[1], 0x41c);
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun struct rk3368_clk_priv {
59*4882a593Smuzhiyun 	struct rk3368_cru *cru;
60*4882a593Smuzhiyun 	ulong armlclk_hz;
61*4882a593Smuzhiyun 	ulong armlclk_enter_hz;
62*4882a593Smuzhiyun 	ulong armlclk_init_hz;
63*4882a593Smuzhiyun 	ulong armbclk_hz;
64*4882a593Smuzhiyun 	ulong armbclk_enter_hz;
65*4882a593Smuzhiyun 	ulong armbclk_init_hz;
66*4882a593Smuzhiyun 	bool sync_kernel;
67*4882a593Smuzhiyun 	bool set_armclk_rate;
68*4882a593Smuzhiyun };
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun enum {
71*4882a593Smuzhiyun 	/* PLL CON0 */
72*4882a593Smuzhiyun 	PLL_NR_SHIFT			= 8,
73*4882a593Smuzhiyun 	PLL_NR_MASK			= GENMASK(13, 8),
74*4882a593Smuzhiyun 	PLL_OD_SHIFT			= 0,
75*4882a593Smuzhiyun 	PLL_OD_MASK			= GENMASK(3, 0),
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun 	/* PLL CON1 */
78*4882a593Smuzhiyun 	PLL_LOCK_STA			= BIT(31),
79*4882a593Smuzhiyun 	PLL_NF_SHIFT			= 0,
80*4882a593Smuzhiyun 	PLL_NF_MASK			= GENMASK(12, 0),
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun 	/* PLL CON2 */
83*4882a593Smuzhiyun 	PLL_BWADJ_SHIFT			= 0,
84*4882a593Smuzhiyun 	PLL_BWADJ_MASK			= GENMASK(11, 0),
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun 	/* PLL CON3 */
87*4882a593Smuzhiyun 	PLL_MODE_SHIFT			= 8,
88*4882a593Smuzhiyun 	PLL_MODE_MASK			= GENMASK(9, 8),
89*4882a593Smuzhiyun 	PLL_MODE_SLOW			= 0,
90*4882a593Smuzhiyun 	PLL_MODE_NORMAL			= 1,
91*4882a593Smuzhiyun 	PLL_MODE_DEEP_SLOW		= 3,
92*4882a593Smuzhiyun 	PLL_RESET_SHIFT			= 5,
93*4882a593Smuzhiyun 	PLL_RESET			= 1,
94*4882a593Smuzhiyun 	PLL_RESET_MASK			= GENMASK(5, 5),
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun 	/* CLKSEL1CON */
97*4882a593Smuzhiyun 	CORE_ACLK_DIV_SHIFT		= 0,
98*4882a593Smuzhiyun 	CORE_ACLK_DIV_MASK		= 0x1f << CORE_ACLK_DIV_SHIFT,
99*4882a593Smuzhiyun 	CORE_DBG_DIV_SHIFT		= 8,
100*4882a593Smuzhiyun 	CORE_DBG_DIV_MASK		= 0x1f << CORE_DBG_DIV_SHIFT,
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun 	CORE_CLK_PLL_SEL_SHIFT		= 7,
103*4882a593Smuzhiyun 	CORE_CLK_PLL_SEL_MASK		= 1 << CORE_CLK_PLL_SEL_SHIFT,
104*4882a593Smuzhiyun 	CORE_CLK_PLL_SEL_APLL		= 0,
105*4882a593Smuzhiyun 	CORE_CLK_PLL_SEL_GPLL,
106*4882a593Smuzhiyun 	CORE_DIV_CON_SHIFT		= 0,
107*4882a593Smuzhiyun 	CORE_DIV_CON_MASK		= 0x1f << CORE_DIV_CON_SHIFT,
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun 	/* CLKSEL8CON */
110*4882a593Smuzhiyun 	PCLK_BUS_DIV_CON_SHIFT		= 12,
111*4882a593Smuzhiyun 	PCLK_BUS_DIV_CON_MASK		= 0x7 << PCLK_BUS_DIV_CON_SHIFT,
112*4882a593Smuzhiyun 	HCLK_BUS_DIV_CON_SHIFT		= 8,
113*4882a593Smuzhiyun 	HCLK_BUS_DIV_CON_MASK		= 0x3 << HCLK_BUS_DIV_CON_SHIFT,
114*4882a593Smuzhiyun 	CLK_BUS_PLL_SEL_CPLL		= 0,
115*4882a593Smuzhiyun 	CLK_BUS_PLL_SEL_GPLL		= 1,
116*4882a593Smuzhiyun 	CLK_BUS_PLL_SEL_SHIFT		= 7,
117*4882a593Smuzhiyun 	CLK_BUS_PLL_SEL_MASK		= 1 << CLK_BUS_PLL_SEL_SHIFT,
118*4882a593Smuzhiyun 	ACLK_BUS_DIV_CON_SHIFT		= 0,
119*4882a593Smuzhiyun 	ACLK_BUS_DIV_CON_MASK		= 0x1f << ACLK_BUS_DIV_CON_SHIFT,
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun 	/* CLKSEL9CON */
122*4882a593Smuzhiyun 	PCLK_PERI_DIV_CON_SHIFT		= 12,
123*4882a593Smuzhiyun 	PCLK_PERI_DIV_CON_MASK		= 0x3 << PCLK_PERI_DIV_CON_SHIFT,
124*4882a593Smuzhiyun 	HCLK_PERI_DIV_CON_SHIFT		= 8,
125*4882a593Smuzhiyun 	HCLK_PERI_DIV_CON_MASK		= 3 << HCLK_PERI_DIV_CON_SHIFT,
126*4882a593Smuzhiyun 	CLK_PERI_PLL_SEL_CPLL		= 0,
127*4882a593Smuzhiyun 	CLK_PERI_PLL_SEL_GPLL,
128*4882a593Smuzhiyun 	CLK_PERI_PLL_SEL_SHIFT		= 7,
129*4882a593Smuzhiyun 	CLK_PERI_PLL_SEL_MASK		= 1 << CLK_PERI_PLL_SEL_SHIFT,
130*4882a593Smuzhiyun 	ACLK_PERI_DIV_CON_SHIFT		= 0,
131*4882a593Smuzhiyun 	ACLK_PERI_DIV_CON_MASK		= 0x1f,
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun 	/* CLKSEL10CON */
134*4882a593Smuzhiyun 	CLK_CRYPTO_DIV_CON_SHIFT	= 14,
135*4882a593Smuzhiyun 	CLK_CRYPTO_DIV_CON_MASK		= 0x3 << CLK_CRYPTO_DIV_CON_SHIFT,
136*4882a593Smuzhiyun 	PCLK_ALIVE_DIV_CON_SHIFT	= 8,
137*4882a593Smuzhiyun 	PCLK_ALIVE_DIV_CON_MASK		= 0x1f << PCLK_ALIVE_DIV_CON_SHIFT,
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun 	/* CLKSEL12_CON */
140*4882a593Smuzhiyun 	MCU_STCLK_DIV_SHIFT		= 8,
141*4882a593Smuzhiyun 	MCU_STCLK_DIV_MASK		= GENMASK(10, 8),
142*4882a593Smuzhiyun 	MCU_PLL_SEL_SHIFT		= 7,
143*4882a593Smuzhiyun 	MCU_PLL_SEL_MASK		= BIT(7),
144*4882a593Smuzhiyun 	MCU_PLL_SEL_CPLL		= 0,
145*4882a593Smuzhiyun 	MCU_PLL_SEL_GPLL		= 1,
146*4882a593Smuzhiyun 	MCU_CLK_DIV_SHIFT		= 0,
147*4882a593Smuzhiyun 	MCU_CLK_DIV_MASK		= GENMASK(4, 0),
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun 	/* CLKSEL19_CON */
150*4882a593Smuzhiyun 	ACLK_VOP_PLL_SEL_SHIFT		= 6,
151*4882a593Smuzhiyun 	ACLK_VOP_PLL_SEL_MASK		= GENMASK(7, 6),
152*4882a593Smuzhiyun 	ACLK_VOP_PLL_SEL_CPLL		= 0,
153*4882a593Smuzhiyun 	ACLK_VOP_PLL_SEL_GPLL		= 1,
154*4882a593Smuzhiyun 	ACLK_VOP_DIV_SHIFT		= 0,
155*4882a593Smuzhiyun 	ACLK_VOP_DIV_MASK		= GENMASK(4, 0),
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun 	/* CLKSEL20_CON */
158*4882a593Smuzhiyun 	DCLK_VOP_PLL_SEL_SHIFT		= 8,
159*4882a593Smuzhiyun 	DCLK_VOP_PLL_SEL_MASK		= GENMASK(9, 8),
160*4882a593Smuzhiyun 	DCLK_VOP_PLL_SEL_CPLL		= 0,
161*4882a593Smuzhiyun 	DCLK_VOP_PLL_SEL_GPLL		= 1,
162*4882a593Smuzhiyun 	DCLK_VOP_PLL_SEL_NPLL		= 2,
163*4882a593Smuzhiyun 	DCLK_VOP_DIV_SHIFT		= 0,
164*4882a593Smuzhiyun 	DCLK_VOP_DIV_MASK		= GENMASK(7, 0),
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun 	/* CLKSEL_CON25 */
167*4882a593Smuzhiyun 	CLK_SARADC_DIV_CON_SHIFT	= 8,
168*4882a593Smuzhiyun 	CLK_SARADC_DIV_CON_MASK		= GENMASK(15, 8),
169*4882a593Smuzhiyun 	CLK_SARADC_DIV_CON_WIDTH	= 8,
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun 	/* CLKSEL43_CON */
172*4882a593Smuzhiyun 	GMAC_DIV_CON_SHIFT		= 0x0,
173*4882a593Smuzhiyun 	GMAC_DIV_CON_MASK		= GENMASK(4, 0),
174*4882a593Smuzhiyun 	GMAC_PLL_SHIFT			= 6,
175*4882a593Smuzhiyun 	GMAC_PLL_MASK			= GENMASK(7, 6),
176*4882a593Smuzhiyun 	GMAC_PLL_SELECT_NEW		= (0x0 << GMAC_PLL_SHIFT),
177*4882a593Smuzhiyun 	GMAC_PLL_SELECT_CODEC		= (0x1 << GMAC_PLL_SHIFT),
178*4882a593Smuzhiyun 	GMAC_PLL_SELECT_GENERAL		= (0x2 << GMAC_PLL_SHIFT),
179*4882a593Smuzhiyun 	GMAC_MUX_SEL_EXTCLK             = BIT(8),
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun 	/* CLKSEL51_CON */
182*4882a593Smuzhiyun 	MMC_PLL_SEL_SHIFT		= 8,
183*4882a593Smuzhiyun 	MMC_PLL_SEL_MASK		= GENMASK(9, 8),
184*4882a593Smuzhiyun 	MMC_PLL_SEL_CPLL		= (0 << MMC_PLL_SEL_SHIFT),
185*4882a593Smuzhiyun 	MMC_PLL_SEL_GPLL                = (1 << MMC_PLL_SEL_SHIFT),
186*4882a593Smuzhiyun 	MMC_PLL_SEL_USBPHY_480M         = (2 << MMC_PLL_SEL_SHIFT),
187*4882a593Smuzhiyun 	MMC_PLL_SEL_24M                 = (3 << MMC_PLL_SEL_SHIFT),
188*4882a593Smuzhiyun 	MMC_CLK_DIV_SHIFT		= 0,
189*4882a593Smuzhiyun 	MMC_CLK_DIV_MASK		= GENMASK(6, 0),
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun 	/* SOFTRST1_CON */
192*4882a593Smuzhiyun 	MCU_PO_SRST_MASK		= BIT(13),
193*4882a593Smuzhiyun 	MCU_SYS_SRST_MASK		= BIT(12),
194*4882a593Smuzhiyun 	DMA1_SRST_REQ                   = BIT(2),
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun 	/* SOFTRST4_CON */
197*4882a593Smuzhiyun 	DMA2_SRST_REQ                   = BIT(0),
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun 	/* GLB_RST_CON */
200*4882a593Smuzhiyun 	PMU_GLB_SRST_CTRL_SHIFT		= 2,
201*4882a593Smuzhiyun 	PMU_GLB_SRST_CTRL_MASK		= GENMASK(3, 2),
202*4882a593Smuzhiyun 	PMU_RST_BY_FST_GLB_SRST 	= 0,
203*4882a593Smuzhiyun 	PMU_RST_BY_SND_GLB_SRST 	= 1,
204*4882a593Smuzhiyun 	PMU_RST_DISABLE			= 2,
205*4882a593Smuzhiyun 	WDT_GLB_SRST_CTRL_SHIFT		= 1,
206*4882a593Smuzhiyun 	WDT_GLB_SRST_CTRL_MASK		= BIT(1),
207*4882a593Smuzhiyun 	WDT_TRIGGER_SND_GLB_SRST 	= 0,
208*4882a593Smuzhiyun 	WDT_TRIGGER_FST_GLB_SRST 	= 1,
209*4882a593Smuzhiyun 	TSADC_GLB_SRST_CTRL_SHIFT 	= 0,
210*4882a593Smuzhiyun 	TSADC_GLB_SRST_CTRL_MASK  	= BIT(0),
211*4882a593Smuzhiyun 	TSADC_TRIGGER_SND_GLB_SRST 	= 0,
212*4882a593Smuzhiyun 	TSADC_TRIGGER_FST_GLB_SRST 	= 1,
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun };
215*4882a593Smuzhiyun #endif
216