xref: /arm-trusted-firmware/plat/intel/soc/common/include/socfpga_reset_manager.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019-2023, Intel Corporation. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef SOCFPGA_RESETMANAGER_H
8*91f16700Schasinglulu #define SOCFPGA_RESETMANAGER_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include "socfpga_plat_def.h"
11*91f16700Schasinglulu 
12*91f16700Schasinglulu /* Status Response */
13*91f16700Schasinglulu #define RSTMGR_RET_OK				0
14*91f16700Schasinglulu #define RSTMGR_RET_ERROR			-1
15*91f16700Schasinglulu 
16*91f16700Schasinglulu #define SOCFPGA_BRIDGE_ENABLE			BIT(0)
17*91f16700Schasinglulu #define SOCFPGA_BRIDGE_HAS_MASK			BIT(1)
18*91f16700Schasinglulu 
19*91f16700Schasinglulu #define SOC2FPGA_MASK				(1<<0)
20*91f16700Schasinglulu #define LWHPS2FPGA_MASK				(1<<1)
21*91f16700Schasinglulu #define FPGA2SOC_MASK				(1<<2)
22*91f16700Schasinglulu #define F2SDRAM0_MASK				(1<<3)
23*91f16700Schasinglulu #define F2SDRAM1_MASK				(1<<4)
24*91f16700Schasinglulu #define F2SDRAM2_MASK				(1<<5)
25*91f16700Schasinglulu 
26*91f16700Schasinglulu /* Register Mapping */
27*91f16700Schasinglulu 
28*91f16700Schasinglulu #define SOCFPGA_RSTMGR_STAT			0x000
29*91f16700Schasinglulu #define SOCFPGA_RSTMGR_MISCSTAT			0x008
30*91f16700Schasinglulu #define SOCFPGA_RSTMGR_HDSKEN			0x010
31*91f16700Schasinglulu #define SOCFPGA_RSTMGR_HDSKREQ			0x014
32*91f16700Schasinglulu #define SOCFPGA_RSTMGR_HDSKACK			0x018
33*91f16700Schasinglulu #define SOCFPGA_RSTMGR_HDSKSTALL		0x01C
34*91f16700Schasinglulu #if PLATFORM_MODEL != PLAT_SOCFPGA_AGILEX5
35*91f16700Schasinglulu #define SOCFPGA_RSTMGR_MPUMODRST		0x020
36*91f16700Schasinglulu #endif
37*91f16700Schasinglulu #define SOCFPGA_RSTMGR_PER0MODRST		0x024
38*91f16700Schasinglulu #define SOCFPGA_RSTMGR_PER1MODRST		0x028
39*91f16700Schasinglulu #define SOCFPGA_RSTMGR_BRGMODRST		0x02C
40*91f16700Schasinglulu #if PLATFORM_MODEL != PLAT_SOCFPGA_AGILEX5
41*91f16700Schasinglulu #define SOCFPGA_RSTMGR_COLDMODRST		0x034
42*91f16700Schasinglulu #endif
43*91f16700Schasinglulu #define SOCFPGA_RSTMGR_DBGMODRST		0x03C
44*91f16700Schasinglulu #define SOCFPGA_RSTMGR_BRGWARMMASK		0x04C
45*91f16700Schasinglulu #define SOCFPGA_RSTMGR_TSTSTA			0x05C
46*91f16700Schasinglulu #define SOCFPGA_RSTMGR_HDSKTIMEOUT		0x064
47*91f16700Schasinglulu #define SOCFPGA_RSTMGR_DBGHDSKTIMEOUT		0x06C
48*91f16700Schasinglulu #define SOCFPGA_RSTMGR_DBGRSTCMPLT		0x070
49*91f16700Schasinglulu #define SOCFPGA_RSTMGR_HPSRSTCMPLT		0x080
50*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUINREST		0x090
51*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPURSTRELEASE		0x094
52*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUBASELOW_0		0x098
53*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUBASEHIGH_0		0x09C
54*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUBASELOW_1		0x0A0
55*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUBASEHIGH_1		0x0A4
56*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUBASELOW_2		0x0A8
57*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUBASEHIGH_2		0x0AC
58*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUBASELOW_3		0x0B0
59*91f16700Schasinglulu #define SOCFPGA_RSTMGR_CPUBASEHIGH_3		0x0B4
60*91f16700Schasinglulu 
61*91f16700Schasinglulu /* Field Mapping */
62*91f16700Schasinglulu /* PER0MODRST */
63*91f16700Schasinglulu #define RSTMGR_PER0MODRST_EMAC0			0x00000001	//TSN0
64*91f16700Schasinglulu #define RSTMGR_PER0MODRST_EMAC1			0x00000002	//TSN1
65*91f16700Schasinglulu #define RSTMGR_PER0MODRST_EMAC2			0x00000004	//TSN2
66*91f16700Schasinglulu #define RSTMGR_PER0MODRST_USB0			0x00000008
67*91f16700Schasinglulu #define RSTMGR_PER0MODRST_USB1			0x00000010
68*91f16700Schasinglulu #define RSTMGR_PER0MODRST_NAND			0x00000020
69*91f16700Schasinglulu #define RSTMGR_PER0MODRST_SOFTPHY		0x00000040
70*91f16700Schasinglulu #define RSTMGR_PER0MODRST_SDMMC			0x00000080
71*91f16700Schasinglulu #define RSTMGR_PER0MODRST_EMAC0OCP		0x00000100	//TSN0ECC
72*91f16700Schasinglulu #define RSTMGR_PER0MODRST_EMAC1OCP		0x00000200	//TSN1ECC
73*91f16700Schasinglulu #define RSTMGR_PER0MODRST_EMAC2OCP		0x00000400	//TSN2ECC
74*91f16700Schasinglulu #define RSTMGR_PER0MODRST_USB0OCP		0x00000800
75*91f16700Schasinglulu #define RSTMGR_PER0MODRST_USB1OCP		0x00001000
76*91f16700Schasinglulu #define RSTMGR_PER0MODRST_NANDOCP		0x00002000
77*91f16700Schasinglulu #define RSTMGR_PER0MODRST_SDMMCOCP		0x00008000
78*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMA			0x00010000
79*91f16700Schasinglulu #define RSTMGR_PER0MODRST_SPIM0			0x00020000
80*91f16700Schasinglulu #define RSTMGR_PER0MODRST_SPIM1			0x00040000
81*91f16700Schasinglulu #define RSTMGR_PER0MODRST_SPIS0			0x00080000
82*91f16700Schasinglulu #define RSTMGR_PER0MODRST_SPIS1			0x00100000
83*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAOCP		0x00200000
84*91f16700Schasinglulu #define RSTMGR_PER0MODRST_EMACPTP		0x00400000
85*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAIF0		0x01000000
86*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAIF1		0x02000000
87*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAIF2		0x04000000
88*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAIF3		0x08000000
89*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAIF4		0x10000000
90*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAIF5		0x20000000
91*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAIF6		0x40000000
92*91f16700Schasinglulu #define RSTMGR_PER0MODRST_DMAIF7		0x80000000
93*91f16700Schasinglulu 
94*91f16700Schasinglulu /* PER1MODRST */
95*91f16700Schasinglulu #define RSTMGR_PER1MODRST_WATCHDOG0		0x00000001
96*91f16700Schasinglulu #define RSTMGR_PER1MODRST_WATCHDOG1		0x00000002
97*91f16700Schasinglulu #define RSTMGR_PER1MODRST_WATCHDOG2		0x00000004
98*91f16700Schasinglulu #define RSTMGR_PER1MODRST_WATCHDOG3		0x00000008
99*91f16700Schasinglulu #define RSTMGR_PER1MODRST_L4SYSTIMER0		0x00000010
100*91f16700Schasinglulu #define RSTMGR_PER1MODRST_L4SYSTIMER1		0x00000020
101*91f16700Schasinglulu #define RSTMGR_PER1MODRST_SPTIMER0		0x00000040
102*91f16700Schasinglulu #define RSTMGR_PER1MODRST_SPTIMER1		0x00000080
103*91f16700Schasinglulu #define RSTMGR_PER1MODRST_I2C0			0x00000100
104*91f16700Schasinglulu #define RSTMGR_PER1MODRST_I2C1			0x00000200
105*91f16700Schasinglulu #define RSTMGR_PER1MODRST_I2C2			0x00000400
106*91f16700Schasinglulu #define RSTMGR_PER1MODRST_I2C3			0x00000800
107*91f16700Schasinglulu #define RSTMGR_PER1MODRST_I2C4			0x00001000
108*91f16700Schasinglulu #define RSTMGR_PER1MODRST_I3C0			0x00002000
109*91f16700Schasinglulu #define RSTMGR_PER1MODRST_I3C1			0x00004000
110*91f16700Schasinglulu #define RSTMGR_PER1MODRST_UART0			0x00010000
111*91f16700Schasinglulu #define RSTMGR_PER1MODRST_UART1			0x00020000
112*91f16700Schasinglulu #define RSTMGR_PER1MODRST_GPIO0			0x01000000
113*91f16700Schasinglulu #define RSTMGR_PER1MODRST_GPIO1			0x02000000
114*91f16700Schasinglulu #define RSTMGR_PER1MODRST_WATCHDOG4		0x04000000
115*91f16700Schasinglulu 
116*91f16700Schasinglulu /* HDSKEN */
117*91f16700Schasinglulu #define RSTMGR_HDSKEN_EMIF_FLUSH		0x00000001
118*91f16700Schasinglulu #define RSTMGR_HDSKEN_FPGAHSEN			0x00000004
119*91f16700Schasinglulu #define RSTMGR_HDSKEN_ETRSTALLEN		0x00000008
120*91f16700Schasinglulu #define RSTMGR_HDSKEN_LWS2F_FLUSH		0x00000200
121*91f16700Schasinglulu #define RSTMGR_HDSKEN_S2F_FLUSH			0x00000400
122*91f16700Schasinglulu #define RSTMGR_HDSKEN_F2SDRAM_FLUSH		0x00000800
123*91f16700Schasinglulu #define RSTMGR_HDSKEN_F2S_FLUSH			0x00001000
124*91f16700Schasinglulu #define RSTMGR_HDSKEN_L3NOC_DBG			0x00010000
125*91f16700Schasinglulu #define RSTMGR_HDSKEN_DEBUG_L3NOC		0x00020000
126*91f16700Schasinglulu 
127*91f16700Schasinglulu /* HDSKREQ */
128*91f16700Schasinglulu #define RSTMGR_HDSKREQ_EMIFFLUSHREQ		0x00000001
129*91f16700Schasinglulu #define RSTMGR_HDSKREQ_ETRSTALLREQ		0x00000008
130*91f16700Schasinglulu #define RSTMGR_HDSKREQ_LWS2F_FLUSH		0x00000200
131*91f16700Schasinglulu #define RSTMGR_HDSKREQ_S2F_FLUSH		0x00000400
132*91f16700Schasinglulu #define RSTMGR_HDSKREQ_F2SDRAM_FLUSH		0x00000800
133*91f16700Schasinglulu #define RSTMGR_HDSKREQ_F2S_FLUSH		0x00001000
134*91f16700Schasinglulu #define RSTMGR_HDSKREQ_L3NOC_DBG		0x00010000
135*91f16700Schasinglulu #define RSTMGR_HDSKREQ_DEBUG_L3NOC		0x00020000
136*91f16700Schasinglulu #define RSTMGR_HDSKREQ_FPGAHSREQ		0x00000004
137*91f16700Schasinglulu #define RSTMGR_HDSKREQ_LWSOC2FPGAREQ		0x00000200
138*91f16700Schasinglulu #define RSTMGR_HDSKREQ_SOC2FPGAREQ		0x00000400
139*91f16700Schasinglulu #define RSTMGR_HDSKREQ_F2SDRAM0REQ		0x00000800
140*91f16700Schasinglulu #define RSTMGR_HDSKREQ_FPGA2SOCREQ		0x00001000
141*91f16700Schasinglulu 
142*91f16700Schasinglulu /* HDSKACK */
143*91f16700Schasinglulu #define RSTMGR_HDSKACK_EMIFFLUSHREQ		0x00000001
144*91f16700Schasinglulu #define RSTMGR_HDSKACK_FPGAHSREQ		0x00000004
145*91f16700Schasinglulu #define RSTMGR_HDSKACK_ETRSTALLREQ		0x00000008
146*91f16700Schasinglulu #define RSTMGR_HDSKACK_LWS2F_FLUSH		0x00000200
147*91f16700Schasinglulu #define RSTMGR_HDSKACK_S2F_FLUSH		0x00000400
148*91f16700Schasinglulu #define RSTMGR_HDSKACK_F2SDRAM_FLUSH		0x00000800
149*91f16700Schasinglulu #define RSTMGR_HDSKACK_F2S_FLUSH		0x00001000
150*91f16700Schasinglulu #define RSTMGR_HDSKACK_L3NOC_DBG		0x00010000
151*91f16700Schasinglulu #define RSTMGR_HDSKACK_DEBUG_L3NOC		0x00020000
152*91f16700Schasinglulu #define RSTMGR_HDSKACK_FPGAHSACK		0x00000004
153*91f16700Schasinglulu #define RSTMGR_HDSKACK_LWSOC2FPGAACK		0x00000200
154*91f16700Schasinglulu #define RSTMGR_HDSKACK_SOC2FPGAACK		0x00000400
155*91f16700Schasinglulu #define RSTMGR_HDSKACK_F2SDRAM0ACK		0x00000800
156*91f16700Schasinglulu #define RSTMGR_HDSKACK_FPGA2SOCACK		0x00001000
157*91f16700Schasinglulu #define RSTMGR_HDSKACK_FPGAHSACK_DASRT		0x00000000
158*91f16700Schasinglulu #define RSTMGR_HDSKACK_F2SDRAM0ACK_DASRT	0x00000000
159*91f16700Schasinglulu #define RSTMGR_HDSKACK_FPGA2SOCACK_DASRT	0x00000000
160*91f16700Schasinglulu 
161*91f16700Schasinglulu /* HDSKSTALL */
162*91f16700Schasinglulu #define RSTMGR_HDSKACK_ETRSTALLWARMRST		0x00000001
163*91f16700Schasinglulu 
164*91f16700Schasinglulu /* BRGMODRST */
165*91f16700Schasinglulu #define RSTMGR_BRGMODRST_SOC2FPGA		0x00000001
166*91f16700Schasinglulu #define RSTMGR_BRGMODRST_LWHPS2FPGA		0x00000002
167*91f16700Schasinglulu #define RSTMGR_BRGMODRST_FPGA2SOC		0x00000004
168*91f16700Schasinglulu #define RSTMGR_BRGMODRST_F2SSDRAM0		0x00000008
169*91f16700Schasinglulu #if PLATFORM_MODEL == PLAT_SOCFPGA_STRATIX10
170*91f16700Schasinglulu #define RSTMGR_BRGMODRST_F2SSDRAM1		0x10
171*91f16700Schasinglulu #define RSTMGR_BRGMODRST_F2SSDRAM2		0x20
172*91f16700Schasinglulu #define RSTMGR_BRGMODRST_DDRSCH			0x40
173*91f16700Schasinglulu #elif PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
174*91f16700Schasinglulu #define RSTMGR_BRGMODRST_F2SSDRAM1		0x10
175*91f16700Schasinglulu #define RSTMGR_BRGMODRST_F2SSDRAM2		0x20
176*91f16700Schasinglulu #endif
177*91f16700Schasinglulu 
178*91f16700Schasinglulu #define RSTMGR_BRGMODRST_MPFE			0x40
179*91f16700Schasinglulu 
180*91f16700Schasinglulu /* DBGMODRST */
181*91f16700Schasinglulu #define RSTMGR_DBGMODRST_DBG_RST		0x00000001
182*91f16700Schasinglulu 
183*91f16700Schasinglulu /* BRGMODRSTMASK */
184*91f16700Schasinglulu #define RSTMGR_BRGMODRSTMASK_SOC2FPGA		0x00000001
185*91f16700Schasinglulu #define RSTMGR_BRGMODRSTMASK_LWHPS2FPGA		0x00000002
186*91f16700Schasinglulu #define RSTMGR_BRGMODRSTMASK_FPGA2SOC		0x00000004
187*91f16700Schasinglulu #define RSTMGR_BRGMODRSTMASK_F2SDRAM0		0x00000008
188*91f16700Schasinglulu #define RSTMGR_BRGMODRSTMASK_MPFE		0x00000040
189*91f16700Schasinglulu 
190*91f16700Schasinglulu /* TSTSTA */
191*91f16700Schasinglulu #define RSTMGR_TSTSTA_RSTST			0x0000001F
192*91f16700Schasinglulu 
193*91f16700Schasinglulu /* HDSKTIMEOUT */
194*91f16700Schasinglulu #define RSTMGR_HDSKTIMEOUT_VAL			0xFFFFFFFF
195*91f16700Schasinglulu 
196*91f16700Schasinglulu /* DBGHDSKTIMEOUT */
197*91f16700Schasinglulu #define RSTMGR_DBGHDSKTIMEOUT_VAL		0xFFFFFFFF
198*91f16700Schasinglulu 
199*91f16700Schasinglulu /* DBGRSTCMPLT */
200*91f16700Schasinglulu #define RSTMGR_DBGRSTCMPLT_VAL			0xFFFFFFFF
201*91f16700Schasinglulu 
202*91f16700Schasinglulu /* HPSRSTCMPLT */
203*91f16700Schasinglulu #define RSTMGR_DBGRSTCMPLT_VAL			0xFFFFFFFF
204*91f16700Schasinglulu 
205*91f16700Schasinglulu /* CPUINRESET */
206*91f16700Schasinglulu #define RSTMGR_CPUINRESET_CPU0			0x00000001
207*91f16700Schasinglulu #define RSTMGR_CPUINRESET_CPU1			0x00000002
208*91f16700Schasinglulu #define RSTMGR_CPUINRESET_CPU2			0x00000004
209*91f16700Schasinglulu #define RSTMGR_CPUINRESET_CPU3			0x00000008
210*91f16700Schasinglulu 
211*91f16700Schasinglulu /* CPUSTRELEASE */
212*91f16700Schasinglulu #define RSTMGR_CPUSTRELEASE_CPUx		0x10D11094
213*91f16700Schasinglulu 
214*91f16700Schasinglulu /* CPUxRESETBASE */
215*91f16700Schasinglulu #define RSTMGR_CPUxRESETBASELOW_CPU0		0x10D11098
216*91f16700Schasinglulu #define RSTMGR_CPUxRESETBASEHIGH_CPU0		0x10D1109C
217*91f16700Schasinglulu #define RSTMGR_CPUxRESETBASELOW_CPU1		0x10D110A0
218*91f16700Schasinglulu #define RSTMGR_CPUxRESETBASEHIGH_CPU1		0x10D110A4
219*91f16700Schasinglulu #define RSTMGR_CPUxRESETBASELOW_CPU2		0x10D110A8
220*91f16700Schasinglulu #define RSTMGR_CPUxRESETBASEHIGH_CPU2		0x10D110AC
221*91f16700Schasinglulu #define RSTMGR_CPUxRESETBASELOW_CPU3		0x10D110B0
222*91f16700Schasinglulu #define RSTMGR_CPUxRESETBASEHIGH_CPU3		0x10D110B4
223*91f16700Schasinglulu 
224*91f16700Schasinglulu /* Definitions */
225*91f16700Schasinglulu 
226*91f16700Schasinglulu #define RSTMGR_L2_MODRST			0x0100
227*91f16700Schasinglulu #define RSTMGR_HDSKEN_SET			0x010D
228*91f16700Schasinglulu 
229*91f16700Schasinglulu /* Macros */
230*91f16700Schasinglulu #define SOCFPGA_RSTMGR(_reg)			(SOCFPGA_RSTMGR_REG_BASE + (SOCFPGA_RSTMGR_##_reg))
231*91f16700Schasinglulu #define RSTMGR_FIELD(_reg, _field)		(RSTMGR_##_reg##MODRST_##_field)
232*91f16700Schasinglulu 
233*91f16700Schasinglulu /* Reset type to SDM from PSCI */
234*91f16700Schasinglulu // Temp add macro here for reset type
235*91f16700Schasinglulu #define SOCFPGA_RESET_TYPE_COLD			0
236*91f16700Schasinglulu #define SOCFPGA_RESET_TYPE_WARM			1
237*91f16700Schasinglulu 
238*91f16700Schasinglulu /* Function Declarations */
239*91f16700Schasinglulu 
240*91f16700Schasinglulu void deassert_peripheral_reset(void);
241*91f16700Schasinglulu void config_hps_hs_before_warm_reset(void);
242*91f16700Schasinglulu 
243*91f16700Schasinglulu int socfpga_bridges_reset(uint32_t mask);
244*91f16700Schasinglulu int socfpga_bridges_enable(uint32_t mask);
245*91f16700Schasinglulu int socfpga_bridges_disable(uint32_t mask);
246*91f16700Schasinglulu 
247*91f16700Schasinglulu int socfpga_cpurstrelease(unsigned int cpu_id);
248*91f16700Schasinglulu int socfpga_cpu_reset_base(unsigned int cpu_id);
249*91f16700Schasinglulu 
250*91f16700Schasinglulu /* SMP: Func proto */
251*91f16700Schasinglulu void bl31_plat_set_secondary_cpu_entrypoint(unsigned int cpu_id);
252*91f16700Schasinglulu void bl31_plat_set_secondary_cpu_off(void);
253*91f16700Schasinglulu 
254*91f16700Schasinglulu #endif /* SOCFPGA_RESETMANAGER_H */
255