1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2023, Arm Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu #ifndef ARM_DEF_H 7*91f16700Schasinglulu #define ARM_DEF_H 8*91f16700Schasinglulu 9*91f16700Schasinglulu #include <arch.h> 10*91f16700Schasinglulu #include <common/interrupt_props.h> 11*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h> 12*91f16700Schasinglulu #include <drivers/arm/gic_common.h> 13*91f16700Schasinglulu #include <lib/utils_def.h> 14*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_defs.h> 15*91f16700Schasinglulu #include <plat/arm/common/smccc_def.h> 16*91f16700Schasinglulu #include <plat/common/common_def.h> 17*91f16700Schasinglulu 18*91f16700Schasinglulu /****************************************************************************** 19*91f16700Schasinglulu * Definitions common to all ARM standard platforms 20*91f16700Schasinglulu *****************************************************************************/ 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* 23*91f16700Schasinglulu * Root of trust key lengths 24*91f16700Schasinglulu */ 25*91f16700Schasinglulu #define ARM_ROTPK_HEADER_LEN 19 26*91f16700Schasinglulu #define ARM_ROTPK_HASH_LEN 32 27*91f16700Schasinglulu 28*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL31 */ 29*91f16700Schasinglulu #define ARM_BL31_PLAT_PARAM_VAL ULL(0x0f1e2d3c4b5a6978) 30*91f16700Schasinglulu 31*91f16700Schasinglulu #define ARM_SYSTEM_COUNT U(1) 32*91f16700Schasinglulu 33*91f16700Schasinglulu #define ARM_CACHE_WRITEBACK_SHIFT 6 34*91f16700Schasinglulu 35*91f16700Schasinglulu /* 36*91f16700Schasinglulu * Macros mapping the MPIDR Affinity levels to ARM Platform Power levels. The 37*91f16700Schasinglulu * power levels have a 1:1 mapping with the MPIDR affinity levels. 38*91f16700Schasinglulu */ 39*91f16700Schasinglulu #define ARM_PWR_LVL0 MPIDR_AFFLVL0 40*91f16700Schasinglulu #define ARM_PWR_LVL1 MPIDR_AFFLVL1 41*91f16700Schasinglulu #define ARM_PWR_LVL2 MPIDR_AFFLVL2 42*91f16700Schasinglulu #define ARM_PWR_LVL3 MPIDR_AFFLVL3 43*91f16700Schasinglulu 44*91f16700Schasinglulu /* 45*91f16700Schasinglulu * Macros for local power states in ARM platforms encoded by State-ID field 46*91f16700Schasinglulu * within the power-state parameter. 47*91f16700Schasinglulu */ 48*91f16700Schasinglulu /* Local power state for power domains in Run state. */ 49*91f16700Schasinglulu #define ARM_LOCAL_STATE_RUN U(0) 50*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */ 51*91f16700Schasinglulu #define ARM_LOCAL_STATE_RET U(1) 52*91f16700Schasinglulu /* Local power state for OFF/power-down. Valid for CPU and cluster power 53*91f16700Schasinglulu domains */ 54*91f16700Schasinglulu #define ARM_LOCAL_STATE_OFF U(2) 55*91f16700Schasinglulu 56*91f16700Schasinglulu /* Memory location options for TSP */ 57*91f16700Schasinglulu #define ARM_TRUSTED_SRAM_ID 0 58*91f16700Schasinglulu #define ARM_TRUSTED_DRAM_ID 1 59*91f16700Schasinglulu #define ARM_DRAM_ID 2 60*91f16700Schasinglulu 61*91f16700Schasinglulu #ifdef PLAT_ARM_TRUSTED_SRAM_BASE 62*91f16700Schasinglulu #define ARM_TRUSTED_SRAM_BASE PLAT_ARM_TRUSTED_SRAM_BASE 63*91f16700Schasinglulu #else 64*91f16700Schasinglulu #define ARM_TRUSTED_SRAM_BASE UL(0x04000000) 65*91f16700Schasinglulu #endif /* PLAT_ARM_TRUSTED_SRAM_BASE */ 66*91f16700Schasinglulu 67*91f16700Schasinglulu #define ARM_SHARED_RAM_BASE ARM_TRUSTED_SRAM_BASE 68*91f16700Schasinglulu #define ARM_SHARED_RAM_SIZE UL(0x00001000) /* 4 KB */ 69*91f16700Schasinglulu 70*91f16700Schasinglulu /* The remaining Trusted SRAM is used to load the BL images */ 71*91f16700Schasinglulu #define ARM_BL_RAM_BASE (ARM_SHARED_RAM_BASE + \ 72*91f16700Schasinglulu ARM_SHARED_RAM_SIZE) 73*91f16700Schasinglulu #define ARM_BL_RAM_SIZE (PLAT_ARM_TRUSTED_SRAM_SIZE - \ 74*91f16700Schasinglulu ARM_SHARED_RAM_SIZE) 75*91f16700Schasinglulu 76*91f16700Schasinglulu /* 77*91f16700Schasinglulu * The top 16MB (or 64MB if RME is enabled) of DRAM1 is configured as 78*91f16700Schasinglulu * follows: 79*91f16700Schasinglulu * - SCP TZC DRAM: If present, DRAM reserved for SCP use 80*91f16700Schasinglulu * - L1 GPT DRAM: Reserved for L1 GPT if RME is enabled 81*91f16700Schasinglulu * - REALM DRAM: Reserved for Realm world if RME is enabled 82*91f16700Schasinglulu * - TF-A <-> RMM SHARED: Area shared for communication between TF-A and RMM 83*91f16700Schasinglulu * - Event Log: Area for Event Log if MEASURED_BOOT feature is enabled 84*91f16700Schasinglulu * - AP TZC DRAM: The remaining TZC secured DRAM reserved for AP use 85*91f16700Schasinglulu * 86*91f16700Schasinglulu * RME enabled(64MB) RME not enabled(16MB) 87*91f16700Schasinglulu * -------------------- ------------------- 88*91f16700Schasinglulu * | | | | 89*91f16700Schasinglulu * | AP TZC (~28MB) | | AP TZC (~14MB) | 90*91f16700Schasinglulu * -------------------- ------------------- 91*91f16700Schasinglulu * | Event Log | | Event Log | 92*91f16700Schasinglulu * | (4KB) | | (4KB) | 93*91f16700Schasinglulu * -------------------- ------------------- 94*91f16700Schasinglulu * | REALM (RMM) | | | 95*91f16700Schasinglulu * | (32MB - 4KB) | | EL3 TZC (2MB) | 96*91f16700Schasinglulu * -------------------- ------------------- 97*91f16700Schasinglulu * | | | | 98*91f16700Schasinglulu * | TF-A <-> RMM | | SCP TZC | 99*91f16700Schasinglulu * | SHARED (4KB) | 0xFFFF_FFFF------------------- 100*91f16700Schasinglulu * -------------------- 101*91f16700Schasinglulu * | | 102*91f16700Schasinglulu * | EL3 TZC (3MB) | 103*91f16700Schasinglulu * -------------------- 104*91f16700Schasinglulu * | L1 GPT + SCP TZC | 105*91f16700Schasinglulu * | (~1MB) | 106*91f16700Schasinglulu * 0xFFFF_FFFF -------------------- 107*91f16700Schasinglulu */ 108*91f16700Schasinglulu #if ENABLE_RME 109*91f16700Schasinglulu #define ARM_TZC_DRAM1_SIZE UL(0x04000000) /* 64MB */ 110*91f16700Schasinglulu /* 111*91f16700Schasinglulu * Define a region within the TZC secured DRAM for use by EL3 runtime 112*91f16700Schasinglulu * firmware. This region is meant to be NOLOAD and will not be zero 113*91f16700Schasinglulu * initialized. Data sections with the attribute `.arm_el3_tzc_dram` will be 114*91f16700Schasinglulu * placed here. 3MB region is reserved if RME is enabled, 2MB otherwise. 115*91f16700Schasinglulu */ 116*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_SIZE UL(0x00300000) /* 3MB */ 117*91f16700Schasinglulu #define ARM_L1_GPT_SIZE UL(0x00100000) /* 1MB */ 118*91f16700Schasinglulu /* 32MB - ARM_EL3_RMM_SHARED_SIZE */ 119*91f16700Schasinglulu #define ARM_REALM_SIZE (UL(0x02000000) - \ 120*91f16700Schasinglulu ARM_EL3_RMM_SHARED_SIZE) 121*91f16700Schasinglulu #define ARM_EL3_RMM_SHARED_SIZE (PAGE_SIZE) /* 4KB */ 122*91f16700Schasinglulu #else 123*91f16700Schasinglulu #define ARM_TZC_DRAM1_SIZE UL(0x01000000) /* 16MB */ 124*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_SIZE UL(0x00200000) /* 2MB */ 125*91f16700Schasinglulu #define ARM_L1_GPT_SIZE UL(0) 126*91f16700Schasinglulu #define ARM_REALM_SIZE UL(0) 127*91f16700Schasinglulu #define ARM_EL3_RMM_SHARED_SIZE UL(0) 128*91f16700Schasinglulu #endif /* ENABLE_RME */ 129*91f16700Schasinglulu 130*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_BASE (ARM_DRAM1_BASE + \ 131*91f16700Schasinglulu ARM_DRAM1_SIZE - \ 132*91f16700Schasinglulu (ARM_SCP_TZC_DRAM1_SIZE + \ 133*91f16700Schasinglulu ARM_L1_GPT_SIZE)) 134*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_SIZE PLAT_ARM_SCP_TZC_DRAM1_SIZE 135*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_END (ARM_SCP_TZC_DRAM1_BASE + \ 136*91f16700Schasinglulu ARM_SCP_TZC_DRAM1_SIZE - 1U) 137*91f16700Schasinglulu 138*91f16700Schasinglulu # if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \ 139*91f16700Schasinglulu MEASURED_BOOT 140*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_SIZE UL(0x00001000) /* 4KB */ 141*91f16700Schasinglulu 142*91f16700Schasinglulu #if ENABLE_RME 143*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_BASE (ARM_REALM_BASE - \ 144*91f16700Schasinglulu ARM_EVENT_LOG_DRAM1_SIZE) 145*91f16700Schasinglulu #else 146*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_BASE (ARM_EL3_TZC_DRAM1_BASE - \ 147*91f16700Schasinglulu ARM_EVENT_LOG_DRAM1_SIZE) 148*91f16700Schasinglulu #endif /* ENABLE_RME */ 149*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_END (ARM_EVENT_LOG_DRAM1_BASE + \ 150*91f16700Schasinglulu ARM_EVENT_LOG_DRAM1_SIZE - \ 151*91f16700Schasinglulu 1U) 152*91f16700Schasinglulu #else 153*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_SIZE UL(0) 154*91f16700Schasinglulu #endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && MEASURED_BOOT */ 155*91f16700Schasinglulu 156*91f16700Schasinglulu #if ENABLE_RME 157*91f16700Schasinglulu #define ARM_L1_GPT_ADDR_BASE (ARM_DRAM1_BASE + \ 158*91f16700Schasinglulu ARM_DRAM1_SIZE - \ 159*91f16700Schasinglulu ARM_L1_GPT_SIZE) 160*91f16700Schasinglulu #define ARM_L1_GPT_END (ARM_L1_GPT_ADDR_BASE + \ 161*91f16700Schasinglulu ARM_L1_GPT_SIZE - 1U) 162*91f16700Schasinglulu 163*91f16700Schasinglulu #define ARM_REALM_BASE (ARM_EL3_RMM_SHARED_BASE - \ 164*91f16700Schasinglulu ARM_REALM_SIZE) 165*91f16700Schasinglulu 166*91f16700Schasinglulu #define ARM_REALM_END (ARM_REALM_BASE + ARM_REALM_SIZE - 1U) 167*91f16700Schasinglulu 168*91f16700Schasinglulu #define ARM_EL3_RMM_SHARED_BASE (ARM_DRAM1_BASE + \ 169*91f16700Schasinglulu ARM_DRAM1_SIZE - \ 170*91f16700Schasinglulu (ARM_SCP_TZC_DRAM1_SIZE + \ 171*91f16700Schasinglulu ARM_L1_GPT_SIZE + \ 172*91f16700Schasinglulu ARM_EL3_RMM_SHARED_SIZE + \ 173*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE)) 174*91f16700Schasinglulu 175*91f16700Schasinglulu #define ARM_EL3_RMM_SHARED_END (ARM_EL3_RMM_SHARED_BASE + \ 176*91f16700Schasinglulu ARM_EL3_RMM_SHARED_SIZE - 1U) 177*91f16700Schasinglulu #endif /* ENABLE_RME */ 178*91f16700Schasinglulu 179*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_BASE (ARM_SCP_TZC_DRAM1_BASE - \ 180*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE) 181*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_END (ARM_EL3_TZC_DRAM1_BASE + \ 182*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE - 1U) 183*91f16700Schasinglulu 184*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_BASE (ARM_DRAM1_BASE + \ 185*91f16700Schasinglulu ARM_DRAM1_SIZE - \ 186*91f16700Schasinglulu ARM_TZC_DRAM1_SIZE) 187*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_SIZE (ARM_TZC_DRAM1_SIZE - \ 188*91f16700Schasinglulu (ARM_SCP_TZC_DRAM1_SIZE + \ 189*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE + \ 190*91f16700Schasinglulu ARM_EL3_RMM_SHARED_SIZE + \ 191*91f16700Schasinglulu ARM_REALM_SIZE + \ 192*91f16700Schasinglulu ARM_L1_GPT_SIZE + \ 193*91f16700Schasinglulu ARM_EVENT_LOG_DRAM1_SIZE)) 194*91f16700Schasinglulu 195*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_END (ARM_AP_TZC_DRAM1_BASE + \ 196*91f16700Schasinglulu ARM_AP_TZC_DRAM1_SIZE - 1U) 197*91f16700Schasinglulu 198*91f16700Schasinglulu /* Define the Access permissions for Secure peripherals to NS_DRAM */ 199*91f16700Schasinglulu #define ARM_TZC_NS_DRAM_S_ACCESS TZC_REGION_S_NONE 200*91f16700Schasinglulu 201*91f16700Schasinglulu #ifdef SPD_opteed 202*91f16700Schasinglulu /* 203*91f16700Schasinglulu * BL2 needs to map 4MB at the end of TZC_DRAM1 in order to 204*91f16700Schasinglulu * load/authenticate the trusted os extra image. The first 512KB of 205*91f16700Schasinglulu * TZC_DRAM1 are reserved for trusted os (OPTEE). The extra image loading 206*91f16700Schasinglulu * for OPTEE is paged image which only include the paging part using 207*91f16700Schasinglulu * virtual memory but without "init" data. OPTEE will copy the "init" data 208*91f16700Schasinglulu * (from pager image) to the first 512KB of TZC_DRAM, and then copy the 209*91f16700Schasinglulu * extra image behind the "init" data. 210*91f16700Schasinglulu */ 211*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_BASE (ARM_AP_TZC_DRAM1_BASE + \ 212*91f16700Schasinglulu ARM_AP_TZC_DRAM1_SIZE - \ 213*91f16700Schasinglulu ARM_OPTEE_PAGEABLE_LOAD_SIZE) 214*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_SIZE UL(0x400000) 215*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_MEM MAP_REGION_FLAT( \ 216*91f16700Schasinglulu ARM_OPTEE_PAGEABLE_LOAD_BASE, \ 217*91f16700Schasinglulu ARM_OPTEE_PAGEABLE_LOAD_SIZE, \ 218*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 219*91f16700Schasinglulu 220*91f16700Schasinglulu /* 221*91f16700Schasinglulu * Map the memory for the OP-TEE core (also known as OP-TEE pager when paging 222*91f16700Schasinglulu * support is enabled). 223*91f16700Schasinglulu */ 224*91f16700Schasinglulu #define ARM_MAP_OPTEE_CORE_MEM MAP_REGION_FLAT( \ 225*91f16700Schasinglulu BL32_BASE, \ 226*91f16700Schasinglulu BL32_LIMIT - BL32_BASE, \ 227*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 228*91f16700Schasinglulu #endif /* SPD_opteed */ 229*91f16700Schasinglulu 230*91f16700Schasinglulu #define ARM_NS_DRAM1_BASE ARM_DRAM1_BASE 231*91f16700Schasinglulu #define ARM_NS_DRAM1_SIZE (ARM_DRAM1_SIZE - \ 232*91f16700Schasinglulu ARM_TZC_DRAM1_SIZE) 233*91f16700Schasinglulu 234*91f16700Schasinglulu #define ARM_NS_DRAM1_END (ARM_NS_DRAM1_BASE + \ 235*91f16700Schasinglulu ARM_NS_DRAM1_SIZE - 1U) 236*91f16700Schasinglulu #ifdef PLAT_ARM_DRAM1_BASE 237*91f16700Schasinglulu #define ARM_DRAM1_BASE PLAT_ARM_DRAM1_BASE 238*91f16700Schasinglulu #else 239*91f16700Schasinglulu #define ARM_DRAM1_BASE ULL(0x80000000) 240*91f16700Schasinglulu #endif /* PLAT_ARM_DRAM1_BASE */ 241*91f16700Schasinglulu 242*91f16700Schasinglulu #define ARM_DRAM1_SIZE ULL(0x80000000) 243*91f16700Schasinglulu #define ARM_DRAM1_END (ARM_DRAM1_BASE + \ 244*91f16700Schasinglulu ARM_DRAM1_SIZE - 1U) 245*91f16700Schasinglulu 246*91f16700Schasinglulu #define ARM_DRAM2_BASE PLAT_ARM_DRAM2_BASE 247*91f16700Schasinglulu #define ARM_DRAM2_SIZE PLAT_ARM_DRAM2_SIZE 248*91f16700Schasinglulu #define ARM_DRAM2_END (ARM_DRAM2_BASE + \ 249*91f16700Schasinglulu ARM_DRAM2_SIZE - 1U) 250*91f16700Schasinglulu /* Number of DRAM banks */ 251*91f16700Schasinglulu #define ARM_DRAM_NUM_BANKS 2UL 252*91f16700Schasinglulu 253*91f16700Schasinglulu #define ARM_IRQ_SEC_PHY_TIMER 29 254*91f16700Schasinglulu 255*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_0 8 256*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_1 9 257*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_2 10 258*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_3 11 259*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_4 12 260*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_5 13 261*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_6 14 262*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_7 15 263*91f16700Schasinglulu 264*91f16700Schasinglulu /* 265*91f16700Schasinglulu * Define a list of Group 1 Secure and Group 0 interrupt properties as per GICv3 266*91f16700Schasinglulu * terminology. On a GICv2 system or mode, the lists will be merged and treated 267*91f16700Schasinglulu * as Group 0 interrupts. 268*91f16700Schasinglulu */ 269*91f16700Schasinglulu #define ARM_G1S_IRQ_PROPS(grp) \ 270*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 271*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 272*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 273*91f16700Schasinglulu GIC_INTR_CFG_EDGE), \ 274*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 275*91f16700Schasinglulu GIC_INTR_CFG_EDGE), \ 276*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 277*91f16700Schasinglulu GIC_INTR_CFG_EDGE), \ 278*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 279*91f16700Schasinglulu GIC_INTR_CFG_EDGE), \ 280*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 281*91f16700Schasinglulu GIC_INTR_CFG_EDGE), \ 282*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 283*91f16700Schasinglulu GIC_INTR_CFG_EDGE) 284*91f16700Schasinglulu 285*91f16700Schasinglulu #define ARM_G0_IRQ_PROPS(grp) \ 286*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, PLAT_SDEI_NORMAL_PRI, (grp), \ 287*91f16700Schasinglulu GIC_INTR_CFG_EDGE), \ 288*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 289*91f16700Schasinglulu GIC_INTR_CFG_EDGE) 290*91f16700Schasinglulu 291*91f16700Schasinglulu #define ARM_MAP_SHARED_RAM MAP_REGION_FLAT( \ 292*91f16700Schasinglulu ARM_SHARED_RAM_BASE, \ 293*91f16700Schasinglulu ARM_SHARED_RAM_SIZE, \ 294*91f16700Schasinglulu MT_DEVICE | MT_RW | EL3_PAS) 295*91f16700Schasinglulu 296*91f16700Schasinglulu #define ARM_MAP_NS_DRAM1 MAP_REGION_FLAT( \ 297*91f16700Schasinglulu ARM_NS_DRAM1_BASE, \ 298*91f16700Schasinglulu ARM_NS_DRAM1_SIZE, \ 299*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 300*91f16700Schasinglulu 301*91f16700Schasinglulu #define ARM_MAP_DRAM2 MAP_REGION_FLAT( \ 302*91f16700Schasinglulu ARM_DRAM2_BASE, \ 303*91f16700Schasinglulu ARM_DRAM2_SIZE, \ 304*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 305*91f16700Schasinglulu 306*91f16700Schasinglulu #define ARM_MAP_TSP_SEC_MEM MAP_REGION_FLAT( \ 307*91f16700Schasinglulu TSP_SEC_MEM_BASE, \ 308*91f16700Schasinglulu TSP_SEC_MEM_SIZE, \ 309*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 310*91f16700Schasinglulu 311*91f16700Schasinglulu #if ARM_BL31_IN_DRAM 312*91f16700Schasinglulu #define ARM_MAP_BL31_SEC_DRAM MAP_REGION_FLAT( \ 313*91f16700Schasinglulu BL31_BASE, \ 314*91f16700Schasinglulu PLAT_ARM_MAX_BL31_SIZE, \ 315*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 316*91f16700Schasinglulu #endif 317*91f16700Schasinglulu 318*91f16700Schasinglulu #define ARM_MAP_EL3_TZC_DRAM MAP_REGION_FLAT( \ 319*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_BASE, \ 320*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE, \ 321*91f16700Schasinglulu MT_MEMORY | MT_RW | EL3_PAS) 322*91f16700Schasinglulu 323*91f16700Schasinglulu #define ARM_MAP_TRUSTED_DRAM MAP_REGION_FLAT( \ 324*91f16700Schasinglulu PLAT_ARM_TRUSTED_DRAM_BASE, \ 325*91f16700Schasinglulu PLAT_ARM_TRUSTED_DRAM_SIZE, \ 326*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 327*91f16700Schasinglulu 328*91f16700Schasinglulu # if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \ 329*91f16700Schasinglulu MEASURED_BOOT 330*91f16700Schasinglulu #define ARM_MAP_EVENT_LOG_DRAM1 \ 331*91f16700Schasinglulu MAP_REGION_FLAT( \ 332*91f16700Schasinglulu ARM_EVENT_LOG_DRAM1_BASE, \ 333*91f16700Schasinglulu ARM_EVENT_LOG_DRAM1_SIZE, \ 334*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 335*91f16700Schasinglulu #endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && MEASURED_BOOT */ 336*91f16700Schasinglulu 337*91f16700Schasinglulu #if ENABLE_RME 338*91f16700Schasinglulu /* 339*91f16700Schasinglulu * We add the EL3_RMM_SHARED size to RMM mapping to map the region as a block. 340*91f16700Schasinglulu * Else we end up requiring more pagetables in BL2 for ROMLIB build. 341*91f16700Schasinglulu */ 342*91f16700Schasinglulu #define ARM_MAP_RMM_DRAM MAP_REGION_FLAT( \ 343*91f16700Schasinglulu PLAT_ARM_RMM_BASE, \ 344*91f16700Schasinglulu (PLAT_ARM_RMM_SIZE + \ 345*91f16700Schasinglulu ARM_EL3_RMM_SHARED_SIZE), \ 346*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_REALM) 347*91f16700Schasinglulu 348*91f16700Schasinglulu 349*91f16700Schasinglulu #define ARM_MAP_GPT_L1_DRAM MAP_REGION_FLAT( \ 350*91f16700Schasinglulu ARM_L1_GPT_ADDR_BASE, \ 351*91f16700Schasinglulu ARM_L1_GPT_SIZE, \ 352*91f16700Schasinglulu MT_MEMORY | MT_RW | EL3_PAS) 353*91f16700Schasinglulu 354*91f16700Schasinglulu #define ARM_MAP_EL3_RMM_SHARED_MEM \ 355*91f16700Schasinglulu MAP_REGION_FLAT( \ 356*91f16700Schasinglulu ARM_EL3_RMM_SHARED_BASE, \ 357*91f16700Schasinglulu ARM_EL3_RMM_SHARED_SIZE, \ 358*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_REALM) 359*91f16700Schasinglulu 360*91f16700Schasinglulu #endif /* ENABLE_RME */ 361*91f16700Schasinglulu 362*91f16700Schasinglulu /* 363*91f16700Schasinglulu * Mapping for the BL1 RW region. This mapping is needed by BL2 in order to 364*91f16700Schasinglulu * share the Mbed TLS heap. Since the heap is allocated inside BL1, it resides 365*91f16700Schasinglulu * in the BL1 RW region. Hence, BL2 needs access to the BL1 RW region in order 366*91f16700Schasinglulu * to be able to access the heap. 367*91f16700Schasinglulu */ 368*91f16700Schasinglulu #define ARM_MAP_BL1_RW MAP_REGION_FLAT( \ 369*91f16700Schasinglulu BL1_RW_BASE, \ 370*91f16700Schasinglulu BL1_RW_LIMIT - BL1_RW_BASE, \ 371*91f16700Schasinglulu MT_MEMORY | MT_RW | EL3_PAS) 372*91f16700Schasinglulu 373*91f16700Schasinglulu /* 374*91f16700Schasinglulu * If SEPARATE_CODE_AND_RODATA=1 we define a region for each section 375*91f16700Schasinglulu * otherwise one region is defined containing both. 376*91f16700Schasinglulu */ 377*91f16700Schasinglulu #if SEPARATE_CODE_AND_RODATA 378*91f16700Schasinglulu #define ARM_MAP_BL_RO MAP_REGION_FLAT( \ 379*91f16700Schasinglulu BL_CODE_BASE, \ 380*91f16700Schasinglulu BL_CODE_END - BL_CODE_BASE, \ 381*91f16700Schasinglulu MT_CODE | EL3_PAS), \ 382*91f16700Schasinglulu MAP_REGION_FLAT( \ 383*91f16700Schasinglulu BL_RO_DATA_BASE, \ 384*91f16700Schasinglulu BL_RO_DATA_END \ 385*91f16700Schasinglulu - BL_RO_DATA_BASE, \ 386*91f16700Schasinglulu MT_RO_DATA | EL3_PAS) 387*91f16700Schasinglulu #else 388*91f16700Schasinglulu #define ARM_MAP_BL_RO MAP_REGION_FLAT( \ 389*91f16700Schasinglulu BL_CODE_BASE, \ 390*91f16700Schasinglulu BL_CODE_END - BL_CODE_BASE, \ 391*91f16700Schasinglulu MT_CODE | EL3_PAS) 392*91f16700Schasinglulu #endif 393*91f16700Schasinglulu #if USE_COHERENT_MEM 394*91f16700Schasinglulu #define ARM_MAP_BL_COHERENT_RAM MAP_REGION_FLAT( \ 395*91f16700Schasinglulu BL_COHERENT_RAM_BASE, \ 396*91f16700Schasinglulu BL_COHERENT_RAM_END \ 397*91f16700Schasinglulu - BL_COHERENT_RAM_BASE, \ 398*91f16700Schasinglulu MT_DEVICE | MT_RW | EL3_PAS) 399*91f16700Schasinglulu #endif 400*91f16700Schasinglulu #if USE_ROMLIB 401*91f16700Schasinglulu #define ARM_MAP_ROMLIB_CODE MAP_REGION_FLAT( \ 402*91f16700Schasinglulu ROMLIB_RO_BASE, \ 403*91f16700Schasinglulu ROMLIB_RO_LIMIT - ROMLIB_RO_BASE,\ 404*91f16700Schasinglulu MT_CODE | EL3_PAS) 405*91f16700Schasinglulu 406*91f16700Schasinglulu #define ARM_MAP_ROMLIB_DATA MAP_REGION_FLAT( \ 407*91f16700Schasinglulu ROMLIB_RW_BASE, \ 408*91f16700Schasinglulu ROMLIB_RW_END - ROMLIB_RW_BASE,\ 409*91f16700Schasinglulu MT_MEMORY | MT_RW | EL3_PAS) 410*91f16700Schasinglulu #endif 411*91f16700Schasinglulu 412*91f16700Schasinglulu /* 413*91f16700Schasinglulu * Map mem_protect flash region with read and write permissions 414*91f16700Schasinglulu */ 415*91f16700Schasinglulu #define ARM_V2M_MAP_MEM_PROTECT MAP_REGION_FLAT(PLAT_ARM_MEM_PROT_ADDR, \ 416*91f16700Schasinglulu V2M_FLASH_BLOCK_SIZE, \ 417*91f16700Schasinglulu MT_DEVICE | MT_RW | MT_SECURE) 418*91f16700Schasinglulu /* 419*91f16700Schasinglulu * Map the region for device tree configuration with read and write permissions 420*91f16700Schasinglulu */ 421*91f16700Schasinglulu #define ARM_MAP_BL_CONFIG_REGION MAP_REGION_FLAT(ARM_BL_RAM_BASE, \ 422*91f16700Schasinglulu (ARM_FW_CONFIGS_LIMIT \ 423*91f16700Schasinglulu - ARM_BL_RAM_BASE), \ 424*91f16700Schasinglulu MT_MEMORY | MT_RW | EL3_PAS) 425*91f16700Schasinglulu /* 426*91f16700Schasinglulu * Map L0_GPT with read and write permissions 427*91f16700Schasinglulu */ 428*91f16700Schasinglulu #if ENABLE_RME 429*91f16700Schasinglulu #define ARM_MAP_L0_GPT_REGION MAP_REGION_FLAT(ARM_L0_GPT_ADDR_BASE, \ 430*91f16700Schasinglulu ARM_L0_GPT_SIZE, \ 431*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_ROOT) 432*91f16700Schasinglulu #endif 433*91f16700Schasinglulu 434*91f16700Schasinglulu /* 435*91f16700Schasinglulu * The max number of regions like RO(code), coherent and data required by 436*91f16700Schasinglulu * different BL stages which need to be mapped in the MMU. 437*91f16700Schasinglulu */ 438*91f16700Schasinglulu #define ARM_BL_REGIONS 7 439*91f16700Schasinglulu 440*91f16700Schasinglulu #define MAX_MMAP_REGIONS (PLAT_ARM_MMAP_ENTRIES + \ 441*91f16700Schasinglulu ARM_BL_REGIONS) 442*91f16700Schasinglulu 443*91f16700Schasinglulu /* Memory mapped Generic timer interfaces */ 444*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_CNTCTL_BASE 445*91f16700Schasinglulu #define ARM_SYS_CNTCTL_BASE PLAT_ARM_SYS_CNTCTL_BASE 446*91f16700Schasinglulu #else 447*91f16700Schasinglulu #define ARM_SYS_CNTCTL_BASE UL(0x2a430000) 448*91f16700Schasinglulu #endif 449*91f16700Schasinglulu 450*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_CNTREAD_BASE 451*91f16700Schasinglulu #define ARM_SYS_CNTREAD_BASE PLAT_ARM_SYS_CNTREAD_BASE 452*91f16700Schasinglulu #else 453*91f16700Schasinglulu #define ARM_SYS_CNTREAD_BASE UL(0x2a800000) 454*91f16700Schasinglulu #endif 455*91f16700Schasinglulu 456*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_TIMCTL_BASE 457*91f16700Schasinglulu #define ARM_SYS_TIMCTL_BASE PLAT_ARM_SYS_TIMCTL_BASE 458*91f16700Schasinglulu #else 459*91f16700Schasinglulu #define ARM_SYS_TIMCTL_BASE UL(0x2a810000) 460*91f16700Schasinglulu #endif 461*91f16700Schasinglulu 462*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_CNT_BASE_S 463*91f16700Schasinglulu #define ARM_SYS_CNT_BASE_S PLAT_ARM_SYS_CNT_BASE_S 464*91f16700Schasinglulu #else 465*91f16700Schasinglulu #define ARM_SYS_CNT_BASE_S UL(0x2a820000) 466*91f16700Schasinglulu #endif 467*91f16700Schasinglulu 468*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_CNT_BASE_NS 469*91f16700Schasinglulu #define ARM_SYS_CNT_BASE_NS PLAT_ARM_SYS_CNT_BASE_NS 470*91f16700Schasinglulu #else 471*91f16700Schasinglulu #define ARM_SYS_CNT_BASE_NS UL(0x2a830000) 472*91f16700Schasinglulu #endif 473*91f16700Schasinglulu 474*91f16700Schasinglulu #define ARM_CONSOLE_BAUDRATE 115200 475*91f16700Schasinglulu 476*91f16700Schasinglulu /* Trusted Watchdog constants */ 477*91f16700Schasinglulu #ifdef PLAT_ARM_SP805_TWDG_BASE 478*91f16700Schasinglulu #define ARM_SP805_TWDG_BASE PLAT_ARM_SP805_TWDG_BASE 479*91f16700Schasinglulu #else 480*91f16700Schasinglulu #define ARM_SP805_TWDG_BASE UL(0x2a490000) 481*91f16700Schasinglulu #endif 482*91f16700Schasinglulu #define ARM_SP805_TWDG_CLK_HZ 32768 483*91f16700Schasinglulu /* The TBBR document specifies a watchdog timeout of 256 seconds. SP805 484*91f16700Schasinglulu * asserts reset after two consecutive countdowns (2 x 128 = 256 sec) */ 485*91f16700Schasinglulu #define ARM_TWDG_TIMEOUT_SEC 128 486*91f16700Schasinglulu #define ARM_TWDG_LOAD_VAL (ARM_SP805_TWDG_CLK_HZ * \ 487*91f16700Schasinglulu ARM_TWDG_TIMEOUT_SEC) 488*91f16700Schasinglulu 489*91f16700Schasinglulu /****************************************************************************** 490*91f16700Schasinglulu * Required platform porting definitions common to all ARM standard platforms 491*91f16700Schasinglulu *****************************************************************************/ 492*91f16700Schasinglulu 493*91f16700Schasinglulu /* 494*91f16700Schasinglulu * This macro defines the deepest retention state possible. A higher state 495*91f16700Schasinglulu * id will represent an invalid or a power down state. 496*91f16700Schasinglulu */ 497*91f16700Schasinglulu #define PLAT_MAX_RET_STATE ARM_LOCAL_STATE_RET 498*91f16700Schasinglulu 499*91f16700Schasinglulu /* 500*91f16700Schasinglulu * This macro defines the deepest power down states possible. Any state ID 501*91f16700Schasinglulu * higher than this is invalid. 502*91f16700Schasinglulu */ 503*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE ARM_LOCAL_STATE_OFF 504*91f16700Schasinglulu 505*91f16700Schasinglulu /* 506*91f16700Schasinglulu * Some data must be aligned on the biggest cache line size in the platform. 507*91f16700Schasinglulu * This is known only to the platform as it might have a combination of 508*91f16700Schasinglulu * integrated and external caches. 509*91f16700Schasinglulu */ 510*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE (U(1) << ARM_CACHE_WRITEBACK_SHIFT) 511*91f16700Schasinglulu 512*91f16700Schasinglulu /* 513*91f16700Schasinglulu * To enable FW_CONFIG to be loaded by BL1, define the corresponding base 514*91f16700Schasinglulu * and limit. Leave enough space of BL2 meminfo. 515*91f16700Schasinglulu */ 516*91f16700Schasinglulu #define ARM_FW_CONFIG_BASE (ARM_BL_RAM_BASE + sizeof(meminfo_t)) 517*91f16700Schasinglulu #define ARM_FW_CONFIG_LIMIT ((ARM_BL_RAM_BASE + PAGE_SIZE) \ 518*91f16700Schasinglulu + (PAGE_SIZE / 2U)) 519*91f16700Schasinglulu 520*91f16700Schasinglulu /* 521*91f16700Schasinglulu * Boot parameters passed from BL2 to BL31/BL32 are stored here 522*91f16700Schasinglulu */ 523*91f16700Schasinglulu #define ARM_BL2_MEM_DESC_BASE (ARM_FW_CONFIG_LIMIT) 524*91f16700Schasinglulu #define ARM_BL2_MEM_DESC_LIMIT (ARM_BL2_MEM_DESC_BASE \ 525*91f16700Schasinglulu + (PAGE_SIZE / 2U)) 526*91f16700Schasinglulu 527*91f16700Schasinglulu /* 528*91f16700Schasinglulu * Define limit of firmware configuration memory: 529*91f16700Schasinglulu * ARM_FW_CONFIG + ARM_BL2_MEM_DESC memory 530*91f16700Schasinglulu */ 531*91f16700Schasinglulu #define ARM_FW_CONFIGS_SIZE (PAGE_SIZE * 2) 532*91f16700Schasinglulu #define ARM_FW_CONFIGS_LIMIT (ARM_BL_RAM_BASE + ARM_FW_CONFIGS_SIZE) 533*91f16700Schasinglulu 534*91f16700Schasinglulu #if ENABLE_RME 535*91f16700Schasinglulu /* 536*91f16700Schasinglulu * Store the L0 GPT on Trusted SRAM next to firmware 537*91f16700Schasinglulu * configuration memory, 4KB aligned. 538*91f16700Schasinglulu */ 539*91f16700Schasinglulu #define ARM_L0_GPT_SIZE (PAGE_SIZE) 540*91f16700Schasinglulu #define ARM_L0_GPT_ADDR_BASE (ARM_FW_CONFIGS_LIMIT) 541*91f16700Schasinglulu #define ARM_L0_GPT_LIMIT (ARM_L0_GPT_ADDR_BASE + ARM_L0_GPT_SIZE) 542*91f16700Schasinglulu #else 543*91f16700Schasinglulu #define ARM_L0_GPT_SIZE U(0) 544*91f16700Schasinglulu #endif 545*91f16700Schasinglulu 546*91f16700Schasinglulu /******************************************************************************* 547*91f16700Schasinglulu * BL1 specific defines. 548*91f16700Schasinglulu * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of 549*91f16700Schasinglulu * addresses. 550*91f16700Schasinglulu ******************************************************************************/ 551*91f16700Schasinglulu #define BL1_RO_BASE PLAT_ARM_TRUSTED_ROM_BASE 552*91f16700Schasinglulu #ifdef PLAT_BL1_RO_LIMIT 553*91f16700Schasinglulu #define BL1_RO_LIMIT PLAT_BL1_RO_LIMIT 554*91f16700Schasinglulu #else 555*91f16700Schasinglulu #define BL1_RO_LIMIT (PLAT_ARM_TRUSTED_ROM_BASE \ 556*91f16700Schasinglulu + (PLAT_ARM_TRUSTED_ROM_SIZE - \ 557*91f16700Schasinglulu PLAT_ARM_MAX_ROMLIB_RO_SIZE)) 558*91f16700Schasinglulu #endif 559*91f16700Schasinglulu 560*91f16700Schasinglulu /* 561*91f16700Schasinglulu * Put BL1 RW at the top of the Trusted SRAM. 562*91f16700Schasinglulu */ 563*91f16700Schasinglulu #define BL1_RW_BASE (ARM_BL_RAM_BASE + \ 564*91f16700Schasinglulu ARM_BL_RAM_SIZE - \ 565*91f16700Schasinglulu (PLAT_ARM_MAX_BL1_RW_SIZE +\ 566*91f16700Schasinglulu PLAT_ARM_MAX_ROMLIB_RW_SIZE)) 567*91f16700Schasinglulu #define BL1_RW_LIMIT (ARM_BL_RAM_BASE + \ 568*91f16700Schasinglulu (ARM_BL_RAM_SIZE - PLAT_ARM_MAX_ROMLIB_RW_SIZE)) 569*91f16700Schasinglulu 570*91f16700Schasinglulu #define ROMLIB_RO_BASE BL1_RO_LIMIT 571*91f16700Schasinglulu #define ROMLIB_RO_LIMIT (PLAT_ARM_TRUSTED_ROM_BASE + PLAT_ARM_TRUSTED_ROM_SIZE) 572*91f16700Schasinglulu 573*91f16700Schasinglulu #define ROMLIB_RW_BASE (BL1_RW_BASE + PLAT_ARM_MAX_BL1_RW_SIZE) 574*91f16700Schasinglulu #define ROMLIB_RW_END (ROMLIB_RW_BASE + PLAT_ARM_MAX_ROMLIB_RW_SIZE) 575*91f16700Schasinglulu 576*91f16700Schasinglulu /******************************************************************************* 577*91f16700Schasinglulu * BL2 specific defines. 578*91f16700Schasinglulu ******************************************************************************/ 579*91f16700Schasinglulu #if RESET_TO_BL2 580*91f16700Schasinglulu #if ENABLE_PIE 581*91f16700Schasinglulu /* 582*91f16700Schasinglulu * As the BL31 image size appears to be increased when built with the ENABLE_PIE 583*91f16700Schasinglulu * option, set BL2 base address to have enough space for BL31 in Trusted SRAM. 584*91f16700Schasinglulu */ 585*91f16700Schasinglulu #define BL2_OFFSET (0x5000) 586*91f16700Schasinglulu #else 587*91f16700Schasinglulu /* Put BL2 towards the middle of the Trusted SRAM */ 588*91f16700Schasinglulu #define BL2_OFFSET (0x2000) 589*91f16700Schasinglulu #endif /* ENABLE_PIE */ 590*91f16700Schasinglulu 591*91f16700Schasinglulu #define BL2_BASE (ARM_TRUSTED_SRAM_BASE + \ 592*91f16700Schasinglulu (PLAT_ARM_TRUSTED_SRAM_SIZE >> 1) + \ 593*91f16700Schasinglulu BL2_OFFSET) 594*91f16700Schasinglulu #define BL2_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) 595*91f16700Schasinglulu 596*91f16700Schasinglulu #else 597*91f16700Schasinglulu /* 598*91f16700Schasinglulu * Put BL2 just below BL1. 599*91f16700Schasinglulu */ 600*91f16700Schasinglulu #define BL2_BASE (BL1_RW_BASE - PLAT_ARM_MAX_BL2_SIZE) 601*91f16700Schasinglulu #define BL2_LIMIT BL1_RW_BASE 602*91f16700Schasinglulu #endif 603*91f16700Schasinglulu 604*91f16700Schasinglulu /******************************************************************************* 605*91f16700Schasinglulu * BL31 specific defines. 606*91f16700Schasinglulu ******************************************************************************/ 607*91f16700Schasinglulu #if ARM_BL31_IN_DRAM || SEPARATE_NOBITS_REGION 608*91f16700Schasinglulu /* 609*91f16700Schasinglulu * Put BL31 at the bottom of TZC secured DRAM 610*91f16700Schasinglulu */ 611*91f16700Schasinglulu #define BL31_BASE ARM_AP_TZC_DRAM1_BASE 612*91f16700Schasinglulu #define BL31_LIMIT (ARM_AP_TZC_DRAM1_BASE + \ 613*91f16700Schasinglulu PLAT_ARM_MAX_BL31_SIZE) 614*91f16700Schasinglulu /* 615*91f16700Schasinglulu * For SEPARATE_NOBITS_REGION, BL31 PROGBITS are loaded in TZC secured DRAM. 616*91f16700Schasinglulu * And BL31 NOBITS are loaded in Trusted SRAM such that BL2 is overwritten. 617*91f16700Schasinglulu */ 618*91f16700Schasinglulu #if SEPARATE_NOBITS_REGION 619*91f16700Schasinglulu #define BL31_NOBITS_BASE BL2_BASE 620*91f16700Schasinglulu #define BL31_NOBITS_LIMIT BL2_LIMIT 621*91f16700Schasinglulu #endif /* SEPARATE_NOBITS_REGION */ 622*91f16700Schasinglulu #elif (RESET_TO_BL31) 623*91f16700Schasinglulu /* Ensure Position Independent support (PIE) is enabled for this config.*/ 624*91f16700Schasinglulu # if !ENABLE_PIE 625*91f16700Schasinglulu # error "BL31 must be a PIE if RESET_TO_BL31=1." 626*91f16700Schasinglulu #endif 627*91f16700Schasinglulu /* 628*91f16700Schasinglulu * Since this is PIE, we can define BL31_BASE to 0x0 since this macro is solely 629*91f16700Schasinglulu * used for building BL31 and not used for loading BL31. 630*91f16700Schasinglulu */ 631*91f16700Schasinglulu # define BL31_BASE 0x0 632*91f16700Schasinglulu # define BL31_LIMIT PLAT_ARM_MAX_BL31_SIZE 633*91f16700Schasinglulu #else 634*91f16700Schasinglulu /* Put BL31 below BL2 in the Trusted SRAM.*/ 635*91f16700Schasinglulu #define BL31_BASE ((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)\ 636*91f16700Schasinglulu - PLAT_ARM_MAX_BL31_SIZE) 637*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT BL2_BASE 638*91f16700Schasinglulu /* 639*91f16700Schasinglulu * For RESET_TO_BL2 make sure the BL31 can grow up until BL2_BASE. 640*91f16700Schasinglulu * This is because in the RESET_TO_BL2 configuration, 641*91f16700Schasinglulu * BL2 is always resident. 642*91f16700Schasinglulu */ 643*91f16700Schasinglulu #if RESET_TO_BL2 644*91f16700Schasinglulu #define BL31_LIMIT BL2_BASE 645*91f16700Schasinglulu #else 646*91f16700Schasinglulu #define BL31_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) 647*91f16700Schasinglulu #endif 648*91f16700Schasinglulu #endif 649*91f16700Schasinglulu 650*91f16700Schasinglulu /****************************************************************************** 651*91f16700Schasinglulu * RMM specific defines 652*91f16700Schasinglulu *****************************************************************************/ 653*91f16700Schasinglulu #if ENABLE_RME 654*91f16700Schasinglulu #define RMM_BASE (ARM_REALM_BASE) 655*91f16700Schasinglulu #define RMM_LIMIT (RMM_BASE + ARM_REALM_SIZE) 656*91f16700Schasinglulu #define RMM_SHARED_BASE (ARM_EL3_RMM_SHARED_BASE) 657*91f16700Schasinglulu #define RMM_SHARED_SIZE (ARM_EL3_RMM_SHARED_SIZE) 658*91f16700Schasinglulu #endif 659*91f16700Schasinglulu 660*91f16700Schasinglulu #if !defined(__aarch64__) || JUNO_AARCH32_EL3_RUNTIME 661*91f16700Schasinglulu /******************************************************************************* 662*91f16700Schasinglulu * BL32 specific defines for EL3 runtime in AArch32 mode 663*91f16700Schasinglulu ******************************************************************************/ 664*91f16700Schasinglulu # if RESET_TO_SP_MIN && !JUNO_AARCH32_EL3_RUNTIME 665*91f16700Schasinglulu /* Ensure Position Independent support (PIE) is enabled for this config.*/ 666*91f16700Schasinglulu # if !ENABLE_PIE 667*91f16700Schasinglulu # error "BL32 must be a PIE if RESET_TO_SP_MIN=1." 668*91f16700Schasinglulu #endif 669*91f16700Schasinglulu /* 670*91f16700Schasinglulu * Since this is PIE, we can define BL32_BASE to 0x0 since this macro is solely 671*91f16700Schasinglulu * used for building BL32 and not used for loading BL32. 672*91f16700Schasinglulu */ 673*91f16700Schasinglulu # define BL32_BASE 0x0 674*91f16700Schasinglulu # define BL32_LIMIT PLAT_ARM_MAX_BL32_SIZE 675*91f16700Schasinglulu # else 676*91f16700Schasinglulu /* Put BL32 below BL2 in the Trusted SRAM.*/ 677*91f16700Schasinglulu # define BL32_BASE ((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)\ 678*91f16700Schasinglulu - PLAT_ARM_MAX_BL32_SIZE) 679*91f16700Schasinglulu # define BL32_PROGBITS_LIMIT BL2_BASE 680*91f16700Schasinglulu # define BL32_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) 681*91f16700Schasinglulu # endif /* RESET_TO_SP_MIN && !JUNO_AARCH32_EL3_RUNTIME */ 682*91f16700Schasinglulu 683*91f16700Schasinglulu #else 684*91f16700Schasinglulu /******************************************************************************* 685*91f16700Schasinglulu * BL32 specific defines for EL3 runtime in AArch64 mode 686*91f16700Schasinglulu ******************************************************************************/ 687*91f16700Schasinglulu /* 688*91f16700Schasinglulu * On ARM standard platforms, the TSP can execute from Trusted SRAM, 689*91f16700Schasinglulu * Trusted DRAM (if available) or the DRAM region secured by the TrustZone 690*91f16700Schasinglulu * controller. 691*91f16700Schasinglulu */ 692*91f16700Schasinglulu # if SPM_MM || SPMC_AT_EL3 693*91f16700Schasinglulu # define TSP_SEC_MEM_BASE (ARM_AP_TZC_DRAM1_BASE + ULL(0x200000)) 694*91f16700Schasinglulu # define TSP_SEC_MEM_SIZE (ARM_AP_TZC_DRAM1_SIZE - ULL(0x200000)) 695*91f16700Schasinglulu # define BL32_BASE (ARM_AP_TZC_DRAM1_BASE + ULL(0x200000)) 696*91f16700Schasinglulu # define BL32_LIMIT (ARM_AP_TZC_DRAM1_BASE + \ 697*91f16700Schasinglulu ARM_AP_TZC_DRAM1_SIZE) 698*91f16700Schasinglulu # elif defined(SPD_spmd) 699*91f16700Schasinglulu # define TSP_SEC_MEM_BASE (ARM_AP_TZC_DRAM1_BASE + ULL(0x200000)) 700*91f16700Schasinglulu # define TSP_SEC_MEM_SIZE (ARM_AP_TZC_DRAM1_SIZE - ULL(0x200000)) 701*91f16700Schasinglulu # define BL32_BASE PLAT_ARM_SPMC_BASE 702*91f16700Schasinglulu # define BL32_LIMIT (PLAT_ARM_SPMC_BASE + \ 703*91f16700Schasinglulu PLAT_ARM_SPMC_SIZE) 704*91f16700Schasinglulu # elif ARM_BL31_IN_DRAM 705*91f16700Schasinglulu # define TSP_SEC_MEM_BASE (ARM_AP_TZC_DRAM1_BASE + \ 706*91f16700Schasinglulu PLAT_ARM_MAX_BL31_SIZE) 707*91f16700Schasinglulu # define TSP_SEC_MEM_SIZE (ARM_AP_TZC_DRAM1_SIZE - \ 708*91f16700Schasinglulu PLAT_ARM_MAX_BL31_SIZE) 709*91f16700Schasinglulu # define BL32_BASE (ARM_AP_TZC_DRAM1_BASE + \ 710*91f16700Schasinglulu PLAT_ARM_MAX_BL31_SIZE) 711*91f16700Schasinglulu # define BL32_LIMIT (ARM_AP_TZC_DRAM1_BASE + \ 712*91f16700Schasinglulu ARM_AP_TZC_DRAM1_SIZE) 713*91f16700Schasinglulu # elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_SRAM_ID 714*91f16700Schasinglulu # define TSP_SEC_MEM_BASE ARM_BL_RAM_BASE 715*91f16700Schasinglulu # define TSP_SEC_MEM_SIZE ARM_BL_RAM_SIZE 716*91f16700Schasinglulu # define TSP_PROGBITS_LIMIT BL31_BASE 717*91f16700Schasinglulu # define BL32_BASE ARM_FW_CONFIGS_LIMIT 718*91f16700Schasinglulu # define BL32_LIMIT BL31_BASE 719*91f16700Schasinglulu # elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_DRAM_ID 720*91f16700Schasinglulu # define TSP_SEC_MEM_BASE PLAT_ARM_TRUSTED_DRAM_BASE 721*91f16700Schasinglulu # define TSP_SEC_MEM_SIZE PLAT_ARM_TRUSTED_DRAM_SIZE 722*91f16700Schasinglulu # define BL32_BASE PLAT_ARM_TRUSTED_DRAM_BASE 723*91f16700Schasinglulu # define BL32_LIMIT (PLAT_ARM_TRUSTED_DRAM_BASE \ 724*91f16700Schasinglulu + SZ_4M) 725*91f16700Schasinglulu # elif ARM_TSP_RAM_LOCATION_ID == ARM_DRAM_ID 726*91f16700Schasinglulu # define TSP_SEC_MEM_BASE ARM_AP_TZC_DRAM1_BASE 727*91f16700Schasinglulu # define TSP_SEC_MEM_SIZE ARM_AP_TZC_DRAM1_SIZE 728*91f16700Schasinglulu # define BL32_BASE ARM_AP_TZC_DRAM1_BASE 729*91f16700Schasinglulu # define BL32_LIMIT (ARM_AP_TZC_DRAM1_BASE + \ 730*91f16700Schasinglulu ARM_AP_TZC_DRAM1_SIZE) 731*91f16700Schasinglulu # else 732*91f16700Schasinglulu # error "Unsupported ARM_TSP_RAM_LOCATION_ID value" 733*91f16700Schasinglulu # endif 734*91f16700Schasinglulu #endif /* !__aarch64__ || JUNO_AARCH32_EL3_RUNTIME */ 735*91f16700Schasinglulu 736*91f16700Schasinglulu /* 737*91f16700Schasinglulu * BL32 is mandatory in AArch32. In AArch64, undefine BL32_BASE if there is no 738*91f16700Schasinglulu * SPD and no SPM-MM and no SPMC-AT-EL3, as they are the only ones that can be 739*91f16700Schasinglulu * used as BL32. 740*91f16700Schasinglulu */ 741*91f16700Schasinglulu #if defined(__aarch64__) && !JUNO_AARCH32_EL3_RUNTIME 742*91f16700Schasinglulu # if defined(SPD_none) && !SPM_MM && !SPMC_AT_EL3 743*91f16700Schasinglulu # undef BL32_BASE 744*91f16700Schasinglulu # endif /* defined(SPD_none) && !SPM_MM || !SPMC_AT_EL3 */ 745*91f16700Schasinglulu #endif /* defined(__aarch64__) && !JUNO_AARCH32_EL3_RUNTIME */ 746*91f16700Schasinglulu 747*91f16700Schasinglulu /******************************************************************************* 748*91f16700Schasinglulu * FWU Images: NS_BL1U, BL2U & NS_BL2U defines. 749*91f16700Schasinglulu ******************************************************************************/ 750*91f16700Schasinglulu #define BL2U_BASE BL2_BASE 751*91f16700Schasinglulu #define BL2U_LIMIT BL2_LIMIT 752*91f16700Schasinglulu 753*91f16700Schasinglulu #define NS_BL2U_BASE ARM_NS_DRAM1_BASE 754*91f16700Schasinglulu #define NS_BL1U_BASE (PLAT_ARM_NVM_BASE + UL(0x03EB8000)) 755*91f16700Schasinglulu 756*91f16700Schasinglulu /* 757*91f16700Schasinglulu * ID of the secure physical generic timer interrupt used by the TSP. 758*91f16700Schasinglulu */ 759*91f16700Schasinglulu #define TSP_IRQ_SEC_PHY_TIMER ARM_IRQ_SEC_PHY_TIMER 760*91f16700Schasinglulu 761*91f16700Schasinglulu 762*91f16700Schasinglulu /* 763*91f16700Schasinglulu * One cache line needed for bakery locks on ARM platforms 764*91f16700Schasinglulu */ 765*91f16700Schasinglulu #define PLAT_PERCPU_BAKERY_LOCK_SIZE (1 * CACHE_WRITEBACK_GRANULE) 766*91f16700Schasinglulu 767*91f16700Schasinglulu /* Priority levels for ARM platforms */ 768*91f16700Schasinglulu #if ENABLE_FEAT_RAS && FFH_SUPPORT 769*91f16700Schasinglulu #define PLAT_RAS_PRI 0x10 770*91f16700Schasinglulu #endif 771*91f16700Schasinglulu #define PLAT_SDEI_CRITICAL_PRI 0x60 772*91f16700Schasinglulu #define PLAT_SDEI_NORMAL_PRI 0x70 773*91f16700Schasinglulu 774*91f16700Schasinglulu /* CPU Fault Handling Interrupt(FHI) PPI interrupt ID */ 775*91f16700Schasinglulu #define PLAT_CORE_FAULT_IRQ 17 776*91f16700Schasinglulu 777*91f16700Schasinglulu /* ARM platforms use 3 upper bits of secure interrupt priority */ 778*91f16700Schasinglulu #define PLAT_PRI_BITS 3 779*91f16700Schasinglulu 780*91f16700Schasinglulu /* SGI used for SDEI signalling */ 781*91f16700Schasinglulu #define ARM_SDEI_SGI ARM_IRQ_SEC_SGI_0 782*91f16700Schasinglulu 783*91f16700Schasinglulu #if SDEI_IN_FCONF 784*91f16700Schasinglulu /* ARM SDEI dynamic private event max count */ 785*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_MAX_CNT 3 786*91f16700Schasinglulu 787*91f16700Schasinglulu /* ARM SDEI dynamic shared event max count */ 788*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_MAX_CNT 3 789*91f16700Schasinglulu #else 790*91f16700Schasinglulu /* ARM SDEI dynamic private event numbers */ 791*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_0 1000 792*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_1 1001 793*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_2 1002 794*91f16700Schasinglulu 795*91f16700Schasinglulu /* ARM SDEI dynamic shared event numbers */ 796*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_0 2000 797*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_1 2001 798*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_2 2002 799*91f16700Schasinglulu 800*91f16700Schasinglulu #define ARM_SDEI_PRIVATE_EVENTS \ 801*91f16700Schasinglulu SDEI_DEFINE_EVENT_0(ARM_SDEI_SGI), \ 802*91f16700Schasinglulu SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \ 803*91f16700Schasinglulu SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \ 804*91f16700Schasinglulu SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC) 805*91f16700Schasinglulu 806*91f16700Schasinglulu #define ARM_SDEI_SHARED_EVENTS \ 807*91f16700Schasinglulu SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \ 808*91f16700Schasinglulu SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \ 809*91f16700Schasinglulu SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC) 810*91f16700Schasinglulu #endif /* SDEI_IN_FCONF */ 811*91f16700Schasinglulu 812*91f16700Schasinglulu #endif /* ARM_DEF_H */ 813