1 /* 2 * Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <platform_def.h> 8 9 #include <common/desc_image_load.h> 10 #include <plat/common/platform.h> 11 12 #define SP_PKG_ENTRY(id) \ 13 { \ 14 .image_id = (id), \ 15 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, VERSION_2, \ 16 entry_point_info_t, \ 17 SECURE | NON_EXECUTABLE), \ 18 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, \ 19 VERSION_2, image_info_t, \ 20 IMAGE_ATTRIB_SKIP_LOADING), \ 21 .next_handoff_image_id = INVALID_IMAGE_ID, \ 22 } 23 24 /******************************************************************************* 25 * Following descriptor provides BL image/ep information that gets used 26 * by BL2 to load the images and also subset of this information is 27 * passed to next BL image. The image loading sequence is managed by 28 * populating the images in required loading order. The image execution 29 * sequence is managed by populating the `next_handoff_image_id` with 30 * the next executable image id. 31 ******************************************************************************/ 32 static bl_mem_params_node_t bl2_mem_params_descs[] = { 33 #ifdef EL3_PAYLOAD_BASE 34 /* Fill EL3 payload related information (BL31 is EL3 payload) */ 35 { .image_id = BL31_IMAGE_ID, 36 37 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 38 entry_point_info_t, 39 SECURE | EXECUTABLE | EP_FIRST_EXE), 40 .ep_info.pc = EL3_PAYLOAD_BASE, 41 .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, 42 DISABLE_ALL_EXCEPTIONS), 43 44 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, image_info_t, 45 IMAGE_ATTRIB_PLAT_SETUP | IMAGE_ATTRIB_SKIP_LOADING), 46 47 .next_handoff_image_id = INVALID_IMAGE_ID, 48 }, 49 #else /* EL3_PAYLOAD_BASE */ 50 #ifdef __aarch64__ 51 /* Fill BL31 related information */ 52 { .image_id = BL31_IMAGE_ID, 53 54 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 55 entry_point_info_t, 56 SECURE | EXECUTABLE | EP_FIRST_EXE), 57 .ep_info.pc = BL31_BASE, 58 .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, 59 DISABLE_ALL_EXCEPTIONS), 60 # if DEBUG 61 .ep_info.args.arg1 = QEMU_BL31_PLAT_PARAM_VAL, 62 # endif 63 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, image_info_t, 64 IMAGE_ATTRIB_PLAT_SETUP), 65 .image_info.image_base = BL31_BASE, 66 .image_info.image_max_size = BL31_LIMIT - BL31_BASE, 67 68 # ifdef QEMU_LOAD_BL32 69 .next_handoff_image_id = BL32_IMAGE_ID, 70 # else 71 .next_handoff_image_id = BL33_IMAGE_ID, 72 # endif 73 }, 74 #endif /* __aarch64__ */ 75 # ifdef QEMU_LOAD_BL32 76 77 #ifdef __aarch64__ 78 #define BL32_EP_ATTRIBS (SECURE | EXECUTABLE) 79 #define BL32_IMG_ATTRIBS 0 80 #else 81 #define BL32_EP_ATTRIBS (SECURE | EXECUTABLE | EP_FIRST_EXE) 82 #define BL32_IMG_ATTRIBS IMAGE_ATTRIB_PLAT_SETUP 83 #endif 84 85 /* Fill BL32 related information */ 86 { .image_id = BL32_IMAGE_ID, 87 88 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 89 entry_point_info_t, BL32_EP_ATTRIBS), 90 .ep_info.pc = BL32_BASE, 91 92 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, 93 image_info_t, BL32_IMG_ATTRIBS), 94 95 .image_info.image_base = BL32_BASE, 96 .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 97 98 .next_handoff_image_id = BL33_IMAGE_ID, 99 }, 100 101 /* 102 * Fill BL32 external 1 related information. 103 * A typical use for extra1 image is with OP-TEE where it is the 104 * pager image. 105 */ 106 { .image_id = BL32_EXTRA1_IMAGE_ID, 107 108 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 109 entry_point_info_t, SECURE | NON_EXECUTABLE), 110 111 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, 112 image_info_t, IMAGE_ATTRIB_SKIP_LOADING), 113 .image_info.image_base = BL32_BASE, 114 .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 115 116 .next_handoff_image_id = INVALID_IMAGE_ID, 117 }, 118 119 /* 120 * Fill BL32 external 2 related information. 121 * A typical use for extra2 image is with OP-TEE where it is the 122 * paged image. 123 */ 124 { .image_id = BL32_EXTRA2_IMAGE_ID, 125 126 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 127 entry_point_info_t, SECURE | NON_EXECUTABLE), 128 129 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, 130 image_info_t, IMAGE_ATTRIB_SKIP_LOADING), 131 #if defined(SPD_opteed) || defined(AARCH32_SP_OPTEE) || defined(SPMC_OPTEE) 132 .image_info.image_base = QEMU_OPTEE_PAGEABLE_LOAD_BASE, 133 .image_info.image_max_size = QEMU_OPTEE_PAGEABLE_LOAD_SIZE, 134 #endif 135 .next_handoff_image_id = INVALID_IMAGE_ID, 136 }, 137 138 #if defined(SPD_spmd) 139 /* Fill TOS_FW_CONFIG related information */ 140 { 141 .image_id = TOS_FW_CONFIG_ID, 142 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 143 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE), 144 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 145 VERSION_2, image_info_t, 0), 146 .image_info.image_base = TOS_FW_CONFIG_BASE, 147 .image_info.image_max_size = TOS_FW_CONFIG_LIMIT - 148 TOS_FW_CONFIG_BASE, 149 .next_handoff_image_id = INVALID_IMAGE_ID, 150 }, 151 152 #if SPMD_SPM_AT_SEL2 153 /* Fill TB_FW_CONFIG related information */ 154 { 155 .image_id = TB_FW_CONFIG_ID, 156 SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 157 VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE), 158 SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 159 VERSION_2, image_info_t, 0), 160 .image_info.image_base = TB_FW_CONFIG_BASE, 161 .image_info.image_max_size = TB_FW_CONFIG_LIMIT - TB_FW_CONFIG_BASE, 162 .next_handoff_image_id = INVALID_IMAGE_ID, 163 }, 164 165 /* 166 * Empty entries for SP packages to be filled in according to 167 * TB_FW_CONFIG. 168 */ 169 SP_PKG_ENTRY(SP_PKG1_ID), 170 SP_PKG_ENTRY(SP_PKG2_ID), 171 SP_PKG_ENTRY(SP_PKG3_ID), 172 SP_PKG_ENTRY(SP_PKG4_ID), 173 SP_PKG_ENTRY(SP_PKG5_ID), 174 SP_PKG_ENTRY(SP_PKG6_ID), 175 SP_PKG_ENTRY(SP_PKG7_ID), 176 SP_PKG_ENTRY(SP_PKG8_ID), 177 #endif 178 #endif 179 # endif /* QEMU_LOAD_BL32 */ 180 181 /* Fill BL33 related information */ 182 { .image_id = BL33_IMAGE_ID, 183 SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 184 entry_point_info_t, NON_SECURE | EXECUTABLE), 185 # ifdef PRELOADED_BL33_BASE 186 .ep_info.pc = PRELOADED_BL33_BASE, 187 188 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, image_info_t, 189 IMAGE_ATTRIB_SKIP_LOADING), 190 # else /* PRELOADED_BL33_BASE */ 191 .ep_info.pc = NS_IMAGE_OFFSET, 192 193 SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, image_info_t, 194 0), 195 .image_info.image_base = NS_IMAGE_OFFSET, 196 .image_info.image_max_size = NS_IMAGE_MAX_SIZE, 197 # endif /* !PRELOADED_BL33_BASE */ 198 199 .next_handoff_image_id = INVALID_IMAGE_ID, 200 } 201 #endif /* !EL3_PAYLOAD_BASE */ 202 }; 203 204 REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs) 205