xref: /rk3399_ARM-atf/plat/hisilicon/hikey/include/platform_def.h (revision 08b167e93f479e8b344763d646933a68e7bae279)
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