12de0c5ccSVictor Chong /* 2a628b1abSHaojian Zhuang * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. 32de0c5ccSVictor Chong * 42de0c5ccSVictor Chong * SPDX-License-Identifier: BSD-3-Clause 52de0c5ccSVictor Chong */ 62de0c5ccSVictor Chong 74368ae07SMichael Brandl #include <platform_def.h> /* also includes hikey_def.h and hikey_layout.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, 31a628b1abSHaojian 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 = HIKEY_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. 105*e2fe267dSJorge Troncoso * A typical use for extra1 image is with OP-TEE where it is the pager 106*e2fe267dSJorge 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. 124*e2fe267dSJorge Troncoso * A typical use for extra2 image is with OP-TEE where it is the paged 125*e2fe267dSJorge 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 = HIKEY_OPTEE_PAGEABLE_LOAD_BASE, 137b16bb16eSVictor Chong .image_info.image_max_size = HIKEY_OPTEE_PAGEABLE_LOAD_SIZE, 138b16bb16eSVictor Chong #endif 139b16bb16eSVictor Chong .next_handoff_image_id = INVALID_IMAGE_ID, 140b16bb16eSVictor Chong }, 1412de0c5ccSVictor Chong # endif /* BL32_BASE */ 1422de0c5ccSVictor Chong 1432de0c5ccSVictor Chong /* Fill BL33 related information */ 1442de0c5ccSVictor Chong { 1452de0c5ccSVictor Chong .image_id = BL33_IMAGE_ID, 1462de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 1472de0c5ccSVictor Chong VERSION_2, entry_point_info_t, NON_SECURE | EXECUTABLE), 1482de0c5ccSVictor Chong # ifdef PRELOADED_BL33_BASE 1492de0c5ccSVictor Chong .ep_info.pc = PRELOADED_BL33_BASE, 1502de0c5ccSVictor Chong 1512de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 1522de0c5ccSVictor Chong VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING), 1532de0c5ccSVictor Chong # else 1542de0c5ccSVictor Chong .ep_info.pc = HIKEY_NS_IMAGE_OFFSET, 1552de0c5ccSVictor Chong 1562de0c5ccSVictor Chong SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 1572de0c5ccSVictor Chong VERSION_2, image_info_t, 0), 1582de0c5ccSVictor Chong .image_info.image_base = HIKEY_NS_IMAGE_OFFSET, 1592de0c5ccSVictor Chong .image_info.image_max_size = 0x200000 /* 2MB */, 1602de0c5ccSVictor Chong # endif /* PRELOADED_BL33_BASE */ 1612de0c5ccSVictor Chong 1622de0c5ccSVictor Chong .next_handoff_image_id = INVALID_IMAGE_ID, 1632de0c5ccSVictor Chong } 1642de0c5ccSVictor Chong #endif /* EL3_PAYLOAD_BASE */ 1652de0c5ccSVictor Chong }; 1662de0c5ccSVictor Chong 1672de0c5ccSVictor Chong REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs) 168