1*08b167e9SHaojian Zhuang /* 2*08b167e9SHaojian Zhuang * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3*08b167e9SHaojian Zhuang * 4*08b167e9SHaojian Zhuang * SPDX-License-Identifier: BSD-3-Clause 5*08b167e9SHaojian Zhuang */ 6*08b167e9SHaojian Zhuang 7*08b167e9SHaojian Zhuang #ifndef __PLATFORM_DEF_H__ 8*08b167e9SHaojian Zhuang #define __PLATFORM_DEF_H__ 9*08b167e9SHaojian Zhuang 10*08b167e9SHaojian Zhuang #include <arch.h> 11*08b167e9SHaojian Zhuang #include "../hikey_def.h" 12*08b167e9SHaojian Zhuang 13*08b167e9SHaojian Zhuang /* 14*08b167e9SHaojian Zhuang * Platform binary types for linking 15*08b167e9SHaojian Zhuang */ 16*08b167e9SHaojian Zhuang #define PLATFORM_LINKER_FORMAT "elf64-littleaarch64" 17*08b167e9SHaojian Zhuang #define PLATFORM_LINKER_ARCH aarch64 18*08b167e9SHaojian Zhuang 19*08b167e9SHaojian Zhuang 20*08b167e9SHaojian Zhuang /* 21*08b167e9SHaojian Zhuang * Generic platform constants 22*08b167e9SHaojian Zhuang */ 23*08b167e9SHaojian Zhuang 24*08b167e9SHaojian Zhuang /* Size of cacheable stacks */ 25*08b167e9SHaojian Zhuang #define PLATFORM_STACK_SIZE 0x800 26*08b167e9SHaojian Zhuang 27*08b167e9SHaojian Zhuang #define FIRMWARE_WELCOME_STR "Booting Trusted Firmware\n" 28*08b167e9SHaojian Zhuang 29*08b167e9SHaojian Zhuang #define PLATFORM_CACHE_LINE_SIZE 64 30*08b167e9SHaojian Zhuang #define PLATFORM_CLUSTER_COUNT 2 31*08b167e9SHaojian Zhuang #define PLATFORM_CORE_COUNT_PER_CLUSTER 4 32*08b167e9SHaojian Zhuang #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER_COUNT * \ 33*08b167e9SHaojian Zhuang PLATFORM_CORE_COUNT_PER_CLUSTER) 34*08b167e9SHaojian Zhuang #define PLAT_MAX_PWR_LVL MPIDR_AFFLVL2 35*08b167e9SHaojian Zhuang #define PLAT_NUM_PWR_DOMAINS (PLATFORM_CORE_COUNT + \ 36*08b167e9SHaojian Zhuang PLATFORM_CLUSTER_COUNT + 1) 37*08b167e9SHaojian Zhuang 38*08b167e9SHaojian Zhuang #define PLAT_MAX_RET_STATE 1 39*08b167e9SHaojian Zhuang #define PLAT_MAX_OFF_STATE 2 40*08b167e9SHaojian Zhuang 41*08b167e9SHaojian Zhuang #define MAX_IO_DEVICES 3 42*08b167e9SHaojian Zhuang #define MAX_IO_HANDLES 4 43*08b167e9SHaojian Zhuang /* eMMC RPMB and eMMC User Data */ 44*08b167e9SHaojian Zhuang #define MAX_IO_BLOCK_DEVICES 2 45*08b167e9SHaojian Zhuang 46*08b167e9SHaojian Zhuang /* GIC related constants (no GICR in GIC-400) */ 47*08b167e9SHaojian Zhuang #define PLAT_ARM_GICD_BASE 0xF6801000 48*08b167e9SHaojian Zhuang #define PLAT_ARM_GICC_BASE 0xF6802000 49*08b167e9SHaojian Zhuang #define PLAT_ARM_GICH_BASE 0xF6804000 50*08b167e9SHaojian Zhuang #define PLAT_ARM_GICV_BASE 0xF6806000 51*08b167e9SHaojian Zhuang 52*08b167e9SHaojian Zhuang 53*08b167e9SHaojian Zhuang /* 54*08b167e9SHaojian Zhuang * Platform memory map related constants 55*08b167e9SHaojian Zhuang */ 56*08b167e9SHaojian Zhuang 57*08b167e9SHaojian Zhuang /* 58*08b167e9SHaojian Zhuang * BL1 is stored in XG2RAM0_HIRQ that is 784KB large (0xF980_0000~0xF98C_4000). 59*08b167e9SHaojian Zhuang */ 60*08b167e9SHaojian Zhuang #define ONCHIPROM_PARAM_BASE (XG2RAM0_BASE + 0x700) 61*08b167e9SHaojian Zhuang #define LOADER_RAM_BASE (XG2RAM0_BASE + 0x800) 62*08b167e9SHaojian Zhuang #define BL1_XG2RAM0_OFFSET 0x1000 63*08b167e9SHaojian Zhuang 64*08b167e9SHaojian Zhuang /* 65*08b167e9SHaojian Zhuang * BL1 specific defines. 66*08b167e9SHaojian Zhuang * 67*08b167e9SHaojian Zhuang * Both loader and BL1_RO region stay in SRAM since they are used to simulate 68*08b167e9SHaojian Zhuang * ROM. 69*08b167e9SHaojian Zhuang * Loader is used to switch Hi6220 SoC from 32-bit to 64-bit mode. 70*08b167e9SHaojian Zhuang * 71*08b167e9SHaojian Zhuang * ++++++++++ 0xF980_0000 72*08b167e9SHaojian Zhuang * + loader + 73*08b167e9SHaojian Zhuang * ++++++++++ 0xF980_1000 74*08b167e9SHaojian Zhuang * + BL1_RO + 75*08b167e9SHaojian Zhuang * ++++++++++ 0xF981_0000 76*08b167e9SHaojian Zhuang * + BL1_RW + 77*08b167e9SHaojian Zhuang * ++++++++++ 0xF989_8000 78*08b167e9SHaojian Zhuang */ 79*08b167e9SHaojian Zhuang #define BL1_RO_BASE (XG2RAM0_BASE + BL1_XG2RAM0_OFFSET) 80*08b167e9SHaojian Zhuang #define BL1_RO_LIMIT (XG2RAM0_BASE + 0x10000) 81*08b167e9SHaojian Zhuang #define BL1_RW_BASE (BL1_RO_LIMIT) /* 0xf981_0000 */ 82*08b167e9SHaojian Zhuang #define BL1_RW_SIZE (0x00088000) 83*08b167e9SHaojian Zhuang #define BL1_RW_LIMIT (0xF9898000) 84*08b167e9SHaojian Zhuang 85*08b167e9SHaojian Zhuang /* 86*08b167e9SHaojian Zhuang * BL2 specific defines. 87*08b167e9SHaojian Zhuang */ 88*08b167e9SHaojian Zhuang #define BL2_BASE (BL1_RW_BASE + 0x8000) /* 0xf981_8000 */ 89*08b167e9SHaojian Zhuang #define BL2_LIMIT (BL2_BASE + 0x40000) 90*08b167e9SHaojian Zhuang 91*08b167e9SHaojian Zhuang /* 92*08b167e9SHaojian Zhuang * SCP_BL2 specific defines. 93*08b167e9SHaojian Zhuang * In HiKey, SCP_BL2 means MCU firmware. It's loaded into the temporary buffer 94*08b167e9SHaojian Zhuang * at 0x0100_0000. Then BL2 will parse the sections and loaded them into 95*08b167e9SHaojian Zhuang * predefined separated buffers. 96*08b167e9SHaojian Zhuang */ 97*08b167e9SHaojian Zhuang #define SCP_BL2_BASE (DDR_BASE + 0x01000000) 98*08b167e9SHaojian Zhuang #define SCP_BL2_LIMIT (SCP_BL2_BASE + 0x00100000) 99*08b167e9SHaojian Zhuang #define SCP_BL2_SIZE (SCP_BL2_LIMIT - SCP_BL2_BASE) 100*08b167e9SHaojian Zhuang 101*08b167e9SHaojian Zhuang /* 102*08b167e9SHaojian Zhuang * BL31 specific defines. 103*08b167e9SHaojian Zhuang */ 104*08b167e9SHaojian Zhuang #define BL31_BASE BL2_LIMIT 105*08b167e9SHaojian Zhuang #define BL31_LIMIT 0xF9898000 106*08b167e9SHaojian Zhuang 107*08b167e9SHaojian Zhuang #define NS_BL1U_BASE (BL2_BASE) 108*08b167e9SHaojian Zhuang #define NS_BL1U_SIZE (0x00010000) 109*08b167e9SHaojian Zhuang #define NS_BL1U_LIMIT (NS_BL1U_BASE + NS_BL1U_SIZE) 110*08b167e9SHaojian Zhuang 111*08b167e9SHaojian Zhuang /* 112*08b167e9SHaojian Zhuang * Platform specific page table and MMU setup constants 113*08b167e9SHaojian Zhuang */ 114*08b167e9SHaojian Zhuang #define ADDR_SPACE_SIZE (1ull << 32) 115*08b167e9SHaojian Zhuang 116*08b167e9SHaojian Zhuang #if IMAGE_BL1 || IMAGE_BL2 || IMAGE_BL31 117*08b167e9SHaojian Zhuang #define MAX_XLAT_TABLES 3 118*08b167e9SHaojian Zhuang #endif 119*08b167e9SHaojian Zhuang 120*08b167e9SHaojian Zhuang #define MAX_MMAP_REGIONS 16 121*08b167e9SHaojian Zhuang 122*08b167e9SHaojian Zhuang #define HIKEY_NS_IMAGE_OFFSET (DDR_BASE + 0x35000000) 123*08b167e9SHaojian Zhuang 124*08b167e9SHaojian Zhuang /* 125*08b167e9SHaojian Zhuang * Declarations and constants to access the mailboxes safely. Each mailbox is 126*08b167e9SHaojian Zhuang * aligned on the biggest cache line size in the platform. This is known only 127*08b167e9SHaojian Zhuang * to the platform as it might have a combination of integrated and external 128*08b167e9SHaojian Zhuang * caches. Such alignment ensures that two maiboxes do not sit on the same cache 129*08b167e9SHaojian Zhuang * line at any cache level. They could belong to different cpus/clusters & 130*08b167e9SHaojian Zhuang * get written while being protected by different locks causing corruption of 131*08b167e9SHaojian Zhuang * a valid mailbox address. 132*08b167e9SHaojian Zhuang */ 133*08b167e9SHaojian Zhuang #define CACHE_WRITEBACK_SHIFT 6 134*08b167e9SHaojian Zhuang #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 135*08b167e9SHaojian Zhuang 136*08b167e9SHaojian Zhuang #endif /* __PLATFORM_DEF_H__ */ 137