xref: /rk3399_ARM-atf/plat/rockchip/rk3588/drivers/soc/soc.h (revision 44418fce30938ee483fbfc79cc32fde33753d1aa)
1*e3ec6ff4SXiaoDong Huang /*
2*e3ec6ff4SXiaoDong Huang  * Copyright (c) 2024, Rockchip, Inc. All rights reserved.
3*e3ec6ff4SXiaoDong Huang  *
4*e3ec6ff4SXiaoDong Huang  * SPDX-License-Identifier: BSD-3-Clause
5*e3ec6ff4SXiaoDong Huang  */
6*e3ec6ff4SXiaoDong Huang 
7*e3ec6ff4SXiaoDong Huang #ifndef __SOC_H__
8*e3ec6ff4SXiaoDong Huang #define __SOC_H__
9*e3ec6ff4SXiaoDong Huang 
10*e3ec6ff4SXiaoDong Huang enum pll_id {
11*e3ec6ff4SXiaoDong Huang 	APLL_ID,
12*e3ec6ff4SXiaoDong Huang 	DPLL_ID,
13*e3ec6ff4SXiaoDong Huang 	GPLL_ID,
14*e3ec6ff4SXiaoDong Huang 	CPLL_ID,
15*e3ec6ff4SXiaoDong Huang 	NPLL_ID,
16*e3ec6ff4SXiaoDong Huang 	VPLL_ID,
17*e3ec6ff4SXiaoDong Huang };
18*e3ec6ff4SXiaoDong Huang 
19*e3ec6ff4SXiaoDong Huang enum pmu_pll_id {
20*e3ec6ff4SXiaoDong Huang 	PPLL_ID = 0,
21*e3ec6ff4SXiaoDong Huang 	HPLL_ID
22*e3ec6ff4SXiaoDong Huang };
23*e3ec6ff4SXiaoDong Huang 
24*e3ec6ff4SXiaoDong Huang enum cru_mode_con00 {
25*e3ec6ff4SXiaoDong Huang 	CLK_APLL,
26*e3ec6ff4SXiaoDong Huang 	CLK_DPLL,
27*e3ec6ff4SXiaoDong Huang 	CLK_CPLL,
28*e3ec6ff4SXiaoDong Huang 	CLK_GPLL,
29*e3ec6ff4SXiaoDong Huang 	CLK_REVSERVED,
30*e3ec6ff4SXiaoDong Huang 	CLK_NPLL,
31*e3ec6ff4SXiaoDong Huang 	CLK_VPLL,
32*e3ec6ff4SXiaoDong Huang 	CLK_USBPLL,
33*e3ec6ff4SXiaoDong Huang };
34*e3ec6ff4SXiaoDong Huang 
35*e3ec6ff4SXiaoDong Huang #define KHz				1000
36*e3ec6ff4SXiaoDong Huang #define MHz				(1000 * KHz)
37*e3ec6ff4SXiaoDong Huang #define OSC_HZ				(24 * MHz)
38*e3ec6ff4SXiaoDong Huang 
39*e3ec6ff4SXiaoDong Huang /* CRU */
40*e3ec6ff4SXiaoDong Huang #define GLB_SRST_FST_CFG_VAL		0xfdb9
41*e3ec6ff4SXiaoDong Huang 
42*e3ec6ff4SXiaoDong Huang #define CRU_PLLS_CON(pll_id, i)		(0x160 + (pll_id) * 0x20 + (i) * 0x4)
43*e3ec6ff4SXiaoDong Huang #define CRU_PLL_CON(i)			((i) * 0x4)
44*e3ec6ff4SXiaoDong Huang #define CRU_MODE_CON0			0x280
45*e3ec6ff4SXiaoDong Huang #define CRU_CLKSEL_CON(i)		((i) * 0x4 + 0x300)
46*e3ec6ff4SXiaoDong Huang #define CRU_CLKGATE_CON(i)		((i) * 0x4 + 0x800)
47*e3ec6ff4SXiaoDong Huang #define CRU_CLKGATE_CON_CNT		78
48*e3ec6ff4SXiaoDong Huang #define CRU_SOFTRST_CON(i)		((i) * 0x4 + 0xa00)
49*e3ec6ff4SXiaoDong Huang #define CRU_GLB_CNT_TH			0xc00
50*e3ec6ff4SXiaoDong Huang #define CRU_GLB_SRST_FST		0xc08
51*e3ec6ff4SXiaoDong Huang #define CRU_GLB_SRST_SND		0xc0c
52*e3ec6ff4SXiaoDong Huang #define CRU_GLB_RST_CON			0xc10
53*e3ec6ff4SXiaoDong Huang #define CRU_GLB_RST_ST			0xc04
54*e3ec6ff4SXiaoDong Huang #define CRU_SDIO_CON0			0xc24
55*e3ec6ff4SXiaoDong Huang #define CRU_SDIO_CON1			0xc28
56*e3ec6ff4SXiaoDong Huang #define CRU_SDMMC_CON0			0xc30
57*e3ec6ff4SXiaoDong Huang #define CRU_SDMMC_CON1			0xc34
58*e3ec6ff4SXiaoDong Huang #define CRU_AUTOCS_CON0(id)		(0xd00 + (id) * 8)
59*e3ec6ff4SXiaoDong Huang #define CRU_AUTOCS_CON1(id)		(0xd04 + (id) * 8)
60*e3ec6ff4SXiaoDong Huang 
61*e3ec6ff4SXiaoDong Huang #define CRU_AUTOCS_ID_CNT		74
62*e3ec6ff4SXiaoDong Huang 
63*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON0_M_MASK		0x3ff
64*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON0_M_SHIFT		0
65*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON1_P_MASK		0x3f
66*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON1_P_SHIFT		0
67*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON1_S_MASK		0x7
68*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON1_S_SHIFT		6
69*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON2_K_MASK		0xffff
70*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON2_K_SHIFT		0
71*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON1_PWRDOWN		BIT(13)
72*e3ec6ff4SXiaoDong Huang #define CRU_PLLCON6_LOCK_STATUS		BIT(15)
73*e3ec6ff4SXiaoDong Huang 
74*e3ec6ff4SXiaoDong Huang #define CRU_BIGCPU02_RST_MSK		0x30
75*e3ec6ff4SXiaoDong Huang #define CRU_BIGCPU13_RST_MSK		0x300
76*e3ec6ff4SXiaoDong Huang 
77*e3ec6ff4SXiaoDong Huang #define PHPCRU_CLKGATE_CON		0x800
78*e3ec6ff4SXiaoDong Huang #define PHPCRU_CLKGATE_CON_CNT		1
79*e3ec6ff4SXiaoDong Huang 
80*e3ec6ff4SXiaoDong Huang #define SECURECRU_CLKGATE_CON(i)	((i) * 0x4 + 0x800)
81*e3ec6ff4SXiaoDong Huang #define SECURECRU_CLKGATE_CON_CNT	4
82*e3ec6ff4SXiaoDong Huang 
83*e3ec6ff4SXiaoDong Huang #define PMU1CRU_CLKGATE_CON_CNT		6
84*e3ec6ff4SXiaoDong Huang 
85*e3ec6ff4SXiaoDong Huang /* CENTER GRF */
86*e3ec6ff4SXiaoDong Huang #define CENTER_GRF_CON(i)		((i) * 4)
87*e3ec6ff4SXiaoDong Huang 
88*e3ec6ff4SXiaoDong Huang /* PMU1GRF */
89*e3ec6ff4SXiaoDong Huang #define PMU1GRF_SOC_CON(n)		((n) * 4)
90*e3ec6ff4SXiaoDong Huang #define PMU1GRF_SOC_ST			0x60
91*e3ec6ff4SXiaoDong Huang #define PMU1GRF_OS_REG(n)		(0x200 + ((n) * 4))
92*e3ec6ff4SXiaoDong Huang 
93*e3ec6ff4SXiaoDong Huang #define PMU_MCU_HALT			BIT(7)
94*e3ec6ff4SXiaoDong Huang #define PMU_MCU_SLEEP			BIT(9)
95*e3ec6ff4SXiaoDong Huang #define PMU_MCU_DEEPSLEEP		BIT(10)
96*e3ec6ff4SXiaoDong Huang #define PMU_MCU_STOP_MSK		\
97*e3ec6ff4SXiaoDong Huang 	(PMU_MCU_HALT | PMU_MCU_SLEEP | PMU_MCU_DEEPSLEEP)
98*e3ec6ff4SXiaoDong Huang 
99*e3ec6ff4SXiaoDong Huang /* SYSGRF */
100*e3ec6ff4SXiaoDong Huang #define SYS_GRF_NOC_CON(n)		(0x100 + (n) * 4)
101*e3ec6ff4SXiaoDong Huang #define SYS_GRF_SOC_CON(n)		(0x300 + (n) * 4)
102*e3ec6ff4SXiaoDong Huang #define SYS_GRF_SOC_STATUS(n)		(0x380 + (n) * 4)
103*e3ec6ff4SXiaoDong Huang 
104*e3ec6ff4SXiaoDong Huang #define SYS_GRF_LITTLE_CPUS_WFE		0xf
105*e3ec6ff4SXiaoDong Huang #define SYS_GRF_CORE0_CPUS_WFE		0x30
106*e3ec6ff4SXiaoDong Huang #define SYS_GRF_CORE1_CPUS_WFE		0xc0
107*e3ec6ff4SXiaoDong Huang #define SYS_GRF_BIG_CPUS_WFE		0xf0
108*e3ec6ff4SXiaoDong Huang #define SYS_GRF_LITTLE_CPUS_WFI		0xf00
109*e3ec6ff4SXiaoDong Huang #define SYS_GRF_CORE0_CPUS_WFI		0x3000
110*e3ec6ff4SXiaoDong Huang #define SYS_GRF_CORE1_CPUS_WFI		0xc000
111*e3ec6ff4SXiaoDong Huang 
112*e3ec6ff4SXiaoDong Huang /* pvtm */
113*e3ec6ff4SXiaoDong Huang #define PVTM_CON(i)			(0x4 + (i) * 4)
114*e3ec6ff4SXiaoDong Huang #define PVTM_INTEN			0x70
115*e3ec6ff4SXiaoDong Huang #define PVTM_INTSTS			0x74
116*e3ec6ff4SXiaoDong Huang #define PVTM_STATUS(i)			(0x80 + (i) * 4)
117*e3ec6ff4SXiaoDong Huang #define PVTM_CALC_CNT			0x200
118*e3ec6ff4SXiaoDong Huang 
119*e3ec6ff4SXiaoDong Huang enum pvtm_con0 {
120*e3ec6ff4SXiaoDong Huang 	pvtm_start = 0,
121*e3ec6ff4SXiaoDong Huang 	pvtm_osc_en = 1,
122*e3ec6ff4SXiaoDong Huang 	pvtm_osc_sel = 2,
123*e3ec6ff4SXiaoDong Huang 	pvtm_rnd_seed_en = 5,
124*e3ec6ff4SXiaoDong Huang };
125*e3ec6ff4SXiaoDong Huang 
126*e3ec6ff4SXiaoDong Huang /* timer */
127*e3ec6ff4SXiaoDong Huang #define TIMER_LOAD_COUNT0		0x00
128*e3ec6ff4SXiaoDong Huang #define TIMER_LOAD_COUNT1		0x04
129*e3ec6ff4SXiaoDong Huang #define TIMER_CURRENT_VALUE0		0x08
130*e3ec6ff4SXiaoDong Huang #define TIMER_CURRENT_VALUE1		0x0c
131*e3ec6ff4SXiaoDong Huang #define TIMER_CONTROL_REG		0x10
132*e3ec6ff4SXiaoDong Huang #define TIMER_INTSTATUS			0x18
133*e3ec6ff4SXiaoDong Huang 
134*e3ec6ff4SXiaoDong Huang #define TIMER_DIS			0x0
135*e3ec6ff4SXiaoDong Huang #define TIMER_EN			0x1
136*e3ec6ff4SXiaoDong Huang 
137*e3ec6ff4SXiaoDong Huang #define TIMER_FMODE			(0x0 << 1)
138*e3ec6ff4SXiaoDong Huang #define TIMER_RMODE			(0x1 << 1)
139*e3ec6ff4SXiaoDong Huang 
140*e3ec6ff4SXiaoDong Huang #define STIMER0_CHN_BASE(n)		(STIMER0_BASE + 0x20 * (n))
141*e3ec6ff4SXiaoDong Huang #define STIMER1_CHN_BASE(n)		(STIMER1_BASE + 0x20 * (n))
142*e3ec6ff4SXiaoDong Huang 
143*e3ec6ff4SXiaoDong Huang /* cpu timer */
144*e3ec6ff4SXiaoDong Huang #define TIMER_HP_REVISION		0x0
145*e3ec6ff4SXiaoDong Huang #define TIMER_HP_CTRL			0x4
146*e3ec6ff4SXiaoDong Huang #define TIMER_HP_INT_EN			0x8
147*e3ec6ff4SXiaoDong Huang #define TIMER_HP_T24_GCD		0xc
148*e3ec6ff4SXiaoDong Huang #define TIMER_HP_T32_GCD		0x10
149*e3ec6ff4SXiaoDong Huang #define TIMER_HP_LOAD_COUNT0		0x14
150*e3ec6ff4SXiaoDong Huang #define TIMER_HP_LOAD_COUNT1		0x18
151*e3ec6ff4SXiaoDong Huang #define TIMER_HP_T24_DELAT_COUNT0	0x1c
152*e3ec6ff4SXiaoDong Huang #define TIMER_HP_T24_DELAT_COUNT1	0x20
153*e3ec6ff4SXiaoDong Huang #define TIMER_HP_CURR_32K_VALUE0	0x24
154*e3ec6ff4SXiaoDong Huang #define TIMER_HP_CURR_32K_VALUE1	0x28
155*e3ec6ff4SXiaoDong Huang #define TIMER_HP_CURR_TIMER_VALUE0	0x2c
156*e3ec6ff4SXiaoDong Huang #define TIMER_HP_CURR_TIMER_VALUE1	0x30
157*e3ec6ff4SXiaoDong Huang #define TIMER_HP_T24_32BEGIN0		0x34
158*e3ec6ff4SXiaoDong Huang #define TIMER_HP_T24_32BEGIN1		0x38
159*e3ec6ff4SXiaoDong Huang #define TIMER_HP_T32_24END0		0x3c
160*e3ec6ff4SXiaoDong Huang #define TIMER_HP_T32_24END1		0x40
161*e3ec6ff4SXiaoDong Huang #define TIMER_HP_BEGIN_END_VALID	0x44
162*e3ec6ff4SXiaoDong Huang #define TIMER_HP_SYNC_REQ		0x48
163*e3ec6ff4SXiaoDong Huang #define TIMER_HP_INTR_STATUS		0x4c
164*e3ec6ff4SXiaoDong Huang 
165*e3ec6ff4SXiaoDong Huang  /* GPIO */
166*e3ec6ff4SXiaoDong Huang #define GPIO_SWPORT_DR_L		0x0000
167*e3ec6ff4SXiaoDong Huang #define GPIO_SWPORT_DR_H		0x0004
168*e3ec6ff4SXiaoDong Huang #define GPIO_SWPORT_DDR_L		0x0008
169*e3ec6ff4SXiaoDong Huang #define GPIO_SWPORT_DDR_H		0x000c
170*e3ec6ff4SXiaoDong Huang #define GPIO_INT_EN_L			0x0010
171*e3ec6ff4SXiaoDong Huang #define GPIO_INT_EN_H			0x0014
172*e3ec6ff4SXiaoDong Huang #define GPIO_INT_MASK_L			0x0018
173*e3ec6ff4SXiaoDong Huang #define GPIO_INT_MASK_H			0x001c
174*e3ec6ff4SXiaoDong Huang #define GPIO_INT_TYPE_L			0x0020
175*e3ec6ff4SXiaoDong Huang #define GPIO_INT_TYPE_H			0x0024
176*e3ec6ff4SXiaoDong Huang #define GPIO_INT_POLARITY_L		0x0028
177*e3ec6ff4SXiaoDong Huang #define GPIO_INT_POLARITY_H		0x002c
178*e3ec6ff4SXiaoDong Huang #define GPIO_INT_BOTHEDGE_L		0x0030
179*e3ec6ff4SXiaoDong Huang #define GPIO_INT_BOTHEDGE_H		0x0034
180*e3ec6ff4SXiaoDong Huang #define GPIO_DEBOUNCE_L			0x0038
181*e3ec6ff4SXiaoDong Huang #define GPIO_DEBOUNCE_H			0x003c
182*e3ec6ff4SXiaoDong Huang #define GPIO_DBCLK_DIV_EN_L		0x0040
183*e3ec6ff4SXiaoDong Huang #define GPIO_DBCLK_DIV_EN_H		0x0044
184*e3ec6ff4SXiaoDong Huang #define GPIO_DBCLK_DIV_CON		0x0048
185*e3ec6ff4SXiaoDong Huang #define GPIO_INT_STATUS			0x0050
186*e3ec6ff4SXiaoDong Huang #define GPIO_INT_RAWSTATUS		0x0058
187*e3ec6ff4SXiaoDong Huang #define GPIO_PORT_EOI_L			0x0060
188*e3ec6ff4SXiaoDong Huang #define GPIO_PORT_EOI_H			0x0064
189*e3ec6ff4SXiaoDong Huang #define GPIO_EXT_PORT			0x0070
190*e3ec6ff4SXiaoDong Huang #define GPIO_VER_ID			0x0078
191*e3ec6ff4SXiaoDong Huang 
192*e3ec6ff4SXiaoDong Huang /* DDRGRF */
193*e3ec6ff4SXiaoDong Huang #define DDRGRF_CHA_CON(i)		((i) * 4)
194*e3ec6ff4SXiaoDong Huang #define DDRGRF_CHB_CON(i)		(0x30 + (i) * 4)
195*e3ec6ff4SXiaoDong Huang 
196*e3ec6ff4SXiaoDong Huang #define DDR_CHN_CNT			4
197*e3ec6ff4SXiaoDong Huang 
198*e3ec6ff4SXiaoDong Huang #endif /* __SOC_H__ */
199