1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (C) 2018 Marvell International Ltd. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * https://spdx.org/licenses 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef MARVELL_DEF_H 9*91f16700Schasinglulu #define MARVELL_DEF_H 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <platform_def.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu #include <arch.h> 14*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h> 15*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_v2.h> 16*91f16700Schasinglulu #include <plat/common/common_def.h> 17*91f16700Schasinglulu 18*91f16700Schasinglulu /****************************************************************************** 19*91f16700Schasinglulu * Definitions common to all MARVELL standard platforms 20*91f16700Schasinglulu *****************************************************************************/ 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL31 */ 23*91f16700Schasinglulu #define MARVELL_BL31_PLAT_PARAM_VAL 0x0f1e2d3c4b5a6978ULL 24*91f16700Schasinglulu 25*91f16700Schasinglulu 26*91f16700Schasinglulu #define MARVELL_CACHE_WRITEBACK_SHIFT 6 27*91f16700Schasinglulu 28*91f16700Schasinglulu /* 29*91f16700Schasinglulu * Macros mapping the MPIDR Affinity levels to MARVELL Platform Power levels. 30*91f16700Schasinglulu * The power levels have a 1:1 mapping with the MPIDR affinity levels. 31*91f16700Schasinglulu */ 32*91f16700Schasinglulu #define MARVELL_PWR_LVL0 MPIDR_AFFLVL0 33*91f16700Schasinglulu #define MARVELL_PWR_LVL1 MPIDR_AFFLVL1 34*91f16700Schasinglulu #define MARVELL_PWR_LVL2 MPIDR_AFFLVL2 35*91f16700Schasinglulu 36*91f16700Schasinglulu /* 37*91f16700Schasinglulu * Macros for local power states in Marvell platforms encoded by 38*91f16700Schasinglulu * State-ID field within the power-state parameter. 39*91f16700Schasinglulu */ 40*91f16700Schasinglulu /* Local power state for power domains in Run state. */ 41*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_RUN 0 42*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */ 43*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_RET 1 44*91f16700Schasinglulu /* 45*91f16700Schasinglulu * Local power state for OFF/power-down. Valid for CPU 46*91f16700Schasinglulu * and cluster power domains 47*91f16700Schasinglulu */ 48*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_OFF 2 49*91f16700Schasinglulu 50*91f16700Schasinglulu /* This leaves a gap between end of DRAM and start of ROM block */ 51*91f16700Schasinglulu #define MARVELL_TRUSTED_DRAM_SIZE 0x80000 /* 512 KB */ 52*91f16700Schasinglulu 53*91f16700Schasinglulu /* The first 4KB of Trusted SRAM are used as shared memory */ 54*91f16700Schasinglulu #define MARVELL_SHARED_RAM_BASE PLAT_MARVELL_ATF_BASE 55*91f16700Schasinglulu #define MARVELL_SHARED_RAM_SIZE 0x00001000 /* 4 KB */ 56*91f16700Schasinglulu 57*91f16700Schasinglulu /* The remaining Trusted SRAM is used to load the BL images */ 58*91f16700Schasinglulu #define MARVELL_BL_RAM_BASE (MARVELL_SHARED_RAM_BASE + \ 59*91f16700Schasinglulu MARVELL_SHARED_RAM_SIZE) 60*91f16700Schasinglulu #define MARVELL_BL_RAM_SIZE (MARVELL_TRUSTED_DRAM_SIZE - \ 61*91f16700Schasinglulu MARVELL_SHARED_RAM_SIZE) 62*91f16700Schasinglulu /* Non-shared DRAM */ 63*91f16700Schasinglulu #define MARVELL_DRAM_BASE ULL(0x0) 64*91f16700Schasinglulu #define MARVELL_DRAM_SIZE ULL(0x80000000) 65*91f16700Schasinglulu #define MARVELL_DRAM_END (MARVELL_DRAM_BASE + \ 66*91f16700Schasinglulu MARVELL_DRAM_SIZE - 1) 67*91f16700Schasinglulu 68*91f16700Schasinglulu #define MARVELL_IRQ_PIC0 28 69*91f16700Schasinglulu #define MARVELL_IRQ_SEC_PHY_TIMER 29 70*91f16700Schasinglulu 71*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_0 8 72*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_1 9 73*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_2 10 74*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_3 11 75*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_4 12 76*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_5 13 77*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_6 14 78*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_7 15 79*91f16700Schasinglulu 80*91f16700Schasinglulu #ifdef SPD_opteed 81*91f16700Schasinglulu /* 82*91f16700Schasinglulu * BL2 needs to map 4MB at the end of TZC_DRAM1 in order to 83*91f16700Schasinglulu * load/authenticate the trusted os extra image. The first 512KB of 84*91f16700Schasinglulu * TZC_DRAM1 are reserved for trusted os (OPTEE). The extra image loading 85*91f16700Schasinglulu * for OPTEE is paged image which only include the paging part using 86*91f16700Schasinglulu * virtual memory but without "init" data. OPTEE will copy the "init" data 87*91f16700Schasinglulu * (from pager image) to the first 512KB of TZC_DRAM, and then copy the 88*91f16700Schasinglulu * extra image behind the "init" data. 89*91f16700Schasinglulu */ 90*91f16700Schasinglulu #define MARVELL_OPTEE_PAGEABLE_LOAD_BASE \ 91*91f16700Schasinglulu (PLAT_MARVELL_TRUSTED_RAM_BASE + \ 92*91f16700Schasinglulu PLAT_MARVELL_TRUSTED_RAM_SIZE - \ 93*91f16700Schasinglulu MARVELL_OPTEE_PAGEABLE_LOAD_SIZE) 94*91f16700Schasinglulu #define MARVELL_OPTEE_PAGEABLE_LOAD_SIZE 0x400000 95*91f16700Schasinglulu #define MARVELL_OPTEE_PAGEABLE_LOAD_MEM \ 96*91f16700Schasinglulu MAP_REGION_FLAT( \ 97*91f16700Schasinglulu MARVELL_OPTEE_PAGEABLE_LOAD_BASE, \ 98*91f16700Schasinglulu MARVELL_OPTEE_PAGEABLE_LOAD_SIZE, \ 99*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 100*91f16700Schasinglulu 101*91f16700Schasinglulu /* 102*91f16700Schasinglulu * Map the memory for the OP-TEE core (also known as OP-TEE pager when paging 103*91f16700Schasinglulu * support is enabled). 104*91f16700Schasinglulu */ 105*91f16700Schasinglulu #define MARVELL_MAP_OPTEE_CORE_MEM MAP_REGION_FLAT( \ 106*91f16700Schasinglulu BL32_BASE, \ 107*91f16700Schasinglulu BL32_LIMIT - BL32_BASE, \ 108*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 109*91f16700Schasinglulu #endif /* SPD_opteed */ 110*91f16700Schasinglulu 111*91f16700Schasinglulu #define MARVELL_MAP_SECURE_RAM MAP_REGION_FLAT( \ 112*91f16700Schasinglulu MARVELL_SHARED_RAM_BASE, \ 113*91f16700Schasinglulu MARVELL_SHARED_RAM_SIZE, \ 114*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_SECURE) 115*91f16700Schasinglulu 116*91f16700Schasinglulu #define MARVELL_MAP_DRAM MAP_REGION_FLAT( \ 117*91f16700Schasinglulu MARVELL_DRAM_BASE, \ 118*91f16700Schasinglulu MARVELL_DRAM_SIZE, \ 119*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 120*91f16700Schasinglulu 121*91f16700Schasinglulu /* 122*91f16700Schasinglulu * The number of regions like RO(code), coherent and data required by 123*91f16700Schasinglulu * different BL stages which need to be mapped in the MMU. 124*91f16700Schasinglulu */ 125*91f16700Schasinglulu #if USE_COHERENT_MEM 126*91f16700Schasinglulu #define MARVELL_BL_REGIONS 3 127*91f16700Schasinglulu #else 128*91f16700Schasinglulu #define MARVELL_BL_REGIONS 2 129*91f16700Schasinglulu #endif 130*91f16700Schasinglulu 131*91f16700Schasinglulu #define MAX_MMAP_REGIONS (PLAT_MARVELL_MMAP_ENTRIES + \ 132*91f16700Schasinglulu MARVELL_BL_REGIONS) 133*91f16700Schasinglulu 134*91f16700Schasinglulu #define MARVELL_CONSOLE_BAUDRATE 115200 135*91f16700Schasinglulu 136*91f16700Schasinglulu /****************************************************************************** 137*91f16700Schasinglulu * Required platform porting definitions common to all MARVELL std. platforms 138*91f16700Schasinglulu *****************************************************************************/ 139*91f16700Schasinglulu 140*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32) 141*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32) 142*91f16700Schasinglulu 143*91f16700Schasinglulu /* 144*91f16700Schasinglulu * This macro defines the deepest retention state possible. A higher state 145*91f16700Schasinglulu * id will represent an invalid or a power down state. 146*91f16700Schasinglulu */ 147*91f16700Schasinglulu #define PLAT_MAX_RET_STATE MARVELL_LOCAL_STATE_RET 148*91f16700Schasinglulu 149*91f16700Schasinglulu /* 150*91f16700Schasinglulu * This macro defines the deepest power down states possible. Any state ID 151*91f16700Schasinglulu * higher than this is invalid. 152*91f16700Schasinglulu */ 153*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE MARVELL_LOCAL_STATE_OFF 154*91f16700Schasinglulu 155*91f16700Schasinglulu 156*91f16700Schasinglulu #define PLATFORM_CORE_COUNT PLAT_MARVELL_CORE_COUNT 157*91f16700Schasinglulu #define PLAT_NUM_PWR_DOMAINS (PLAT_MARVELL_CLUSTER_COUNT + \ 158*91f16700Schasinglulu PLATFORM_CORE_COUNT) 159*91f16700Schasinglulu 160*91f16700Schasinglulu /* 161*91f16700Schasinglulu * Some data must be aligned on the biggest cache line size in the platform. 162*91f16700Schasinglulu * This is known only to the platform as it might have a combination of 163*91f16700Schasinglulu * integrated and external caches. 164*91f16700Schasinglulu */ 165*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE (1 << MARVELL_CACHE_WRITEBACK_SHIFT) 166*91f16700Schasinglulu 167*91f16700Schasinglulu 168*91f16700Schasinglulu /******************************************************************************* 169*91f16700Schasinglulu * BL1 specific defines. 170*91f16700Schasinglulu * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of 171*91f16700Schasinglulu * addresses. 172*91f16700Schasinglulu ******************************************************************************/ 173*91f16700Schasinglulu #define BL1_RO_BASE PLAT_MARVELL_TRUSTED_ROM_BASE 174*91f16700Schasinglulu #define BL1_RO_LIMIT (PLAT_MARVELL_TRUSTED_ROM_BASE \ 175*91f16700Schasinglulu + PLAT_MARVELL_TRUSTED_ROM_SIZE) 176*91f16700Schasinglulu /* 177*91f16700Schasinglulu * Put BL1 RW at the top of the Trusted SRAM. 178*91f16700Schasinglulu */ 179*91f16700Schasinglulu #define BL1_RW_BASE (MARVELL_BL_RAM_BASE + \ 180*91f16700Schasinglulu MARVELL_BL_RAM_SIZE - \ 181*91f16700Schasinglulu PLAT_MARVELL_MAX_BL1_RW_SIZE) 182*91f16700Schasinglulu #define BL1_RW_LIMIT (MARVELL_BL_RAM_BASE + MARVELL_BL_RAM_SIZE) 183*91f16700Schasinglulu 184*91f16700Schasinglulu /******************************************************************************* 185*91f16700Schasinglulu * BLE specific defines. 186*91f16700Schasinglulu ******************************************************************************/ 187*91f16700Schasinglulu #define BLE_BASE PLAT_MARVELL_SRAM_BASE 188*91f16700Schasinglulu #define BLE_LIMIT PLAT_MARVELL_SRAM_END 189*91f16700Schasinglulu 190*91f16700Schasinglulu /******************************************************************************* 191*91f16700Schasinglulu * BL2 specific defines. 192*91f16700Schasinglulu ******************************************************************************/ 193*91f16700Schasinglulu /* 194*91f16700Schasinglulu * Put BL2 just below BL31. 195*91f16700Schasinglulu */ 196*91f16700Schasinglulu #define BL2_BASE (BL31_BASE - PLAT_MARVELL_MAX_BL2_SIZE) 197*91f16700Schasinglulu #define BL2_LIMIT BL31_BASE 198*91f16700Schasinglulu 199*91f16700Schasinglulu /******************************************************************************* 200*91f16700Schasinglulu * BL31 specific defines. 201*91f16700Schasinglulu ******************************************************************************/ 202*91f16700Schasinglulu /* 203*91f16700Schasinglulu * Put BL31 at the top of the Trusted SRAM. 204*91f16700Schasinglulu */ 205*91f16700Schasinglulu #define BL31_BASE (MARVELL_BL_RAM_BASE + \ 206*91f16700Schasinglulu MARVELL_BL_RAM_SIZE - \ 207*91f16700Schasinglulu PLAT_MARVEL_MAX_BL31_SIZE) 208*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT BL1_RW_BASE 209*91f16700Schasinglulu #define BL31_LIMIT (MARVELL_BL_RAM_BASE + \ 210*91f16700Schasinglulu MARVELL_BL_RAM_SIZE) 211*91f16700Schasinglulu 212*91f16700Schasinglulu /******************************************************************************* 213*91f16700Schasinglulu * BL32 specific defines. 214*91f16700Schasinglulu ******************************************************************************/ 215*91f16700Schasinglulu #define BL32_BASE PLAT_MARVELL_TRUSTED_RAM_BASE 216*91f16700Schasinglulu #define BL32_LIMIT (BL32_BASE + PLAT_MARVELL_TRUSTED_RAM_SIZE) 217*91f16700Schasinglulu 218*91f16700Schasinglulu #ifdef SPD_none 219*91f16700Schasinglulu #undef BL32_BASE 220*91f16700Schasinglulu #endif /* SPD_none */ 221*91f16700Schasinglulu 222*91f16700Schasinglulu #endif /* MARVELL_DEF_H */ 223