blob: 6a8943d5d0a63c4f634090333de5498dcf08b6ee [file] [log] [blame]
Yatharth Kocharf9a0f162016-09-13 17:07:57 +01001/*
Zelalem87675d42020-02-03 14:56:42 -06002 * Copyright (c) 2016-2020, 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
78# ifdef BL32_BASE
79 .next_handoff_image_id = BL32_IMAGE_ID,
80# else
81 .next_handoff_image_id = BL33_IMAGE_ID,
82# endif
83 },
Soby Mathew96a1c6b2018-01-15 14:45:33 +000084 /* Fill HW_CONFIG related information */
85 {
86 .image_id = HW_CONFIG_ID,
87 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
88 VERSION_2, entry_point_info_t, NON_SECURE | NON_EXECUTABLE),
89 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
90 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
91 .next_handoff_image_id = INVALID_IMAGE_ID,
92 },
Soby Mathewb6814842018-04-04 09:40:32 +010093 /* Fill SOC_FW_CONFIG related information */
94 {
95 .image_id = SOC_FW_CONFIG_ID,
96 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
97 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
98 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
99 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
100 .next_handoff_image_id = INVALID_IMAGE_ID,
101 },
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100102# ifdef BL32_BASE
103 /* Fill BL32 related information */
104 {
105 .image_id = BL32_IMAGE_ID,
106
107 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
108 VERSION_2, entry_point_info_t, SECURE | EXECUTABLE),
109 .ep_info.pc = BL32_BASE,
110
111 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
112 VERSION_2, image_info_t, 0),
113 .image_info.image_base = BL32_BASE,
114 .image_info.image_max_size = BL32_LIMIT - BL32_BASE,
115
116 .next_handoff_image_id = BL33_IMAGE_ID,
117 },
Summer Qin9db8f2e2017-04-24 16:49:28 +0100118
119 /*
120 * Fill BL32 external 1 related information.
121 * A typical use for extra1 image is with OP-TEE where it is the pager image.
122 */
123 {
124 .image_id = BL32_EXTRA1_IMAGE_ID,
125
126 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
127 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
128
129 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
130 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
131 .image_info.image_base = BL32_BASE,
132 .image_info.image_max_size = BL32_LIMIT - BL32_BASE,
133
134 .next_handoff_image_id = INVALID_IMAGE_ID,
135 },
136
137 /*
138 * Fill BL32 external 2 related information.
139 * A typical use for extra2 image is with OP-TEE where it is the paged image.
140 */
141 {
142 .image_id = BL32_EXTRA2_IMAGE_ID,
143
144 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
145 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
146
147 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
148 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
149#ifdef SPD_opteed
150 .image_info.image_base = ARM_OPTEE_PAGEABLE_LOAD_BASE,
151 .image_info.image_max_size = ARM_OPTEE_PAGEABLE_LOAD_SIZE,
152#endif
153 .next_handoff_image_id = INVALID_IMAGE_ID,
154 },
Soby Mathewb6814842018-04-04 09:40:32 +0100155
156 /* Fill TOS_FW_CONFIG related information */
157 {
158 .image_id = TOS_FW_CONFIG_ID,
159 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
160 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
161 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
162 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
163 .next_handoff_image_id = INVALID_IMAGE_ID,
164 },
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100165# endif /* BL32_BASE */
166
167 /* Fill BL33 related information */
168 {
169 .image_id = BL33_IMAGE_ID,
170 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
171 VERSION_2, entry_point_info_t, NON_SECURE | EXECUTABLE),
172# ifdef PRELOADED_BL33_BASE
173 .ep_info.pc = PRELOADED_BL33_BASE,
174
175 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
176 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
177# else
Sandrine Bailleuxafa91db2019-01-31 15:01:32 +0100178 .ep_info.pc = PLAT_ARM_NS_IMAGE_BASE,
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100179
180 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
181 VERSION_2, image_info_t, 0),
Sandrine Bailleuxafa91db2019-01-31 15:01:32 +0100182 .image_info.image_base = PLAT_ARM_NS_IMAGE_BASE,
Sandrine Bailleuxe7509c82019-01-31 15:06:21 +0100183 .image_info.image_max_size = ARM_DRAM1_BASE + ARM_DRAM1_SIZE
184 - PLAT_ARM_NS_IMAGE_BASE,
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100185# endif /* PRELOADED_BL33_BASE */
186
187 .next_handoff_image_id = INVALID_IMAGE_ID,
Soby Mathewb6814842018-04-04 09:40:32 +0100188 },
189 /* Fill NT_FW_CONFIG related information */
190 {
191 .image_id = NT_FW_CONFIG_ID,
192 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
193 VERSION_2, entry_point_info_t, NON_SECURE | NON_EXECUTABLE),
194 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
195 VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
196 .next_handoff_image_id = INVALID_IMAGE_ID,
Yatharth Kocharf9a0f162016-09-13 17:07:57 +0100197 }
198#endif /* EL3_PAYLOAD_BASE */
199};
200
201REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs)