1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2023, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * Copyright (C) 2017-2023 Nuvoton Ltd. 5*91f16700Schasinglulu * 6*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 7*91f16700Schasinglulu */ 8*91f16700Schasinglulu 9*91f16700Schasinglulu #ifndef NPCM845x_ARM_DEF_H 10*91f16700Schasinglulu #define NPCM845x_ARM_DEF_H 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include <arch.h> 13*91f16700Schasinglulu #include <common/interrupt_props.h> 14*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h> 15*91f16700Schasinglulu #include <drivers/arm/gic_common.h> 16*91f16700Schasinglulu #include <lib/utils_def.h> 17*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_defs.h> 18*91f16700Schasinglulu #include <plat/arm/common/smccc_def.h> 19*91f16700Schasinglulu #include <plat/common/common_def.h> 20*91f16700Schasinglulu 21*91f16700Schasinglulu /* This flag will add zones to the MMU so that it will be possible to debug */ 22*91f16700Schasinglulu #ifdef NPCM845X_DEBUG 23*91f16700Schasinglulu #define ALLOW_DEBUG_MMU 24*91f16700Schasinglulu #undef ALLOW_DEBUG_MMU 25*91f16700Schasinglulu #endif /* NPCM845X_DEBUG */ 26*91f16700Schasinglulu 27*91f16700Schasinglulu #undef CONFIG_TARGET_ARBEL_PALLADIUM 28*91f16700Schasinglulu /****************************************************************************** 29*91f16700Schasinglulu * Definitions common to all ARM standard platforms 30*91f16700Schasinglulu *****************************************************************************/ 31*91f16700Schasinglulu 32*91f16700Schasinglulu /* 33*91f16700Schasinglulu * Root of trust key hash lengths 34*91f16700Schasinglulu */ 35*91f16700Schasinglulu #define ARM_ROTPK_HEADER_LEN 19 36*91f16700Schasinglulu #define ARM_ROTPK_HASH_LEN 32 37*91f16700Schasinglulu 38*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL31 */ 39*91f16700Schasinglulu #define ARM_BL31_PLAT_PARAM_VAL ULL(0x0f1e2d3c4b5a6978) 40*91f16700Schasinglulu 41*91f16700Schasinglulu /* No need for system because we have only one cluster */ 42*91f16700Schasinglulu #define ARM_SYSTEM_COUNT U(0) 43*91f16700Schasinglulu 44*91f16700Schasinglulu #define ARM_CACHE_WRITEBACK_SHIFT 6 45*91f16700Schasinglulu 46*91f16700Schasinglulu /* 47*91f16700Schasinglulu * Macros mapping the MPIDR Affinity levels to ARM Platform Power levels. 48*91f16700Schasinglulu * The power levels have a 1:1 mapping with the MPIDR affinity levels. 49*91f16700Schasinglulu */ 50*91f16700Schasinglulu /* In NPCM845x - refers to cores */ 51*91f16700Schasinglulu #define ARM_PWR_LVL0 MPIDR_AFFLVL0 52*91f16700Schasinglulu 53*91f16700Schasinglulu /* In NPCM845x - refers to cluster */ 54*91f16700Schasinglulu #define ARM_PWR_LVL1 MPIDR_AFFLVL1 55*91f16700Schasinglulu 56*91f16700Schasinglulu /* No need for additional settings because the platform doesn't have system */ 57*91f16700Schasinglulu 58*91f16700Schasinglulu /* 59*91f16700Schasinglulu * Macros for local power states in ARM platforms encoded by State-ID field 60*91f16700Schasinglulu * within the power-state parameter. 61*91f16700Schasinglulu */ 62*91f16700Schasinglulu #define NPCM845x_PLAT_PRIMARY_CPU U(0x0) 63*91f16700Schasinglulu #define NPCM845x_CLUSTER_COUNT U(1) 64*91f16700Schasinglulu 65*91f16700Schasinglulu #ifdef SECONDARY_BRINGUP 66*91f16700Schasinglulu #define NPCM845x_MAX_CPU_PER_CLUSTER U(2) 67*91f16700Schasinglulu #define NPCM845x_PLATFORM_CORE_COUNT U(2) 68*91f16700Schasinglulu #define NPCM845x_PLATFORM_CLUSTER0_CORE_COUNT U(2) 69*91f16700Schasinglulu #else 70*91f16700Schasinglulu #define NPCM845x_MAX_CPU_PER_CLUSTER U(4) 71*91f16700Schasinglulu #define NPCM845x_PLATFORM_CORE_COUNT U(4) 72*91f16700Schasinglulu #define NPCM845x_PLATFORM_CLUSTER0_CORE_COUNT U(4) 73*91f16700Schasinglulu #endif /* SECONDARY_BRINGUP */ 74*91f16700Schasinglulu 75*91f16700Schasinglulu #define NPCM845x_SYSTEM_COUNT U(0) 76*91f16700Schasinglulu 77*91f16700Schasinglulu /* Memory mapping for NPCM845x */ 78*91f16700Schasinglulu #define NPCM845x_REG_BASE 0xf0000000 79*91f16700Schasinglulu #define NPCM845x_REG_SIZE 0x0ff16000 80*91f16700Schasinglulu 81*91f16700Schasinglulu /* 82*91f16700Schasinglulu * DRAM 83*91f16700Schasinglulu * 0x3fffffff +-------------+ 84*91f16700Schasinglulu * | BL33 | (non-secure) 85*91f16700Schasinglulu * 0x06200000 +-------------+ 86*91f16700Schasinglulu * | BL32 SHARED | (non-secure) 87*91f16700Schasinglulu * 0x06000000 +-------------+ 88*91f16700Schasinglulu * | BL32 | (secure) 89*91f16700Schasinglulu * 0x02100000 +-------------+ 90*91f16700Schasinglulu * | BL31 | (secure) 91*91f16700Schasinglulu * 0x02000000 +-------------+ 92*91f16700Schasinglulu * | | (non-secure) 93*91f16700Schasinglulu * 0x00000000 +-------------+ 94*91f16700Schasinglulu * 95*91f16700Schasinglulu * Trusted ROM 96*91f16700Schasinglulu * 0xfff50000 +-------------+ 97*91f16700Schasinglulu * | BL1 (ro) | 98*91f16700Schasinglulu * 0xfff40000 +-------------+ 99*91f16700Schasinglulu */ 100*91f16700Schasinglulu 101*91f16700Schasinglulu #define ARM_DRAM1_BASE ULL(0x00000000) 102*91f16700Schasinglulu #ifndef CONFIG_TARGET_ARBEL_PALLADIUM 103*91f16700Schasinglulu /* 104*91f16700Schasinglulu * Although npcm845x is 4G, 105*91f16700Schasinglulu * consider only 2G Trusted Firmware memory allocation 106*91f16700Schasinglulu */ 107*91f16700Schasinglulu #define ARM_DRAM1_SIZE ULL(0x37000000) 108*91f16700Schasinglulu #else 109*91f16700Schasinglulu #define ARM_DRAM1_SIZE ULL(0x10000000) 110*91f16700Schasinglulu #define ARM_DRAM1_END (ARM_DRAM1_BASE + ARM_DRAM1_SIZE - 1U) 111*91f16700Schasinglulu #endif /* CONFIG_TARGET_ARBEL_PALLADIUM */ 112*91f16700Schasinglulu 113*91f16700Schasinglulu /* 114*91f16700Schasinglulu * The top 16MB of DRAM1 is configured as secure access only using the TZC 115*91f16700Schasinglulu * - SCP TZC DRAM: If present, DRAM reserved for SCP use 116*91f16700Schasinglulu * - AP TZC DRAM: The remaining TZC secured DRAM reserved for AP use 117*91f16700Schasinglulu */ 118*91f16700Schasinglulu 119*91f16700Schasinglulu /* Check for redundancy */ 120*91f16700Schasinglulu #ifdef NPCM845X_DEBUG 121*91f16700Schasinglulu #define PLAT_ARM_NS_IMAGE_BASE 0x0 122*91f16700Schasinglulu #endif /* NPCM845X_DEBUG */ 123*91f16700Schasinglulu 124*91f16700Schasinglulu #define ARM_TZC_DRAM1_SIZE UL(0x01000000) 125*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_SIZE PLAT_ARM_SCP_TZC_DRAM1_SIZE 126*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_END (ARM_SCP_TZC_DRAM1_BASE + \ 127*91f16700Schasinglulu ARM_SCP_TZC_DRAM1_SIZE - 1U) 128*91f16700Schasinglulu 129*91f16700Schasinglulu /* 130*91f16700Schasinglulu * Define a 2MB region within the TZC secured DRAM for use by EL3 runtime 131*91f16700Schasinglulu * firmware. This region is meant to be NOLOAD and will not be zero 132*91f16700Schasinglulu * initialized. Data sections with the attribute `arm_el3_tzc_dram` 133*91f16700Schasinglulu * will be placed here. 134*91f16700Schasinglulu * 135*91f16700Schasinglulu * NPCM845x - Currently the platform doesn't have EL3 implementation 136*91f16700Schasinglulu * on secured DRAM. 137*91f16700Schasinglulu */ 138*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_BASE (ARM_SCP_TZC_DRAM1_BASE - \ 139*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE) 140*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_SIZE UL(0x00200000) /* 2 MB */ 141*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_END (ARM_EL3_TZC_DRAM1_BASE + \ 142*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE - 1U) 143*91f16700Schasinglulu 144*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_BASE 0x02100000 145*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_SIZE (ARM_TZC_DRAM1_SIZE - \ 146*91f16700Schasinglulu (ARM_SCP_TZC_DRAM1_SIZE + \ 147*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE)) 148*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_END (ARM_AP_TZC_DRAM1_BASE + \ 149*91f16700Schasinglulu ARM_AP_TZC_DRAM1_SIZE - 1U) 150*91f16700Schasinglulu 151*91f16700Schasinglulu /* Define the Access permissions for Secure peripherals to NS_DRAM */ 152*91f16700Schasinglulu #define ARM_TZC_NS_DRAM_S_ACCESS TZC_REGION_S_NONE 153*91f16700Schasinglulu 154*91f16700Schasinglulu #ifdef SPD_opteed 155*91f16700Schasinglulu /* 156*91f16700Schasinglulu * BL2 needs to map 4MB at the end of TZC_DRAM1 in order to 157*91f16700Schasinglulu * load/authenticate the trusted os extra image. The first 512KB of 158*91f16700Schasinglulu * TZC_DRAM1 are reserved for trusted os (OPTEE). The extra image loading 159*91f16700Schasinglulu * for OPTEE is paged image which only include the paging part using 160*91f16700Schasinglulu * virtual memory but without "init" data. OPTEE will copy the "init" data 161*91f16700Schasinglulu * (from pager image) to the first 512KB of TZC_DRAM, and then copy the 162*91f16700Schasinglulu * extra image behind the "init" data. 163*91f16700Schasinglulu */ 164*91f16700Schasinglulu #define TSP_SEC_MEM_BASE ARM_AP_TZC_DRAM1_BASE 165*91f16700Schasinglulu #define TSP_SEC_MEM_SIZE ARM_AP_TZC_DRAM1_SIZE 166*91f16700Schasinglulu #define BL32_BASE ARM_AP_TZC_DRAM1_BASE 167*91f16700Schasinglulu #define BL32_LIMIT (ARM_AP_TZC_DRAM1_BASE + \ 168*91f16700Schasinglulu ARM_AP_TZC_DRAM1_SIZE) 169*91f16700Schasinglulu 170*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_BASE ( \ 171*91f16700Schasinglulu ARM_AP_TZC_DRAM1_BASE + ARM_AP_TZC_DRAM1_SIZE - \ 172*91f16700Schasinglulu ARM_OPTEE_PAGEABLE_LOAD_SIZE) 173*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_SIZE UL(0x400000) 174*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_MEM MAP_REGION_FLAT( \ 175*91f16700Schasinglulu ARM_OPTEE_PAGEABLE_LOAD_BASE, \ 176*91f16700Schasinglulu ARM_OPTEE_PAGEABLE_LOAD_SIZE, \ 177*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 178*91f16700Schasinglulu 179*91f16700Schasinglulu /* 180*91f16700Schasinglulu * Map the memory for the OP-TEE core (also known as OP-TEE pager 181*91f16700Schasinglulu * when paging support is enabled). 182*91f16700Schasinglulu */ 183*91f16700Schasinglulu #define ARM_MAP_OPTEE_CORE_MEM MAP_REGION_FLAT( \ 184*91f16700Schasinglulu BL32_BASE, BL32_LIMIT - BL32_BASE, \ 185*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 186*91f16700Schasinglulu #endif /* SPD_opteed */ 187*91f16700Schasinglulu 188*91f16700Schasinglulu #define ARM_NS_DRAM1_BASE ARM_DRAM1_BASE 189*91f16700Schasinglulu #define ARM_NS_DRAM1_SIZE (ARM_DRAM1_SIZE - \ 190*91f16700Schasinglulu ARM_TZC_DRAM1_SIZE) 191*91f16700Schasinglulu #define ARM_NS_DRAM1_END (ARM_NS_DRAM1_BASE + \ 192*91f16700Schasinglulu ARM_NS_DRAM1_SIZE - 1U) 193*91f16700Schasinglulu 194*91f16700Schasinglulu /* The platform doesn't use DRAM2 but it has to have a value for calculation */ 195*91f16700Schasinglulu #define ARM_DRAM2_BASE 0 /* PLAT_ARM_DRAM_BASE */ 196*91f16700Schasinglulu #define ARM_DRAM2_SIZE 1 /* PLAT_ARM_DRAM_SIZE */ 197*91f16700Schasinglulu #define ARM_DRAM2_END (ARM_DRAM2_BASE + ARM_DRAM2_SIZE - 1U) 198*91f16700Schasinglulu 199*91f16700Schasinglulu #define FIRST_EXT_INTERRUPT_NUM U(32) 200*91f16700Schasinglulu #define ARM_IRQ_SEC_PHY_TIMER (U(29) + FIRST_EXT_INTERRUPT_NUM) 201*91f16700Schasinglulu 202*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_0 8 203*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_1 9 204*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_2 10 205*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_3 11 206*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_4 12 207*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_5 13 208*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_6 14 209*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_7 15 210*91f16700Schasinglulu 211*91f16700Schasinglulu /* 212*91f16700Schasinglulu * Define a list of Group 1 Secure and Group 0 interrupt properties 213*91f16700Schasinglulu * as per GICv3 terminology. On a GICv2 system or mode, 214*91f16700Schasinglulu * the lists will be merged and treated as Group 0 interrupts. 215*91f16700Schasinglulu */ 216*91f16700Schasinglulu #define ARM_G1S_IRQ_PROPS(grp) \ 217*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, \ 218*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_LEVEL), \ 219*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, \ 220*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE), \ 221*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, \ 222*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE), \ 223*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, \ 224*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE), \ 225*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, \ 226*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE), \ 227*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, \ 228*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE), \ 229*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, \ 230*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE) 231*91f16700Schasinglulu 232*91f16700Schasinglulu #define ARM_G0_IRQ_PROPS(grp) \ 233*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, \ 234*91f16700Schasinglulu PLAT_SDEI_NORMAL_PRI, (grp), GIC_INTR_CFG_EDGE), \ 235*91f16700Schasinglulu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, \ 236*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE) 237*91f16700Schasinglulu 238*91f16700Schasinglulu #define ARM_MAP_SHARED_RAM MAP_REGION_FLAT( \ 239*91f16700Schasinglulu ARM_SHARED_RAM_BASE, ARM_SHARED_RAM_SIZE, \ 240*91f16700Schasinglulu MT_DEVICE | MT_RW | MT_SECURE) 241*91f16700Schasinglulu 242*91f16700Schasinglulu #ifdef ALLOW_DEBUG_MMU 243*91f16700Schasinglulu /* In order to be able to debug, 244*91f16700Schasinglulu * the platform needs to add BL33 and BL32 to MMU as well. 245*91f16700Schasinglulu */ 246*91f16700Schasinglulu #define ARM_MAP_NS_DRAM1 MAP_REGION_FLAT( \ 247*91f16700Schasinglulu ARM_NS_DRAM1_BASE, ARM_NS_DRAM1_SIZE, \ 248*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 249*91f16700Schasinglulu 250*91f16700Schasinglulu #ifdef BL32_BASE 251*91f16700Schasinglulu #define ARM_MAP_BL32_CORE_MEM MAP_REGION_FLAT( \ 252*91f16700Schasinglulu BL32_BASE, BL32_LIMIT - BL32_BASE, \ 253*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 254*91f16700Schasinglulu #endif /* BL32_BASE */ 255*91f16700Schasinglulu 256*91f16700Schasinglulu #ifdef NPCM845X_DEBUG 257*91f16700Schasinglulu #define ARM_MAP_SEC_BB_MEM MAP_REGION_FLAT( \ 258*91f16700Schasinglulu 0xFFFB0000, 0x20000, \ 259*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 260*91f16700Schasinglulu #endif /* NPCM845X_DEBUG */ 261*91f16700Schasinglulu #endif /* BL32_BASE */ 262*91f16700Schasinglulu 263*91f16700Schasinglulu #define ARM_MAP_DRAM2 MAP_REGION_FLAT( \ 264*91f16700Schasinglulu ARM_DRAM2_BASE, ARM_DRAM2_SIZE, \ 265*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 266*91f16700Schasinglulu 267*91f16700Schasinglulu #define ARM_MAP_TSP_SEC_MEM MAP_REGION_FLAT( \ 268*91f16700Schasinglulu TSP_SEC_MEM_BASE, TSP_SEC_MEM_SIZE, \ 269*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 270*91f16700Schasinglulu 271*91f16700Schasinglulu #if ARM_BL31_IN_DRAM 272*91f16700Schasinglulu #define ARM_MAP_BL31_SEC_DRAM MAP_REGION_FLAT( \ 273*91f16700Schasinglulu BL31_BASE, PLAT_ARM_MAX_BL31_SIZE, \ 274*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 275*91f16700Schasinglulu #endif /* ARM_BL31_IN_DRAM */ 276*91f16700Schasinglulu 277*91f16700Schasinglulu /* Currently the platform doesn't have EL3 implementation on secured DRAM. */ 278*91f16700Schasinglulu #define ARM_MAP_EL3_TZC_DRAM MAP_REGION_FLAT( \ 279*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_BASE, \ 280*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE, \ 281*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 282*91f16700Schasinglulu 283*91f16700Schasinglulu #if defined(SPD_spmd) 284*91f16700Schasinglulu #define ARM_MAP_TRUSTED_DRAM MAP_REGION_FLAT( \ 285*91f16700Schasinglulu PLAT_ARM_TRUSTED_DRAM_BASE, \ 286*91f16700Schasinglulu PLAT_ARM_TRUSTED_DRAM_SIZE, \ 287*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 288*91f16700Schasinglulu #endif /* SPD_spmd */ 289*91f16700Schasinglulu 290*91f16700Schasinglulu /* 291*91f16700Schasinglulu * Mapping for the BL1 RW region. This mapping is needed by BL2 292*91f16700Schasinglulu * in order to share the Mbed TLS heap. Since the heap is allocated 293*91f16700Schasinglulu * inside BL1, it resides in the BL1 RW region. Hence, BL2 needs access 294*91f16700Schasinglulu * to the BL1 RW region in order to be able to access the heap. 295*91f16700Schasinglulu */ 296*91f16700Schasinglulu #define ARM_MAP_BL1_RW MAP_REGION_FLAT( \ 297*91f16700Schasinglulu BL1_RW_BASE, BL1_RW_LIMIT - BL1_RW_BASE, \ 298*91f16700Schasinglulu MT_MEMORY | MT_RW | EL3_PAS) 299*91f16700Schasinglulu 300*91f16700Schasinglulu /* 301*91f16700Schasinglulu * If SEPARATE_CODE_AND_RODATA=1 the platform will define a region 302*91f16700Schasinglulu * for each section, otherwise one region containing both sections 303*91f16700Schasinglulu * is defined. 304*91f16700Schasinglulu */ 305*91f16700Schasinglulu #if SEPARATE_CODE_AND_RODATA 306*91f16700Schasinglulu #define ARM_MAP_BL_RO MAP_REGION_FLAT( \ 307*91f16700Schasinglulu BL_CODE_BASE, BL_CODE_END - BL_CODE_BASE, \ 308*91f16700Schasinglulu MT_CODE | EL3_PAS), \ 309*91f16700Schasinglulu MAP_REGION_FLAT(BL_RO_DATA_BASE, \ 310*91f16700Schasinglulu BL_RO_DATA_END - BL_RO_DATA_BASE, \ 311*91f16700Schasinglulu MT_RO_DATA | EL3_PAS) 312*91f16700Schasinglulu #else 313*91f16700Schasinglulu #define ARM_MAP_BL_RO MAP_REGION_FLAT( \ 314*91f16700Schasinglulu BL_CODE_BASE, BL_CODE_END - BL_CODE_BASE, \ 315*91f16700Schasinglulu MT_CODE | EL3_PAS) 316*91f16700Schasinglulu #endif /* SEPARATE_CODE_AND_RODATA */ 317*91f16700Schasinglulu 318*91f16700Schasinglulu #if USE_COHERENT_MEM 319*91f16700Schasinglulu #define ARM_MAP_BL_COHERENT_RAM MAP_REGION_FLAT( \ 320*91f16700Schasinglulu BL_COHERENT_RAM_BASE, \ 321*91f16700Schasinglulu BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE, \ 322*91f16700Schasinglulu MT_DEVICE | MT_RW | EL3_PAS) 323*91f16700Schasinglulu #endif /* USE_COHERENT_MEM */ 324*91f16700Schasinglulu 325*91f16700Schasinglulu #if USE_ROMLIB 326*91f16700Schasinglulu #define ARM_MAP_ROMLIB_CODE MAP_REGION_FLAT( \ 327*91f16700Schasinglulu ROMLIB_RO_BASE, \ 328*91f16700Schasinglulu ROMLIB_RO_LIMIT - ROMLIB_RO_BASE, \ 329*91f16700Schasinglulu MT_CODE | MT_SECURE) 330*91f16700Schasinglulu 331*91f16700Schasinglulu #define ARM_MAP_ROMLIB_DATA MAP_REGION_FLAT( \ 332*91f16700Schasinglulu ROMLIB_RW_BASE, \ 333*91f16700Schasinglulu ROMLIB_RW_END - ROMLIB_RW_BASE, \ 334*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 335*91f16700Schasinglulu #endif /* USE_ROMLIB */ 336*91f16700Schasinglulu 337*91f16700Schasinglulu /* 338*91f16700Schasinglulu * Map mem_protect flash region with read and write permissions 339*91f16700Schasinglulu */ 340*91f16700Schasinglulu #define ARM_V2M_MAP_MEM_PROTECT MAP_REGION_FLAT( \ 341*91f16700Schasinglulu PLAT_ARM_MEM_PROT_ADDR, \ 342*91f16700Schasinglulu V2M_FLASH_BLOCK_SIZE, \ 343*91f16700Schasinglulu MT_DEVICE | MT_RW | MT_SECURE) 344*91f16700Schasinglulu /* 345*91f16700Schasinglulu * Map the region for device tree configuration with read and write permissions 346*91f16700Schasinglulu */ 347*91f16700Schasinglulu #define ARM_MAP_BL_CONFIG_REGION MAP_REGION_FLAT( \ 348*91f16700Schasinglulu ARM_BL_RAM_BASE, \ 349*91f16700Schasinglulu (ARM_FW_CONFIGS_LIMIT - ARM_BL_RAM_BASE), \ 350*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 351*91f16700Schasinglulu 352*91f16700Schasinglulu /* 353*91f16700Schasinglulu * The max number of regions like RO(code), coherent and data required by 354*91f16700Schasinglulu * different BL stages which need to be mapped in the MMU. 355*91f16700Schasinglulu */ 356*91f16700Schasinglulu #define ARM_BL_REGIONS 10 357*91f16700Schasinglulu 358*91f16700Schasinglulu #define MAX_MMAP_REGIONS ( \ 359*91f16700Schasinglulu PLAT_ARM_MMAP_ENTRIES + ARM_BL_REGIONS) 360*91f16700Schasinglulu 361*91f16700Schasinglulu /* Memory mapped Generic timer interfaces */ 362*91f16700Schasinglulu #define ARM_SYS_CNTCTL_BASE UL(0XF07FC000) 363*91f16700Schasinglulu 364*91f16700Schasinglulu #define ARM_CONSOLE_BAUDRATE 115200 365*91f16700Schasinglulu 366*91f16700Schasinglulu /* 367*91f16700Schasinglulu * The TBBR document specifies a watchdog timeout of 256 seconds. SP805 368*91f16700Schasinglulu * asserts reset after two consecutive countdowns (2 x 128 = 256 sec) 369*91f16700Schasinglulu */ 370*91f16700Schasinglulu #define ARM_TWDG_TIMEOUT_SEC 128 371*91f16700Schasinglulu #define ARM_TWDG_LOAD_VAL (ARM_SP805_TWDG_CLK_HZ * \ 372*91f16700Schasinglulu ARM_TWDG_TIMEOUT_SEC) 373*91f16700Schasinglulu 374*91f16700Schasinglulu /****************************************************************************** 375*91f16700Schasinglulu * Required platform porting definitions common to all ARM standard platforms 376*91f16700Schasinglulu *****************************************************************************/ 377*91f16700Schasinglulu 378*91f16700Schasinglulu /* 379*91f16700Schasinglulu * Some data must be aligned on the biggest cache line size in the platform. 380*91f16700Schasinglulu * This is known only to the platform as it might have a combination of 381*91f16700Schasinglulu * integrated and external caches (64 on Arbel). 382*91f16700Schasinglulu */ 383*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE (U(1) << ARM_CACHE_WRITEBACK_SHIFT) 384*91f16700Schasinglulu 385*91f16700Schasinglulu /* 386*91f16700Schasinglulu * To enable FW_CONFIG to be loaded by BL1, define the corresponding base 387*91f16700Schasinglulu * and limit. Leave enough space of BL2 meminfo. 388*91f16700Schasinglulu */ 389*91f16700Schasinglulu #define ARM_FW_CONFIG_BASE (ARM_BL_RAM_BASE + sizeof(meminfo_t)) 390*91f16700Schasinglulu #define ARM_FW_CONFIG_LIMIT ( \ 391*91f16700Schasinglulu (ARM_BL_RAM_BASE + PAGE_SIZE) + (PAGE_SIZE / 2U)) 392*91f16700Schasinglulu 393*91f16700Schasinglulu /* 394*91f16700Schasinglulu * Boot parameters passed from BL2 to BL31/BL32 are stored here 395*91f16700Schasinglulu */ 396*91f16700Schasinglulu #define ARM_BL2_MEM_DESC_BASE (ARM_FW_CONFIG_LIMIT) 397*91f16700Schasinglulu #define ARM_BL2_MEM_DESC_LIMIT ( \ 398*91f16700Schasinglulu ARM_BL2_MEM_DESC_BASE + (PAGE_SIZE / 2U)) 399*91f16700Schasinglulu 400*91f16700Schasinglulu /* 401*91f16700Schasinglulu * Define limit of firmware configuration memory: 402*91f16700Schasinglulu * ARM_FW_CONFIG + ARM_BL2_MEM_DESC memory 403*91f16700Schasinglulu */ 404*91f16700Schasinglulu #define ARM_FW_CONFIGS_LIMIT (ARM_BL_RAM_BASE + (PAGE_SIZE * 2)) 405*91f16700Schasinglulu 406*91f16700Schasinglulu /******************************************************************************* 407*91f16700Schasinglulu * BL1 specific defines. 408*91f16700Schasinglulu * BL1 RW data is relocated from ROM to RAM at runtime so we need 409*91f16700Schasinglulu * two sets of addresses. 410*91f16700Schasinglulu ******************************************************************************/ 411*91f16700Schasinglulu #define BL1_RO_BASE PLAT_ARM_TRUSTED_ROM_BASE 412*91f16700Schasinglulu #define BL1_RO_LIMIT (PLAT_ARM_TRUSTED_ROM_BASE + \ 413*91f16700Schasinglulu (PLAT_ARM_TRUSTED_ROM_SIZE - PLAT_ARM_MAX_ROMLIB_RO_SIZE)) 414*91f16700Schasinglulu /* 415*91f16700Schasinglulu * Put BL1 RW at the top of the Trusted SRAM. 416*91f16700Schasinglulu */ 417*91f16700Schasinglulu #define BL1_RW_BASE (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE - \ 418*91f16700Schasinglulu (PLAT_ARM_MAX_BL1_RW_SIZE + PLAT_ARM_MAX_ROMLIB_RW_SIZE)) 419*91f16700Schasinglulu #define BL1_RW_LIMIT (ARM_BL_RAM_BASE + \ 420*91f16700Schasinglulu (ARM_BL_RAM_SIZE - PLAT_ARM_MAX_ROMLIB_RW_SIZE)) 421*91f16700Schasinglulu 422*91f16700Schasinglulu #define ROMLIB_RO_BASE BL1_RO_LIMIT 423*91f16700Schasinglulu #define ROMLIB_RO_LIMIT ( \ 424*91f16700Schasinglulu PLAT_ARM_TRUSTED_ROM_BASE + PLAT_ARM_TRUSTED_ROM_SIZE) 425*91f16700Schasinglulu 426*91f16700Schasinglulu #define ROMLIB_RW_BASE (BL1_RW_BASE + PLAT_ARM_MAX_BL1_RW_SIZE) 427*91f16700Schasinglulu #define ROMLIB_RW_END ( \ 428*91f16700Schasinglulu ROMLIB_RW_BASE + PLAT_ARM_MAX_ROMLIB_RW_SIZE) 429*91f16700Schasinglulu 430*91f16700Schasinglulu /****************************************************************************** 431*91f16700Schasinglulu * BL2 specific defines. 432*91f16700Schasinglulu *****************************************************************************/ 433*91f16700Schasinglulu #if BL2_AT_EL3 434*91f16700Schasinglulu /* Put BL2 towards the middle of the Trusted SRAM */ 435*91f16700Schasinglulu #define BL2_BASE (ARM_TRUSTED_SRAM_BASE + \ 436*91f16700Schasinglulu PLAT_ARM_TRUSTED_SRAM_SIZE >> 1) + 0x2000) 437*91f16700Schasinglulu #define BL2_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) 438*91f16700Schasinglulu #else 439*91f16700Schasinglulu /* 440*91f16700Schasinglulu * Put BL2 just below BL1. 441*91f16700Schasinglulu */ 442*91f16700Schasinglulu #define BL2_BASE (BL1_RW_BASE - PLAT_ARM_MAX_BL2_SIZE) 443*91f16700Schasinglulu #define BL2_LIMIT BL1_RW_BASE 444*91f16700Schasinglulu #endif /* BL2_AT_EL3 */ 445*91f16700Schasinglulu 446*91f16700Schasinglulu /******************************************************************************* 447*91f16700Schasinglulu * BL31 specific defines. 448*91f16700Schasinglulu ******************************************************************************/ 449*91f16700Schasinglulu #if ARM_BL31_IN_DRAM || SEPARATE_NOBITS_REGION 450*91f16700Schasinglulu /* 451*91f16700Schasinglulu * Put BL31 at the bottom of TZC secured DRAM 452*91f16700Schasinglulu */ 453*91f16700Schasinglulu #define BL31_BASE ARM_AP_TZC_DRAM1_BASE 454*91f16700Schasinglulu #define BL31_LIMIT ( \ 455*91f16700Schasinglulu ARM_AP_TZC_DRAM1_BASE + PLAT_ARM_MAX_BL31_SIZE) 456*91f16700Schasinglulu 457*91f16700Schasinglulu /* 458*91f16700Schasinglulu * For SEPARATE_NOBITS_REGION, BL31 PROGBITS are loaded in TZC secured DRAM. 459*91f16700Schasinglulu * And BL31 NOBITS are loaded in Trusted SRAM such that BL2 is overwritten. 460*91f16700Schasinglulu */ 461*91f16700Schasinglulu #if SEPARATE_NOBITS_REGION 462*91f16700Schasinglulu #define BL31_NOBITS_BASE BL2_BASE 463*91f16700Schasinglulu #define BL31_NOBITS_LIMIT BL2_LIMIT 464*91f16700Schasinglulu #endif /* SEPARATE_NOBITS_REGION */ 465*91f16700Schasinglulu #elif (RESET_TO_BL31) 466*91f16700Schasinglulu /* Ensure Position Independent support (PIE) is enabled for this config.*/ 467*91f16700Schasinglulu #if !ENABLE_PIE 468*91f16700Schasinglulu #error "BL31 must be a PIE if RESET_TO_BL31=1." 469*91f16700Schasinglulu #endif /* !ENABLE_PIE */ 470*91f16700Schasinglulu /* 471*91f16700Schasinglulu * Since this is PIE, we can define BL31_BASE to 0x0 since this macro is solely 472*91f16700Schasinglulu * used for building BL31 and not used for loading BL31. 473*91f16700Schasinglulu */ 474*91f16700Schasinglulu #define NEW_SRAM_ALLOCATION 475*91f16700Schasinglulu 476*91f16700Schasinglulu #ifdef NEW_SRAM_ALLOCATION 477*91f16700Schasinglulu #define BL31_BASE 0x20001000 478*91f16700Schasinglulu #else 479*91f16700Schasinglulu #define BL31_BASE 0x20001000 480*91f16700Schasinglulu #endif /* NEW_SRAM_ALLOCATION */ 481*91f16700Schasinglulu 482*91f16700Schasinglulu #define BL31_LIMIT BL2_BASE /* PLAT_ARM_MAX_BL31_SIZE */ 483*91f16700Schasinglulu #else 484*91f16700Schasinglulu /* Put BL31 below BL2 in the Trusted SRAM.*/ 485*91f16700Schasinglulu #define BL31_BASE ((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) - \ 486*91f16700Schasinglulu PLAT_ARM_MAX_BL31_SIZE) 487*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT BL2_BASE 488*91f16700Schasinglulu 489*91f16700Schasinglulu /* 490*91f16700Schasinglulu * For BL2_AT_EL3 make sure the BL31 can grow up until BL2_BASE. 491*91f16700Schasinglulu * This is because in the BL2_AT_EL3 configuration, BL2 is always resident. 492*91f16700Schasinglulu */ 493*91f16700Schasinglulu #if BL2_AT_EL3 494*91f16700Schasinglulu #define BL31_LIMIT BL2_BASE 495*91f16700Schasinglulu #else 496*91f16700Schasinglulu #define BL31_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) 497*91f16700Schasinglulu #endif /* BL2_AT_EL3 */ 498*91f16700Schasinglulu #endif /* ARM_BL31_IN_DRAM || SEPARATE_NOBITS_REGION */ 499*91f16700Schasinglulu 500*91f16700Schasinglulu /* 501*91f16700Schasinglulu * BL32 is mandatory in AArch32. In AArch64, undefine BL32_BASE if there is 502*91f16700Schasinglulu * no SPD and no SPM-MM, as they are the only ones that can be used as BL32. 503*91f16700Schasinglulu */ 504*91f16700Schasinglulu #if defined(SPD_none) && !SPM_MM 505*91f16700Schasinglulu #undef BL32_BASE 506*91f16700Schasinglulu #endif /* SPD_none && !SPM_MM */ 507*91f16700Schasinglulu 508*91f16700Schasinglulu /****************************************************************************** 509*91f16700Schasinglulu * FWU Images: NS_BL1U, BL2U & NS_BL2U defines. 510*91f16700Schasinglulu *****************************************************************************/ 511*91f16700Schasinglulu #define BL2U_BASE BL2_BASE 512*91f16700Schasinglulu #define BL2U_LIMIT BL2_LIMIT 513*91f16700Schasinglulu 514*91f16700Schasinglulu #define NS_BL2U_BASE ARM_NS_DRAM1_BASE 515*91f16700Schasinglulu #define NS_BL1U_BASE (PLAT_ARM_NVM_BASE + UL(0x03EB8000)) 516*91f16700Schasinglulu 517*91f16700Schasinglulu /* 518*91f16700Schasinglulu * ID of the secure physical generic timer interrupt used by the TSP. 519*91f16700Schasinglulu */ 520*91f16700Schasinglulu #define TSP_IRQ_SEC_PHY_TIMER ARM_IRQ_SEC_PHY_TIMER 521*91f16700Schasinglulu 522*91f16700Schasinglulu /* 523*91f16700Schasinglulu * One cache line needed for bakery locks on ARM platforms 524*91f16700Schasinglulu */ 525*91f16700Schasinglulu #define PLAT_PERCPU_BAKERY_LOCK_SIZE (1 * CACHE_WRITEBACK_GRANULE) 526*91f16700Schasinglulu 527*91f16700Schasinglulu /* Priority levels for ARM platforms */ 528*91f16700Schasinglulu #define PLAT_RAS_PRI 0x10 529*91f16700Schasinglulu #define PLAT_SDEI_CRITICAL_PRI 0x60 530*91f16700Schasinglulu #define PLAT_SDEI_NORMAL_PRI 0x70 531*91f16700Schasinglulu 532*91f16700Schasinglulu /* ARM platforms use 3 upper bits of secure interrupt priority */ 533*91f16700Schasinglulu #define ARM_PRI_BITS 3 534*91f16700Schasinglulu 535*91f16700Schasinglulu /* SGI used for SDEI signalling */ 536*91f16700Schasinglulu #define ARM_SDEI_SGI ARM_IRQ_SEC_SGI_0 537*91f16700Schasinglulu 538*91f16700Schasinglulu #if SDEI_IN_FCONF 539*91f16700Schasinglulu /* ARM SDEI dynamic private event max count */ 540*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_MAX_CNT 3 541*91f16700Schasinglulu 542*91f16700Schasinglulu /* ARM SDEI dynamic shared event max count */ 543*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_MAX_CNT 3 544*91f16700Schasinglulu #else 545*91f16700Schasinglulu /* ARM SDEI dynamic private event numbers */ 546*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_0 1000 547*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_1 1001 548*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_2 1002 549*91f16700Schasinglulu 550*91f16700Schasinglulu /* ARM SDEI dynamic shared event numbers */ 551*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_0 2000 552*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_1 2001 553*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_2 2002 554*91f16700Schasinglulu 555*91f16700Schasinglulu #define ARM_SDEI_PRIVATE_EVENTS \ 556*91f16700Schasinglulu SDEI_DEFINE_EVENT_0(ARM_SDEI_SGI), \ 557*91f16700Schasinglulu SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \ 558*91f16700Schasinglulu SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \ 559*91f16700Schasinglulu SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC) 560*91f16700Schasinglulu 561*91f16700Schasinglulu #define ARM_SDEI_SHARED_EVENTS \ 562*91f16700Schasinglulu SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \ 563*91f16700Schasinglulu SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \ 564*91f16700Schasinglulu SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC) 565*91f16700Schasinglulu #endif /* SDEI_IN_FCONF */ 566*91f16700Schasinglulu 567*91f16700Schasinglulu #endif /* ARM_DEF_H */ 568