blob: 0666e57fa27d4a28feb5222803a65275bccd884d [file] [log] [blame]
Yatharth Kocharf9a0f162016-09-13 17:07:57 +01001/*
Zelalem Aweke96c0bab2021-07-11 18:39:39 -05002 * Copyright (c) 2016-2021, ARM Limited and Contributors. All rights reserved.
Yatharth Kocharf9a0f162016-09-13 17:07:57 +01003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Yatharth Kocharf9a0f162016-09-13 17:07:57 +01005 */
6
Yatharth Kocharf9a0f162016-09-13 17:07:57 +01007#include <platform_def.h>
8
Antonio Nino Diaze0f90632018-12-14 00:18:21 +00009#include <common/bl_common.h>
10#include <common/desc_image_load.h>
Yatharth Kocharf9a0f162016-09-13 17:07:57 +010011
12/*******************************************************************************
13 * Following descriptor provides BL image/ep information that gets used
14 * by BL2 to load the images and also subset of this information is
15 * passed to next BL image. The image loading sequence is managed by
16 * populating the images in required loading order. The image execution
17 * sequence is managed by populating the `next_handoff_image_id` with
18 * the next executable image id.
19 ******************************************************************************/
20static bl_mem_params_node_t bl2_mem_params_descs[] = {
21#ifdef SCP_BL2_BASE
22 /* Fill SCP_BL2 related information if it exists */
23 {
24 .image_id = SCP_BL2_IMAGE_ID,
25
26 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
27 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
28
29 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
30 VERSION_2, image_info_t, 0),
31 .image_info.image_base = SCP_BL2_BASE,
32 .image_info.image_max_size = PLAT_CSS_MAX_SCP_BL2_SIZE,
33
34 .next_handoff_image_id = INVALID_IMAGE_ID,
35 },
36#endif /* SCP_BL2_BASE */
37
38#ifdef EL3_PAYLOAD_BASE
39 /* Fill EL3 payload related information (BL31 is EL3 payload)*/
40 {
41 .image_id = BL31_IMAGE_ID,
42
43 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
44 VERSION_2, entry_point_info_t,
45 SECURE | EXECUTABLE | EP_FIRST_EXE),
46 .ep_info.pc = EL3_PAYLOAD_BASE,
47 .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
48 DISABLE_ALL_EXCEPTIONS),
49
50 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
51 VERSION_2, image_info_t,
52 IMAGE_ATTRIB_PLAT_SETUP | IMAGE_ATTRIB_SKIP_LOADING),
53
54 .next_handoff_image_id = INVALID_IMAGE_ID,
55 },
56
57#else /* EL3_PAYLOAD_BASE */
58
59 /* Fill BL31 related information */
60 {
61 .image_id = BL31_IMAGE_ID,
62
63 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
64 VERSION_2, entry_point_info_t,
65 SECURE | EXECUTABLE | EP_FIRST_EXE),
66 .ep_info.pc = BL31_BASE,
67 .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
68 DISABLE_ALL_EXCEPTIONS),
69#if DEBUG
Soby Mathew7d5a2e72018-01-10 15:59:31 +000070 .ep_info.args.arg3 = ARM_BL31_PLAT_PARAM_VAL,
Yatharth Kocharf9a0f162016-09-13 17:07:57 +010071#endif
72
73 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
74 VERSION_2, image_info_t, IMAGE_ATTRIB_PLAT_SETUP),
75 .image_info.image_base = BL31_BASE,
76 .image_info.image_max_size = BL31_LIMIT - BL31_BASE,
77
Zelalem Aweke96c0bab2021-07-11 18:39:39 -050078# if defined(BL32_BASE)
Yatharth Kocharf9a0f162016-09-13 17:07:57 +010079 .next_handoff_image_id = BL32_IMAGE_ID,
Zelalem Aweke96c0bab2021-07-11 18:39:39 -050080# elif ENABLE_RME
81 .next_handoff_image_id = RMM_IMAGE_ID,
Yatharth Kocharf9a0f162016-09-13 17:07:57 +010082# else
83 .next_handoff_image_id = BL33_IMAGE_ID,
84# endif
85 },
Soby Mathew96a1c6b2018-01-15 14:45:33 +000086 /* Fill HW_CONFIG related information */
87 {
88 .image_id = HW_CONFIG_ID,
89 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
90 VERSION_2, entry_point_info_t, NON_SECURE | NON_EXECUTABLE),
91 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
92 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
93 .next_handoff_image_id = INVALID_IMAGE_ID,
94 },
Soby Mathewb6814842018-04-04 09:40:32 +010095 /* Fill SOC_FW_CONFIG related information */
96 {
97 .image_id = SOC_FW_CONFIG_ID,
98 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
99 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
100 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
101 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
102 .next_handoff_image_id = INVALID_IMAGE_ID,
103 },
Zelalem Aweke96c0bab2021-07-11 18:39:39 -0500104
105# if ENABLE_RME
106 /* Fill RMM related information */
107 {
108 .image_id = RMM_IMAGE_ID,
109 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
110 VERSION_2, entry_point_info_t, EP_REALM | EXECUTABLE),
111 .ep_info.pc = RMM_BASE,
112 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
113 VERSION_2, image_info_t, 0),
114 .image_info.image_base = RMM_BASE,
115 .image_info.image_max_size = RMM_LIMIT - RMM_BASE,
116 .next_handoff_image_id = BL33_IMAGE_ID,
117 },
118# endif
119
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100120# ifdef BL32_BASE
121 /* Fill BL32 related information */
122 {
123 .image_id = BL32_IMAGE_ID,
124
125 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
126 VERSION_2, entry_point_info_t, SECURE | EXECUTABLE),
127 .ep_info.pc = BL32_BASE,
128
129 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
130 VERSION_2, image_info_t, 0),
131 .image_info.image_base = BL32_BASE,
132 .image_info.image_max_size = BL32_LIMIT - BL32_BASE,
133
Zelalem Aweke96c0bab2021-07-11 18:39:39 -0500134# if ENABLE_RME
135 .next_handoff_image_id = RMM_IMAGE_ID,
136# else
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100137 .next_handoff_image_id = BL33_IMAGE_ID,
Zelalem Aweke96c0bab2021-07-11 18:39:39 -0500138# endif
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100139 },
Summer Qin9db8f2e2017-04-24 16:49:28 +0100140
141 /*
142 * Fill BL32 external 1 related information.
143 * A typical use for extra1 image is with OP-TEE where it is the pager image.
144 */
145 {
146 .image_id = BL32_EXTRA1_IMAGE_ID,
147
148 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
149 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
150
151 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
152 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
153 .image_info.image_base = BL32_BASE,
154 .image_info.image_max_size = BL32_LIMIT - BL32_BASE,
155
156 .next_handoff_image_id = INVALID_IMAGE_ID,
157 },
158
159 /*
160 * Fill BL32 external 2 related information.
161 * A typical use for extra2 image is with OP-TEE where it is the paged image.
162 */
163 {
164 .image_id = BL32_EXTRA2_IMAGE_ID,
165
166 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
167 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
168
169 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
170 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
171#ifdef SPD_opteed
172 .image_info.image_base = ARM_OPTEE_PAGEABLE_LOAD_BASE,
173 .image_info.image_max_size = ARM_OPTEE_PAGEABLE_LOAD_SIZE,
174#endif
175 .next_handoff_image_id = INVALID_IMAGE_ID,
176 },
Soby Mathewb6814842018-04-04 09:40:32 +0100177
178 /* Fill TOS_FW_CONFIG related information */
179 {
180 .image_id = TOS_FW_CONFIG_ID,
181 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
182 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
183 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
184 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
185 .next_handoff_image_id = INVALID_IMAGE_ID,
186 },
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100187# endif /* BL32_BASE */
188
189 /* Fill BL33 related information */
190 {
191 .image_id = BL33_IMAGE_ID,
192 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
193 VERSION_2, entry_point_info_t, NON_SECURE | EXECUTABLE),
194# ifdef PRELOADED_BL33_BASE
195 .ep_info.pc = PRELOADED_BL33_BASE,
196
197 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
198 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
199# else
Sandrine Bailleuxafa91db2019-01-31 15:01:32 +0100200 .ep_info.pc = PLAT_ARM_NS_IMAGE_BASE,
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100201
202 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
203 VERSION_2, image_info_t, 0),
Sandrine Bailleuxafa91db2019-01-31 15:01:32 +0100204 .image_info.image_base = PLAT_ARM_NS_IMAGE_BASE,
Sandrine Bailleuxe7509c82019-01-31 15:06:21 +0100205 .image_info.image_max_size = ARM_DRAM1_BASE + ARM_DRAM1_SIZE
206 - PLAT_ARM_NS_IMAGE_BASE,
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100207# endif /* PRELOADED_BL33_BASE */
208
209 .next_handoff_image_id = INVALID_IMAGE_ID,
Soby Mathewb6814842018-04-04 09:40:32 +0100210 },
211 /* Fill NT_FW_CONFIG related information */
212 {
213 .image_id = NT_FW_CONFIG_ID,
214 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
215 VERSION_2, entry_point_info_t, NON_SECURE | NON_EXECUTABLE),
216 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
217 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
218 .next_handoff_image_id = INVALID_IMAGE_ID,
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100219 }
220#endif /* EL3_PAYLOAD_BASE */
221};
222
223REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs)