1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2017-2019, 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 <arch.h> 11*91f16700Schasinglulu #include <common/interrupt_props.h> 12*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h> 13*91f16700Schasinglulu #include <drivers/arm/gic_common.h> 14*91f16700Schasinglulu #include <lib/utils_def.h> 15*91f16700Schasinglulu #include <plat/common/common_def.h> 16*91f16700Schasinglulu 17*91f16700Schasinglulu #include "hi3798cv200.h" 18*91f16700Schasinglulu #include "poplar_layout.h" /* BL memory region sizes, etc */ 19*91f16700Schasinglulu 20*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL3-1 */ 21*91f16700Schasinglulu #define POPLAR_BL31_PLAT_PARAM_VAL 0x0f1e2d3c4b5a6978ULL 22*91f16700Schasinglulu 23*91f16700Schasinglulu #define PLATFORM_LINKER_FORMAT "elf64-littleaarch64" 24*91f16700Schasinglulu #define PLATFORM_LINKER_ARCH aarch64 25*91f16700Schasinglulu 26*91f16700Schasinglulu #define POPLAR_CRASH_UART_BASE PL011_UART0_BASE 27*91f16700Schasinglulu #define POPLAR_CRASH_UART_CLK_IN_HZ PL011_UART0_CLK_IN_HZ 28*91f16700Schasinglulu #define POPLAR_CONSOLE_BAUDRATE PL011_BAUDRATE 29*91f16700Schasinglulu 30*91f16700Schasinglulu /* Generic platform constants */ 31*91f16700Schasinglulu #define PLATFORM_STACK_SIZE (0x800) 32*91f16700Schasinglulu 33*91f16700Schasinglulu #define FIRMWARE_WELCOME_STR "Booting Trusted Firmware\n" 34*91f16700Schasinglulu #define BOOT_EMMC_NAME "l-loader.bin" 35*91f16700Schasinglulu 36*91f16700Schasinglulu #define PLATFORM_CACHE_LINE_SIZE (64) 37*91f16700Schasinglulu #define PLATFORM_CLUSTER_COUNT U(1) 38*91f16700Schasinglulu #define PLATFORM_CORE_COUNT U(4) 39*91f16700Schasinglulu #define PLATFORM_MAX_CPUS_PER_CLUSTER U(4) 40*91f16700Schasinglulu 41*91f16700Schasinglulu /* IO framework user */ 42*91f16700Schasinglulu #define MAX_IO_DEVICES (4) 43*91f16700Schasinglulu #define MAX_IO_HANDLES (4) 44*91f16700Schasinglulu #define MAX_IO_BLOCK_DEVICES U(2) 45*91f16700Schasinglulu 46*91f16700Schasinglulu /* Memory size options */ 47*91f16700Schasinglulu #define POPLAR_DRAM_SIZE_1G 0 48*91f16700Schasinglulu #define POPLAR_DRAM_SIZE_2G 1 49*91f16700Schasinglulu 50*91f16700Schasinglulu /* Memory map related constants */ 51*91f16700Schasinglulu #define DDR_BASE (0x00000000) 52*91f16700Schasinglulu 53*91f16700Schasinglulu #if (POPLAR_DRAM_SIZE_ID == POPLAR_DRAM_SIZE_2G) 54*91f16700Schasinglulu #define DDR_SIZE (0x80000000) 55*91f16700Schasinglulu #elif (POPLAR_DRAM_SIZE_ID == POPLAR_DRAM_SIZE_1G) 56*91f16700Schasinglulu #define DDR_SIZE (0x40000000) 57*91f16700Schasinglulu #else 58*91f16700Schasinglulu #error "Currently unsupported POPLAR_DRAM_SIZE_ID value" 59*91f16700Schasinglulu #endif 60*91f16700Schasinglulu 61*91f16700Schasinglulu #define DEVICE_BASE (0xF0000000) 62*91f16700Schasinglulu #define DEVICE_SIZE (0x0F000000) 63*91f16700Schasinglulu 64*91f16700Schasinglulu #define TEE_SEC_MEM_BASE (0x70000000) 65*91f16700Schasinglulu #define TEE_SEC_MEM_SIZE (0x10000000) 66*91f16700Schasinglulu 67*91f16700Schasinglulu /* Memory location options for TSP */ 68*91f16700Schasinglulu #define POPLAR_SRAM_ID 0 69*91f16700Schasinglulu #define POPLAR_DRAM_ID 1 70*91f16700Schasinglulu 71*91f16700Schasinglulu /* 72*91f16700Schasinglulu * DDR for OP-TEE (26MB from 0x02400000 -0x04000000) is divided in several 73*91f16700Schasinglulu * regions: 74*91f16700Schasinglulu * - Secure DDR (default is the top 16MB) used by OP-TEE 75*91f16700Schasinglulu * - Non-secure DDR (4MB) reserved for OP-TEE's future use 76*91f16700Schasinglulu * - Secure DDR (4MB aligned on 4MB) for OP-TEE's "Secure Data Path" feature 77*91f16700Schasinglulu * - Non-secure DDR used by OP-TEE (shared memory and padding) (4MB) 78*91f16700Schasinglulu */ 79*91f16700Schasinglulu #define DDR_SEC_SIZE 0x01000000 80*91f16700Schasinglulu #define DDR_SEC_BASE 0x03000000 81*91f16700Schasinglulu 82*91f16700Schasinglulu /* 83*91f16700Schasinglulu * BL3-2 specific defines. 84*91f16700Schasinglulu */ 85*91f16700Schasinglulu 86*91f16700Schasinglulu /* 87*91f16700Schasinglulu * The TSP currently executes from TZC secured area of DRAM. 88*91f16700Schasinglulu */ 89*91f16700Schasinglulu #define BL32_DRAM_BASE 0x03000000 90*91f16700Schasinglulu #define BL32_DRAM_LIMIT 0x04000000 91*91f16700Schasinglulu 92*91f16700Schasinglulu #ifdef SPD_opteed 93*91f16700Schasinglulu /* Load pageable part of OP-TEE at end of allocated DRAM space for BL32 */ 94*91f16700Schasinglulu #define POPLAR_OPTEE_PAGEABLE_LOAD_SIZE 0x400000 /* 4MB */ 95*91f16700Schasinglulu #define POPLAR_OPTEE_PAGEABLE_LOAD_BASE (BL32_DRAM_LIMIT - POPLAR_OPTEE_PAGEABLE_LOAD_SIZE) /* 0x03C0_0000 */ 96*91f16700Schasinglulu #endif 97*91f16700Schasinglulu 98*91f16700Schasinglulu #if (POPLAR_TSP_RAM_LOCATION_ID == POPLAR_DRAM_ID) 99*91f16700Schasinglulu #define TSP_SEC_MEM_BASE BL32_DRAM_BASE 100*91f16700Schasinglulu #define TSP_SEC_MEM_SIZE (BL32_DRAM_LIMIT - BL32_DRAM_BASE) 101*91f16700Schasinglulu #define BL32_BASE BL32_DRAM_BASE 102*91f16700Schasinglulu #define BL32_LIMIT BL32_DRAM_LIMIT 103*91f16700Schasinglulu #elif (POPLAR_TSP_RAM_LOCATION_ID == POPLAR_SRAM_ID) 104*91f16700Schasinglulu #error "SRAM storage of TSP payload is currently unsupported" 105*91f16700Schasinglulu #else 106*91f16700Schasinglulu #error "Currently unsupported POPLAR_TSP_LOCATION_ID value" 107*91f16700Schasinglulu #endif 108*91f16700Schasinglulu 109*91f16700Schasinglulu /* BL32 is mandatory in AArch32 */ 110*91f16700Schasinglulu #ifdef __aarch64__ 111*91f16700Schasinglulu #ifdef SPD_none 112*91f16700Schasinglulu #undef BL32_BASE 113*91f16700Schasinglulu #endif /* SPD_none */ 114*91f16700Schasinglulu #endif 115*91f16700Schasinglulu 116*91f16700Schasinglulu #define POPLAR_EMMC_DATA_BASE U(0x02200000) 117*91f16700Schasinglulu #define POPLAR_EMMC_DATA_SIZE EMMC_DESC_SIZE 118*91f16700Schasinglulu #define POPLAR_EMMC_DESC_BASE (POPLAR_EMMC_DATA_BASE + POPLAR_EMMC_DATA_SIZE) 119*91f16700Schasinglulu #define POPLAR_EMMC_DESC_SIZE EMMC_DESC_SIZE 120*91f16700Schasinglulu 121*91f16700Schasinglulu #define PLAT_POPLAR_NS_IMAGE_OFFSET 0x37000000 122*91f16700Schasinglulu 123*91f16700Schasinglulu /* Page table and MMU setup constants */ 124*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32) 125*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32) 126*91f16700Schasinglulu #define MAX_XLAT_TABLES (4) 127*91f16700Schasinglulu #define MAX_MMAP_REGIONS (16) 128*91f16700Schasinglulu 129*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT (6) 130*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 131*91f16700Schasinglulu 132*91f16700Schasinglulu /* Power states */ 133*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL (MPIDR_AFFLVL1) 134*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE U(2) 135*91f16700Schasinglulu #define PLAT_MAX_RET_STATE U(1) 136*91f16700Schasinglulu 137*91f16700Schasinglulu /* Interrupt controller */ 138*91f16700Schasinglulu #define POPLAR_GICD_BASE GICD_BASE 139*91f16700Schasinglulu #define POPLAR_GICC_BASE GICC_BASE 140*91f16700Schasinglulu 141*91f16700Schasinglulu #define POPLAR_G1S_IRQ_PROPS(grp) \ 142*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, grp, \ 143*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 144*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, grp, \ 145*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 146*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, grp, \ 147*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 148*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, grp, \ 149*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 150*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, grp, \ 151*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 152*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, grp, \ 153*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 154*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, grp, \ 155*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 156*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, grp, \ 157*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 158*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_TIMER0, GIC_HIGHEST_SEC_PRIORITY, grp, \ 159*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 160*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_TIMER1, GIC_HIGHEST_SEC_PRIORITY, grp, \ 161*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 162*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_TIMER2, GIC_HIGHEST_SEC_PRIORITY, grp, \ 163*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 164*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_TIMER3, GIC_HIGHEST_SEC_PRIORITY, grp, \ 165*91f16700Schasinglulu GIC_INTR_CFG_LEVEL), \ 166*91f16700Schasinglulu INTR_PROP_DESC(HISI_IRQ_SEC_AXI, GIC_HIGHEST_SEC_PRIORITY, grp, \ 167*91f16700Schasinglulu GIC_INTR_CFG_LEVEL) 168*91f16700Schasinglulu 169*91f16700Schasinglulu #define POPLAR_G0_IRQ_PROPS(grp) 170*91f16700Schasinglulu 171*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */ 172