1*91f16700Schasinglulu /* SPDX-License-Identifier: BSD-3-Clause 2*91f16700Schasinglulu * 3*91f16700Schasinglulu * Copyright (c) 2019-2020, Linaro Limited and Contributors. 4*91f16700Schasinglulu * All rights reserved. 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef PLATFORM_DEF_H 8*91f16700Schasinglulu #define PLATFORM_DEF_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <arch.h> 11*91f16700Schasinglulu #include <plat/common/common_def.h> 12*91f16700Schasinglulu #include <tbbr_img_def.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL3-1 */ 15*91f16700Schasinglulu #define QEMU_BL31_PLAT_PARAM_VAL 0x0f1e2d3c4b5a6978ULL 16*91f16700Schasinglulu 17*91f16700Schasinglulu #define PLATFORM_STACK_SIZE 0x1000 18*91f16700Schasinglulu 19*91f16700Schasinglulu #define PLATFORM_MAX_CPUS_PER_CLUSTER U(8) 20*91f16700Schasinglulu /* 21*91f16700Schasinglulu * Define the number of cores per cluster used in calculating core position. 22*91f16700Schasinglulu * The cluster number is shifted by this value and added to the core ID, 23*91f16700Schasinglulu * so its value represents log2(cores/cluster). 24*91f16700Schasinglulu * Default is 2**(3) = 8 cores per cluster. 25*91f16700Schasinglulu */ 26*91f16700Schasinglulu #define PLATFORM_CPU_PER_CLUSTER_SHIFT U(3) 27*91f16700Schasinglulu #define PLATFORM_CLUSTER_COUNT U(64) 28*91f16700Schasinglulu #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER_COUNT * \ 29*91f16700Schasinglulu PLATFORM_MAX_CPUS_PER_CLUSTER) 30*91f16700Schasinglulu #define QEMU_PRIMARY_CPU U(0) 31*91f16700Schasinglulu 32*91f16700Schasinglulu #define PLAT_NUM_PWR_DOMAINS (PLATFORM_CLUSTER_COUNT + \ 33*91f16700Schasinglulu PLATFORM_CORE_COUNT) 34*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL MPIDR_AFFLVL1 35*91f16700Schasinglulu 36*91f16700Schasinglulu #define PLAT_MAX_RET_STATE 1 37*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE 2 38*91f16700Schasinglulu 39*91f16700Schasinglulu /* Local power state for power domains in Run state. */ 40*91f16700Schasinglulu #define PLAT_LOCAL_STATE_RUN 0 41*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */ 42*91f16700Schasinglulu #define PLAT_LOCAL_STATE_RET 1 43*91f16700Schasinglulu /* 44*91f16700Schasinglulu * Local power state for OFF/power-down. Valid for CPU and cluster power 45*91f16700Schasinglulu * domains. 46*91f16700Schasinglulu */ 47*91f16700Schasinglulu #define PLAT_LOCAL_STATE_OFF 2 48*91f16700Schasinglulu 49*91f16700Schasinglulu /* 50*91f16700Schasinglulu * Macros used to parse state information from State-ID if it is using the 51*91f16700Schasinglulu * recommended encoding for State-ID. 52*91f16700Schasinglulu */ 53*91f16700Schasinglulu #define PLAT_LOCAL_PSTATE_WIDTH 4 54*91f16700Schasinglulu #define PLAT_LOCAL_PSTATE_MASK ((1 << PLAT_LOCAL_PSTATE_WIDTH) - 1) 55*91f16700Schasinglulu 56*91f16700Schasinglulu /* 57*91f16700Schasinglulu * Some data must be aligned on the biggest cache line size in the platform. 58*91f16700Schasinglulu * This is known only to the platform as it might have a combination of 59*91f16700Schasinglulu * integrated and external caches. 60*91f16700Schasinglulu */ 61*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT 6 62*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 63*91f16700Schasinglulu 64*91f16700Schasinglulu /* 65*91f16700Schasinglulu * Partition memory into secure ROM, non-secure DRAM, secure "SRAM", 66*91f16700Schasinglulu * and secure DRAM. 67*91f16700Schasinglulu */ 68*91f16700Schasinglulu #define SEC_ROM_BASE 0x00000000 69*91f16700Schasinglulu #define SEC_ROM_SIZE 0x00020000 70*91f16700Schasinglulu 71*91f16700Schasinglulu #define NS_DRAM0_BASE 0x10000000000ULL 72*91f16700Schasinglulu #define NS_DRAM0_SIZE 0x00020000000 73*91f16700Schasinglulu 74*91f16700Schasinglulu #define SEC_SRAM_BASE 0x20000000 75*91f16700Schasinglulu #define SEC_SRAM_SIZE 0x20000000 76*91f16700Schasinglulu 77*91f16700Schasinglulu /* 78*91f16700Schasinglulu * RAD just placeholders, need to be chosen after finalizing mem map 79*91f16700Schasinglulu */ 80*91f16700Schasinglulu #define SEC_DRAM_BASE 0x1000 81*91f16700Schasinglulu #define SEC_DRAM_SIZE 0x1000 82*91f16700Schasinglulu 83*91f16700Schasinglulu /* Load pageable part of OP-TEE 2MB above secure DRAM base */ 84*91f16700Schasinglulu #define QEMU_OPTEE_PAGEABLE_LOAD_BASE (SEC_DRAM_BASE + 0x00200000) 85*91f16700Schasinglulu #define QEMU_OPTEE_PAGEABLE_LOAD_SIZE 0x00400000 86*91f16700Schasinglulu 87*91f16700Schasinglulu /* 88*91f16700Schasinglulu * ARM-TF lives in SRAM, partition it here 89*91f16700Schasinglulu */ 90*91f16700Schasinglulu 91*91f16700Schasinglulu #define SHARED_RAM_BASE SEC_SRAM_BASE 92*91f16700Schasinglulu #define SHARED_RAM_SIZE 0x00002000 93*91f16700Schasinglulu 94*91f16700Schasinglulu #define PLAT_QEMU_TRUSTED_MAILBOX_BASE SHARED_RAM_BASE 95*91f16700Schasinglulu #define PLAT_QEMU_TRUSTED_MAILBOX_SIZE (8 + PLAT_QEMU_HOLD_SIZE) 96*91f16700Schasinglulu #define PLAT_QEMU_HOLD_BASE (PLAT_QEMU_TRUSTED_MAILBOX_BASE + 8) 97*91f16700Schasinglulu #define PLAT_QEMU_HOLD_SIZE (PLATFORM_CORE_COUNT * \ 98*91f16700Schasinglulu PLAT_QEMU_HOLD_ENTRY_SIZE) 99*91f16700Schasinglulu #define PLAT_QEMU_HOLD_ENTRY_SHIFT 3 100*91f16700Schasinglulu #define PLAT_QEMU_HOLD_ENTRY_SIZE (1 << PLAT_QEMU_HOLD_ENTRY_SHIFT) 101*91f16700Schasinglulu #define PLAT_QEMU_HOLD_STATE_WAIT 0 102*91f16700Schasinglulu #define PLAT_QEMU_HOLD_STATE_GO 1 103*91f16700Schasinglulu 104*91f16700Schasinglulu #define BL_RAM_BASE (SHARED_RAM_BASE + SHARED_RAM_SIZE) 105*91f16700Schasinglulu #define BL_RAM_SIZE (SEC_SRAM_SIZE - SHARED_RAM_SIZE) 106*91f16700Schasinglulu 107*91f16700Schasinglulu /* 108*91f16700Schasinglulu * BL1 specific defines. 109*91f16700Schasinglulu * 110*91f16700Schasinglulu * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of 111*91f16700Schasinglulu * addresses. 112*91f16700Schasinglulu * Put BL1 RW at the top of the Secure SRAM. BL1_RW_BASE is calculated using 113*91f16700Schasinglulu * the current BL1 RW debug size plus a little space for growth. 114*91f16700Schasinglulu */ 115*91f16700Schasinglulu #define BL1_SIZE 0x12000 116*91f16700Schasinglulu #define BL1_RO_BASE SEC_ROM_BASE 117*91f16700Schasinglulu #define BL1_RO_LIMIT (SEC_ROM_BASE + SEC_ROM_SIZE) 118*91f16700Schasinglulu #define BL1_RW_BASE (BL1_RW_LIMIT - BL1_SIZE) 119*91f16700Schasinglulu #define BL1_RW_LIMIT (BL_RAM_BASE + BL_RAM_SIZE) 120*91f16700Schasinglulu 121*91f16700Schasinglulu /* 122*91f16700Schasinglulu * BL2 specific defines. 123*91f16700Schasinglulu * 124*91f16700Schasinglulu * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug 125*91f16700Schasinglulu * size plus a little space for growth. 126*91f16700Schasinglulu */ 127*91f16700Schasinglulu #define BL2_SIZE 0x1D000 128*91f16700Schasinglulu #define BL2_BASE (BL31_BASE - BL2_SIZE) 129*91f16700Schasinglulu #define BL2_LIMIT BL31_BASE 130*91f16700Schasinglulu 131*91f16700Schasinglulu /* 132*91f16700Schasinglulu * BL3-1 specific defines. 133*91f16700Schasinglulu * 134*91f16700Schasinglulu * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the 135*91f16700Schasinglulu * current BL3-1 debug size plus a little space for growth. 136*91f16700Schasinglulu */ 137*91f16700Schasinglulu #define BL31_SIZE 0x300000 138*91f16700Schasinglulu #define BL31_BASE (BL31_LIMIT - BL31_SIZE) 139*91f16700Schasinglulu #define BL31_LIMIT (BL1_RW_BASE) 140*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT BL1_RW_BASE 141*91f16700Schasinglulu 142*91f16700Schasinglulu 143*91f16700Schasinglulu /* 144*91f16700Schasinglulu * BL3-2 specific defines. 145*91f16700Schasinglulu * 146*91f16700Schasinglulu * BL3-2 can execute from Secure SRAM, or Secure DRAM. 147*91f16700Schasinglulu */ 148*91f16700Schasinglulu #define BL32_SRAM_BASE BL_RAM_BASE 149*91f16700Schasinglulu #define BL32_SRAM_LIMIT BL2_BASE 150*91f16700Schasinglulu 151*91f16700Schasinglulu #define BL32_MEM_BASE BL_RAM_BASE 152*91f16700Schasinglulu #define BL32_MEM_SIZE (BL_RAM_SIZE - BL1_SIZE - \ 153*91f16700Schasinglulu BL2_SIZE - BL31_SIZE) 154*91f16700Schasinglulu #define BL32_BASE BL32_SRAM_BASE 155*91f16700Schasinglulu #define BL32_LIMIT BL32_SRAM_LIMIT 156*91f16700Schasinglulu 157*91f16700Schasinglulu #define NS_IMAGE_OFFSET (NS_DRAM0_BASE + 0x20000000) 158*91f16700Schasinglulu #define NS_IMAGE_MAX_SIZE (NS_DRAM0_SIZE - 0x20000000) 159*91f16700Schasinglulu 160*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ull << 42) 161*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ull << 42) 162*91f16700Schasinglulu #if SPM_MM 163*91f16700Schasinglulu #define MAX_MMAP_REGIONS 12 164*91f16700Schasinglulu #define MAX_XLAT_TABLES 12 165*91f16700Schasinglulu #else 166*91f16700Schasinglulu #define MAX_MMAP_REGIONS 11 167*91f16700Schasinglulu #define MAX_XLAT_TABLES 11 168*91f16700Schasinglulu #endif 169*91f16700Schasinglulu #define MAX_IO_DEVICES 3 170*91f16700Schasinglulu #define MAX_IO_HANDLES 4 171*91f16700Schasinglulu 172*91f16700Schasinglulu #if SPM_MM && defined(IMAGE_BL31) 173*91f16700Schasinglulu # define PLAT_SP_IMAGE_MMAP_REGIONS 30 174*91f16700Schasinglulu # define PLAT_SP_IMAGE_MAX_XLAT_TABLES 50 175*91f16700Schasinglulu #endif 176*91f16700Schasinglulu 177*91f16700Schasinglulu /* 178*91f16700Schasinglulu * PL011 related constants 179*91f16700Schasinglulu */ 180*91f16700Schasinglulu #define UART0_BASE 0x60000000 181*91f16700Schasinglulu #define UART1_BASE 0x60030000 182*91f16700Schasinglulu #define UART0_CLK_IN_HZ 1 183*91f16700Schasinglulu #define UART1_CLK_IN_HZ 1 184*91f16700Schasinglulu 185*91f16700Schasinglulu /* Secure UART */ 186*91f16700Schasinglulu #define UART2_BASE 0x60040000 187*91f16700Schasinglulu #define UART2_CLK_IN_HZ 1 188*91f16700Schasinglulu 189*91f16700Schasinglulu #define PLAT_QEMU_BOOT_UART_BASE UART0_BASE 190*91f16700Schasinglulu #define PLAT_QEMU_BOOT_UART_CLK_IN_HZ UART0_CLK_IN_HZ 191*91f16700Schasinglulu 192*91f16700Schasinglulu #define PLAT_QEMU_CRASH_UART_BASE UART1_BASE 193*91f16700Schasinglulu #define PLAT_QEMU_CRASH_UART_CLK_IN_HZ UART1_CLK_IN_HZ 194*91f16700Schasinglulu 195*91f16700Schasinglulu #define PLAT_QEMU_CONSOLE_BAUDRATE 115200 196*91f16700Schasinglulu 197*91f16700Schasinglulu #define QEMU_FLASH0_BASE 0x00000000 198*91f16700Schasinglulu #define QEMU_FLASH0_SIZE 0x10000000 199*91f16700Schasinglulu #define QEMU_FLASH1_BASE 0x10000000 200*91f16700Schasinglulu #define QEMU_FLASH1_SIZE 0x10000000 201*91f16700Schasinglulu 202*91f16700Schasinglulu #define PLAT_QEMU_FIP_BASE BL1_SIZE 203*91f16700Schasinglulu #define PLAT_QEMU_FIP_MAX_SIZE 0x00400000 204*91f16700Schasinglulu 205*91f16700Schasinglulu /* This is map from GIC_DIST up to last CPU (255) GIC_REDISTR */ 206*91f16700Schasinglulu #define DEVICE0_BASE 0x40000000 207*91f16700Schasinglulu #define DEVICE0_SIZE 0x04080000 208*91f16700Schasinglulu /* This is map from NORMAL_UART up to SECURE_UART_MM */ 209*91f16700Schasinglulu #define DEVICE1_BASE 0x60000000 210*91f16700Schasinglulu #define DEVICE1_SIZE 0x10041000 211*91f16700Schasinglulu /* This is a map for SECURE_EC */ 212*91f16700Schasinglulu #define DEVICE2_BASE 0x50000000 213*91f16700Schasinglulu #define DEVICE2_SIZE 0x00001000 214*91f16700Schasinglulu 215*91f16700Schasinglulu /* 216*91f16700Schasinglulu * GIC related constants 217*91f16700Schasinglulu * We use GICv3 where CPU Interface registers are not memory mapped 218*91f16700Schasinglulu * 219*91f16700Schasinglulu * Legacy values - on platform version 0.1+ they are read from DT 220*91f16700Schasinglulu */ 221*91f16700Schasinglulu #define GICD_BASE 0x40060000 222*91f16700Schasinglulu #define GICR_BASE 0x40080000 223*91f16700Schasinglulu #define GICC_BASE 0x0 224*91f16700Schasinglulu 225*91f16700Schasinglulu #define QEMU_IRQ_SEC_SGI_0 8 226*91f16700Schasinglulu #define QEMU_IRQ_SEC_SGI_1 9 227*91f16700Schasinglulu #define QEMU_IRQ_SEC_SGI_2 10 228*91f16700Schasinglulu #define QEMU_IRQ_SEC_SGI_3 11 229*91f16700Schasinglulu #define QEMU_IRQ_SEC_SGI_4 12 230*91f16700Schasinglulu #define QEMU_IRQ_SEC_SGI_5 13 231*91f16700Schasinglulu #define QEMU_IRQ_SEC_SGI_6 14 232*91f16700Schasinglulu #define QEMU_IRQ_SEC_SGI_7 15 233*91f16700Schasinglulu 234*91f16700Schasinglulu /****************************************************************************** 235*91f16700Schasinglulu * On a GICv2 system, the Group 1 secure interrupts are treated as Group 0 236*91f16700Schasinglulu * interrupts. 237*91f16700Schasinglulu *****************************************************************************/ 238*91f16700Schasinglulu #define PLATFORM_G1S_PROPS(grp) \ 239*91f16700Schasinglulu INTR_PROP_DESC(QEMU_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, \ 240*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 241*91f16700Schasinglulu INTR_PROP_DESC(QEMU_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, \ 242*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 243*91f16700Schasinglulu INTR_PROP_DESC(QEMU_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, \ 244*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 245*91f16700Schasinglulu INTR_PROP_DESC(QEMU_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, \ 246*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 247*91f16700Schasinglulu INTR_PROP_DESC(QEMU_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, \ 248*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 249*91f16700Schasinglulu INTR_PROP_DESC(QEMU_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, \ 250*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 251*91f16700Schasinglulu INTR_PROP_DESC(QEMU_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, \ 252*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 253*91f16700Schasinglulu INTR_PROP_DESC(QEMU_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, \ 254*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE) 255*91f16700Schasinglulu 256*91f16700Schasinglulu #define PLATFORM_G0_PROPS(grp) 257*91f16700Schasinglulu 258*91f16700Schasinglulu /* 259*91f16700Schasinglulu * DT related constants 260*91f16700Schasinglulu */ 261*91f16700Schasinglulu #define PLAT_QEMU_DT_BASE NS_DRAM0_BASE 262*91f16700Schasinglulu #define PLAT_QEMU_DT_MAX_SIZE 0x100000 263*91f16700Schasinglulu 264*91f16700Schasinglulu /* 265*91f16700Schasinglulu * System counter 266*91f16700Schasinglulu */ 267*91f16700Schasinglulu #define SYS_COUNTER_FREQ_IN_TICKS ((1000 * 1000 * 1000) / 16) 268*91f16700Schasinglulu 269*91f16700Schasinglulu #if SPM_MM 270*91f16700Schasinglulu #define PLAT_QEMU_SP_IMAGE_BASE BL_RAM_BASE 271*91f16700Schasinglulu #define PLAT_QEMU_SP_IMAGE_SIZE ULL(0x300000) 272*91f16700Schasinglulu 273*91f16700Schasinglulu #ifdef IMAGE_BL2 274*91f16700Schasinglulu /* In BL2 all memory allocated to the SPM Payload image is marked as RW. */ 275*91f16700Schasinglulu # define QEMU_SP_IMAGE_MMAP MAP_REGION_FLAT( \ 276*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_BASE, \ 277*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_SIZE, \ 278*91f16700Schasinglulu MT_MEMORY | MT_RW | \ 279*91f16700Schasinglulu MT_SECURE) 280*91f16700Schasinglulu #elif IMAGE_BL31 281*91f16700Schasinglulu /* All SPM Payload memory is marked as code in S-EL0 */ 282*91f16700Schasinglulu # define QEMU_SP_IMAGE_MMAP MAP_REGION2(PLAT_QEMU_SP_IMAGE_BASE, \ 283*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_BASE, \ 284*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_SIZE, \ 285*91f16700Schasinglulu MT_CODE | MT_SECURE | \ 286*91f16700Schasinglulu MT_USER, \ 287*91f16700Schasinglulu PAGE_SIZE) 288*91f16700Schasinglulu #endif 289*91f16700Schasinglulu 290*91f16700Schasinglulu /* 291*91f16700Schasinglulu * EL3 -> S-EL0 secure shared memory 292*91f16700Schasinglulu */ 293*91f16700Schasinglulu #define PLAT_SPM_BUF_PCPU_SIZE ULL(0x10000) 294*91f16700Schasinglulu #define PLAT_SPM_BUF_SIZE (PLATFORM_CORE_COUNT * \ 295*91f16700Schasinglulu PLAT_SPM_BUF_PCPU_SIZE) 296*91f16700Schasinglulu #define PLAT_SPM_BUF_BASE (BL32_LIMIT - PLAT_SPM_BUF_SIZE) 297*91f16700Schasinglulu 298*91f16700Schasinglulu #define QEMU_SPM_BUF_EL3_MMAP MAP_REGION_FLAT(PLAT_SPM_BUF_BASE, \ 299*91f16700Schasinglulu PLAT_SPM_BUF_SIZE, \ 300*91f16700Schasinglulu MT_RW_DATA | MT_SECURE) 301*91f16700Schasinglulu 302*91f16700Schasinglulu #define QEMU_SPM_BUF_EL0_MMAP MAP_REGION2(PLAT_SPM_BUF_BASE, \ 303*91f16700Schasinglulu PLAT_SPM_BUF_BASE, \ 304*91f16700Schasinglulu PLAT_SPM_BUF_SIZE, \ 305*91f16700Schasinglulu MT_RO_DATA | MT_SECURE | \ 306*91f16700Schasinglulu MT_USER, \ 307*91f16700Schasinglulu PAGE_SIZE) 308*91f16700Schasinglulu 309*91f16700Schasinglulu /* 310*91f16700Schasinglulu * Shared memory between Normal world and S-EL0 for 311*91f16700Schasinglulu * passing data during service requests. It will be marked as RW and NS. 312*91f16700Schasinglulu * This buffer is allocated at the top of NS_DRAM, the base address is 313*91f16700Schasinglulu * overridden in SPM initialization. 314*91f16700Schasinglulu */ 315*91f16700Schasinglulu #define PLAT_QEMU_SP_IMAGE_NS_BUF_BASE (PLAT_QEMU_DT_BASE + \ 316*91f16700Schasinglulu PLAT_QEMU_DT_MAX_SIZE) 317*91f16700Schasinglulu #define PLAT_QEMU_SP_IMAGE_NS_BUF_SIZE ULL(0x200000) 318*91f16700Schasinglulu 319*91f16700Schasinglulu #define QEMU_SP_IMAGE_NS_BUF_MMAP MAP_REGION2( \ 320*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_NS_BUF_BASE, \ 321*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_NS_BUF_BASE, \ 322*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_NS_BUF_SIZE, \ 323*91f16700Schasinglulu MT_RW_DATA | MT_NS | \ 324*91f16700Schasinglulu MT_USER, \ 325*91f16700Schasinglulu PAGE_SIZE) 326*91f16700Schasinglulu 327*91f16700Schasinglulu #define PLAT_SP_IMAGE_NS_BUF_BASE PLAT_QEMU_SP_IMAGE_NS_BUF_BASE 328*91f16700Schasinglulu #define PLAT_SP_IMAGE_NS_BUF_SIZE PLAT_QEMU_SP_IMAGE_NS_BUF_SIZE 329*91f16700Schasinglulu 330*91f16700Schasinglulu #define PLAT_QEMU_SP_IMAGE_HEAP_BASE (PLAT_QEMU_SP_IMAGE_BASE + \ 331*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_SIZE) 332*91f16700Schasinglulu #define PLAT_QEMU_SP_IMAGE_HEAP_SIZE ULL(0x800000) 333*91f16700Schasinglulu 334*91f16700Schasinglulu #define PLAT_SP_IMAGE_STACK_BASE (PLAT_QEMU_SP_IMAGE_HEAP_BASE + \ 335*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_HEAP_SIZE) 336*91f16700Schasinglulu #define PLAT_SP_IMAGE_STACK_PCPU_SIZE ULL(0x10000) 337*91f16700Schasinglulu #define QEMU_SP_IMAGE_STACK_TOTAL_SIZE (PLATFORM_CORE_COUNT * \ 338*91f16700Schasinglulu PLAT_SP_IMAGE_STACK_PCPU_SIZE) 339*91f16700Schasinglulu 340*91f16700Schasinglulu #define QEMU_SP_IMAGE_RW_MMAP MAP_REGION2( \ 341*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_HEAP_BASE, \ 342*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_HEAP_BASE, \ 343*91f16700Schasinglulu (QEMU_SP_IMAGE_STACK_TOTAL_SIZE + \ 344*91f16700Schasinglulu PLAT_QEMU_SP_IMAGE_HEAP_SIZE), \ 345*91f16700Schasinglulu MT_RW_DATA | MT_SECURE | \ 346*91f16700Schasinglulu MT_USER, \ 347*91f16700Schasinglulu PAGE_SIZE) 348*91f16700Schasinglulu 349*91f16700Schasinglulu /* 350*91f16700Schasinglulu * Secure variable storage is located at Secure Flash. 351*91f16700Schasinglulu */ 352*91f16700Schasinglulu #if SPM_MM 353*91f16700Schasinglulu #define QEMU_SECURE_VARSTORE_BASE 0x01000000 354*91f16700Schasinglulu #define QEMU_SECURE_VARSTORE_SIZE 0x00100000 355*91f16700Schasinglulu #define MAP_SECURE_VARSTORE MAP_REGION_FLAT( \ 356*91f16700Schasinglulu QEMU_SECURE_VARSTORE_BASE, \ 357*91f16700Schasinglulu QEMU_SECURE_VARSTORE_SIZE, \ 358*91f16700Schasinglulu MT_DEVICE | MT_RW | \ 359*91f16700Schasinglulu MT_SECURE | MT_USER) 360*91f16700Schasinglulu #endif 361*91f16700Schasinglulu 362*91f16700Schasinglulu /* Total number of memory regions with distinct properties */ 363*91f16700Schasinglulu #define PLAT_QEMU_SP_IMAGE_NUM_MEM_REGIONS 6 364*91f16700Schasinglulu 365*91f16700Schasinglulu /* 366*91f16700Schasinglulu * Name of the section to put the translation tables used by the S-EL1/S-EL0 367*91f16700Schasinglulu * context of a Secure Partition. 368*91f16700Schasinglulu */ 369*91f16700Schasinglulu #define PLAT_SP_IMAGE_XLAT_SECTION_NAME ".qemu_sp_xlat_table" 370*91f16700Schasinglulu #define PLAT_SP_IMAGE_BASE_XLAT_SECTION_NAME ".qemu_sp_xlat_table" 371*91f16700Schasinglulu 372*91f16700Schasinglulu /* Cookies passed to the Secure Partition at boot. Not used by QEMU platforms.*/ 373*91f16700Schasinglulu #define PLAT_SPM_COOKIE_0 ULL(0) 374*91f16700Schasinglulu #define PLAT_SPM_COOKIE_1 ULL(0) 375*91f16700Schasinglulu #endif 376*91f16700Schasinglulu 377*91f16700Schasinglulu #define QEMU_PRI_BITS 2 378*91f16700Schasinglulu #define PLAT_SP_PRI 0x20 379*91f16700Schasinglulu 380*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */ 381