xref: /arm-trusted-firmware/plat/ax/laguna/include/platform_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /* SPDX-License-Identifier: BSD-3-Clause */
2*91f16700Schasinglulu /*
3*91f16700Schasinglulu  * Copyright (C) 2024, Charleye <wangkart@aliyun.com>
4*91f16700Schasinglulu  * All rights reserved.
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef PLATFORM_DEF_H
8*91f16700Schasinglulu #define PLATFORM_DEF_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <lib/utils_def.h>
11*91f16700Schasinglulu #include <plat/common/common_def.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu /* RAS */
14*91f16700Schasinglulu #define PLAT_RAS_PRI               U(0x10)
15*91f16700Schasinglulu #define PLAT_LUA_DSU_ERRIRQ        U(33)
16*91f16700Schasinglulu #define PLAT_LUA_DSU_FAULTIRQ      U(34)
17*91f16700Schasinglulu #define PLAT_LUA_CPU0_ERRIRQ       U(39)
18*91f16700Schasinglulu #define PLAT_LUA_CPU0_FAULTIRQ     U(43)
19*91f16700Schasinglulu #define PLAT_LUA_CPU1_ERRIRQ       U(40)
20*91f16700Schasinglulu #define PLAT_LUA_CPU1_FAULTIRQ     U(44)
21*91f16700Schasinglulu #define PLAT_LUA_CPU2_ERRIRQ       U(41)
22*91f16700Schasinglulu #define PLAT_LUA_CPU2_FAULTIRQ     U(45)
23*91f16700Schasinglulu #define PLAT_LUA_CPU3_ERRIRQ       U(42)
24*91f16700Schasinglulu #define PLAT_LUA_CPU3_FAULTIRQ     U(46)
25*91f16700Schasinglulu 
26*91f16700Schasinglulu /* SDEI */
27*91f16700Schasinglulu #define PLAT_SDEI_CRITICAL_PRI     U(0x20)
28*91f16700Schasinglulu #define PLAT_SDEI_NORMAL_PRI       U(0x30)
29*91f16700Schasinglulu 
30*91f16700Schasinglulu /* CPU topology */
31*91f16700Schasinglulu #define PLAT_MAX_CORES_PER_CLUSTER    U(4)
32*91f16700Schasinglulu #define PLAT_CLUSTER_COUNT            U(1)
33*91f16700Schasinglulu #define PLATFORM_CORE_COUNT           (PLAT_CLUSTER_COUNT * PLAT_MAX_CORES_PER_CLUSTER)
34*91f16700Schasinglulu 
35*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL        U(1)
36*91f16700Schasinglulu #define PLAT_MAX_RET_STATE      U(1)
37*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE      U(2)
38*91f16700Schasinglulu 
39*91f16700Schasinglulu #define PLAT_LUA_FAB_PERIPH_PRIO   U(0x50)
40*91f16700Schasinglulu #define PLAT_LUA_FAB_PERIPH_IRQ    U(179 + 32)
41*91f16700Schasinglulu 
42*91f16700Schasinglulu #define PLATFORM_FAB_PERIPH_G0_PROPS(grp)                                     \
43*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_FAB_PERIPH_IRQ, PLAT_LUA_FAB_PERIPH_PRIO,         \
44*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_LEVEL)
45*91f16700Schasinglulu 
46*91f16700Schasinglulu /* Local power state for power domains in Run state. */
47*91f16700Schasinglulu #define LUA_LOCAL_STATE_RUN     U(0)
48*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */
49*91f16700Schasinglulu #define LUA_LOCAL_STATE_RET     U(1)
50*91f16700Schasinglulu /*
51*91f16700Schasinglulu  * Local power state for OFF/power-down. Valid for CPU and cluster power
52*91f16700Schasinglulu  * domains.
53*91f16700Schasinglulu  */
54*91f16700Schasinglulu #define LUA_LOCAL_STATE_OFF     U(2)
55*91f16700Schasinglulu 
56*91f16700Schasinglulu /*
57*91f16700Schasinglulu  * Macros used to parse state information from State-ID if it is using the
58*91f16700Schasinglulu  * recommended encoding for State-ID.
59*91f16700Schasinglulu  */
60*91f16700Schasinglulu #define LUA_LOCAL_PSTATE_WIDTH      U(4)
61*91f16700Schasinglulu #define LUA_LOCAL_PSTATE_MASK       ((1 << LUA_LOCAL_PSTATE_WIDTH) - 1)
62*91f16700Schasinglulu 
63*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT       U(6)
64*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE     (1 << CACHE_WRITEBACK_SHIFT)
65*91f16700Schasinglulu 
66*91f16700Schasinglulu /* xlat table v2 related to contants */
67*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE    (1ULL << 40)
68*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE   (1ULL << 40)
69*91f16700Schasinglulu #define MAX_XLAT_TABLES             U(8)
70*91f16700Schasinglulu #define MAX_MMAP_REGIONS            U(16)
71*91f16700Schasinglulu 
72*91f16700Schasinglulu #define PLATFORM_STACK_SIZE         (1UL << 12)
73*91f16700Schasinglulu 
74*91f16700Schasinglulu /* physical memory related constants */
75*91f16700Schasinglulu #define LUA_DRAM_BASE               ULL(0x100000000)
76*91f16700Schasinglulu #define LUA_NS_DDR_SIZE             (ULL(0x10) * SZ_1G)
77*91f16700Schasinglulu #define LUA_BL31_IMG_OFFSET         0x00104000
78*91f16700Schasinglulu #define LUA_BL32_IMG_OFFSET         0x04000000
79*91f16700Schasinglulu #define LUA_BL33_IMG_OFFSET         0x00200000
80*91f16700Schasinglulu 
81*91f16700Schasinglulu #define LUA_IRAM_BASE                0x00400000
82*91f16700Schasinglulu #define LUA_IRAM_SIZE                SZ_64K
83*91f16700Schasinglulu 
84*91f16700Schasinglulu #define SHARED_RAM_BASE              (LUA_DRAM_BASE + SZ_1M)
85*91f16700Schasinglulu #define SHARED_RAM_SIZE              SZ_4K
86*91f16700Schasinglulu 
87*91f16700Schasinglulu #define PLAT_LUA_TRUSTED_MAILBOX_BASE    SHARED_RAM_BASE
88*91f16700Schasinglulu #define PLAT_LUA_TRUSTED_MAILBOX_SIZE    (8 + PLAT_LUA_HOLD_SIZE)
89*91f16700Schasinglulu #define PLAT_LUA_HOLD_BASE               (SHARED_RAM_BASE + 8)
90*91f16700Schasinglulu #define PLAT_LUA_HOLD_SIZE               (PLATFORM_CORE_COUNT * PLAT_LUA_HOLD_ENTRY_SIZE)
91*91f16700Schasinglulu #define PLAT_LUA_HOLD_ENTRY_SHIFT        U(3)
92*91f16700Schasinglulu #define PLAT_LUA_HOLD_ENTRY_SIZE         (1 << PLAT_LUA_HOLD_ENTRY_SHIFT)
93*91f16700Schasinglulu #define PLAT_LUA_HOLD_STATE_WAIT         U(0)
94*91f16700Schasinglulu #define PLAT_LUA_HOLD_STATE_GO           U(1)
95*91f16700Schasinglulu 
96*91f16700Schasinglulu /*
97*91f16700Schasinglulu  * BL3-1 specific defines.
98*91f16700Schasinglulu  *
99*91f16700Schasinglulu  * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the
100*91f16700Schasinglulu  * current BL3-1 debug size plus a little space for growth.
101*91f16700Schasinglulu  */
102*91f16700Schasinglulu #define BL31_BASE           (LUA_DRAM_BASE + LUA_BL31_IMG_OFFSET)
103*91f16700Schasinglulu #define BL31_SIZE           SZ_256K
104*91f16700Schasinglulu #define BL31_LIMIT          (BL31_BASE + BL31_SIZE)
105*91f16700Schasinglulu 
106*91f16700Schasinglulu #define BL32_BASE           (LUA_DRAM_BASE + LUA_BL32_IMG_OFFSET)
107*91f16700Schasinglulu #define BL32_SIZE           SZ_32M
108*91f16700Schasinglulu #define BL32_LIMIT          (BL32_BASE + BL32_SIZE)
109*91f16700Schasinglulu 
110*91f16700Schasinglulu /*******************************************************************************
111*91f16700Schasinglulu  * BL33 specific defines.
112*91f16700Schasinglulu  ******************************************************************************/
113*91f16700Schasinglulu #ifndef PRELOADED_BL33_BASE
114*91f16700Schasinglulu # define PLAT_ARM_NS_IMAGE_BASE  U(LUA_DRAM_BASE + LUA_BL33_IMG_OFFSET)
115*91f16700Schasinglulu #else
116*91f16700Schasinglulu # define PLAT_ARM_NS_IMAGE_BASE  U(PRELOADED_BL33_BASE)
117*91f16700Schasinglulu #endif
118*91f16700Schasinglulu 
119*91f16700Schasinglulu /* Clock configuration */
120*91f16700Schasinglulu #ifdef LUA_FPGA
121*91f16700Schasinglulu #define LUA_OSC24M_CLK_IN_HZ       10000000
122*91f16700Schasinglulu #else
123*91f16700Schasinglulu #define LUA_OSC24M_CLK_IN_HZ       24000000
124*91f16700Schasinglulu #endif
125*91f16700Schasinglulu 
126*91f16700Schasinglulu /* UART configuration */
127*91f16700Schasinglulu #define LUA_UART_BAUDRATE         921600
128*91f16700Schasinglulu #ifdef LUA_UART0_CONSOLE
129*91f16700Schasinglulu #define LUA_UART_CLK_IN_HZ        U(200000000)
130*91f16700Schasinglulu #else
131*91f16700Schasinglulu #define LUA_UART_CLK_IN_HZ        LUA_OSC24M_CLK_IN_HZ
132*91f16700Schasinglulu #endif
133*91f16700Schasinglulu 
134*91f16700Schasinglulu /*
135*91f16700Schasinglulu  * UART related constants
136*91f16700Schasinglulu  */
137*91f16700Schasinglulu #define PLAT_PRI_BITS                   U(3)
138*91f16700Schasinglulu 
139*91f16700Schasinglulu #define PLAT_LUA_UART0_BASE             0x00602000
140*91f16700Schasinglulu #define PLAT_LUA_UART0_SIZE             ULL(0x1000)
141*91f16700Schasinglulu #define PLAT_LUA_UART0_MMAP             MAP_REGION_FLAT(PLAT_LUA_UART0_BASE,   \
142*91f16700Schasinglulu 											PLAT_LUA_UART0_SIZE,               \
143*91f16700Schasinglulu 											MT_DEVICE | MT_RW |                \
144*91f16700Schasinglulu 											MT_NS | MT_PRIVILEGED)
145*91f16700Schasinglulu 
146*91f16700Schasinglulu #define PLAT_LUA_UART1_PRIO             U(0x40)
147*91f16700Schasinglulu #define PLAT_LUA_UART1_IRQ              U(196)
148*91f16700Schasinglulu #define PLAT_LUA_UART1_BASE             0x0E403000
149*91f16700Schasinglulu #define PLAT_LUA_UART1_SIZE             ULL(0x1000)
150*91f16700Schasinglulu #define PLAT_LUA_UART1_MMAP             MAP_REGION_FLAT(PLAT_LUA_UART1_BASE,   \
151*91f16700Schasinglulu 											PLAT_LUA_UART1_SIZE,               \
152*91f16700Schasinglulu 											MT_DEVICE | MT_RW |                \
153*91f16700Schasinglulu 											MT_NS | MT_PRIVILEGED)
154*91f16700Schasinglulu 
155*91f16700Schasinglulu #ifdef LUA_UART0_CONSOLE
156*91f16700Schasinglulu #define PLAT_LUA_BOOT_UART_BASE         PLAT_LUA_UART0_BASE
157*91f16700Schasinglulu #define PLAT_LUA_BOOT_MMAP              PLAT_LUA_UART0_MMAP
158*91f16700Schasinglulu #else
159*91f16700Schasinglulu #define PLAT_LUA_BOOT_UART_BASE         PLAT_LUA_UART1_BASE
160*91f16700Schasinglulu #define PLAT_LUA_BOOT_MMAP              PLAT_LUA_UART1_MMAP
161*91f16700Schasinglulu #endif
162*91f16700Schasinglulu #define PLAT_LUA_BOOT_UART_CLK_IN_HZ    LUA_UART_CLK_IN_HZ
163*91f16700Schasinglulu #define PLAT_LUA_CONSOLE_BAUDRATE       LUA_UART_BAUDRATE
164*91f16700Schasinglulu 
165*91f16700Schasinglulu #define DEVICE_BASE            0x04000000
166*91f16700Schasinglulu #define DEVICE_SIZE            SZ_512M
167*91f16700Schasinglulu 
168*91f16700Schasinglulu #define CPU_SYSCTL_BASE             0x08010000
169*91f16700Schasinglulu #define CPU_SYSCTL_SIZE             0x1000
170*91f16700Schasinglulu #define CA55_CORE_SW_RST_OFFSET     0xE0
171*91f16700Schasinglulu 
172*91f16700Schasinglulu /*
173*91f16700Schasinglulu  * GIC related constants
174*91f16700Schasinglulu  */
175*91f16700Schasinglulu #define GICD_BASE               0x08001000
176*91f16700Schasinglulu #define GICD_SIZE               0x8000
177*91f16700Schasinglulu #define GICC_BASE               0x08002000
178*91f16700Schasinglulu 
179*91f16700Schasinglulu #define LUA_SDEI_SGI_PRIVATE    LUA_IRQ_SEC_SGI_0
180*91f16700Schasinglulu 
181*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_0       U(8)
182*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_1       U(9)
183*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_2       U(10)
184*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_3       U(11)
185*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_4       U(12)
186*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_5       U(13)
187*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_6       U(14)
188*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_7       U(15)
189*91f16700Schasinglulu 
190*91f16700Schasinglulu #define PLATFORM_G1S_PROPS(grp)                                     \
191*91f16700Schasinglulu 	INTR_PROP_DESC(LUA_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY,     \
192*91f16700Schasinglulu 					   grp, GIC_INTR_CFG_EDGE),                     \
193*91f16700Schasinglulu 	INTR_PROP_DESC(LUA_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY,     \
194*91f16700Schasinglulu 					   grp, GIC_INTR_CFG_EDGE),                     \
195*91f16700Schasinglulu 	INTR_PROP_DESC(LUA_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY,     \
196*91f16700Schasinglulu 					   grp, GIC_INTR_CFG_EDGE),                     \
197*91f16700Schasinglulu 	INTR_PROP_DESC(LUA_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY,     \
198*91f16700Schasinglulu 					   grp, GIC_INTR_CFG_EDGE),                     \
199*91f16700Schasinglulu 	INTR_PROP_DESC(LUA_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY,     \
200*91f16700Schasinglulu 					   grp, GIC_INTR_CFG_EDGE),                     \
201*91f16700Schasinglulu 	INTR_PROP_DESC(LUA_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY,     \
202*91f16700Schasinglulu 					   grp, GIC_INTR_CFG_EDGE),                     \
203*91f16700Schasinglulu 	INTR_PROP_DESC(LUA_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY,     \
204*91f16700Schasinglulu 					   grp, GIC_INTR_CFG_EDGE),                     \
205*91f16700Schasinglulu 	INTR_PROP_DESC(LUA_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY,     \
206*91f16700Schasinglulu 					   grp, GIC_INTR_CFG_EDGE)
207*91f16700Schasinglulu 
208*91f16700Schasinglulu #define PLATFORM_UART1_G0_PROPS(grp)                                \
209*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_UART1_IRQ, PLAT_LUA_UART1_PRIO,         \
210*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_LEVEL)
211*91f16700Schasinglulu 
212*91f16700Schasinglulu #define PLATFORM_RAS_G0_PROPS(grp)                                  \
213*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_DSU_ERRIRQ, PLAT_RAS_PRI,               \
214*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
215*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_DSU_FAULTIRQ, PLAT_RAS_PRI,             \
216*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
217*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_CPU0_ERRIRQ, PLAT_RAS_PRI,              \
218*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
219*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_CPU0_FAULTIRQ, PLAT_RAS_PRI,            \
220*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
221*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_CPU1_ERRIRQ, PLAT_RAS_PRI,              \
222*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
223*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_CPU1_FAULTIRQ, PLAT_RAS_PRI,            \
224*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
225*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_CPU2_ERRIRQ, PLAT_RAS_PRI,              \
226*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
227*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_CPU2_FAULTIRQ, PLAT_RAS_PRI,            \
228*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
229*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_CPU3_ERRIRQ, PLAT_RAS_PRI,              \
230*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE),                     \
231*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_LUA_CPU3_FAULTIRQ, PLAT_RAS_PRI,            \
232*91f16700Schasinglulu 	                   grp, GIC_INTR_CFG_EDGE)
233*91f16700Schasinglulu 
234*91f16700Schasinglulu #define PLAT_LUA_PRIMARY_CPU                  0x0
235*91f16700Schasinglulu #define PLAT_LUA_PRIMARY_CPU_SHIFT            8
236*91f16700Schasinglulu #define PLAT_LUA_PRIMARY_CPU_BIT_WIDTH        6
237*91f16700Schasinglulu 
238*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */
239