xref: /arm-trusted-firmware/plat/xilinx/versal/include/platform_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2018-2021, Arm Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  * Copyright (c) 2022-2023, Advanced Micro Devices, Inc. All rights reserved.
4*91f16700Schasinglulu  *
5*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef PLATFORM_DEF_H
9*91f16700Schasinglulu #define PLATFORM_DEF_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu #include <arch.h>
12*91f16700Schasinglulu #include "versal_def.h"
13*91f16700Schasinglulu 
14*91f16700Schasinglulu /*******************************************************************************
15*91f16700Schasinglulu  * Generic platform constants
16*91f16700Schasinglulu  ******************************************************************************/
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /* Size of cacheable stacks */
19*91f16700Schasinglulu #define PLATFORM_STACK_SIZE	U(0x440)
20*91f16700Schasinglulu 
21*91f16700Schasinglulu #define PLATFORM_CORE_COUNT		U(2)
22*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL		U(1)
23*91f16700Schasinglulu #define PLAT_MAX_RET_STATE		U(1)
24*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE		U(2)
25*91f16700Schasinglulu 
26*91f16700Schasinglulu /*******************************************************************************
27*91f16700Schasinglulu  * BL31 specific defines.
28*91f16700Schasinglulu  ******************************************************************************/
29*91f16700Schasinglulu /*
30*91f16700Schasinglulu  * Put BL31 at the top of the Trusted SRAM (just below the shared memory, if
31*91f16700Schasinglulu  * present). BL31_BASE is calculated using the current BL31 debug size plus a
32*91f16700Schasinglulu  * little space for growth.
33*91f16700Schasinglulu  */
34*91f16700Schasinglulu #ifndef VERSAL_ATF_MEM_BASE
35*91f16700Schasinglulu # define BL31_BASE			U(0xfffe0000)
36*91f16700Schasinglulu # define BL31_LIMIT			U(0x100000000)
37*91f16700Schasinglulu #else
38*91f16700Schasinglulu # define BL31_BASE			U(VERSAL_ATF_MEM_BASE)
39*91f16700Schasinglulu # define BL31_LIMIT			U(VERSAL_ATF_MEM_BASE + VERSAL_ATF_MEM_SIZE)
40*91f16700Schasinglulu # ifdef VERSAL_ATF_MEM_PROGBITS_SIZE
41*91f16700Schasinglulu #  define BL31_PROGBITS_LIMIT		U(VERSAL_ATF_MEM_BASE + VERSAL_ATF_MEM_PROGBITS_SIZE)
42*91f16700Schasinglulu # endif
43*91f16700Schasinglulu #endif
44*91f16700Schasinglulu 
45*91f16700Schasinglulu /*******************************************************************************
46*91f16700Schasinglulu  * BL32 specific defines.
47*91f16700Schasinglulu  ******************************************************************************/
48*91f16700Schasinglulu #ifndef VERSAL_BL32_MEM_BASE
49*91f16700Schasinglulu # define BL32_BASE			U(0x60000000)
50*91f16700Schasinglulu # define BL32_LIMIT			U(0x80000000)
51*91f16700Schasinglulu #else
52*91f16700Schasinglulu # define BL32_BASE			U(VERSAL_BL32_MEM_BASE)
53*91f16700Schasinglulu # define BL32_LIMIT			U(VERSAL_BL32_MEM_BASE + VERSAL_BL32_MEM_SIZE)
54*91f16700Schasinglulu #endif
55*91f16700Schasinglulu 
56*91f16700Schasinglulu /*******************************************************************************
57*91f16700Schasinglulu  * BL33 specific defines.
58*91f16700Schasinglulu  ******************************************************************************/
59*91f16700Schasinglulu #ifndef PRELOADED_BL33_BASE
60*91f16700Schasinglulu # define PLAT_ARM_NS_IMAGE_BASE		U(0x8000000)
61*91f16700Schasinglulu #else
62*91f16700Schasinglulu # define PLAT_ARM_NS_IMAGE_BASE		U(PRELOADED_BL33_BASE)
63*91f16700Schasinglulu #endif
64*91f16700Schasinglulu 
65*91f16700Schasinglulu /*******************************************************************************
66*91f16700Schasinglulu  * TSP  specific defines.
67*91f16700Schasinglulu  ******************************************************************************/
68*91f16700Schasinglulu #define TSP_SEC_MEM_BASE		BL32_BASE
69*91f16700Schasinglulu #define TSP_SEC_MEM_SIZE		(BL32_LIMIT - BL32_BASE)
70*91f16700Schasinglulu 
71*91f16700Schasinglulu /* ID of the secure physical generic timer interrupt used by the TSP */
72*91f16700Schasinglulu #define TSP_IRQ_SEC_PHY_TIMER		ARM_IRQ_SEC_PHY_TIMER
73*91f16700Schasinglulu 
74*91f16700Schasinglulu /*******************************************************************************
75*91f16700Schasinglulu  * Platform specific page table and MMU setup constants
76*91f16700Schasinglulu  ******************************************************************************/
77*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE	(1ull << 32)
78*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ull << 32)
79*91f16700Schasinglulu 
80*91f16700Schasinglulu #define XILINX_OF_BOARD_DTB_MAX_SIZE	U(0x200000)
81*91f16700Schasinglulu 
82*91f16700Schasinglulu #define PLAT_OCM_BASE			U(0xFFFE0000)
83*91f16700Schasinglulu #define PLAT_OCM_LIMIT			U(0xFFFFFFFF)
84*91f16700Schasinglulu 
85*91f16700Schasinglulu #define IS_TFA_IN_OCM(x)	((x >= PLAT_OCM_BASE) && (x < PLAT_OCM_LIMIT))
86*91f16700Schasinglulu 
87*91f16700Schasinglulu #ifndef MAX_MMAP_REGIONS
88*91f16700Schasinglulu #if (defined(XILINX_OF_BOARD_DTB_ADDR) && !IS_TFA_IN_OCM(BL31_BASE))
89*91f16700Schasinglulu #define MAX_MMAP_REGIONS		9
90*91f16700Schasinglulu #else
91*91f16700Schasinglulu #define MAX_MMAP_REGIONS		8
92*91f16700Schasinglulu #endif
93*91f16700Schasinglulu #endif
94*91f16700Schasinglulu 
95*91f16700Schasinglulu #ifndef MAX_XLAT_TABLES
96*91f16700Schasinglulu #if !IS_TFA_IN_OCM(BL31_BASE)
97*91f16700Schasinglulu #define MAX_XLAT_TABLES		9
98*91f16700Schasinglulu #else
99*91f16700Schasinglulu #define MAX_XLAT_TABLES		5
100*91f16700Schasinglulu #endif
101*91f16700Schasinglulu #endif
102*91f16700Schasinglulu 
103*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT	6
104*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE	(1 << CACHE_WRITEBACK_SHIFT)
105*91f16700Schasinglulu 
106*91f16700Schasinglulu #define PLAT_GICD_BASE_VALUE	U(0xF9000000)
107*91f16700Schasinglulu #define PLAT_GICR_BASE_VALUE	U(0xF9080000)
108*91f16700Schasinglulu 
109*91f16700Schasinglulu /*
110*91f16700Schasinglulu  * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
111*91f16700Schasinglulu  * terminology. On a GICv2 system or mode, the lists will be merged and treated
112*91f16700Schasinglulu  * as Group 0 interrupts.
113*91f16700Schasinglulu  */
114*91f16700Schasinglulu #define PLAT_VERSAL_G1S_IRQS	VERSAL_IRQ_SEC_PHY_TIMER
115*91f16700Schasinglulu #define PLAT_VERSAL_G0_IRQS	VERSAL_IRQ_SEC_PHY_TIMER
116*91f16700Schasinglulu #define PLAT_VERSAL_IPI_IRQ	U(62)
117*91f16700Schasinglulu 
118*91f16700Schasinglulu #define PLAT_VERSAL_G1S_IRQ_PROPS(grp) \
119*91f16700Schasinglulu 	INTR_PROP_DESC(VERSAL_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, grp, \
120*91f16700Schasinglulu 			GIC_INTR_CFG_LEVEL)
121*91f16700Schasinglulu 
122*91f16700Schasinglulu #define PLAT_VERSAL_G0_IRQ_PROPS(grp) \
123*91f16700Schasinglulu 	INTR_PROP_DESC(PLAT_VERSAL_IPI_IRQ, GIC_HIGHEST_SEC_PRIORITY, grp, \
124*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
125*91f16700Schasinglulu 
126*91f16700Schasinglulu #define IRQ_MAX		142U
127*91f16700Schasinglulu 
128*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */
129