xref: /rk3399_ARM-atf/plat/arm/board/fvp/include/platform_def.h (revision 988fd102e702782e1219b7d0e7fc3b00c7966169)
13fc4124cSDan Handley /*
2aeec55c8SAlexeiFedorov  * Copyright (c) 2014-2025, Arm Limited and Contributors. All rights reserved.
33fc4124cSDan Handley  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
53fc4124cSDan Handley  */
63fc4124cSDan Handley 
7f21c6321SAntonio Nino Diaz #ifndef PLATFORM_DEF_H
8f21c6321SAntonio Nino Diaz #define PLATFORM_DEF_H
93fc4124cSDan Handley 
1009d40e0eSAntonio Nino Diaz #include <drivers/arm/tzc400.h>
1109d40e0eSAntonio Nino Diaz #include <lib/utils_def.h>
12bd9344f6SAntonio Nino Diaz #include <plat/arm/board/common/v2m_def.h>
13bd9344f6SAntonio Nino Diaz #include <plat/arm/common/arm_def.h>
14bd9344f6SAntonio Nino Diaz #include <plat/arm/common/arm_spm_def.h>
1509d40e0eSAntonio Nino Diaz #include <plat/common/common_def.h>
1609d40e0eSAntonio Nino Diaz 
173fc4124cSDan Handley #include "../fvp_def.h"
183fc4124cSDan Handley 
19dbb9c1f5SGovindraj Raja #if TRUSTED_BOARD_BOOT
20dbb9c1f5SGovindraj Raja #include MBEDTLS_CONFIG_FILE
21dbb9c1f5SGovindraj Raja #endif
22dbb9c1f5SGovindraj Raja 
235f3a6030SSoby Mathew /* Required platform porting definitions */
245b33ad17SDeepika Bhavnani #define PLATFORM_CORE_COUNT  (U(FVP_CLUSTER_COUNT) * \
255b33ad17SDeepika Bhavnani 			      U(FVP_MAX_CPUS_PER_CLUSTER) * \
265b33ad17SDeepika Bhavnani 			      U(FVP_MAX_PE_PER_CPU))
2711ad8f20SJeenu Viswambharan 
285b33ad17SDeepika Bhavnani #define PLAT_NUM_PWR_DOMAINS (U(FVP_CLUSTER_COUNT) + \
295b33ad17SDeepika Bhavnani 			      PLATFORM_CORE_COUNT + U(1))
3011ad8f20SJeenu Viswambharan 
31e35a3fb5SSoby Mathew #define PLAT_MAX_PWR_LVL		ARM_PWR_LVL2
323fc4124cSDan Handley 
33e75cc247SWing Li #if PSCI_OS_INIT_MODE
34e75cc247SWing Li #define PLAT_MAX_CPU_SUSPEND_PWR_LVL	ARM_PWR_LVL1
35e75cc247SWing Li #endif
36e75cc247SWing Li 
373fc4124cSDan Handley /*
385f3a6030SSoby Mathew  * Other platform porting definitions are provided by included headers
393fc4124cSDan Handley  */
403fc4124cSDan Handley 
413fc4124cSDan Handley /*
423fc4124cSDan Handley  * Required ARM standard platform porting definitions
433fc4124cSDan Handley  */
445b33ad17SDeepika Bhavnani #define PLAT_ARM_CLUSTER_COUNT		U(FVP_CLUSTER_COUNT)
453fc4124cSDan Handley 
4641e56f42SChris Kay #define PLAT_ARM_TRUSTED_SRAM_SIZE	(FVP_TRUSTED_SRAM_SIZE * UL(1024))
470f58d4f2SAntonio Nino Diaz 
48f21c6321SAntonio Nino Diaz #define PLAT_ARM_TRUSTED_ROM_BASE	UL(0x00000000)
49f21c6321SAntonio Nino Diaz #define PLAT_ARM_TRUSTED_ROM_SIZE	UL(0x04000000)	/* 64 MB */
503fc4124cSDan Handley 
51f21c6321SAntonio Nino Diaz #define PLAT_ARM_TRUSTED_DRAM_BASE	UL(0x06000000)
52f21c6321SAntonio Nino Diaz #define PLAT_ARM_TRUSTED_DRAM_SIZE	UL(0x02000000)	/* 32 MB */
533fc4124cSDan Handley 
54c8720729SZelalem Aweke #if ENABLE_RME
55c8720729SZelalem Aweke #define PLAT_ARM_RMM_BASE		(RMM_BASE)
56c8720729SZelalem Aweke #define PLAT_ARM_RMM_SIZE		(RMM_LIMIT - RMM_BASE)
57ac07f3abSAlexeiFedorov 
58dbda614cSManish V Badarkhe #define PLAT_ARM_RMM_PAYLOAD_SIZE	UL(0x600000)	/* 2 * 3MB */
59745c129aSAndre Przywara 
60ac07f3abSAlexeiFedorov /* Protected physical address size */
61aeec55c8SAlexeiFedorov #define PLAT_ARM_PPS			(SZ_1T)
62b0f1c840SAlexeiFedorov #endif /* ENABLE_RME */
63c8720729SZelalem Aweke 
64d32113c7SArunachalam Ganapathy /*
651cc02945SYeoreum Yun  * Max size of SPMC is 16MB for fvp. With SPMD enabled this value corresponds to
66d32113c7SArunachalam Ganapathy  * max size of BL32 image.
67d32113c7SArunachalam Ganapathy  */
68d32113c7SArunachalam Ganapathy #if defined(SPD_spmd)
69d32113c7SArunachalam Ganapathy #define PLAT_ARM_SPMC_BASE		PLAT_ARM_TRUSTED_DRAM_BASE
701cc02945SYeoreum Yun #define PLAT_ARM_SPMC_SIZE		SZ_16M
71d32113c7SArunachalam Ganapathy #endif
72d32113c7SArunachalam Ganapathy 
73aeec55c8SAlexeiFedorov /* Virtual address used by dynamic mem_protect for chunk_base */
7489509904SSathees Balya #define PLAT_ARM_MEM_PROTEC_VA_FRAME	UL(0xc0000000)
75638b034cSRoberto Vargas 
763fc4124cSDan Handley /* No SCP in FVP */
77f21c6321SAntonio Nino Diaz #define PLAT_ARM_SCP_TZC_DRAM1_SIZE	UL(0x0)
783fc4124cSDan Handley 
79e8035421SFederico Recanati #define PLAT_ARM_DRAM2_BASE	ULL(0x880000000) /* 36-bit range */
80e8035421SFederico Recanati #define PLAT_ARM_DRAM2_SIZE	ULL(0x780000000) /* 30 GB */
81e8035421SFederico Recanati 
82e8035421SFederico Recanati #define FVP_DRAM3_BASE	ULL(0x8800000000) /* 40-bit range */
83e8035421SFederico Recanati #define FVP_DRAM3_SIZE	ULL(0x7800000000) /* 480 GB */
84e8035421SFederico Recanati #define FVP_DRAM3_END	(FVP_DRAM3_BASE + FVP_DRAM3_SIZE - 1U)
85e8035421SFederico Recanati 
86e8035421SFederico Recanati #define FVP_DRAM4_BASE	ULL(0x88000000000) /* 44-bit range */
87e8035421SFederico Recanati #define FVP_DRAM4_SIZE	ULL(0x78000000000) /* 7.5 TB */
88e8035421SFederico Recanati #define FVP_DRAM4_END	(FVP_DRAM4_BASE + FVP_DRAM4_SIZE - 1U)
89e8035421SFederico Recanati 
90e8035421SFederico Recanati #define FVP_DRAM5_BASE	ULL(0x880000000000) /* 48-bit range */
91e8035421SFederico Recanati #define FVP_DRAM5_SIZE	ULL(0x780000000000) /* 120 TB */
92e8035421SFederico Recanati #define FVP_DRAM5_END	(FVP_DRAM5_BASE + FVP_DRAM5_SIZE - 1U)
93e8035421SFederico Recanati 
94e8035421SFederico Recanati #define FVP_DRAM6_BASE	ULL(0x8800000000000) /* 52-bit range */
95e8035421SFederico Recanati #define FVP_DRAM6_SIZE	ULL(0x7800000000000) /* 1920 TB */
96e8035421SFederico Recanati #define FVP_DRAM6_END	(FVP_DRAM6_BASE + FVP_DRAM6_SIZE - 1U)
973fc4124cSDan Handley 
98ba33528aSShruti Gupta /*
99ba33528aSShruti Gupta  * On the FVP platform when using the EL3 SPMC implementation allocate the
100ba33528aSShruti Gupta  * datastore for tracking shared memory descriptors in the TZC DRAM section
101ba33528aSShruti Gupta  * to ensure sufficient storage can be allocated.
102ba33528aSShruti Gupta  * Provide an implementation of the accessor method to allow the datastore
103ba33528aSShruti Gupta  * details to be retrieved by the SPMC.
104ba33528aSShruti Gupta  * The SPMC will take care of initializing the memory region.
105ba33528aSShruti Gupta  */
106ba33528aSShruti Gupta 
107ba33528aSShruti Gupta #define PLAT_SPMC_SHMEM_DATASTORE_SIZE 512 * 1024
108ba33528aSShruti Gupta 
109df960bccSHarrison Mutai /* Define memory configuration for device tree files. */
110b9ecf645SHarrison Mutai #define PLAT_ARM_HW_CONFIG_SIZE			U(0x4000)
111df960bccSHarrison Mutai 
11244639ab7SMarc Bonnici #if SPMC_AT_EL3
113bc3014a8SYeoreum Yun 
11444639ab7SMarc Bonnici /*
11544639ab7SMarc Bonnici  * Number of Secure Partitions supported.
11644639ab7SMarc Bonnici  * SPMC at EL3, uses this count to configure the maximum number of supported
11744639ab7SMarc Bonnici  * secure partitions.
11844639ab7SMarc Bonnici  */
11944639ab7SMarc Bonnici #define SECURE_PARTITION_COUNT		1
12044639ab7SMarc Bonnici 
12144639ab7SMarc Bonnici /*
12244639ab7SMarc Bonnici  * Number of Normal World Partitions supported.
12344639ab7SMarc Bonnici  * SPMC at EL3, uses this count to configure the maximum number of supported
12444639ab7SMarc Bonnici  * NWd partitions.
12544639ab7SMarc Bonnici  */
12644639ab7SMarc Bonnici #define NS_PARTITION_COUNT		1
12744639ab7SMarc Bonnici 
12844639ab7SMarc Bonnici /*
12944639ab7SMarc Bonnici  * Number of Logical Partitions supported.
13044639ab7SMarc Bonnici  * SPMC at EL3, uses this count to configure the maximum number of supported
13144639ab7SMarc Bonnici  * logical partitions.
13244639ab7SMarc Bonnici  */
13344639ab7SMarc Bonnici #define MAX_EL3_LP_DESCS_COUNT		1
13444639ab7SMarc Bonnici 
13544639ab7SMarc Bonnici #endif /* SPMC_AT_EL3 */
13644639ab7SMarc Bonnici 
1373fc4124cSDan Handley /*
138d178637dSJuan Castillo  * Load address of BL33 for this platform port
1393fc4124cSDan Handley  */
140ece6fd2dSSandrine Bailleux #define PLAT_ARM_NS_IMAGE_BASE		(ARM_DRAM1_BASE + UL(0x8000000))
1413fc4124cSDan Handley 
14294c90ac8SHarrison Mutai #if TRANSFER_LIST
1433c90095dSYeoreum Yun 
1443c90095dSYeoreum Yun /* Define maximum size of sp manifest file. */
1453c90095dSYeoreum Yun #if defined(SPD_spmd)
1463c90095dSYeoreum Yun #define PLAT_ARM_SPMC_SP_MANIFEST_SIZE	SZ_4K
147bc3014a8SYeoreum Yun #else
1483c90095dSYeoreum Yun #define PLAT_ARM_SPMC_SP_MANIFEST_SIZE	UL(0x0)
149bc3014a8SYeoreum Yun #endif
150a5566f65SHarrison Mutai 
1513c90095dSYeoreum Yun /*
1523c90095dSYeoreum Yun  * PLAT_ARM_FW_HANDOFF_SIZE should be page-aligned to ensure proper xlat mapping.
1533c90095dSYeoreum Yun  * If it is not, generating the page table mapping for FW_HANDOFF will fail.
1543c90095dSYeoreum Yun  * Because PLAT_ARM_EVENT_LOG_MAX_SIZE is not guaranteed to be aligned,
1553c90095dSYeoreum Yun  * PLAT_ARM_FW_HANDOFF_SIZE must be explicitly aligned.
1563c90095dSYeoreum Yun  */
1573c90095dSYeoreum Yun #define PLAT_ARM_FW_HANDOFF_SIZE	((((PLAT_ARM_HW_CONFIG_SIZE +		\
1583c90095dSYeoreum Yun 					    PLAT_ARM_EVENT_LOG_MAX_SIZE +	\
1593c90095dSYeoreum Yun 					    PLAT_ARM_SPMC_SP_MANIFEST_SIZE) +	\
1603c90095dSYeoreum Yun 					    PAGE_SIZE_MASK) >>			\
1613c90095dSYeoreum Yun 					    PAGE_SIZE_SHIFT) << PAGE_SIZE_SHIFT)
1623c90095dSYeoreum Yun 
163a5566f65SHarrison Mutai #define FW_NS_HANDOFF_BASE		(PLAT_ARM_NS_IMAGE_BASE - PLAT_ARM_FW_HANDOFF_SIZE)
164a5566f65SHarrison Mutai #define PLAT_ARM_EL3_FW_HANDOFF_BASE	ARM_BL_RAM_BASE
165a5566f65SHarrison Mutai #define PLAT_ARM_EL3_FW_HANDOFF_LIMIT	PLAT_ARM_EL3_FW_HANDOFF_BASE + PLAT_ARM_FW_HANDOFF_SIZE
166a5566f65SHarrison Mutai 
1672329e22bSHarrison Mutai #if RESET_TO_BL31
1682329e22bSHarrison Mutai #define PLAT_ARM_TRANSFER_LIST_DTB_OFFSET	FW_NS_HANDOFF_BASE + TRANSFER_LIST_DTB_OFFSET
1692329e22bSHarrison Mutai #endif
1702329e22bSHarrison Mutai 
171a5566f65SHarrison Mutai #else
172a5566f65SHarrison Mutai #define PLAT_ARM_FW_HANDOFF_SIZE	U(0)
17394c90ac8SHarrison Mutai #endif
17494c90ac8SHarrison Mutai 
175c0740e4fSAntonio Nino Diaz /*
176c0740e4fSAntonio Nino Diaz  * PLAT_ARM_MMAP_ENTRIES depends on the number of entries in the
177c0740e4fSAntonio Nino Diaz  * plat_arm_mmap array defined for each BL stage.
178c0740e4fSAntonio Nino Diaz  */
179c0740e4fSAntonio Nino Diaz #if defined(IMAGE_BL31)
180538b0020SPaul Beesley # if SPM_MM
18126d1e0c3SMadhukar Pappireddy #  define PLAT_ARM_MMAP_ENTRIES		10
182680389a6SAntonio Nino Diaz #  define MAX_XLAT_TABLES		9
183680389a6SAntonio Nino Diaz #  define PLAT_SP_IMAGE_MMAP_REGIONS	30
18485694560SYeoreum Yun #  define PLAT_SP_IMAGE_MAX_XLAT_TABLES	12
18544639ab7SMarc Bonnici # elif SPMC_AT_EL3
18644639ab7SMarc Bonnici #  define PLAT_ARM_MMAP_ENTRIES		13
18744639ab7SMarc Bonnici #  define MAX_XLAT_TABLES		11
188b1f527abSYeoreum Yun #  define PLAT_SP_IMAGE_MMAP_REGIONS	31
1893d35b101SYeoreum Yun #  define PLAT_SP_IMAGE_MAX_XLAT_TABLES	13
190c0740e4fSAntonio Nino Diaz # else
19126d1e0c3SMadhukar Pappireddy #  define PLAT_ARM_MMAP_ENTRIES		9
192992f091bSAmbroise Vincent #  if USE_DEBUGFS
193c8720729SZelalem Aweke #   if ENABLE_RME
194dc65ae46SJavier Almansa Sobrino #    define MAX_XLAT_TABLES		9
195c8720729SZelalem Aweke #   else
196c8720729SZelalem Aweke #    define MAX_XLAT_TABLES		8
197c8720729SZelalem Aweke #   endif
198c8720729SZelalem Aweke #  else
199c8720729SZelalem Aweke #   if ENABLE_RME
200dc65ae46SJavier Almansa Sobrino #    define MAX_XLAT_TABLES		8
2018a8dace5SManish V Badarkhe #   elif DRTM_SUPPORT
2028a8dace5SManish V Badarkhe #    define MAX_XLAT_TABLES		8
203992f091bSAmbroise Vincent #   else
204493545b3SMadhukar Pappireddy #    define MAX_XLAT_TABLES		7
205c0740e4fSAntonio Nino Diaz #   endif
206992f091bSAmbroise Vincent #  endif
207c8720729SZelalem Aweke # endif
208c0740e4fSAntonio Nino Diaz #elif defined(IMAGE_BL32)
20944639ab7SMarc Bonnici # if SPMC_AT_EL3
21044639ab7SMarc Bonnici #  define PLAT_ARM_MMAP_ENTRIES		270
21144639ab7SMarc Bonnici #  define MAX_XLAT_TABLES		10
21244639ab7SMarc Bonnici # else
21326d1e0c3SMadhukar Pappireddy #  define PLAT_ARM_MMAP_ENTRIES		9
214493545b3SMadhukar Pappireddy #  define MAX_XLAT_TABLES		6
21544639ab7SMarc Bonnici # endif
216c0740e4fSAntonio Nino Diaz #elif !USE_ROMLIB
21725688b87SYeoreum Yun # if defined(IMAGE_BL2) && (ENABLE_RME || SPMC_AT_EL3)
21812fe591bSManish V Badarkhe #  define PLAT_ARM_MMAP_ENTRIES		12
21912fe591bSManish V Badarkhe #  define MAX_XLAT_TABLES		6
220c0740e4fSAntonio Nino Diaz # else
22124f78301SHarrison Mutai #  define PLAT_ARM_MMAP_ENTRIES		12
22203cf4e9aSManish V Badarkhe #  define MAX_XLAT_TABLES		5
22303cf4e9aSManish V Badarkhe # endif /* (IMAGE_BL2 && ENABLE_RME) */
22403cf4e9aSManish V Badarkhe #else
225c0740e4fSAntonio Nino Diaz # define PLAT_ARM_MMAP_ENTRIES		12
2266b2e961fSManish V Badarkhe # if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \
2276b2e961fSManish V Badarkhe defined(IMAGE_BL2) && MEASURED_BOOT
2286b2e961fSManish V Badarkhe #  define MAX_XLAT_TABLES		7
2296b2e961fSManish V Badarkhe # else
230c0740e4fSAntonio Nino Diaz #  define MAX_XLAT_TABLES		6
2316b2e961fSManish V Badarkhe # endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && IMAGE_BL2 && MEASURED_BOOT */
232c0740e4fSAntonio Nino Diaz #endif
233c0740e4fSAntonio Nino Diaz 
234c0740e4fSAntonio Nino Diaz /*
235c0740e4fSAntonio Nino Diaz  * PLAT_ARM_MAX_BL1_RW_SIZE is calculated using the current BL1 RW debug size
236c0740e4fSAntonio Nino Diaz  * plus a little space for growth.
237ce189383SManish V Badarkhe  * In case of PSA Crypto API, few algorithms like ECDSA needs bigger BL1 RW
238ce189383SManish V Badarkhe  * area.
239c0740e4fSAntonio Nino Diaz  */
2408416e791SLevi Yun #if TF_MBEDTLS_KEY_ALG_ID == TF_MBEDTLS_RSA_AND_ECDSA || PSA_CRYPTO || \
2418416e791SLevi Yun FVP_TRUSTED_SRAM_SIZE == 512
24251bdb70fSLauren Wehrmeister #define PLAT_ARM_MAX_BL1_RW_SIZE	UL(0xD000)
243dbb9c1f5SGovindraj Raja #else
244f21c6321SAntonio Nino Diaz #define PLAT_ARM_MAX_BL1_RW_SIZE	UL(0xB000)
245dbb9c1f5SGovindraj Raja #endif
246c0740e4fSAntonio Nino Diaz 
247c0740e4fSAntonio Nino Diaz /*
248c0740e4fSAntonio Nino Diaz  * PLAT_ARM_MAX_ROMLIB_RW_SIZE is define to use a full page
249c0740e4fSAntonio Nino Diaz  */
250c0740e4fSAntonio Nino Diaz 
251c0740e4fSAntonio Nino Diaz #if USE_ROMLIB
252f21c6321SAntonio Nino Diaz #define PLAT_ARM_MAX_ROMLIB_RW_SIZE	UL(0x1000)
253f21c6321SAntonio Nino Diaz #define PLAT_ARM_MAX_ROMLIB_RO_SIZE	UL(0xe000)
254ef1daa42SManish V Badarkhe #define FVP_BL2_ROMLIB_OPTIMIZATION	UL(0x5000)
255c0740e4fSAntonio Nino Diaz #else
256f21c6321SAntonio Nino Diaz #define PLAT_ARM_MAX_ROMLIB_RW_SIZE	UL(0)
257f21c6321SAntonio Nino Diaz #define PLAT_ARM_MAX_ROMLIB_RO_SIZE	UL(0)
258e7b39089SLouis Mayencourt #define FVP_BL2_ROMLIB_OPTIMIZATION UL(0)
259c0740e4fSAntonio Nino Diaz #endif
260c0740e4fSAntonio Nino Diaz 
261c0740e4fSAntonio Nino Diaz /*
262965aaceaSManish V Badarkhe  * Set the maximum size of BL2 to be close to half of the Trusted SRAM.
263965aaceaSManish V Badarkhe  * Maximum size of BL2 increases as Trusted SRAM size increases.
264c0740e4fSAntonio Nino Diaz  */
265*27bff0b9SManish V Badarkhe #if (defined(TF_MBEDTLS_KEY_ALG_ID) && \
266*27bff0b9SManish V Badarkhe      (TF_MBEDTLS_KEY_ALG_ID == TF_MBEDTLS_RSA_AND_ECDSA)) || \
267*27bff0b9SManish V Badarkhe     (TRUSTED_BOARD_BOOT && COT_DESC_IN_DTB)
268965aaceaSManish V Badarkhe # define PLAT_ARM_MAX_BL2_SIZE	((PLAT_ARM_TRUSTED_SRAM_SIZE / 2) - \
269965aaceaSManish V Badarkhe 				 (2 * PAGE_SIZE) - \
270965aaceaSManish V Badarkhe 				 FVP_BL2_ROMLIB_OPTIMIZATION)
271*27bff0b9SManish V Badarkhe #elif TRUSTED_BOARD_BOOT || MEASURED_BOOT
272965aaceaSManish V Badarkhe # define PLAT_ARM_MAX_BL2_SIZE	((PLAT_ARM_TRUSTED_SRAM_SIZE / 2) - \
273965aaceaSManish V Badarkhe 				 (3 * PAGE_SIZE) - \
274965aaceaSManish V Badarkhe 				 FVP_BL2_ROMLIB_OPTIMIZATION)
27525514123Slaurenw-arm #elif ARM_BL31_IN_DRAM
27625514123Slaurenw-arm /* When ARM_BL31_IN_DRAM is set, BL2 can use almost all of Trusted SRAM. */
27725514123Slaurenw-arm # define PLAT_ARM_MAX_BL2_SIZE	(UL(0x1F000) - FVP_BL2_ROMLIB_OPTIMIZATION)
278c0740e4fSAntonio Nino Diaz #else
279e0e03a8dSHarrison Mutai /**
280e0e03a8dSHarrison Mutai  * Default to just under half of SRAM to ensure there's enough room for really
281e0e03a8dSHarrison Mutai  * large BL31 build configurations when using the default SRAM size (256 Kb).
282e0e03a8dSHarrison Mutai  */
283e0e03a8dSHarrison Mutai #define PLAT_ARM_MAX_BL2_SIZE                                               \
284e0e03a8dSHarrison Mutai 	(((PLAT_ARM_TRUSTED_SRAM_SIZE / 3) & ~PAGE_SIZE_MASK) - PAGE_SIZE - \
285e0e03a8dSHarrison Mutai 	 FVP_BL2_ROMLIB_OPTIMIZATION)
286c0740e4fSAntonio Nino Diaz #endif
287c0740e4fSAntonio Nino Diaz 
2886227cca9SAlexei Fedorov #if RESET_TO_BL31
289c8720729SZelalem Aweke /* Size of Trusted SRAM - the first 4KB of shared memory - GPT L0 Tables */
2906227cca9SAlexei Fedorov #define PLAT_ARM_MAX_BL31_SIZE		(PLAT_ARM_TRUSTED_SRAM_SIZE - \
291c8720729SZelalem Aweke 					 ARM_SHARED_RAM_SIZE - \
292c8720729SZelalem Aweke 					 ARM_L0_GPT_SIZE)
2936227cca9SAlexei Fedorov #else
294c0740e4fSAntonio Nino Diaz /*
295c0740e4fSAntonio Nino Diaz  * Since BL31 NOBITS overlays BL2 and BL1-RW, PLAT_ARM_MAX_BL31_SIZE is
296c0740e4fSAntonio Nino Diaz  * calculated using the current BL31 PROGBITS debug size plus the sizes of
29724e224b4SManish V Badarkhe  * BL2 and BL1-RW.
29824e224b4SManish V Badarkhe  * Size of the BL31 PROGBITS increases as the SRAM size increases.
299c0740e4fSAntonio Nino Diaz  */
300a5566f65SHarrison Mutai #if TRANSFER_LIST
301a5566f65SHarrison Mutai #define PLAT_ARM_MAX_BL31_SIZE                              \
302a5566f65SHarrison Mutai 	(PLAT_ARM_TRUSTED_SRAM_SIZE - ARM_SHARED_RAM_SIZE - \
303a5566f65SHarrison Mutai 	 PLAT_ARM_FW_HANDOFF_SIZE - ARM_L0_GPT_SIZE)
304a5566f65SHarrison Mutai #else
30524e224b4SManish V Badarkhe #define PLAT_ARM_MAX_BL31_SIZE		(PLAT_ARM_TRUSTED_SRAM_SIZE - \
30624e224b4SManish V Badarkhe 					 ARM_SHARED_RAM_SIZE - \
30724e224b4SManish V Badarkhe 					 ARM_FW_CONFIGS_SIZE - ARM_L0_GPT_SIZE)
308a5566f65SHarrison Mutai #endif /* TRANSFER_LIST */
3096227cca9SAlexei Fedorov #endif /* RESET_TO_BL31 */
310c0740e4fSAntonio Nino Diaz 
311402b3cf8SJulius Werner #ifndef __aarch64__
3127285fd5fSManish Pandey #if RESET_TO_SP_MIN
3137285fd5fSManish Pandey /* Size of Trusted SRAM - the first 4KB of shared memory */
3147285fd5fSManish Pandey #define PLAT_ARM_MAX_BL32_SIZE		(PLAT_ARM_TRUSTED_SRAM_SIZE - \
3157285fd5fSManish Pandey 					 ARM_SHARED_RAM_SIZE)
3167285fd5fSManish Pandey #else
317c0740e4fSAntonio Nino Diaz /*
318c0740e4fSAntonio Nino Diaz  * Since BL32 NOBITS overlays BL2 and BL1-RW, PLAT_ARM_MAX_BL32_SIZE is
319c0740e4fSAntonio Nino Diaz  * calculated using the current SP_MIN PROGBITS debug size plus the sizes of
320c0740e4fSAntonio Nino Diaz  * BL2 and BL1-RW
321c0740e4fSAntonio Nino Diaz  */
3222ab298b5SHarrison Mutai #if TRANSFER_LIST
3232ab298b5SHarrison Mutai # define PLAT_ARM_MAX_BL32_SIZE		(PLAT_ARM_TRUSTED_SRAM_SIZE - \
3242ab298b5SHarrison Mutai 					 ARM_SHARED_RAM_SIZE - \
3252ab298b5SHarrison Mutai 					 PLAT_ARM_FW_HANDOFF_SIZE)
3262ab298b5SHarrison Mutai #else
3273b5eca9eSRyan Everett # define PLAT_ARM_MAX_BL32_SIZE		(PLAT_ARM_TRUSTED_SRAM_SIZE - \
3283b5eca9eSRyan Everett 					 ARM_SHARED_RAM_SIZE - \
3293b5eca9eSRyan Everett 					 ARM_FW_CONFIGS_SIZE)
3302ab298b5SHarrison Mutai #endif /* TRANSFER_LIST */
3317285fd5fSManish Pandey #endif /* RESET_TO_SP_MIN */
332c0740e4fSAntonio Nino Diaz #endif
3333fc4124cSDan Handley 
3343fc4124cSDan Handley /*
3350f58d4f2SAntonio Nino Diaz  * Size of cacheable stacks
3360f58d4f2SAntonio Nino Diaz  */
3370f58d4f2SAntonio Nino Diaz #if defined(IMAGE_BL1)
33888c51c3fSManish V Badarkhe # if CRYPTO_SUPPORT
339f21c6321SAntonio Nino Diaz #  define PLATFORM_STACK_SIZE		UL(0x1000)
3400f58d4f2SAntonio Nino Diaz # else
34164271c74SLouis Mayencourt #  define PLATFORM_STACK_SIZE		UL(0x500)
34288c51c3fSManish V Badarkhe # endif /* CRYPTO_SUPPORT */
3430f58d4f2SAntonio Nino Diaz #elif defined(IMAGE_BL2)
34488c51c3fSManish V Badarkhe # if CRYPTO_SUPPORT
345f21c6321SAntonio Nino Diaz #  define PLATFORM_STACK_SIZE		UL(0x1000)
3460f58d4f2SAntonio Nino Diaz # else
347d22f1d35SSoby Mathew #  define PLATFORM_STACK_SIZE		UL(0x600)
34888c51c3fSManish V Badarkhe # endif /* CRYPTO_SUPPORT */
3490f58d4f2SAntonio Nino Diaz #elif defined(IMAGE_BL2U)
350f21c6321SAntonio Nino Diaz # define PLATFORM_STACK_SIZE		UL(0x400)
3510f58d4f2SAntonio Nino Diaz #elif defined(IMAGE_BL31)
35244df105fSLucian Paul-Trifu # if DRTM_SUPPORT
35344df105fSLucian Paul-Trifu #  define PLATFORM_STACK_SIZE		UL(0x1000)
35444df105fSLucian Paul-Trifu # else
355f21c6321SAntonio Nino Diaz #  define PLATFORM_STACK_SIZE		UL(0x800)
35644df105fSLucian Paul-Trifu # endif /* DRTM_SUPPORT */
3570f58d4f2SAntonio Nino Diaz #elif defined(IMAGE_BL32)
3585b7bd2afSShruti Gupta # if SPMC_AT_EL3
3595b7bd2afSShruti Gupta #  define PLATFORM_STACK_SIZE		UL(0x1000)
3605b7bd2afSShruti Gupta # else
361f21c6321SAntonio Nino Diaz #  define PLATFORM_STACK_SIZE		UL(0x440)
3625b7bd2afSShruti Gupta # endif /* SPMC_AT_EL3 */
3639d870b79SZelalem Aweke #elif defined(IMAGE_RMM)
3649d870b79SZelalem Aweke # define PLATFORM_STACK_SIZE		UL(0x440)
3650f58d4f2SAntonio Nino Diaz #endif
3660f58d4f2SAntonio Nino Diaz 
3670f58d4f2SAntonio Nino Diaz #define MAX_IO_DEVICES			3
3680f58d4f2SAntonio Nino Diaz #define MAX_IO_HANDLES			4
3690f58d4f2SAntonio Nino Diaz 
3700f58d4f2SAntonio Nino Diaz /* Reserve the last block of flash for PSCI MEM PROTECT flag */
37149e9ac28SManish V Badarkhe #define PLAT_ARM_FLASH_IMAGE_BASE	V2M_FLASH0_BASE
37249e9ac28SManish V Badarkhe #define PLAT_ARM_FLASH_IMAGE_MAX_SIZE	(V2M_FLASH0_SIZE - V2M_FLASH_BLOCK_SIZE)
3730f58d4f2SAntonio Nino Diaz 
37427f0b734SManish V Badarkhe #if ARM_GPT_SUPPORT && IMAGE_BL1
375ef1daa42SManish V Badarkhe /*
376ef1daa42SManish V Badarkhe  * Offset of the FIP in the GPT image. BL1 component uses this option
377ef1daa42SManish V Badarkhe  * as it does not load the partition table to get the FIP base
378ef1daa42SManish V Badarkhe  * address. At sector 34 by default (i.e. after reserved sectors 0-33)
379ef1daa42SManish V Badarkhe  * Offset = 34 * 512(sector size) = 17408 i.e. 0x4400
380ef1daa42SManish V Badarkhe  */
381ef1daa42SManish V Badarkhe #define PLAT_ARM_FIP_OFFSET_IN_GPT	0x4400
382ef1daa42SManish V Badarkhe #endif /* ARM_GPT_SUPPORT */
383ef1daa42SManish V Badarkhe 
3840f58d4f2SAntonio Nino Diaz #define PLAT_ARM_NVM_BASE		V2M_FLASH0_BASE
3850f58d4f2SAntonio Nino Diaz #define PLAT_ARM_NVM_SIZE		(V2M_FLASH0_SIZE - V2M_FLASH_BLOCK_SIZE)
3860f58d4f2SAntonio Nino Diaz 
3870f58d4f2SAntonio Nino Diaz /*
3883fc4124cSDan Handley  * PL011 related constants
3893fc4124cSDan Handley  */
3903fc4124cSDan Handley #define PLAT_ARM_BOOT_UART_BASE		V2M_IOFPGA_UART0_BASE
3913fc4124cSDan Handley #define PLAT_ARM_BOOT_UART_CLK_IN_HZ	V2M_IOFPGA_UART0_CLK_IN_HZ
3923fc4124cSDan Handley 
3930d28096cSUsama Arif #define PLAT_ARM_RUN_UART_BASE		V2M_IOFPGA_UART1_BASE
3940d28096cSUsama Arif #define PLAT_ARM_RUN_UART_CLK_IN_HZ	V2M_IOFPGA_UART1_CLK_IN_HZ
395080225daSSoby Mathew 
3960d28096cSUsama Arif #define PLAT_ARM_CRASH_UART_BASE	PLAT_ARM_RUN_UART_BASE
3970d28096cSUsama Arif #define PLAT_ARM_CRASH_UART_CLK_IN_HZ	PLAT_ARM_RUN_UART_CLK_IN_HZ
3983fc4124cSDan Handley 
3993fc4124cSDan Handley #define PLAT_ARM_TSP_UART_BASE		V2M_IOFPGA_UART2_BASE
4003fc4124cSDan Handley #define PLAT_ARM_TSP_UART_CLK_IN_HZ	V2M_IOFPGA_UART2_CLK_IN_HZ
4013fc4124cSDan Handley 
40250a3056aSZelalem Aweke #define PLAT_ARM_TRP_UART_BASE		V2M_IOFPGA_UART3_BASE
40350a3056aSZelalem Aweke #define PLAT_ARM_TRP_UART_CLK_IN_HZ	V2M_IOFPGA_UART3_CLK_IN_HZ
40450a3056aSZelalem Aweke 
405f21c6321SAntonio Nino Diaz #define PLAT_FVP_SMMUV3_BASE		UL(0x2b400000)
40652a314afSOlivier Deprez #define PLAT_ARM_SMMUV3_ROOT_REG_OFFSET UL(0x20000)
407955242d8SJeenu Viswambharan 
4083fc4124cSDan Handley /* CCI related constants */
409f21c6321SAntonio Nino Diaz #define PLAT_FVP_CCI400_BASE		UL(0x2c090000)
410955242d8SJeenu Viswambharan #define PLAT_FVP_CCI400_CLUS0_SL_PORT	3
411955242d8SJeenu Viswambharan #define PLAT_FVP_CCI400_CLUS1_SL_PORT	4
412955242d8SJeenu Viswambharan 
413955242d8SJeenu Viswambharan /* CCI-500/CCI-550 on Base platform */
414f21c6321SAntonio Nino Diaz #define PLAT_FVP_CCI5XX_BASE		UL(0x2a000000)
415955242d8SJeenu Viswambharan #define PLAT_FVP_CCI5XX_CLUS0_SL_PORT	5
416955242d8SJeenu Viswambharan #define PLAT_FVP_CCI5XX_CLUS1_SL_PORT	6
4173fc4124cSDan Handley 
41871237876SSoby Mathew /* CCN related constants. Only CCN 502 is currently supported */
419f21c6321SAntonio Nino Diaz #define PLAT_ARM_CCN_BASE		UL(0x2e000000)
42071237876SSoby Mathew #define PLAT_ARM_CLUSTER_TO_CCN_ID_MAP	1, 5, 7, 11
42171237876SSoby Mathew 
4224b1439c5SVikram Kanigiri /* System timer related constants */
423583e0791SAntonio Nino Diaz #define PLAT_ARM_NSTIMER_FRAME_ID	U(1)
4244b1439c5SVikram Kanigiri 
425785fb92bSSoby Mathew /* Mailbox base address */
426785fb92bSSoby Mathew #define PLAT_ARM_TRUSTED_MAILBOX_BASE	ARM_TRUSTED_SRAM_BASE
427785fb92bSSoby Mathew 
428aeec55c8SAlexeiFedorov /* PCIe memory region 1 (Base Platform RevC only) */
429aeec55c8SAlexeiFedorov #define PLAT_ARM_PCI_MEM_1_BASE		(ULL(0x50000000))
430aeec55c8SAlexeiFedorov #define PLAT_ARM_PCI_MEM_1_SIZE		(SZ_256M) /* 256MB */
431aeec55c8SAlexeiFedorov 
432aeec55c8SAlexeiFedorov /*
433aeec55c8SAlexeiFedorov  * PCIe memory region 2 (Base Platform RevC only)
434aeec55c8SAlexeiFedorov  * The full size of the second PCI memory region is 256GB
435aeec55c8SAlexeiFedorov  * but for now we only allocate the L1 GPTs for the first 3GB.
436aeec55c8SAlexeiFedorov  */
437aeec55c8SAlexeiFedorov #define PLAT_ARM_PCI_MEM_2_BASE		(ULL(0x4000000000))
438aeec55c8SAlexeiFedorov #define	PLAT_ARM_PCI_MEM_2_SIZE		(3 * SZ_1G) /* 3GB */
439785fb92bSSoby Mathew 
4403fc4124cSDan Handley /* TrustZone controller related constants
4413fc4124cSDan Handley  *
4423fc4124cSDan Handley  * Currently only filters 0 and 2 are connected on Base FVP.
4433fc4124cSDan Handley  * Filter 0 : CPU clusters (no access to DRAM by default)
4443fc4124cSDan Handley  * Filter 1 : not connected
4453fc4124cSDan Handley  * Filter 2 : LCDs (access to VRAM allowed by default)
4463fc4124cSDan Handley  * Filter 3 : not connected
4473fc4124cSDan Handley  * Programming unconnected filters will have no effect at the
4483fc4124cSDan Handley  * moment. These filter could, however, be connected in future.
4493fc4124cSDan Handley  * So care should be taken not to configure the unused filters.
4503fc4124cSDan Handley  *
4513fc4124cSDan Handley  * Allow only non-secure access to all DRAM to supported devices.
4523fc4124cSDan Handley  * Give access to the CPUs and Virtio. Some devices
4533fc4124cSDan Handley  * would normally use the default ID so allow that too.
4543fc4124cSDan Handley  */
455f21c6321SAntonio Nino Diaz #define PLAT_ARM_TZC_BASE		UL(0x2a4a0000)
45657f78201SSoby Mathew #define PLAT_ARM_TZC_FILTERS		TZC_400_REGION_ATTR_FILTER_BIT(0)
4573fc4124cSDan Handley 
4583fc4124cSDan Handley #define PLAT_ARM_TZC_NS_DEV_ACCESS	(				\
4593fc4124cSDan Handley 		TZC_REGION_ACCESS_RDWR(FVP_NSAID_DEFAULT)	|	\
4603fc4124cSDan Handley 		TZC_REGION_ACCESS_RDWR(FVP_NSAID_PCI)		|	\
4613fc4124cSDan Handley 		TZC_REGION_ACCESS_RDWR(FVP_NSAID_AP)		|	\
4623fc4124cSDan Handley 		TZC_REGION_ACCESS_RDWR(FVP_NSAID_VIRTIO)	|	\
4633fc4124cSDan Handley 		TZC_REGION_ACCESS_RDWR(FVP_NSAID_VIRTIO_OLD))
4643fc4124cSDan Handley 
46527573c59SAchin Gupta /*
46627573c59SAchin Gupta  * GIC related constants to cater for both GICv2 and GICv3 instances of an
4674a135bc3SAlexei Fedorov  * FVP. They could be overridden at runtime in case the FVP implements the
4684a135bc3SAlexei Fedorov  * legacy VE memory map.
46927573c59SAchin Gupta  */
47027573c59SAchin Gupta #define PLAT_ARM_GICD_BASE		BASE_GICD_BASE
47127573c59SAchin Gupta #define PLAT_ARM_GICR_BASE		BASE_GICR_BASE
47227573c59SAchin Gupta #define PLAT_ARM_GICC_BASE		BASE_GICC_BASE
47327573c59SAchin Gupta 
47427573c59SAchin Gupta /*
47527573c59SAchin Gupta  * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
47627573c59SAchin Gupta  * terminology. On a GICv2 system or mode, the lists will be merged and treated
47727573c59SAchin Gupta  * as Group 0 interrupts.
47827573c59SAchin Gupta  */
479b2c363b1SJeenu Viswambharan #define PLAT_ARM_G1S_IRQ_PROPS(grp) \
480b2c363b1SJeenu Viswambharan 	ARM_G1S_IRQ_PROPS(grp), \
48189509904SSathees Balya 	INTR_PROP_DESC(FVP_IRQ_TZ_WDOG, GIC_HIGHEST_SEC_PRIORITY, (grp), \
482b2c363b1SJeenu Viswambharan 			GIC_INTR_CFG_LEVEL), \
48389509904SSathees Balya 	INTR_PROP_DESC(FVP_IRQ_SEC_SYS_TIMER, GIC_HIGHEST_SEC_PRIORITY, (grp), \
484b2c363b1SJeenu Viswambharan 			GIC_INTR_CFG_LEVEL)
485b2c363b1SJeenu Viswambharan 
486b2c363b1SJeenu Viswambharan #define PLAT_ARM_G0_IRQ_PROPS(grp)	ARM_G0_IRQ_PROPS(grp)
487b2c363b1SJeenu Viswambharan 
488cbf9e84aSBalint Dobszay #if SDEI_IN_FCONF
489cbf9e84aSBalint Dobszay #define PLAT_SDEI_DP_EVENT_MAX_CNT	ARM_SDEI_DP_EVENT_MAX_CNT
490cbf9e84aSBalint Dobszay #define PLAT_SDEI_DS_EVENT_MAX_CNT	ARM_SDEI_DS_EVENT_MAX_CNT
491cbf9e84aSBalint Dobszay #else
492d07d4d63SMadhukar Pappireddy   #if PLATFORM_TEST_RAS_FFH || PLATFORM_TEST_FFH_LSP_RAS_SP
4935602ce1dSManish Pandey   #define PLAT_ARM_PRIVATE_SDEI_EVENTS \
4945602ce1dSManish Pandey 	ARM_SDEI_PRIVATE_EVENTS, \
4955602ce1dSManish Pandey 	SDEI_EXPLICIT_EVENT(5000, SDEI_MAPF_NORMAL), \
4965602ce1dSManish Pandey 	SDEI_EXPLICIT_EVENT(5001, SDEI_MAPF_NORMAL), \
4975602ce1dSManish Pandey 	SDEI_EXPLICIT_EVENT(5002, SDEI_MAPF_NORMAL), \
4985602ce1dSManish Pandey 	SDEI_EXPLICIT_EVENT(5003, SDEI_MAPF_CRITICAL), \
4995602ce1dSManish Pandey 	SDEI_EXPLICIT_EVENT(5004, SDEI_MAPF_CRITICAL)
5005602ce1dSManish Pandey   #else
5017bdf0c1fSJeenu Viswambharan   #define PLAT_ARM_PRIVATE_SDEI_EVENTS	ARM_SDEI_PRIVATE_EVENTS
5025602ce1dSManish Pandey   #endif
5037bdf0c1fSJeenu Viswambharan #define PLAT_ARM_SHARED_SDEI_EVENTS	ARM_SDEI_SHARED_EVENTS
504cbf9e84aSBalint Dobszay #endif
5057bdf0c1fSJeenu Viswambharan 
506b19b6934SYeoreum Yun #define PLAT_ARM_SP_IMAGE_STACK_BASE	(PLAT_SPM_BUF_BASE + \
507b19b6934SYeoreum Yun 					 PLAT_SPM_BUF_SIZE)
5082e4a509dSSughosh Ganu 
509fb2fd558SManish Pandey #define PLAT_SP_PRI			0x20
5105681b292SSughosh Ganu 
511de8bc83eSManoj Kumar /*
512de8bc83eSManoj Kumar  * Physical and virtual address space limits for MMU in AARCH64 & AARCH32 modes
513de8bc83eSManoj Kumar  */
514402b3cf8SJulius Werner #ifdef __aarch64__
515de8bc83eSManoj Kumar #define PLAT_PHY_ADDR_SPACE_SIZE	(1ULL << 36)
516de8bc83eSManoj Kumar #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ULL << 36)
517de8bc83eSManoj Kumar #else
518de8bc83eSManoj Kumar #define PLAT_PHY_ADDR_SPACE_SIZE	(1ULL << 32)
519de8bc83eSManoj Kumar #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ULL << 32)
520de8bc83eSManoj Kumar #endif
521de8bc83eSManoj Kumar 
522efa65218SManish V Badarkhe /*
523efa65218SManish V Badarkhe  * Maximum size of Event Log buffer used in Measured Boot Event Log driver
524d1a824eaSManish V Badarkhe  * TODO: calculate maximum EventLog size using the calculation:
525d1a824eaSManish V Badarkhe  * Maximum size of Event Log * Number of images
526efa65218SManish V Badarkhe  */
527d1a824eaSManish V Badarkhe #if (defined(SPD_spmd)) || (ENABLE_RME && (defined(SPD_tspd) || defined(SPD_opteed)))
528d1a824eaSManish V Badarkhe /*
529d1a824eaSManish V Badarkhe  * Account for additional measurements of secure partitions and SPM.
530d1a824eaSManish V Badarkhe  * Also, account for OP-TEE running with maximum number of SPs.
531d1a824eaSManish V Badarkhe  */
532f1dfaa42SManish V Badarkhe #define PLAT_ARM_EVENT_LOG_MAX_SIZE		UL(0x800)
533d1a824eaSManish V Badarkhe #elif defined(IMAGE_BL1) && TRANSFER_LIST
5345bf0b807SHarrison Mutai #define PLAT_ARM_EVENT_LOG_MAX_SIZE		UL(0x200)
5355bf0b807SHarrison Mutai #else
536efa65218SManish V Badarkhe #define PLAT_ARM_EVENT_LOG_MAX_SIZE		UL(0x400)
537f1dfaa42SManish V Badarkhe #endif
538efa65218SManish V Badarkhe 
5392a1cdee4Sjohpow01 /*
5402a1cdee4Sjohpow01  * Maximum size of Event Log buffer used for DRTM
5412a1cdee4Sjohpow01  */
5422a1cdee4Sjohpow01 #define PLAT_DRTM_EVENT_LOG_MAX_SIZE		UL(0x300)
5432a1cdee4Sjohpow01 
5442a1cdee4Sjohpow01 /*
5452a1cdee4Sjohpow01  * Number of MMAP entries used by DRTM implementation
5462a1cdee4Sjohpow01  */
5472a1cdee4Sjohpow01 #define PLAT_DRTM_MMAP_ENTRIES			PLAT_ARM_MMAP_ENTRIES
5482a1cdee4Sjohpow01 
549f21c6321SAntonio Nino Diaz #endif /* PLATFORM_DEF_H */
550