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