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