1*b4315306SDan Handley /* 2*b4315306SDan Handley * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. 3*b4315306SDan Handley * 4*b4315306SDan Handley * Redistribution and use in source and binary forms, with or without 5*b4315306SDan Handley * modification, are permitted provided that the following conditions are met: 6*b4315306SDan Handley * 7*b4315306SDan Handley * Redistributions of source code must retain the above copyright notice, this 8*b4315306SDan Handley * list of conditions and the following disclaimer. 9*b4315306SDan Handley * 10*b4315306SDan Handley * Redistributions in binary form must reproduce the above copyright notice, 11*b4315306SDan Handley * this list of conditions and the following disclaimer in the documentation 12*b4315306SDan Handley * and/or other materials provided with the distribution. 13*b4315306SDan Handley * 14*b4315306SDan Handley * Neither the name of ARM nor the names of its contributors may be used 15*b4315306SDan Handley * to endorse or promote products derived from this software without specific 16*b4315306SDan Handley * prior written permission. 17*b4315306SDan Handley * 18*b4315306SDan Handley * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19*b4315306SDan Handley * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*b4315306SDan Handley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*b4315306SDan Handley * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22*b4315306SDan Handley * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23*b4315306SDan Handley * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24*b4315306SDan Handley * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25*b4315306SDan Handley * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26*b4315306SDan Handley * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27*b4315306SDan Handley * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28*b4315306SDan Handley * POSSIBILITY OF SUCH DAMAGE. 29*b4315306SDan Handley */ 30*b4315306SDan Handley #ifndef __ARM_DEF_H__ 31*b4315306SDan Handley #define __ARM_DEF_H__ 32*b4315306SDan Handley 33*b4315306SDan Handley #include <common_def.h> 34*b4315306SDan Handley #include <platform_def.h> 35*b4315306SDan Handley #include <xlat_tables.h> 36*b4315306SDan Handley 37*b4315306SDan Handley 38*b4315306SDan Handley /****************************************************************************** 39*b4315306SDan Handley * Definitions common to all ARM standard platforms 40*b4315306SDan Handley *****************************************************************************/ 41*b4315306SDan Handley 42*b4315306SDan Handley /* Special value used to verify platform parameters from BL2 to BL3-1 */ 43*b4315306SDan Handley #define ARM_BL31_PLAT_PARAM_VAL 0x0f1e2d3c4b5a6978ULL 44*b4315306SDan Handley 45*b4315306SDan Handley #define ARM_CLUSTER_COUNT 2ull 46*b4315306SDan Handley 47*b4315306SDan Handley #define ARM_CACHE_WRITEBACK_SHIFT 6 48*b4315306SDan Handley 49*b4315306SDan Handley /* Memory location options for TSP */ 50*b4315306SDan Handley #define ARM_TRUSTED_SRAM_ID 0 51*b4315306SDan Handley #define ARM_TRUSTED_DRAM_ID 1 52*b4315306SDan Handley #define ARM_DRAM_ID 2 53*b4315306SDan Handley 54*b4315306SDan Handley /* The first 4KB of Trusted SRAM are used as shared memory */ 55*b4315306SDan Handley #define ARM_TRUSTED_SRAM_BASE 0x04000000 56*b4315306SDan Handley #define ARM_SHARED_RAM_BASE ARM_TRUSTED_SRAM_BASE 57*b4315306SDan Handley #define ARM_SHARED_RAM_SIZE 0x00001000 /* 4 KB */ 58*b4315306SDan Handley 59*b4315306SDan Handley /* The remaining Trusted SRAM is used to load the BL images */ 60*b4315306SDan Handley #define ARM_BL_RAM_BASE (ARM_SHARED_RAM_BASE + \ 61*b4315306SDan Handley ARM_SHARED_RAM_SIZE) 62*b4315306SDan Handley #define ARM_BL_RAM_SIZE (PLAT_ARM_TRUSTED_SRAM_SIZE - \ 63*b4315306SDan Handley ARM_SHARED_RAM_SIZE) 64*b4315306SDan Handley 65*b4315306SDan Handley /* 66*b4315306SDan Handley * The top 16MB of DRAM1 is configured as secure access only using the TZC 67*b4315306SDan Handley * - SCP TZC DRAM: If present, DRAM reserved for SCP use 68*b4315306SDan Handley * - AP TZC DRAM: The remaining TZC secured DRAM reserved for AP use 69*b4315306SDan Handley */ 70*b4315306SDan Handley #define ARM_TZC_DRAM1_SIZE MAKE_ULL(0x01000000) 71*b4315306SDan Handley 72*b4315306SDan Handley #define ARM_SCP_TZC_DRAM1_BASE (ARM_DRAM1_BASE + \ 73*b4315306SDan Handley ARM_DRAM1_SIZE - \ 74*b4315306SDan Handley ARM_SCP_TZC_DRAM1_SIZE) 75*b4315306SDan Handley #define ARM_SCP_TZC_DRAM1_SIZE PLAT_ARM_SCP_TZC_DRAM1_SIZE 76*b4315306SDan Handley #define ARM_SCP_TZC_DRAM1_END (ARM_SCP_TZC_DRAM1_BASE + \ 77*b4315306SDan Handley ARM_SCP_TZC_DRAM1_SIZE - 1) 78*b4315306SDan Handley 79*b4315306SDan Handley #define ARM_AP_TZC_DRAM1_BASE (ARM_DRAM1_BASE + \ 80*b4315306SDan Handley ARM_DRAM1_SIZE - \ 81*b4315306SDan Handley ARM_TZC_DRAM1_SIZE) 82*b4315306SDan Handley #define ARM_AP_TZC_DRAM1_SIZE (ARM_TZC_DRAM1_SIZE - \ 83*b4315306SDan Handley ARM_SCP_TZC_DRAM1_SIZE) 84*b4315306SDan Handley #define ARM_AP_TZC_DRAM1_END (ARM_AP_TZC_DRAM1_BASE + \ 85*b4315306SDan Handley ARM_AP_TZC_DRAM1_SIZE - 1) 86*b4315306SDan Handley 87*b4315306SDan Handley 88*b4315306SDan Handley #define ARM_NS_DRAM1_BASE ARM_DRAM1_BASE 89*b4315306SDan Handley #define ARM_NS_DRAM1_SIZE (ARM_DRAM1_SIZE - \ 90*b4315306SDan Handley ARM_TZC_DRAM1_SIZE) 91*b4315306SDan Handley #define ARM_NS_DRAM1_END (ARM_NS_DRAM1_BASE + \ 92*b4315306SDan Handley ARM_NS_DRAM1_SIZE - 1) 93*b4315306SDan Handley 94*b4315306SDan Handley #define ARM_DRAM1_BASE MAKE_ULL(0x80000000) 95*b4315306SDan Handley #define ARM_DRAM1_SIZE MAKE_ULL(0x80000000) 96*b4315306SDan Handley #define ARM_DRAM1_END (ARM_DRAM1_BASE + \ 97*b4315306SDan Handley ARM_DRAM1_SIZE - 1) 98*b4315306SDan Handley 99*b4315306SDan Handley #define ARM_DRAM2_BASE MAKE_ULL(0x880000000) 100*b4315306SDan Handley #define ARM_DRAM2_SIZE PLAT_ARM_DRAM2_SIZE 101*b4315306SDan Handley #define ARM_DRAM2_END (ARM_DRAM2_BASE + \ 102*b4315306SDan Handley ARM_DRAM2_SIZE - 1) 103*b4315306SDan Handley 104*b4315306SDan Handley #define ARM_IRQ_SEC_PHY_TIMER 29 105*b4315306SDan Handley 106*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_0 8 107*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_1 9 108*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_2 10 109*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_3 11 110*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_4 12 111*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_5 13 112*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_6 14 113*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_7 15 114*b4315306SDan Handley 115*b4315306SDan Handley #define ARM_SHARED_RAM_ATTR ((PLAT_ARM_SHARED_RAM_CACHED ? \ 116*b4315306SDan Handley MT_MEMORY : MT_DEVICE) \ 117*b4315306SDan Handley | MT_RW | MT_SECURE) 118*b4315306SDan Handley 119*b4315306SDan Handley #define ARM_MAP_SHARED_RAM MAP_REGION_FLAT( \ 120*b4315306SDan Handley ARM_SHARED_RAM_BASE, \ 121*b4315306SDan Handley ARM_SHARED_RAM_SIZE, \ 122*b4315306SDan Handley ARM_SHARED_RAM_ATTR) 123*b4315306SDan Handley 124*b4315306SDan Handley #define ARM_MAP_NS_DRAM1 MAP_REGION_FLAT( \ 125*b4315306SDan Handley ARM_NS_DRAM1_BASE, \ 126*b4315306SDan Handley ARM_NS_DRAM1_SIZE, \ 127*b4315306SDan Handley MT_MEMORY | MT_RW | MT_NS) 128*b4315306SDan Handley 129*b4315306SDan Handley #define ARM_MAP_TSP_SEC_MEM MAP_REGION_FLAT( \ 130*b4315306SDan Handley TSP_SEC_MEM_BASE, \ 131*b4315306SDan Handley TSP_SEC_MEM_SIZE, \ 132*b4315306SDan Handley MT_MEMORY | MT_RW | MT_SECURE) 133*b4315306SDan Handley 134*b4315306SDan Handley 135*b4315306SDan Handley /* 136*b4315306SDan Handley * The number of regions like RO(code), coherent and data required by 137*b4315306SDan Handley * different BL stages which need to be mapped in the MMU. 138*b4315306SDan Handley */ 139*b4315306SDan Handley #if USE_COHERENT_MEM 140*b4315306SDan Handley #define ARM_BL_REGIONS 3 141*b4315306SDan Handley #else 142*b4315306SDan Handley #define ARM_BL_REGIONS 2 143*b4315306SDan Handley #endif 144*b4315306SDan Handley 145*b4315306SDan Handley #define MAX_MMAP_REGIONS (PLAT_ARM_MMAP_ENTRIES + \ 146*b4315306SDan Handley ARM_BL_REGIONS) 147*b4315306SDan Handley 148*b4315306SDan Handley /* Memory mapped Generic timer interfaces */ 149*b4315306SDan Handley #define ARM_SYS_CNTCTL_BASE 0x2a430000 150*b4315306SDan Handley #define ARM_SYS_CNTREAD_BASE 0x2a800000 151*b4315306SDan Handley #define ARM_SYS_TIMCTL_BASE 0x2a810000 152*b4315306SDan Handley 153*b4315306SDan Handley #define ARM_CONSOLE_BAUDRATE 115200 154*b4315306SDan Handley 155*b4315306SDan Handley /* TZC related constants */ 156*b4315306SDan Handley #define ARM_TZC_BASE 0x2a4a0000 157*b4315306SDan Handley 158*b4315306SDan Handley 159*b4315306SDan Handley /****************************************************************************** 160*b4315306SDan Handley * Required platform porting definitions common to all ARM standard platforms 161*b4315306SDan Handley *****************************************************************************/ 162*b4315306SDan Handley 163*b4315306SDan Handley #define ADDR_SPACE_SIZE (1ull << 32) 164*b4315306SDan Handley 165*b4315306SDan Handley #define PLATFORM_NUM_AFFS (ARM_CLUSTER_COUNT + \ 166*b4315306SDan Handley PLATFORM_CORE_COUNT) 167*b4315306SDan Handley #define PLATFORM_MAX_AFFLVL MPIDR_AFFLVL1 168*b4315306SDan Handley 169*b4315306SDan Handley #define PLATFORM_CORE_COUNT (PLAT_ARM_CLUSTER0_CORE_COUNT + \ 170*b4315306SDan Handley PLAT_ARM_CLUSTER1_CORE_COUNT) 171*b4315306SDan Handley 172*b4315306SDan Handley /* 173*b4315306SDan Handley * Some data must be aligned on the biggest cache line size in the platform. 174*b4315306SDan Handley * This is known only to the platform as it might have a combination of 175*b4315306SDan Handley * integrated and external caches. 176*b4315306SDan Handley */ 177*b4315306SDan Handley #define CACHE_WRITEBACK_GRANULE (1 << ARM_CACHE_WRITEBACK_SHIFT) 178*b4315306SDan Handley 179*b4315306SDan Handley #if !USE_COHERENT_MEM 180*b4315306SDan Handley /* 181*b4315306SDan Handley * Size of the per-cpu data in bytes that should be reserved in the generic 182*b4315306SDan Handley * per-cpu data structure for the ARM platform port. 183*b4315306SDan Handley */ 184*b4315306SDan Handley #define PLAT_PCPU_DATA_SIZE 2 185*b4315306SDan Handley #endif 186*b4315306SDan Handley 187*b4315306SDan Handley 188*b4315306SDan Handley /******************************************************************************* 189*b4315306SDan Handley * BL1 specific defines. 190*b4315306SDan Handley * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of 191*b4315306SDan Handley * addresses. 192*b4315306SDan Handley ******************************************************************************/ 193*b4315306SDan Handley #define BL1_RO_BASE PLAT_ARM_TRUSTED_ROM_BASE 194*b4315306SDan Handley #define BL1_RO_LIMIT (PLAT_ARM_TRUSTED_ROM_BASE \ 195*b4315306SDan Handley + PLAT_ARM_TRUSTED_ROM_SIZE) 196*b4315306SDan Handley /* 197*b4315306SDan Handley * Put BL1 RW at the top of the Trusted SRAM. BL1_RW_BASE is calculated using 198*b4315306SDan Handley * the current BL1 RW debug size plus a little space for growth. 199*b4315306SDan Handley */ 200*b4315306SDan Handley #if TRUSTED_BOARD_BOOT 201*b4315306SDan Handley #define BL1_RW_BASE (ARM_BL_RAM_BASE + \ 202*b4315306SDan Handley ARM_BL_RAM_SIZE - \ 203*b4315306SDan Handley 0x8000) 204*b4315306SDan Handley #else 205*b4315306SDan Handley #define BL1_RW_BASE (ARM_BL_RAM_BASE + \ 206*b4315306SDan Handley ARM_BL_RAM_SIZE - \ 207*b4315306SDan Handley 0x6000) 208*b4315306SDan Handley #endif 209*b4315306SDan Handley #define BL1_RW_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) 210*b4315306SDan Handley 211*b4315306SDan Handley /******************************************************************************* 212*b4315306SDan Handley * BL2 specific defines. 213*b4315306SDan Handley ******************************************************************************/ 214*b4315306SDan Handley /* 215*b4315306SDan Handley * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug 216*b4315306SDan Handley * size plus a little space for growth. 217*b4315306SDan Handley */ 218*b4315306SDan Handley #if TRUSTED_BOARD_BOOT 219*b4315306SDan Handley #define BL2_BASE (BL31_BASE - 0x1C000) 220*b4315306SDan Handley #else 221*b4315306SDan Handley #define BL2_BASE (BL31_BASE - 0xC000) 222*b4315306SDan Handley #endif 223*b4315306SDan Handley #define BL2_LIMIT BL31_BASE 224*b4315306SDan Handley 225*b4315306SDan Handley /******************************************************************************* 226*b4315306SDan Handley * BL3-1 specific defines. 227*b4315306SDan Handley ******************************************************************************/ 228*b4315306SDan Handley /* 229*b4315306SDan Handley * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the 230*b4315306SDan Handley * current BL3-1 debug size plus a little space for growth. 231*b4315306SDan Handley */ 232*b4315306SDan Handley #define BL31_BASE (ARM_BL_RAM_BASE + \ 233*b4315306SDan Handley ARM_BL_RAM_SIZE - \ 234*b4315306SDan Handley 0x1D000) 235*b4315306SDan Handley #define BL31_PROGBITS_LIMIT BL1_RW_BASE 236*b4315306SDan Handley #define BL31_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) 237*b4315306SDan Handley 238*b4315306SDan Handley /******************************************************************************* 239*b4315306SDan Handley * BL3-2 specific defines. 240*b4315306SDan Handley ******************************************************************************/ 241*b4315306SDan Handley /* 242*b4315306SDan Handley * On ARM standard platforms, the TSP can execute from Trusted SRAM, 243*b4315306SDan Handley * Trusted DRAM (if available) or the DRAM region secured by the TrustZone 244*b4315306SDan Handley * controller. 245*b4315306SDan Handley */ 246*b4315306SDan Handley #if ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_SRAM_ID 247*b4315306SDan Handley # define TSP_SEC_MEM_BASE ARM_BL_RAM_BASE 248*b4315306SDan Handley # define TSP_SEC_MEM_SIZE ARM_BL_RAM_SIZE 249*b4315306SDan Handley # define TSP_PROGBITS_LIMIT BL2_BASE 250*b4315306SDan Handley # define BL32_BASE ARM_BL_RAM_BASE 251*b4315306SDan Handley # define BL32_LIMIT BL31_BASE 252*b4315306SDan Handley #elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_DRAM_ID 253*b4315306SDan Handley # define TSP_SEC_MEM_BASE PLAT_ARM_TRUSTED_DRAM_BASE 254*b4315306SDan Handley # define TSP_SEC_MEM_SIZE PLAT_ARM_TRUSTED_DRAM_SIZE 255*b4315306SDan Handley # define BL32_BASE PLAT_ARM_TRUSTED_DRAM_BASE 256*b4315306SDan Handley # define BL32_LIMIT (PLAT_ARM_TRUSTED_DRAM_BASE \ 257*b4315306SDan Handley + (1 << 21)) 258*b4315306SDan Handley #elif ARM_TSP_RAM_LOCATION_ID == ARM_DRAM_ID 259*b4315306SDan Handley # define TSP_SEC_MEM_BASE ARM_AP_TZC_DRAM1_BASE 260*b4315306SDan Handley # define TSP_SEC_MEM_SIZE ARM_AP_TZC_DRAM1_SIZE 261*b4315306SDan Handley # define BL32_BASE ARM_AP_TZC_DRAM1_BASE 262*b4315306SDan Handley # define BL32_LIMIT (ARM_AP_TZC_DRAM1_BASE + \ 263*b4315306SDan Handley ARM_AP_TZC_DRAM1_SIZE) 264*b4315306SDan Handley #else 265*b4315306SDan Handley # error "Unsupported ARM_TSP_RAM_LOCATION_ID value" 266*b4315306SDan Handley #endif 267*b4315306SDan Handley 268*b4315306SDan Handley /* 269*b4315306SDan Handley * ID of the secure physical generic timer interrupt used by the TSP. 270*b4315306SDan Handley */ 271*b4315306SDan Handley #define TSP_IRQ_SEC_PHY_TIMER ARM_IRQ_SEC_PHY_TIMER 272*b4315306SDan Handley 273*b4315306SDan Handley 274*b4315306SDan Handley #endif /* __ARM_DEF_H__ */ 275