xref: /rk3399_ARM-atf/plat/arm/common/aarch64/arm_bl2_mem_params_desc.c (revision 1142b38f1de53116b8e9231420363b4ad8bc0f9c)
1a8aa7fecSYatharth Kochar /*
233bcaed1SRob Hughes  * Copyright (c) 2016-2023, ARM Limited and Contributors. All rights reserved.
3a8aa7fecSYatharth Kochar  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
5a8aa7fecSYatharth Kochar  */
6a8aa7fecSYatharth Kochar 
7a8aa7fecSYatharth Kochar #include <platform_def.h>
8a8aa7fecSYatharth Kochar 
909d40e0eSAntonio Nino Diaz #include <common/bl_common.h>
1009d40e0eSAntonio Nino Diaz #include <common/desc_image_load.h>
11a8aa7fecSYatharth Kochar 
12a8aa7fecSYatharth Kochar /*******************************************************************************
13a8aa7fecSYatharth Kochar  * Following descriptor provides BL image/ep information that gets used
14a8aa7fecSYatharth Kochar  * by BL2 to load the images and also subset of this information is
15a8aa7fecSYatharth Kochar  * passed to next BL image. The image loading sequence is managed by
16a8aa7fecSYatharth Kochar  * populating the images in required loading order. The image execution
17a8aa7fecSYatharth Kochar  * sequence is managed by populating the `next_handoff_image_id` with
18a8aa7fecSYatharth Kochar  * the next executable image id.
19a8aa7fecSYatharth Kochar  ******************************************************************************/
20a8aa7fecSYatharth Kochar static bl_mem_params_node_t bl2_mem_params_descs[] = {
21a8aa7fecSYatharth Kochar #ifdef SCP_BL2_BASE
22a8aa7fecSYatharth Kochar 	/* Fill SCP_BL2 related information if it exists */
23a8aa7fecSYatharth Kochar 	{
24a8aa7fecSYatharth Kochar 		.image_id = SCP_BL2_IMAGE_ID,
25a8aa7fecSYatharth Kochar 
26a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
27a8aa7fecSYatharth Kochar 			VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
28a8aa7fecSYatharth Kochar 
29a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
30a8aa7fecSYatharth Kochar 			VERSION_2, image_info_t, 0),
31a8aa7fecSYatharth Kochar 		.image_info.image_base = SCP_BL2_BASE,
32a8aa7fecSYatharth Kochar 		.image_info.image_max_size = PLAT_CSS_MAX_SCP_BL2_SIZE,
33a8aa7fecSYatharth Kochar 
34a8aa7fecSYatharth Kochar 		.next_handoff_image_id = INVALID_IMAGE_ID,
35a8aa7fecSYatharth Kochar 	},
36a8aa7fecSYatharth Kochar #endif /* SCP_BL2_BASE */
37a8aa7fecSYatharth Kochar 
38a8aa7fecSYatharth Kochar #ifdef EL3_PAYLOAD_BASE
39a8aa7fecSYatharth Kochar 	/* Fill EL3 payload related information (BL31 is EL3 payload)*/
40a8aa7fecSYatharth Kochar 	{
41a8aa7fecSYatharth Kochar 		.image_id = BL31_IMAGE_ID,
42a8aa7fecSYatharth Kochar 
43a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
44a8aa7fecSYatharth Kochar 			VERSION_2, entry_point_info_t,
45a8aa7fecSYatharth Kochar 			SECURE | EXECUTABLE | EP_FIRST_EXE),
46a8aa7fecSYatharth Kochar 		.ep_info.pc = EL3_PAYLOAD_BASE,
47a8aa7fecSYatharth Kochar 		.ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
48a8aa7fecSYatharth Kochar 			DISABLE_ALL_EXCEPTIONS),
49a8aa7fecSYatharth Kochar 
50a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
51a8aa7fecSYatharth Kochar 			VERSION_2, image_info_t,
52a8aa7fecSYatharth Kochar 			IMAGE_ATTRIB_PLAT_SETUP | IMAGE_ATTRIB_SKIP_LOADING),
53a8aa7fecSYatharth Kochar 
54a8aa7fecSYatharth Kochar 		.next_handoff_image_id = INVALID_IMAGE_ID,
55a8aa7fecSYatharth Kochar 	},
56a8aa7fecSYatharth Kochar 
57a8aa7fecSYatharth Kochar #else /* EL3_PAYLOAD_BASE */
58a8aa7fecSYatharth Kochar 
59a8aa7fecSYatharth Kochar 	/* Fill BL31 related information */
60a8aa7fecSYatharth Kochar 	{
61a8aa7fecSYatharth Kochar 		.image_id = BL31_IMAGE_ID,
62a8aa7fecSYatharth Kochar 
63a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
64a8aa7fecSYatharth Kochar 			VERSION_2, entry_point_info_t,
65a8aa7fecSYatharth Kochar 			SECURE | EXECUTABLE | EP_FIRST_EXE),
66a8aa7fecSYatharth Kochar 		.ep_info.pc = BL31_BASE,
67a8aa7fecSYatharth Kochar 		.ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
68a8aa7fecSYatharth Kochar 			DISABLE_ALL_EXCEPTIONS),
69a8aa7fecSYatharth Kochar #if DEBUG
700c306cc0SSoby Mathew 		.ep_info.args.arg3 = ARM_BL31_PLAT_PARAM_VAL,
71a8aa7fecSYatharth Kochar #endif
72a8aa7fecSYatharth Kochar 
73a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
74a8aa7fecSYatharth Kochar 			VERSION_2, image_info_t, IMAGE_ATTRIB_PLAT_SETUP),
75a8aa7fecSYatharth Kochar 		.image_info.image_base = BL31_BASE,
76a8aa7fecSYatharth Kochar 		.image_info.image_max_size = BL31_LIMIT - BL31_BASE,
77a8aa7fecSYatharth Kochar 
789d870b79SZelalem Aweke # if defined(BL32_BASE)
79a8aa7fecSYatharth Kochar 		.next_handoff_image_id = BL32_IMAGE_ID,
809d870b79SZelalem Aweke # elif ENABLE_RME
819d870b79SZelalem Aweke 		.next_handoff_image_id = RMM_IMAGE_ID,
82a8aa7fecSYatharth Kochar # else
83a8aa7fecSYatharth Kochar 		.next_handoff_image_id = BL33_IMAGE_ID,
84a8aa7fecSYatharth Kochar # endif
85a8aa7fecSYatharth Kochar 	},
86cab0b5b0SSoby Mathew 	/* Fill HW_CONFIG related information */
87cab0b5b0SSoby Mathew 	{
88cab0b5b0SSoby Mathew 		.image_id = HW_CONFIG_ID,
89cab0b5b0SSoby Mathew 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
90e2fe267dSJorge Troncoso 			VERSION_2, entry_point_info_t,
91e2fe267dSJorge Troncoso 			NON_SECURE | NON_EXECUTABLE),
92cab0b5b0SSoby Mathew 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
93cab0b5b0SSoby Mathew 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
94cab0b5b0SSoby Mathew 		.next_handoff_image_id = INVALID_IMAGE_ID,
95cab0b5b0SSoby Mathew 	},
961d71ba14SSoby Mathew 	/* Fill SOC_FW_CONFIG related information */
971d71ba14SSoby Mathew 	{
981d71ba14SSoby Mathew 		.image_id = SOC_FW_CONFIG_ID,
991d71ba14SSoby Mathew 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
1001d71ba14SSoby Mathew 			VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
1011d71ba14SSoby Mathew 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
1021d71ba14SSoby Mathew 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
1031d71ba14SSoby Mathew 		.next_handoff_image_id = INVALID_IMAGE_ID,
1041d71ba14SSoby Mathew 	},
1059d870b79SZelalem Aweke 
1069d870b79SZelalem Aweke # if ENABLE_RME
1079d870b79SZelalem Aweke 	/* Fill RMM related information */
1089d870b79SZelalem Aweke 	{
1099d870b79SZelalem Aweke 		.image_id = RMM_IMAGE_ID,
1109d870b79SZelalem Aweke 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
1119d870b79SZelalem Aweke 			VERSION_2, entry_point_info_t, EP_REALM | EXECUTABLE),
1129d870b79SZelalem Aweke 		.ep_info.pc = RMM_BASE,
1139d870b79SZelalem Aweke 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
1149d870b79SZelalem Aweke 			VERSION_2, image_info_t, 0),
1159d870b79SZelalem Aweke 		.image_info.image_base = RMM_BASE,
1169d870b79SZelalem Aweke 		.image_info.image_max_size = RMM_LIMIT - RMM_BASE,
1179d870b79SZelalem Aweke 		.next_handoff_image_id = BL33_IMAGE_ID,
1189d870b79SZelalem Aweke 	},
1199d870b79SZelalem Aweke # endif
1209d870b79SZelalem Aweke 
121a8aa7fecSYatharth Kochar # ifdef BL32_BASE
122a8aa7fecSYatharth Kochar 	/* Fill BL32 related information */
123a8aa7fecSYatharth Kochar 	{
124a8aa7fecSYatharth Kochar 		.image_id = BL32_IMAGE_ID,
125a8aa7fecSYatharth Kochar 
126a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
127a8aa7fecSYatharth Kochar 			VERSION_2, entry_point_info_t, SECURE | EXECUTABLE),
128a8aa7fecSYatharth Kochar 		.ep_info.pc = BL32_BASE,
129a8aa7fecSYatharth Kochar 
130a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
131a8aa7fecSYatharth Kochar 			VERSION_2, image_info_t, 0),
132a8aa7fecSYatharth Kochar 		.image_info.image_base = BL32_BASE,
133a8aa7fecSYatharth Kochar 		.image_info.image_max_size = BL32_LIMIT - BL32_BASE,
134a8aa7fecSYatharth Kochar 
1359d870b79SZelalem Aweke # if ENABLE_RME
1369d870b79SZelalem Aweke 		.next_handoff_image_id = RMM_IMAGE_ID,
1379d870b79SZelalem Aweke # else
138a8aa7fecSYatharth Kochar 		.next_handoff_image_id = BL33_IMAGE_ID,
1399d870b79SZelalem Aweke # endif
140a8aa7fecSYatharth Kochar 	},
14154661cd2SSummer Qin 
14254661cd2SSummer Qin 	/*
14354661cd2SSummer Qin 	 * Fill BL32 external 1 related information.
144e2fe267dSJorge Troncoso 	 * A typical use for extra1 image is with OP-TEE where it is the pager
145e2fe267dSJorge Troncoso 	 * image.
14654661cd2SSummer Qin 	 */
14754661cd2SSummer Qin 	{
14854661cd2SSummer Qin 		.image_id = BL32_EXTRA1_IMAGE_ID,
14954661cd2SSummer Qin 
15054661cd2SSummer Qin 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
15154661cd2SSummer Qin 			VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
15254661cd2SSummer Qin 
15354661cd2SSummer Qin 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
15454661cd2SSummer Qin 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
15554661cd2SSummer Qin 		.image_info.image_base = BL32_BASE,
15654661cd2SSummer Qin 		.image_info.image_max_size = BL32_LIMIT - BL32_BASE,
15754661cd2SSummer Qin 
15854661cd2SSummer Qin 		.next_handoff_image_id = INVALID_IMAGE_ID,
15954661cd2SSummer Qin 	},
16054661cd2SSummer Qin 
16154661cd2SSummer Qin 	/*
16254661cd2SSummer Qin 	 * Fill BL32 external 2 related information.
163e2fe267dSJorge Troncoso 	 * A typical use for extra2 image is with OP-TEE where it is the paged
164e2fe267dSJorge Troncoso 	 * image.
16554661cd2SSummer Qin 	 */
16654661cd2SSummer Qin 	{
16754661cd2SSummer Qin 		.image_id = BL32_EXTRA2_IMAGE_ID,
16854661cd2SSummer Qin 
16954661cd2SSummer Qin 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
17054661cd2SSummer Qin 			VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
17154661cd2SSummer Qin 
17254661cd2SSummer Qin 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
17354661cd2SSummer Qin 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
17454661cd2SSummer Qin #ifdef SPD_opteed
17554661cd2SSummer Qin 		.image_info.image_base = ARM_OPTEE_PAGEABLE_LOAD_BASE,
17654661cd2SSummer Qin 		.image_info.image_max_size = ARM_OPTEE_PAGEABLE_LOAD_SIZE,
17754661cd2SSummer Qin #endif
17854661cd2SSummer Qin 		.next_handoff_image_id = INVALID_IMAGE_ID,
17954661cd2SSummer Qin 	},
1801d71ba14SSoby Mathew 
1811d71ba14SSoby Mathew 	/* Fill TOS_FW_CONFIG related information */
1821d71ba14SSoby Mathew 	{
1831d71ba14SSoby Mathew 		.image_id = TOS_FW_CONFIG_ID,
1841d71ba14SSoby Mathew 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
1851d71ba14SSoby Mathew 			VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
1861d71ba14SSoby Mathew 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
1871d71ba14SSoby Mathew 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
1881d71ba14SSoby Mathew 		.next_handoff_image_id = INVALID_IMAGE_ID,
1891d71ba14SSoby Mathew 	},
190a8aa7fecSYatharth Kochar # endif /* BL32_BASE */
191a8aa7fecSYatharth Kochar 
192a8aa7fecSYatharth Kochar 	/* Fill BL33 related information */
193a8aa7fecSYatharth Kochar 	{
194a8aa7fecSYatharth Kochar 		.image_id = BL33_IMAGE_ID,
195a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
196a8aa7fecSYatharth Kochar 			VERSION_2, entry_point_info_t, NON_SECURE | EXECUTABLE),
197a8aa7fecSYatharth Kochar # ifdef PRELOADED_BL33_BASE
198a8aa7fecSYatharth Kochar 		.ep_info.pc = PRELOADED_BL33_BASE,
199a8aa7fecSYatharth Kochar 
200a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
201a8aa7fecSYatharth Kochar 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
202a8aa7fecSYatharth Kochar # else
203ece6fd2dSSandrine Bailleux 		.ep_info.pc = PLAT_ARM_NS_IMAGE_BASE,
204a8aa7fecSYatharth Kochar 
205a8aa7fecSYatharth Kochar 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
206a8aa7fecSYatharth Kochar 			VERSION_2, image_info_t, 0),
207ece6fd2dSSandrine Bailleux 		.image_info.image_base = PLAT_ARM_NS_IMAGE_BASE,
208d57d2b31SSandrine Bailleux 		.image_info.image_max_size = ARM_DRAM1_BASE + ARM_DRAM1_SIZE
209d57d2b31SSandrine Bailleux 			- PLAT_ARM_NS_IMAGE_BASE,
210a8aa7fecSYatharth Kochar # endif /* PRELOADED_BL33_BASE */
211a8aa7fecSYatharth Kochar 
212a8aa7fecSYatharth Kochar 		.next_handoff_image_id = INVALID_IMAGE_ID,
2131d71ba14SSoby Mathew 	},
2141d71ba14SSoby Mathew 	/* Fill NT_FW_CONFIG related information */
2151d71ba14SSoby Mathew 	{
2161d71ba14SSoby Mathew 		.image_id = NT_FW_CONFIG_ID,
2171d71ba14SSoby Mathew 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
218e2fe267dSJorge Troncoso 			VERSION_2, entry_point_info_t,
219e2fe267dSJorge Troncoso 			NON_SECURE | NON_EXECUTABLE),
2201d71ba14SSoby Mathew 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
2211d71ba14SSoby Mathew 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
2221d71ba14SSoby Mathew 		.next_handoff_image_id = INVALID_IMAGE_ID,
22333bcaed1SRob Hughes 	},
224a8aa7fecSYatharth Kochar #endif /* EL3_PAYLOAD_BASE */
22533bcaed1SRob Hughes 
226*352366edSRajasekaran Kalidoss # if ETHOSN_NPU_TZMP1
22733bcaed1SRob Hughes 	{
228*352366edSRajasekaran Kalidoss 		.image_id = ETHOSN_NPU_FW_IMAGE_ID,
22933bcaed1SRob Hughes 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
23033bcaed1SRob Hughes 				      VERSION_2, image_info_t, 0),
231*352366edSRajasekaran Kalidoss 		.image_info.image_base = ETHOSN_NPU_FW_IMAGE_BASE,
232*352366edSRajasekaran Kalidoss 		.image_info.image_max_size = ETHOSN_NPU_FW_IMAGE_LIMIT -
233*352366edSRajasekaran Kalidoss 			ETHOSN_NPU_FW_IMAGE_BASE,
23433bcaed1SRob Hughes 		.next_handoff_image_id = INVALID_IMAGE_ID,
23533bcaed1SRob Hughes 	},
236*352366edSRajasekaran Kalidoss #endif /* ETHOSN_NPU_TZMP1 */
237a8aa7fecSYatharth Kochar };
238a8aa7fecSYatharth Kochar 
239a8aa7fecSYatharth Kochar REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs)
240