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