1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef PLATFORM_DEF_H 8*91f16700Schasinglulu #define PLATFORM_DEF_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <lib/utils_def.h> 11*91f16700Schasinglulu #include <plat/common/common_def.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu /* CPU topology */ 14*91f16700Schasinglulu #define PLAT_MAX_CORES_PER_CLUSTER U(4) 15*91f16700Schasinglulu #define PLAT_CLUSTER_COUNT U(4) 16*91f16700Schasinglulu #define PLATFORM_CORE_COUNT (PLAT_CLUSTER_COUNT * PLAT_MAX_CORES_PER_CLUSTER) 17*91f16700Schasinglulu 18*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL U(1) 19*91f16700Schasinglulu #define PLAT_MAX_RET_STATE U(1) 20*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE U(2) 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* Local power state for power domains in Run state. */ 23*91f16700Schasinglulu #define SIGI_LOCAL_STATE_RUN U(0) 24*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */ 25*91f16700Schasinglulu #define SIGI_LOCAL_STATE_RET U(1) 26*91f16700Schasinglulu /* 27*91f16700Schasinglulu * Local power state for OFF/power-down. Valid for CPU and cluster power 28*91f16700Schasinglulu * domains. 29*91f16700Schasinglulu */ 30*91f16700Schasinglulu #define SIGI_LOCAL_STATE_OFF 2 31*91f16700Schasinglulu 32*91f16700Schasinglulu /* 33*91f16700Schasinglulu * Macros used to parse state information from State-ID if it is using the 34*91f16700Schasinglulu * recommended encoding for State-ID. 35*91f16700Schasinglulu */ 36*91f16700Schasinglulu #define SIGI_LOCAL_PSTATE_WIDTH 4 37*91f16700Schasinglulu #define SIGI_LOCAL_PSTATE_MASK ((1 << SIGI_LOCAL_PSTATE_WIDTH) - 1) 38*91f16700Schasinglulu 39*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT 6 40*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 41*91f16700Schasinglulu 42*91f16700Schasinglulu /* xlat table v2 related to contants */ 43*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 40) 44*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 40) 45*91f16700Schasinglulu #define MAX_XLAT_TABLES 8 46*91f16700Schasinglulu #define MAX_MMAP_REGIONS 8 47*91f16700Schasinglulu 48*91f16700Schasinglulu #define PLATFORM_STACK_SIZE 0x1000 49*91f16700Schasinglulu 50*91f16700Schasinglulu /* physical memory related constants */ 51*91f16700Schasinglulu #define SIGI_INTERLEAVE_DRAM_BASE 0x1000000000UL 52*91f16700Schasinglulu #define SIGI_NON_INTER_DRAM_BASE 0x3000000000UL 53*91f16700Schasinglulu #define SIGI_NS_DDR_SIZE (ULL(0x10) * SZ_1G) 54*91f16700Schasinglulu #define SIGI_BL33_IMAGE_OFFSET 0x4000000 55*91f16700Schasinglulu #define SIGI_BL33_DTB_OFFSET 0x2000000 56*91f16700Schasinglulu 57*91f16700Schasinglulu #define SIGI_OCM_BASE 0x04000000 58*91f16700Schasinglulu #define SIGI_OCM_SIZE SZ_32M 59*91f16700Schasinglulu 60*91f16700Schasinglulu /* 61*91f16700Schasinglulu * ARM-TF lives in SRAM, partition it here 62*91f16700Schasinglulu */ 63*91f16700Schasinglulu 64*91f16700Schasinglulu #define SHARED_RAM_BASE SIGI_OCM_BASE 65*91f16700Schasinglulu #define SHARED_RAM_SIZE SZ_4K 66*91f16700Schasinglulu 67*91f16700Schasinglulu #define SEC_SRAM_BASE (SHARED_RAM_BASE + SHARED_RAM_SIZE) 68*91f16700Schasinglulu #define SEC_SRAM_SIZE SZ_512K 69*91f16700Schasinglulu 70*91f16700Schasinglulu #define PLAT_SIGI_TRUSTED_MAILBOX_BASE SHARED_RAM_BASE 71*91f16700Schasinglulu #define PLAT_SIGI_TRUSTED_MAILBOX_SIZE (8 + PLAT_SIGI_HOLD_SIZE) 72*91f16700Schasinglulu #define PLAT_SIGI_HOLD_BASE (PLAT_SIGI_TRUSTED_MAILBOX_BASE + 8) 73*91f16700Schasinglulu #define PLAT_SIGI_HOLD_SIZE (PLATFORM_CORE_COUNT * \ 74*91f16700Schasinglulu PLAT_SIGI_HOLD_ENTRY_SIZE) 75*91f16700Schasinglulu #define PLAT_SIGI_HOLD_ENTRY_SHIFT 3 76*91f16700Schasinglulu #define PLAT_SIGI_HOLD_ENTRY_SIZE (1 << PLAT_SIGI_HOLD_ENTRY_SHIFT) 77*91f16700Schasinglulu #define PLAT_SIGI_HOLD_STATE_WAIT 0 78*91f16700Schasinglulu #define PLAT_SIGI_HOLD_STATE_GO 1 79*91f16700Schasinglulu 80*91f16700Schasinglulu /* 81*91f16700Schasinglulu * BL3-1 specific defines. 82*91f16700Schasinglulu * 83*91f16700Schasinglulu * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the 84*91f16700Schasinglulu * current BL3-1 debug size plus a little space for growth. 85*91f16700Schasinglulu */ 86*91f16700Schasinglulu #define BL31_BASE SEC_SRAM_BASE 87*91f16700Schasinglulu #define BL31_SIZE (BL31_LIMIT - BL31_BASE) 88*91f16700Schasinglulu #define BL31_LIMIT (BL31_BASE + SZ_512K) 89*91f16700Schasinglulu 90*91f16700Schasinglulu #define BL32_BASE (SIGI_OCM_BASE + BL31_SIZE) 91*91f16700Schasinglulu #define BL32_SIZE SZ_1M 92*91f16700Schasinglulu #define BL32_LIMIT (BL32_BASE + BL32_SIZE) 93*91f16700Schasinglulu 94*91f16700Schasinglulu /******************************************************************************* 95*91f16700Schasinglulu * BL33 specific defines. 96*91f16700Schasinglulu ******************************************************************************/ 97*91f16700Schasinglulu #ifndef PRELOADED_BL33_BASE 98*91f16700Schasinglulu # define PLAT_ARM_NS_IMAGE_BASE U(SIGI_NON_INTER_DRAM_BASE + SIGI_BL33_IMAGE_OFFSET) 99*91f16700Schasinglulu # define PLAT_ARM_NS_DTB_BASE U(SIGI_NON_INTER_DRAM_BASE + SIGI_BL33_DTB_OFFSET) 100*91f16700Schasinglulu #else 101*91f16700Schasinglulu # define PLAT_ARM_NS_IMAGE_BASE PRELOADED_BL33_BASE 102*91f16700Schasinglulu #endif 103*91f16700Schasinglulu 104*91f16700Schasinglulu /* 105*91f16700Schasinglulu * UART related constants 106*91f16700Schasinglulu */ 107*91f16700Schasinglulu #define PLAT_SIGI_BOOT_UART_BASE 0x39050000 108*91f16700Schasinglulu #define PLAT_SIGI_BOOT_UART_CLK_IN_HZ SIGI_UART0_CLK_IN_HZ 109*91f16700Schasinglulu #define PLAT_SIGI_CONSOLE_BAUDRATE SIGI_UART0_BAUDRATE 110*91f16700Schasinglulu 111*91f16700Schasinglulu #define PLAT_SIGI_UART1_BASE PLAT_SIGI_BOOT_UART_BASE 112*91f16700Schasinglulu #define PLAT_SIGI_UART1_SIZE ULL(0x1000) 113*91f16700Schasinglulu #define PLAT_SIGI_UART1_MMAP MAP_REGION_FLAT(PLAT_SIGI_UART1_BASE, \ 114*91f16700Schasinglulu PLAT_SIGI_UART1_SIZE, \ 115*91f16700Schasinglulu MT_DEVICE | MT_RW | \ 116*91f16700Schasinglulu MT_NS | MT_PRIVILEGED) 117*91f16700Schasinglulu 118*91f16700Schasinglulu #define DEVICE0_BASE 0x10000000 119*91f16700Schasinglulu #define DEVICE0_SIZE 0x1C000000 120*91f16700Schasinglulu #define DEVICE1_BASE 0x30000000 121*91f16700Schasinglulu #define DEVICE1_SIZE 0x10000000 122*91f16700Schasinglulu 123*91f16700Schasinglulu /* 124*91f16700Schasinglulu * GIC related constants 125*91f16700Schasinglulu */ 126*91f16700Schasinglulu 127*91f16700Schasinglulu #define GICD_BASE 0x30B00000 128*91f16700Schasinglulu #define GICC_BASE 0x30B10000 129*91f16700Schasinglulu #define GICR_BASE 0x30B60000 130*91f16700Schasinglulu 131*91f16700Schasinglulu #define SIGI_IRQ_SEC_SGI_0 8 132*91f16700Schasinglulu #define SIGI_IRQ_SEC_SGI_1 9 133*91f16700Schasinglulu #define SIGI_IRQ_SEC_SGI_2 10 134*91f16700Schasinglulu #define SIGI_IRQ_SEC_SGI_3 11 135*91f16700Schasinglulu #define SIGI_IRQ_SEC_SGI_4 12 136*91f16700Schasinglulu #define SIGI_IRQ_SEC_SGI_5 13 137*91f16700Schasinglulu #define SIGI_IRQ_SEC_SGI_6 14 138*91f16700Schasinglulu #define SIGI_IRQ_SEC_SGI_7 15 139*91f16700Schasinglulu 140*91f16700Schasinglulu #define PLATFORM_G1S_PROPS(grp) \ 141*91f16700Schasinglulu INTR_PROP_DESC(SIGI_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, \ 142*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 143*91f16700Schasinglulu INTR_PROP_DESC(SIGI_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, \ 144*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 145*91f16700Schasinglulu INTR_PROP_DESC(SIGI_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, \ 146*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 147*91f16700Schasinglulu INTR_PROP_DESC(SIGI_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, \ 148*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 149*91f16700Schasinglulu INTR_PROP_DESC(SIGI_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, \ 150*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 151*91f16700Schasinglulu INTR_PROP_DESC(SIGI_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, \ 152*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 153*91f16700Schasinglulu INTR_PROP_DESC(SIGI_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, \ 154*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 155*91f16700Schasinglulu INTR_PROP_DESC(SIGI_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, \ 156*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE) 157*91f16700Schasinglulu 158*91f16700Schasinglulu #define PLATFORM_G0_PROPS(grp) 159*91f16700Schasinglulu 160*91f16700Schasinglulu #define PLAT_SIGI_MHU_BASE 0x45000000 161*91f16700Schasinglulu 162*91f16700Schasinglulu #define PLAT_SIGI_SCP_COM_SHARED_MEM_BASE 0x45400000 163*91f16700Schasinglulu #define SCPI_CMD_GET_DRAMINFO 0x1 164*91f16700Schasinglulu 165*91f16700Schasinglulu #define PLAT_SIGI_PRIMARY_CPU 0x0 166*91f16700Schasinglulu #define PLAT_SIGI_PRIMARY_CPU_SHIFT 8 167*91f16700Schasinglulu #define PLAT_SIGI_PRIMARY_CPU_BIT_WIDTH 6 168*91f16700Schasinglulu 169*91f16700Schasinglulu #define PLAT_SPM_BUF_BASE (BL32_LIMIT - 32 * PLAT_SPM_BUF_SIZE) 170*91f16700Schasinglulu #define PLAT_SPM_BUF_SIZE ULL(0x10000) 171*91f16700Schasinglulu #define PLAT_SPM_SPM_BUF_EL0_MMAP MAP_REGION2(PLAT_SPM_BUF_BASE, \ 172*91f16700Schasinglulu PLAT_SPM_BUF_BASE, \ 173*91f16700Schasinglulu PLAT_SPM_BUF_SIZE, \ 174*91f16700Schasinglulu MT_RO_DATA | MT_SECURE | \ 175*91f16700Schasinglulu MT_USER, PAGE_SIZE) 176*91f16700Schasinglulu 177*91f16700Schasinglulu #define PLAT_SP_IMAGE_NS_BUF_BASE BL32_LIMIT 178*91f16700Schasinglulu #define PLAT_SP_IMAGE_NS_BUF_SIZE ULL(0x200000) 179*91f16700Schasinglulu #define PLAT_SP_IMAGE_NS_BUF_MMAP MAP_REGION2(PLAT_SP_IMAGE_NS_BUF_BASE, \ 180*91f16700Schasinglulu PLAT_SP_IMAGE_NS_BUF_BASE, \ 181*91f16700Schasinglulu PLAT_SP_IMAGE_NS_BUF_SIZE, \ 182*91f16700Schasinglulu MT_RW_DATA | MT_NS | \ 183*91f16700Schasinglulu MT_USER, PAGE_SIZE) 184*91f16700Schasinglulu 185*91f16700Schasinglulu #define PLAT_SP_IMAGE_STACK_PCPU_SIZE ULL(0x10000) 186*91f16700Schasinglulu #define PLAT_SP_IMAGE_STACK_SIZE (32 * PLAT_SP_IMAGE_STACK_PCPU_SIZE) 187*91f16700Schasinglulu #define PLAT_SP_IMAGE_STACK_BASE (PLAT_SIGI_SP_HEAP_BASE + PLAT_SIGI_SP_HEAP_SIZE) 188*91f16700Schasinglulu 189*91f16700Schasinglulu #define PLAT_SIGI_SP_IMAGE_SIZE ULL(0x200000) 190*91f16700Schasinglulu #define PLAT_SIGI_SP_IMAGE_MMAP MAP_REGION2(BL32_BASE, BL32_BASE, \ 191*91f16700Schasinglulu PLAT_SIGI_SP_IMAGE_SIZE, \ 192*91f16700Schasinglulu MT_CODE | MT_SECURE | \ 193*91f16700Schasinglulu MT_USER, PAGE_SIZE) 194*91f16700Schasinglulu 195*91f16700Schasinglulu #define PLAT_SIGI_SP_HEAP_BASE (BL32_BASE + PLAT_SIGI_SP_IMAGE_SIZE) 196*91f16700Schasinglulu #define PLAT_SIGI_SP_HEAP_SIZE ULL(0x800000) 197*91f16700Schasinglulu 198*91f16700Schasinglulu #define PLAT_SIGI_SP_IMAGE_RW_MMAP MAP_REGION2(PLAT_SIGI_SP_HEAP_BASE, \ 199*91f16700Schasinglulu PLAT_SIGI_SP_HEAP_BASE, \ 200*91f16700Schasinglulu (PLAT_SIGI_SP_HEAP_SIZE + \ 201*91f16700Schasinglulu PLAT_SP_IMAGE_STACK_SIZE), \ 202*91f16700Schasinglulu MT_RW_DATA | MT_SECURE | \ 203*91f16700Schasinglulu MT_USER, PAGE_SIZE) 204*91f16700Schasinglulu 205*91f16700Schasinglulu #define PLAT_SIGI_SP_PRIV_BASE (PLAT_SP_IMAGE_STACK_BASE + \ 206*91f16700Schasinglulu PLAT_SP_IMAGE_STACK_SIZE) 207*91f16700Schasinglulu #define PLAT_SIGI_SP_PRIV_SIZE ULL(0x40000) 208*91f16700Schasinglulu 209*91f16700Schasinglulu #define PLAT_SP_PRI 0x20 210*91f16700Schasinglulu #define PLAT_PRI_BITS 2 211*91f16700Schasinglulu #define PLAT_SPM_COOKIE_0 ULL(0) 212*91f16700Schasinglulu #define PLAT_SPM_COOKIE_1 ULL(0) 213*91f16700Schasinglulu 214*91f16700Schasinglulu /* Total number of memory regions with distinct properties */ 215*91f16700Schasinglulu #define PLAT_SP_IMAGE_NUM_MEM_REGIONS 6 216*91f16700Schasinglulu 217*91f16700Schasinglulu #define PLAT_SP_IMAGE_MMAP_REGIONS 30 218*91f16700Schasinglulu #define PLAT_SP_IMAGE_MAX_XLAT_TABLES 20 219*91f16700Schasinglulu #define PLAT_SP_IMAGE_XLAT_SECTION_NAME "sp_xlat_table" 220*91f16700Schasinglulu #define PLAT_SP_IMAGE_BASE_XLAT_SECTION_NAME "sp_xlat_table" 221*91f16700Schasinglulu 222*91f16700Schasinglulu #define PLAT_SIGI_PERIPH_BASE 0x25000000 223*91f16700Schasinglulu #define PLAT_SIGI_PERIPH_SIZE ULL(0x4B000000) 224*91f16700Schasinglulu #define PLAT_SIGI_PERIPH_MMAP MAP_REGION_FLAT(PLAT_SIGI_PERIPH_BASE, \ 225*91f16700Schasinglulu PLAT_SIGI_PERIPH_SIZE, \ 226*91f16700Schasinglulu MT_DEVICE | MT_RW | \ 227*91f16700Schasinglulu MT_NS | MT_USER) 228*91f16700Schasinglulu 229*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */ 230