12de0c5ccSVictor Chong /* 2*6971642dSLukas Hanel * Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved. 32de0c5ccSVictor Chong * 42de0c5ccSVictor Chong * SPDX-License-Identifier: BSD-3-Clause 52de0c5ccSVictor Chong */ 62de0c5ccSVictor Chong 72de0c5ccSVictor Chong #include <platform_def.h> 82de0c5ccSVictor Chong 909d40e0eSAntonio Nino Diaz #include <common/bl_common.h> 1009d40e0eSAntonio Nino Diaz #include <common/desc_image_load.h> 1109d40e0eSAntonio Nino Diaz #include <plat/common/platform.h> 122de0c5ccSVictor Chong 132de0c5ccSVictor Chong /******************************************************************************* 142de0c5ccSVictor Chong * Following descriptor provides BL image/ep information that gets used 152de0c5ccSVictor Chong * by BL2 to load the images and also subset of this information is 162de0c5ccSVictor Chong * passed to next BL image. The image loading sequence is managed by 172de0c5ccSVictor Chong * populating the images in required loading order. The image execution 182de0c5ccSVictor Chong * sequence is managed by populating the `next_handoff_image_id` with 192de0c5ccSVictor Chong * the next executable image id. 202de0c5ccSVictor Chong ******************************************************************************/ 212de0c5ccSVictor Chong static bl_mem_params_node_t bl2_mem_params_descs[] = { 222de0c5ccSVictor Chong #ifdef SCP_BL2_BASE 232de0c5ccSVictor Chong /* Fill SCP_BL2 related information if it exists */ 242de0c5ccSVictor Chong { 252de0c5ccSVictor Chong .image_id = SCP_BL2_IMAGE_ID, 262de0c5ccSVictor Chong 272de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 282de0c5ccSVictor Chong VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE), 292de0c5ccSVictor Chong 302de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 31d2128731SHaojian Zhuang VERSION_2, image_info_t, IMAGE_ATTRIB_PLAT_SETUP), 322de0c5ccSVictor Chong .image_info.image_base = SCP_BL2_BASE, 332de0c5ccSVictor Chong .image_info.image_max_size = SCP_BL2_SIZE, 342de0c5ccSVictor Chong 352de0c5ccSVictor Chong .next_handoff_image_id = INVALID_IMAGE_ID, 362de0c5ccSVictor Chong }, 372de0c5ccSVictor Chong #endif /* SCP_BL2_BASE */ 382de0c5ccSVictor Chong 392de0c5ccSVictor Chong #ifdef EL3_PAYLOAD_BASE 402de0c5ccSVictor Chong /* Fill EL3 payload related information (BL31 is EL3 payload)*/ 412de0c5ccSVictor Chong { 422de0c5ccSVictor Chong .image_id = BL31_IMAGE_ID, 432de0c5ccSVictor Chong 442de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 452de0c5ccSVictor Chong VERSION_2, entry_point_info_t, 462de0c5ccSVictor Chong SECURE | EXECUTABLE | EP_FIRST_EXE), 472de0c5ccSVictor Chong .ep_info.pc = EL3_PAYLOAD_BASE, 482de0c5ccSVictor Chong .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, 492de0c5ccSVictor Chong DISABLE_ALL_EXCEPTIONS), 502de0c5ccSVictor Chong 512de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 522de0c5ccSVictor Chong VERSION_2, image_info_t, 532de0c5ccSVictor Chong IMAGE_ATTRIB_PLAT_SETUP | IMAGE_ATTRIB_SKIP_LOADING), 542de0c5ccSVictor Chong 552de0c5ccSVictor Chong .next_handoff_image_id = INVALID_IMAGE_ID, 562de0c5ccSVictor Chong }, 572de0c5ccSVictor Chong 582de0c5ccSVictor Chong #else /* EL3_PAYLOAD_BASE */ 592de0c5ccSVictor Chong 602de0c5ccSVictor Chong /* Fill BL31 related information */ 612de0c5ccSVictor Chong { 622de0c5ccSVictor Chong .image_id = BL31_IMAGE_ID, 632de0c5ccSVictor Chong 642de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 652de0c5ccSVictor Chong VERSION_2, entry_point_info_t, 662de0c5ccSVictor Chong SECURE | EXECUTABLE | EP_FIRST_EXE), 672de0c5ccSVictor Chong .ep_info.pc = BL31_BASE, 682de0c5ccSVictor Chong .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, 692de0c5ccSVictor Chong DISABLE_ALL_EXCEPTIONS), 702de0c5ccSVictor Chong #if DEBUG 712de0c5ccSVictor Chong .ep_info.args.arg1 = HIKEY960_BL31_PLAT_PARAM_VAL, 722de0c5ccSVictor Chong #endif 732de0c5ccSVictor Chong 742de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 752de0c5ccSVictor Chong VERSION_2, image_info_t, IMAGE_ATTRIB_PLAT_SETUP), 762de0c5ccSVictor Chong .image_info.image_base = BL31_BASE, 772de0c5ccSVictor Chong .image_info.image_max_size = BL31_LIMIT - BL31_BASE, 782de0c5ccSVictor Chong 792de0c5ccSVictor Chong # ifdef BL32_BASE 802de0c5ccSVictor Chong .next_handoff_image_id = BL32_IMAGE_ID, 812de0c5ccSVictor Chong # else 822de0c5ccSVictor Chong .next_handoff_image_id = BL33_IMAGE_ID, 832de0c5ccSVictor Chong # endif 842de0c5ccSVictor Chong }, 852de0c5ccSVictor Chong 862de0c5ccSVictor Chong # ifdef BL32_BASE 872de0c5ccSVictor Chong /* Fill BL32 related information */ 882de0c5ccSVictor Chong { 892de0c5ccSVictor Chong .image_id = BL32_IMAGE_ID, 902de0c5ccSVictor Chong 912de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 922de0c5ccSVictor Chong VERSION_2, entry_point_info_t, SECURE | EXECUTABLE), 932de0c5ccSVictor Chong .ep_info.pc = BL32_BASE, 942de0c5ccSVictor Chong 952de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 962de0c5ccSVictor Chong VERSION_2, image_info_t, 0), 972de0c5ccSVictor Chong .image_info.image_base = BL32_BASE, 982de0c5ccSVictor Chong .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 992de0c5ccSVictor Chong 1002de0c5ccSVictor Chong .next_handoff_image_id = BL33_IMAGE_ID, 1012de0c5ccSVictor Chong }, 102b16bb16eSVictor Chong 103b16bb16eSVictor Chong /* 104b16bb16eSVictor Chong * Fill BL32 external 1 related information. 105e2fe267dSJorge Troncoso * A typical use for extra1 image is with OP-TEE where it is the pager 106e2fe267dSJorge Troncoso * image. 107b16bb16eSVictor Chong */ 108b16bb16eSVictor Chong { 109b16bb16eSVictor Chong .image_id = BL32_EXTRA1_IMAGE_ID, 110b16bb16eSVictor Chong 111b16bb16eSVictor Chong SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 112b16bb16eSVictor Chong VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE), 113b16bb16eSVictor Chong 114b16bb16eSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 115b16bb16eSVictor Chong VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING), 116b16bb16eSVictor Chong .image_info.image_base = BL32_BASE, 117b16bb16eSVictor Chong .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 118b16bb16eSVictor Chong 119b16bb16eSVictor Chong .next_handoff_image_id = INVALID_IMAGE_ID, 120b16bb16eSVictor Chong }, 121b16bb16eSVictor Chong 122b16bb16eSVictor Chong /* 123b16bb16eSVictor Chong * Fill BL32 external 2 related information. 124e2fe267dSJorge Troncoso * A typical use for extra2 image is with OP-TEE where it is the paged 125e2fe267dSJorge Troncoso * image. 126b16bb16eSVictor Chong */ 127b16bb16eSVictor Chong { 128b16bb16eSVictor Chong .image_id = BL32_EXTRA2_IMAGE_ID, 129b16bb16eSVictor Chong 130b16bb16eSVictor Chong SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 131b16bb16eSVictor Chong VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE), 132b16bb16eSVictor Chong 133b16bb16eSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 134b16bb16eSVictor Chong VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING), 135b16bb16eSVictor Chong #ifdef SPD_opteed 136b16bb16eSVictor Chong .image_info.image_base = HIKEY960_OPTEE_PAGEABLE_LOAD_BASE, 137b16bb16eSVictor Chong .image_info.image_max_size = HIKEY960_OPTEE_PAGEABLE_LOAD_SIZE, 138b16bb16eSVictor Chong #endif 139b16bb16eSVictor Chong .next_handoff_image_id = INVALID_IMAGE_ID, 140b16bb16eSVictor Chong }, 141*6971642dSLukas Hanel 142*6971642dSLukas Hanel #ifdef SPD_spmd 143*6971642dSLukas Hanel /* Fill TOS_FW_CONFIG related information */ 144*6971642dSLukas Hanel { 145*6971642dSLukas Hanel .image_id = TOS_FW_CONFIG_ID, 146*6971642dSLukas Hanel SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 147*6971642dSLukas Hanel VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE), 148*6971642dSLukas Hanel SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 149*6971642dSLukas Hanel VERSION_2, image_info_t, 0), 150*6971642dSLukas Hanel .image_info.image_base = DDR_SEC_CONFIG_BASE, 151*6971642dSLukas Hanel .image_info.image_max_size = DDR_SEC_CONFIG_SIZE, 152*6971642dSLukas Hanel 153*6971642dSLukas Hanel .next_handoff_image_id = INVALID_IMAGE_ID, 154*6971642dSLukas Hanel }, 155*6971642dSLukas Hanel #endif 156*6971642dSLukas Hanel 1572de0c5ccSVictor Chong # endif /* BL32_BASE */ 1582de0c5ccSVictor Chong 1592de0c5ccSVictor Chong /* Fill BL33 related information */ 1602de0c5ccSVictor Chong { 1612de0c5ccSVictor Chong .image_id = BL33_IMAGE_ID, 1622de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 1632de0c5ccSVictor Chong VERSION_2, entry_point_info_t, NON_SECURE | EXECUTABLE), 1642de0c5ccSVictor Chong # ifdef PRELOADED_BL33_BASE 1652de0c5ccSVictor Chong .ep_info.pc = PRELOADED_BL33_BASE, 1662de0c5ccSVictor Chong 1672de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 1682de0c5ccSVictor Chong VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING), 1692de0c5ccSVictor Chong # else 1702de0c5ccSVictor Chong .ep_info.pc = NS_BL1U_BASE, 1712de0c5ccSVictor Chong 1722de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 1732de0c5ccSVictor Chong VERSION_2, image_info_t, 0), 1742de0c5ccSVictor Chong .image_info.image_base = NS_BL1U_BASE, 1752de0c5ccSVictor Chong .image_info.image_max_size = 0x200000 /* 2MB */, 1762de0c5ccSVictor Chong # endif /* PRELOADED_BL33_BASE */ 1772de0c5ccSVictor Chong 1782de0c5ccSVictor Chong .next_handoff_image_id = INVALID_IMAGE_ID, 1792de0c5ccSVictor Chong } 1802de0c5ccSVictor Chong #endif /* EL3_PAYLOAD_BASE */ 1812de0c5ccSVictor Chong }; 1822de0c5ccSVictor Chong 1832de0c5ccSVictor Chong REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs) 184