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