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