1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2014-2023, Arm Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef PLATFORM_DEF_H 8*91f16700Schasinglulu #define PLATFORM_DEF_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <drivers/arm/tzc400.h> 11*91f16700Schasinglulu #include <lib/utils_def.h> 12*91f16700Schasinglulu #include <plat/arm/board/common/v2m_def.h> 13*91f16700Schasinglulu #include <plat/arm/common/arm_def.h> 14*91f16700Schasinglulu #include <plat/arm/common/arm_spm_def.h> 15*91f16700Schasinglulu #include <plat/common/common_def.h> 16*91f16700Schasinglulu 17*91f16700Schasinglulu #include "../fvp_def.h" 18*91f16700Schasinglulu 19*91f16700Schasinglulu #if TRUSTED_BOARD_BOOT 20*91f16700Schasinglulu #include MBEDTLS_CONFIG_FILE 21*91f16700Schasinglulu #endif 22*91f16700Schasinglulu 23*91f16700Schasinglulu /* Required platform porting definitions */ 24*91f16700Schasinglulu #define PLATFORM_CORE_COUNT (U(FVP_CLUSTER_COUNT) * \ 25*91f16700Schasinglulu U(FVP_MAX_CPUS_PER_CLUSTER) * \ 26*91f16700Schasinglulu U(FVP_MAX_PE_PER_CPU)) 27*91f16700Schasinglulu 28*91f16700Schasinglulu #define PLAT_NUM_PWR_DOMAINS (U(FVP_CLUSTER_COUNT) + \ 29*91f16700Schasinglulu PLATFORM_CORE_COUNT + U(1)) 30*91f16700Schasinglulu 31*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL ARM_PWR_LVL2 32*91f16700Schasinglulu 33*91f16700Schasinglulu #if PSCI_OS_INIT_MODE 34*91f16700Schasinglulu #define PLAT_MAX_CPU_SUSPEND_PWR_LVL ARM_PWR_LVL1 35*91f16700Schasinglulu #endif 36*91f16700Schasinglulu 37*91f16700Schasinglulu /* 38*91f16700Schasinglulu * Other platform porting definitions are provided by included headers 39*91f16700Schasinglulu */ 40*91f16700Schasinglulu 41*91f16700Schasinglulu /* 42*91f16700Schasinglulu * Required ARM standard platform porting definitions 43*91f16700Schasinglulu */ 44*91f16700Schasinglulu #define PLAT_ARM_CLUSTER_COUNT U(FVP_CLUSTER_COUNT) 45*91f16700Schasinglulu 46*91f16700Schasinglulu #define PLAT_ARM_TRUSTED_SRAM_SIZE (FVP_TRUSTED_SRAM_SIZE * UL(1024)) 47*91f16700Schasinglulu 48*91f16700Schasinglulu #define PLAT_ARM_TRUSTED_ROM_BASE UL(0x00000000) 49*91f16700Schasinglulu #define PLAT_ARM_TRUSTED_ROM_SIZE UL(0x04000000) /* 64 MB */ 50*91f16700Schasinglulu 51*91f16700Schasinglulu #define PLAT_ARM_TRUSTED_DRAM_BASE UL(0x06000000) 52*91f16700Schasinglulu #define PLAT_ARM_TRUSTED_DRAM_SIZE UL(0x02000000) /* 32 MB */ 53*91f16700Schasinglulu 54*91f16700Schasinglulu #if ENABLE_RME 55*91f16700Schasinglulu #define PLAT_ARM_RMM_BASE (RMM_BASE) 56*91f16700Schasinglulu #define PLAT_ARM_RMM_SIZE (RMM_LIMIT - RMM_BASE) 57*91f16700Schasinglulu #endif 58*91f16700Schasinglulu 59*91f16700Schasinglulu /* 60*91f16700Schasinglulu * Max size of SPMC is 2MB for fvp. With SPMD enabled this value corresponds to 61*91f16700Schasinglulu * max size of BL32 image. 62*91f16700Schasinglulu */ 63*91f16700Schasinglulu #if defined(SPD_spmd) 64*91f16700Schasinglulu #define PLAT_ARM_SPMC_BASE PLAT_ARM_TRUSTED_DRAM_BASE 65*91f16700Schasinglulu #define PLAT_ARM_SPMC_SIZE UL(0x200000) /* 2 MB */ 66*91f16700Schasinglulu #endif 67*91f16700Schasinglulu 68*91f16700Schasinglulu /* virtual address used by dynamic mem_protect for chunk_base */ 69*91f16700Schasinglulu #define PLAT_ARM_MEM_PROTEC_VA_FRAME UL(0xc0000000) 70*91f16700Schasinglulu 71*91f16700Schasinglulu /* No SCP in FVP */ 72*91f16700Schasinglulu #define PLAT_ARM_SCP_TZC_DRAM1_SIZE UL(0x0) 73*91f16700Schasinglulu 74*91f16700Schasinglulu #define PLAT_ARM_DRAM2_BASE ULL(0x880000000) /* 36-bit range */ 75*91f16700Schasinglulu #define PLAT_ARM_DRAM2_SIZE ULL(0x780000000) /* 30 GB */ 76*91f16700Schasinglulu 77*91f16700Schasinglulu #define FVP_DRAM3_BASE ULL(0x8800000000) /* 40-bit range */ 78*91f16700Schasinglulu #define FVP_DRAM3_SIZE ULL(0x7800000000) /* 480 GB */ 79*91f16700Schasinglulu #define FVP_DRAM3_END (FVP_DRAM3_BASE + FVP_DRAM3_SIZE - 1U) 80*91f16700Schasinglulu 81*91f16700Schasinglulu #define FVP_DRAM4_BASE ULL(0x88000000000) /* 44-bit range */ 82*91f16700Schasinglulu #define FVP_DRAM4_SIZE ULL(0x78000000000) /* 7.5 TB */ 83*91f16700Schasinglulu #define FVP_DRAM4_END (FVP_DRAM4_BASE + FVP_DRAM4_SIZE - 1U) 84*91f16700Schasinglulu 85*91f16700Schasinglulu #define FVP_DRAM5_BASE ULL(0x880000000000) /* 48-bit range */ 86*91f16700Schasinglulu #define FVP_DRAM5_SIZE ULL(0x780000000000) /* 120 TB */ 87*91f16700Schasinglulu #define FVP_DRAM5_END (FVP_DRAM5_BASE + FVP_DRAM5_SIZE - 1U) 88*91f16700Schasinglulu 89*91f16700Schasinglulu #define FVP_DRAM6_BASE ULL(0x8800000000000) /* 52-bit range */ 90*91f16700Schasinglulu #define FVP_DRAM6_SIZE ULL(0x7800000000000) /* 1920 TB */ 91*91f16700Schasinglulu #define FVP_DRAM6_END (FVP_DRAM6_BASE + FVP_DRAM6_SIZE - 1U) 92*91f16700Schasinglulu 93*91f16700Schasinglulu /* Range of kernel DTB load address */ 94*91f16700Schasinglulu #define FVP_DTB_DRAM_MAP_START ULL(0x82000000) 95*91f16700Schasinglulu #define FVP_DTB_DRAM_MAP_SIZE ULL(0x02000000) /* 32 MB */ 96*91f16700Schasinglulu 97*91f16700Schasinglulu #define ARM_DTB_DRAM_NS MAP_REGION_FLAT( \ 98*91f16700Schasinglulu FVP_DTB_DRAM_MAP_START, \ 99*91f16700Schasinglulu FVP_DTB_DRAM_MAP_SIZE, \ 100*91f16700Schasinglulu MT_MEMORY | MT_RO | MT_NS) 101*91f16700Schasinglulu 102*91f16700Schasinglulu #if SPMC_AT_EL3 103*91f16700Schasinglulu /* 104*91f16700Schasinglulu * Number of Secure Partitions supported. 105*91f16700Schasinglulu * SPMC at EL3, uses this count to configure the maximum number of supported 106*91f16700Schasinglulu * secure partitions. 107*91f16700Schasinglulu */ 108*91f16700Schasinglulu #define SECURE_PARTITION_COUNT 1 109*91f16700Schasinglulu 110*91f16700Schasinglulu /* 111*91f16700Schasinglulu * Number of Normal World Partitions supported. 112*91f16700Schasinglulu * SPMC at EL3, uses this count to configure the maximum number of supported 113*91f16700Schasinglulu * NWd partitions. 114*91f16700Schasinglulu */ 115*91f16700Schasinglulu #define NS_PARTITION_COUNT 1 116*91f16700Schasinglulu 117*91f16700Schasinglulu /* 118*91f16700Schasinglulu * Number of Logical Partitions supported. 119*91f16700Schasinglulu * SPMC at EL3, uses this count to configure the maximum number of supported 120*91f16700Schasinglulu * logical partitions. 121*91f16700Schasinglulu */ 122*91f16700Schasinglulu #define MAX_EL3_LP_DESCS_COUNT 1 123*91f16700Schasinglulu 124*91f16700Schasinglulu #endif /* SPMC_AT_EL3 */ 125*91f16700Schasinglulu 126*91f16700Schasinglulu /* 127*91f16700Schasinglulu * Load address of BL33 for this platform port 128*91f16700Schasinglulu */ 129*91f16700Schasinglulu #define PLAT_ARM_NS_IMAGE_BASE (ARM_DRAM1_BASE + UL(0x8000000)) 130*91f16700Schasinglulu 131*91f16700Schasinglulu #if TRANSFER_LIST 132*91f16700Schasinglulu #define FW_HANDOFF_SIZE 0x4000 133*91f16700Schasinglulu #define FW_NS_HANDOFF_BASE (PLAT_ARM_NS_IMAGE_BASE - FW_HANDOFF_SIZE) 134*91f16700Schasinglulu #endif 135*91f16700Schasinglulu 136*91f16700Schasinglulu /* 137*91f16700Schasinglulu * PLAT_ARM_MMAP_ENTRIES depends on the number of entries in the 138*91f16700Schasinglulu * plat_arm_mmap array defined for each BL stage. 139*91f16700Schasinglulu */ 140*91f16700Schasinglulu #if defined(IMAGE_BL31) 141*91f16700Schasinglulu # if SPM_MM 142*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES 10 143*91f16700Schasinglulu # define MAX_XLAT_TABLES 9 144*91f16700Schasinglulu # define PLAT_SP_IMAGE_MMAP_REGIONS 30 145*91f16700Schasinglulu # define PLAT_SP_IMAGE_MAX_XLAT_TABLES 10 146*91f16700Schasinglulu # elif SPMC_AT_EL3 147*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES 13 148*91f16700Schasinglulu # define MAX_XLAT_TABLES 11 149*91f16700Schasinglulu # else 150*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES 9 151*91f16700Schasinglulu # if USE_DEBUGFS 152*91f16700Schasinglulu # if ENABLE_RME 153*91f16700Schasinglulu # define MAX_XLAT_TABLES 9 154*91f16700Schasinglulu # else 155*91f16700Schasinglulu # define MAX_XLAT_TABLES 8 156*91f16700Schasinglulu # endif 157*91f16700Schasinglulu # else 158*91f16700Schasinglulu # if ENABLE_RME 159*91f16700Schasinglulu # define MAX_XLAT_TABLES 8 160*91f16700Schasinglulu # elif DRTM_SUPPORT 161*91f16700Schasinglulu # define MAX_XLAT_TABLES 8 162*91f16700Schasinglulu # else 163*91f16700Schasinglulu # define MAX_XLAT_TABLES 7 164*91f16700Schasinglulu # endif 165*91f16700Schasinglulu # endif 166*91f16700Schasinglulu # endif 167*91f16700Schasinglulu #elif defined(IMAGE_BL32) 168*91f16700Schasinglulu # if SPMC_AT_EL3 169*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES 270 170*91f16700Schasinglulu # define MAX_XLAT_TABLES 10 171*91f16700Schasinglulu # else 172*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES 9 173*91f16700Schasinglulu # define MAX_XLAT_TABLES 6 174*91f16700Schasinglulu # endif 175*91f16700Schasinglulu #elif !USE_ROMLIB 176*91f16700Schasinglulu # if ENABLE_RME && defined(IMAGE_BL2) 177*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES 12 178*91f16700Schasinglulu # define MAX_XLAT_TABLES 6 179*91f16700Schasinglulu # else 180*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES 11 181*91f16700Schasinglulu # define MAX_XLAT_TABLES 5 182*91f16700Schasinglulu # endif /* (IMAGE_BL2 && ENABLE_RME) */ 183*91f16700Schasinglulu #else 184*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES 12 185*91f16700Schasinglulu # if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \ 186*91f16700Schasinglulu defined(IMAGE_BL2) && MEASURED_BOOT 187*91f16700Schasinglulu # define MAX_XLAT_TABLES 7 188*91f16700Schasinglulu # else 189*91f16700Schasinglulu # define MAX_XLAT_TABLES 6 190*91f16700Schasinglulu # endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && IMAGE_BL2 && MEASURED_BOOT */ 191*91f16700Schasinglulu #endif 192*91f16700Schasinglulu 193*91f16700Schasinglulu /* 194*91f16700Schasinglulu * PLAT_ARM_MAX_BL1_RW_SIZE is calculated using the current BL1 RW debug size 195*91f16700Schasinglulu * plus a little space for growth. 196*91f16700Schasinglulu * In case of PSA Crypto API, few algorithms like ECDSA needs bigger BL1 RW 197*91f16700Schasinglulu * area. 198*91f16700Schasinglulu */ 199*91f16700Schasinglulu #if TF_MBEDTLS_KEY_ALG_ID == TF_MBEDTLS_RSA_AND_ECDSA || PSA_CRYPTO 200*91f16700Schasinglulu #define PLAT_ARM_MAX_BL1_RW_SIZE UL(0xC000) 201*91f16700Schasinglulu #else 202*91f16700Schasinglulu #define PLAT_ARM_MAX_BL1_RW_SIZE UL(0xB000) 203*91f16700Schasinglulu #endif 204*91f16700Schasinglulu 205*91f16700Schasinglulu /* 206*91f16700Schasinglulu * PLAT_ARM_MAX_ROMLIB_RW_SIZE is define to use a full page 207*91f16700Schasinglulu */ 208*91f16700Schasinglulu 209*91f16700Schasinglulu #if USE_ROMLIB 210*91f16700Schasinglulu #define PLAT_ARM_MAX_ROMLIB_RW_SIZE UL(0x1000) 211*91f16700Schasinglulu #define PLAT_ARM_MAX_ROMLIB_RO_SIZE UL(0xe000) 212*91f16700Schasinglulu #define FVP_BL2_ROMLIB_OPTIMIZATION UL(0x5000) 213*91f16700Schasinglulu #else 214*91f16700Schasinglulu #define PLAT_ARM_MAX_ROMLIB_RW_SIZE UL(0) 215*91f16700Schasinglulu #define PLAT_ARM_MAX_ROMLIB_RO_SIZE UL(0) 216*91f16700Schasinglulu #define FVP_BL2_ROMLIB_OPTIMIZATION UL(0) 217*91f16700Schasinglulu #endif 218*91f16700Schasinglulu 219*91f16700Schasinglulu /* 220*91f16700Schasinglulu * Set the maximum size of BL2 to be close to half of the Trusted SRAM. 221*91f16700Schasinglulu * Maximum size of BL2 increases as Trusted SRAM size increases. 222*91f16700Schasinglulu */ 223*91f16700Schasinglulu #if CRYPTO_SUPPORT 224*91f16700Schasinglulu #if (TF_MBEDTLS_KEY_ALG_ID == TF_MBEDTLS_RSA_AND_ECDSA) || COT_DESC_IN_DTB 225*91f16700Schasinglulu # define PLAT_ARM_MAX_BL2_SIZE ((PLAT_ARM_TRUSTED_SRAM_SIZE / 2) - \ 226*91f16700Schasinglulu (2 * PAGE_SIZE) - \ 227*91f16700Schasinglulu FVP_BL2_ROMLIB_OPTIMIZATION) 228*91f16700Schasinglulu #else 229*91f16700Schasinglulu # define PLAT_ARM_MAX_BL2_SIZE ((PLAT_ARM_TRUSTED_SRAM_SIZE / 2) - \ 230*91f16700Schasinglulu (3 * PAGE_SIZE) - \ 231*91f16700Schasinglulu FVP_BL2_ROMLIB_OPTIMIZATION) 232*91f16700Schasinglulu #endif 233*91f16700Schasinglulu #elif ARM_BL31_IN_DRAM 234*91f16700Schasinglulu /* When ARM_BL31_IN_DRAM is set, BL2 can use almost all of Trusted SRAM. */ 235*91f16700Schasinglulu # define PLAT_ARM_MAX_BL2_SIZE (UL(0x1F000) - FVP_BL2_ROMLIB_OPTIMIZATION) 236*91f16700Schasinglulu #else 237*91f16700Schasinglulu # define PLAT_ARM_MAX_BL2_SIZE (UL(0x13000) - FVP_BL2_ROMLIB_OPTIMIZATION) 238*91f16700Schasinglulu #endif 239*91f16700Schasinglulu 240*91f16700Schasinglulu #if RESET_TO_BL31 241*91f16700Schasinglulu /* Size of Trusted SRAM - the first 4KB of shared memory - GPT L0 Tables */ 242*91f16700Schasinglulu #define PLAT_ARM_MAX_BL31_SIZE (PLAT_ARM_TRUSTED_SRAM_SIZE - \ 243*91f16700Schasinglulu ARM_SHARED_RAM_SIZE - \ 244*91f16700Schasinglulu ARM_L0_GPT_SIZE) 245*91f16700Schasinglulu #else 246*91f16700Schasinglulu /* 247*91f16700Schasinglulu * Since BL31 NOBITS overlays BL2 and BL1-RW, PLAT_ARM_MAX_BL31_SIZE is 248*91f16700Schasinglulu * calculated using the current BL31 PROGBITS debug size plus the sizes of 249*91f16700Schasinglulu * BL2 and BL1-RW. 250*91f16700Schasinglulu * Size of the BL31 PROGBITS increases as the SRAM size increases. 251*91f16700Schasinglulu */ 252*91f16700Schasinglulu #define PLAT_ARM_MAX_BL31_SIZE (PLAT_ARM_TRUSTED_SRAM_SIZE - \ 253*91f16700Schasinglulu ARM_SHARED_RAM_SIZE - \ 254*91f16700Schasinglulu ARM_FW_CONFIGS_SIZE - ARM_L0_GPT_SIZE) 255*91f16700Schasinglulu #endif /* RESET_TO_BL31 */ 256*91f16700Schasinglulu 257*91f16700Schasinglulu #ifndef __aarch64__ 258*91f16700Schasinglulu #if RESET_TO_SP_MIN 259*91f16700Schasinglulu /* Size of Trusted SRAM - the first 4KB of shared memory */ 260*91f16700Schasinglulu #define PLAT_ARM_MAX_BL32_SIZE (PLAT_ARM_TRUSTED_SRAM_SIZE - \ 261*91f16700Schasinglulu ARM_SHARED_RAM_SIZE) 262*91f16700Schasinglulu #else 263*91f16700Schasinglulu /* 264*91f16700Schasinglulu * Since BL32 NOBITS overlays BL2 and BL1-RW, PLAT_ARM_MAX_BL32_SIZE is 265*91f16700Schasinglulu * calculated using the current SP_MIN PROGBITS debug size plus the sizes of 266*91f16700Schasinglulu * BL2 and BL1-RW 267*91f16700Schasinglulu */ 268*91f16700Schasinglulu # define PLAT_ARM_MAX_BL32_SIZE UL(0x3B000) 269*91f16700Schasinglulu #endif /* RESET_TO_SP_MIN */ 270*91f16700Schasinglulu #endif 271*91f16700Schasinglulu 272*91f16700Schasinglulu /* 273*91f16700Schasinglulu * Size of cacheable stacks 274*91f16700Schasinglulu */ 275*91f16700Schasinglulu #if defined(IMAGE_BL1) 276*91f16700Schasinglulu # if CRYPTO_SUPPORT 277*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x1000) 278*91f16700Schasinglulu # else 279*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x500) 280*91f16700Schasinglulu # endif /* CRYPTO_SUPPORT */ 281*91f16700Schasinglulu #elif defined(IMAGE_BL2) 282*91f16700Schasinglulu # if CRYPTO_SUPPORT 283*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x1000) 284*91f16700Schasinglulu # else 285*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x600) 286*91f16700Schasinglulu # endif /* CRYPTO_SUPPORT */ 287*91f16700Schasinglulu #elif defined(IMAGE_BL2U) 288*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x400) 289*91f16700Schasinglulu #elif defined(IMAGE_BL31) 290*91f16700Schasinglulu # if DRTM_SUPPORT 291*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x1000) 292*91f16700Schasinglulu # else 293*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x800) 294*91f16700Schasinglulu # endif /* DRTM_SUPPORT */ 295*91f16700Schasinglulu #elif defined(IMAGE_BL32) 296*91f16700Schasinglulu # if SPMC_AT_EL3 297*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x1000) 298*91f16700Schasinglulu # else 299*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x440) 300*91f16700Schasinglulu # endif /* SPMC_AT_EL3 */ 301*91f16700Schasinglulu #elif defined(IMAGE_RMM) 302*91f16700Schasinglulu # define PLATFORM_STACK_SIZE UL(0x440) 303*91f16700Schasinglulu #endif 304*91f16700Schasinglulu 305*91f16700Schasinglulu #define MAX_IO_DEVICES 3 306*91f16700Schasinglulu #define MAX_IO_HANDLES 4 307*91f16700Schasinglulu 308*91f16700Schasinglulu /* Reserve the last block of flash for PSCI MEM PROTECT flag */ 309*91f16700Schasinglulu #define PLAT_ARM_FLASH_IMAGE_BASE V2M_FLASH0_BASE 310*91f16700Schasinglulu #define PLAT_ARM_FLASH_IMAGE_MAX_SIZE (V2M_FLASH0_SIZE - V2M_FLASH_BLOCK_SIZE) 311*91f16700Schasinglulu 312*91f16700Schasinglulu #if ARM_GPT_SUPPORT 313*91f16700Schasinglulu /* 314*91f16700Schasinglulu * Offset of the FIP in the GPT image. BL1 component uses this option 315*91f16700Schasinglulu * as it does not load the partition table to get the FIP base 316*91f16700Schasinglulu * address. At sector 34 by default (i.e. after reserved sectors 0-33) 317*91f16700Schasinglulu * Offset = 34 * 512(sector size) = 17408 i.e. 0x4400 318*91f16700Schasinglulu */ 319*91f16700Schasinglulu #define PLAT_ARM_FIP_OFFSET_IN_GPT 0x4400 320*91f16700Schasinglulu #endif /* ARM_GPT_SUPPORT */ 321*91f16700Schasinglulu 322*91f16700Schasinglulu #define PLAT_ARM_NVM_BASE V2M_FLASH0_BASE 323*91f16700Schasinglulu #define PLAT_ARM_NVM_SIZE (V2M_FLASH0_SIZE - V2M_FLASH_BLOCK_SIZE) 324*91f16700Schasinglulu 325*91f16700Schasinglulu /* 326*91f16700Schasinglulu * PL011 related constants 327*91f16700Schasinglulu */ 328*91f16700Schasinglulu #define PLAT_ARM_BOOT_UART_BASE V2M_IOFPGA_UART0_BASE 329*91f16700Schasinglulu #define PLAT_ARM_BOOT_UART_CLK_IN_HZ V2M_IOFPGA_UART0_CLK_IN_HZ 330*91f16700Schasinglulu 331*91f16700Schasinglulu #define PLAT_ARM_RUN_UART_BASE V2M_IOFPGA_UART1_BASE 332*91f16700Schasinglulu #define PLAT_ARM_RUN_UART_CLK_IN_HZ V2M_IOFPGA_UART1_CLK_IN_HZ 333*91f16700Schasinglulu 334*91f16700Schasinglulu #define PLAT_ARM_CRASH_UART_BASE PLAT_ARM_RUN_UART_BASE 335*91f16700Schasinglulu #define PLAT_ARM_CRASH_UART_CLK_IN_HZ PLAT_ARM_RUN_UART_CLK_IN_HZ 336*91f16700Schasinglulu 337*91f16700Schasinglulu #define PLAT_ARM_TSP_UART_BASE V2M_IOFPGA_UART2_BASE 338*91f16700Schasinglulu #define PLAT_ARM_TSP_UART_CLK_IN_HZ V2M_IOFPGA_UART2_CLK_IN_HZ 339*91f16700Schasinglulu 340*91f16700Schasinglulu #define PLAT_ARM_TRP_UART_BASE V2M_IOFPGA_UART3_BASE 341*91f16700Schasinglulu #define PLAT_ARM_TRP_UART_CLK_IN_HZ V2M_IOFPGA_UART3_CLK_IN_HZ 342*91f16700Schasinglulu 343*91f16700Schasinglulu #define PLAT_FVP_SMMUV3_BASE UL(0x2b400000) 344*91f16700Schasinglulu #define PLAT_ARM_SMMUV3_ROOT_REG_OFFSET UL(0x20000) 345*91f16700Schasinglulu 346*91f16700Schasinglulu /* CCI related constants */ 347*91f16700Schasinglulu #define PLAT_FVP_CCI400_BASE UL(0x2c090000) 348*91f16700Schasinglulu #define PLAT_FVP_CCI400_CLUS0_SL_PORT 3 349*91f16700Schasinglulu #define PLAT_FVP_CCI400_CLUS1_SL_PORT 4 350*91f16700Schasinglulu 351*91f16700Schasinglulu /* CCI-500/CCI-550 on Base platform */ 352*91f16700Schasinglulu #define PLAT_FVP_CCI5XX_BASE UL(0x2a000000) 353*91f16700Schasinglulu #define PLAT_FVP_CCI5XX_CLUS0_SL_PORT 5 354*91f16700Schasinglulu #define PLAT_FVP_CCI5XX_CLUS1_SL_PORT 6 355*91f16700Schasinglulu 356*91f16700Schasinglulu /* CCN related constants. Only CCN 502 is currently supported */ 357*91f16700Schasinglulu #define PLAT_ARM_CCN_BASE UL(0x2e000000) 358*91f16700Schasinglulu #define PLAT_ARM_CLUSTER_TO_CCN_ID_MAP 1, 5, 7, 11 359*91f16700Schasinglulu 360*91f16700Schasinglulu /* System timer related constants */ 361*91f16700Schasinglulu #define PLAT_ARM_NSTIMER_FRAME_ID U(1) 362*91f16700Schasinglulu 363*91f16700Schasinglulu /* Mailbox base address */ 364*91f16700Schasinglulu #define PLAT_ARM_TRUSTED_MAILBOX_BASE ARM_TRUSTED_SRAM_BASE 365*91f16700Schasinglulu 366*91f16700Schasinglulu 367*91f16700Schasinglulu /* TrustZone controller related constants 368*91f16700Schasinglulu * 369*91f16700Schasinglulu * Currently only filters 0 and 2 are connected on Base FVP. 370*91f16700Schasinglulu * Filter 0 : CPU clusters (no access to DRAM by default) 371*91f16700Schasinglulu * Filter 1 : not connected 372*91f16700Schasinglulu * Filter 2 : LCDs (access to VRAM allowed by default) 373*91f16700Schasinglulu * Filter 3 : not connected 374*91f16700Schasinglulu * Programming unconnected filters will have no effect at the 375*91f16700Schasinglulu * moment. These filter could, however, be connected in future. 376*91f16700Schasinglulu * So care should be taken not to configure the unused filters. 377*91f16700Schasinglulu * 378*91f16700Schasinglulu * Allow only non-secure access to all DRAM to supported devices. 379*91f16700Schasinglulu * Give access to the CPUs and Virtio. Some devices 380*91f16700Schasinglulu * would normally use the default ID so allow that too. 381*91f16700Schasinglulu */ 382*91f16700Schasinglulu #define PLAT_ARM_TZC_BASE UL(0x2a4a0000) 383*91f16700Schasinglulu #define PLAT_ARM_TZC_FILTERS TZC_400_REGION_ATTR_FILTER_BIT(0) 384*91f16700Schasinglulu 385*91f16700Schasinglulu #define PLAT_ARM_TZC_NS_DEV_ACCESS ( \ 386*91f16700Schasinglulu TZC_REGION_ACCESS_RDWR(FVP_NSAID_DEFAULT) | \ 387*91f16700Schasinglulu TZC_REGION_ACCESS_RDWR(FVP_NSAID_PCI) | \ 388*91f16700Schasinglulu TZC_REGION_ACCESS_RDWR(FVP_NSAID_AP) | \ 389*91f16700Schasinglulu TZC_REGION_ACCESS_RDWR(FVP_NSAID_VIRTIO) | \ 390*91f16700Schasinglulu TZC_REGION_ACCESS_RDWR(FVP_NSAID_VIRTIO_OLD)) 391*91f16700Schasinglulu 392*91f16700Schasinglulu /* 393*91f16700Schasinglulu * GIC related constants to cater for both GICv2 and GICv3 instances of an 394*91f16700Schasinglulu * FVP. They could be overridden at runtime in case the FVP implements the 395*91f16700Schasinglulu * legacy VE memory map. 396*91f16700Schasinglulu */ 397*91f16700Schasinglulu #define PLAT_ARM_GICD_BASE BASE_GICD_BASE 398*91f16700Schasinglulu #define PLAT_ARM_GICR_BASE BASE_GICR_BASE 399*91f16700Schasinglulu #define PLAT_ARM_GICC_BASE BASE_GICC_BASE 400*91f16700Schasinglulu 401*91f16700Schasinglulu /* 402*91f16700Schasinglulu * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3 403*91f16700Schasinglulu * terminology. On a GICv2 system or mode, the lists will be merged and treated 404*91f16700Schasinglulu * as Group 0 interrupts. 405*91f16700Schasinglulu */ 406*91f16700Schasinglulu #define PLAT_ARM_G1S_IRQ_PROPS(grp) \ 407*91f16700Schasinglulu ARM_G1S_IRQ_PROPS(grp), \ 408*91f16700Schasinglulu INTR_PROP_DESC(FVP_IRQ_TZ_WDOG, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 409*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 410*91f16700Schasinglulu INTR_PROP_DESC(FVP_IRQ_SEC_SYS_TIMER, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 411*91f16700Schasinglulu GIC_INTR_CFG_LEVEL) 412*91f16700Schasinglulu 413*91f16700Schasinglulu #define PLAT_ARM_G0_IRQ_PROPS(grp) ARM_G0_IRQ_PROPS(grp) 414*91f16700Schasinglulu 415*91f16700Schasinglulu #if SDEI_IN_FCONF 416*91f16700Schasinglulu #define PLAT_SDEI_DP_EVENT_MAX_CNT ARM_SDEI_DP_EVENT_MAX_CNT 417*91f16700Schasinglulu #define PLAT_SDEI_DS_EVENT_MAX_CNT ARM_SDEI_DS_EVENT_MAX_CNT 418*91f16700Schasinglulu #else 419*91f16700Schasinglulu #if PLATFORM_TEST_RAS_FFH 420*91f16700Schasinglulu #define PLAT_ARM_PRIVATE_SDEI_EVENTS \ 421*91f16700Schasinglulu ARM_SDEI_PRIVATE_EVENTS, \ 422*91f16700Schasinglulu SDEI_EXPLICIT_EVENT(5000, SDEI_MAPF_NORMAL), \ 423*91f16700Schasinglulu SDEI_EXPLICIT_EVENT(5001, SDEI_MAPF_NORMAL), \ 424*91f16700Schasinglulu SDEI_EXPLICIT_EVENT(5002, SDEI_MAPF_NORMAL), \ 425*91f16700Schasinglulu SDEI_EXPLICIT_EVENT(5003, SDEI_MAPF_CRITICAL), \ 426*91f16700Schasinglulu SDEI_EXPLICIT_EVENT(5004, SDEI_MAPF_CRITICAL) 427*91f16700Schasinglulu #else 428*91f16700Schasinglulu #define PLAT_ARM_PRIVATE_SDEI_EVENTS ARM_SDEI_PRIVATE_EVENTS 429*91f16700Schasinglulu #endif 430*91f16700Schasinglulu #define PLAT_ARM_SHARED_SDEI_EVENTS ARM_SDEI_SHARED_EVENTS 431*91f16700Schasinglulu #endif 432*91f16700Schasinglulu 433*91f16700Schasinglulu #define PLAT_ARM_SP_IMAGE_STACK_BASE (PLAT_SP_IMAGE_NS_BUF_BASE + \ 434*91f16700Schasinglulu PLAT_SP_IMAGE_NS_BUF_SIZE) 435*91f16700Schasinglulu 436*91f16700Schasinglulu #define PLAT_SP_PRI 0x20 437*91f16700Schasinglulu 438*91f16700Schasinglulu /* 439*91f16700Schasinglulu * Physical and virtual address space limits for MMU in AARCH64 & AARCH32 modes 440*91f16700Schasinglulu */ 441*91f16700Schasinglulu #ifdef __aarch64__ 442*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 36) 443*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 36) 444*91f16700Schasinglulu #else 445*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32) 446*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32) 447*91f16700Schasinglulu #endif 448*91f16700Schasinglulu 449*91f16700Schasinglulu /* 450*91f16700Schasinglulu * Maximum size of Event Log buffer used in Measured Boot Event Log driver 451*91f16700Schasinglulu */ 452*91f16700Schasinglulu #if ENABLE_RME && (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) 453*91f16700Schasinglulu /* Account for additional measurements of secure partitions and SPM. */ 454*91f16700Schasinglulu #define PLAT_ARM_EVENT_LOG_MAX_SIZE UL(0x800) 455*91f16700Schasinglulu #else 456*91f16700Schasinglulu #define PLAT_ARM_EVENT_LOG_MAX_SIZE UL(0x400) 457*91f16700Schasinglulu #endif 458*91f16700Schasinglulu 459*91f16700Schasinglulu /* 460*91f16700Schasinglulu * Maximum size of Event Log buffer used for DRTM 461*91f16700Schasinglulu */ 462*91f16700Schasinglulu #define PLAT_DRTM_EVENT_LOG_MAX_SIZE UL(0x300) 463*91f16700Schasinglulu 464*91f16700Schasinglulu /* 465*91f16700Schasinglulu * Number of MMAP entries used by DRTM implementation 466*91f16700Schasinglulu */ 467*91f16700Schasinglulu #define PLAT_DRTM_MMAP_ENTRIES PLAT_ARM_MMAP_ENTRIES 468*91f16700Schasinglulu 469*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */ 470