1*ab13adddSAndre Przywara /* 2*ab13adddSAndre Przywara * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. 3*ab13adddSAndre Przywara * 4*ab13adddSAndre Przywara * SPDX-License-Identifier: BSD-3-Clause 5*ab13adddSAndre Przywara */ 6*ab13adddSAndre Przywara 7*ab13adddSAndre Przywara #include <platform_def.h> 8*ab13adddSAndre Przywara 9*ab13adddSAndre Przywara #include <common/bl_common.h> 10*ab13adddSAndre Przywara #include <common/desc_image_load.h> 11*ab13adddSAndre Przywara #include <plat/common/platform.h> 12*ab13adddSAndre Przywara 13*ab13adddSAndre Przywara /******************************************************************************* 14*ab13adddSAndre Przywara * Following descriptor provides BL image/ep information that gets used 15*ab13adddSAndre Przywara * by BL2 to load the images and also subset of this information is 16*ab13adddSAndre Przywara * passed to next BL image. The image loading sequence is managed by 17*ab13adddSAndre Przywara * populating the images in required loading order. The image execution 18*ab13adddSAndre Przywara * sequence is managed by populating the `next_handoff_image_id` with 19*ab13adddSAndre Przywara * the next executable image id. 20*ab13adddSAndre Przywara ******************************************************************************/ 21*ab13adddSAndre Przywara static bl_mem_params_node_t bl2_mem_params_descs[] = { 22*ab13adddSAndre Przywara 23*ab13adddSAndre Przywara /* Fill BL31 related information */ 24*ab13adddSAndre Przywara { 25*ab13adddSAndre Przywara .image_id = BL31_IMAGE_ID, 26*ab13adddSAndre Przywara 27*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 28*ab13adddSAndre Przywara VERSION_2, entry_point_info_t, 29*ab13adddSAndre Przywara SECURE | EXECUTABLE | EP_FIRST_EXE), 30*ab13adddSAndre Przywara .ep_info.pc = BL31_BASE, 31*ab13adddSAndre Przywara .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, 32*ab13adddSAndre Przywara DISABLE_ALL_EXCEPTIONS), 33*ab13adddSAndre Przywara #if DEBUG 34*ab13adddSAndre Przywara .ep_info.args.arg1 = RPI3_BL31_PLAT_PARAM_VAL, 35*ab13adddSAndre Przywara #endif 36*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 37*ab13adddSAndre Przywara VERSION_2, image_info_t, 38*ab13adddSAndre Przywara IMAGE_ATTRIB_PLAT_SETUP), 39*ab13adddSAndre Przywara .image_info.image_base = BL31_BASE, 40*ab13adddSAndre Przywara .image_info.image_max_size = BL31_LIMIT - BL31_BASE, 41*ab13adddSAndre Przywara 42*ab13adddSAndre Przywara # ifdef BL32_BASE 43*ab13adddSAndre Przywara .next_handoff_image_id = BL32_IMAGE_ID, 44*ab13adddSAndre Przywara # else 45*ab13adddSAndre Przywara .next_handoff_image_id = BL33_IMAGE_ID, 46*ab13adddSAndre Przywara # endif 47*ab13adddSAndre Przywara }, 48*ab13adddSAndre Przywara 49*ab13adddSAndre Przywara # ifdef BL32_BASE 50*ab13adddSAndre Przywara /* Fill BL32 related information */ 51*ab13adddSAndre Przywara { 52*ab13adddSAndre Przywara .image_id = BL32_IMAGE_ID, 53*ab13adddSAndre Przywara 54*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 55*ab13adddSAndre Przywara VERSION_2, entry_point_info_t, 56*ab13adddSAndre Przywara SECURE | EXECUTABLE), 57*ab13adddSAndre Przywara .ep_info.pc = BL32_BASE, 58*ab13adddSAndre Przywara 59*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 60*ab13adddSAndre Przywara VERSION_2, image_info_t, 0), 61*ab13adddSAndre Przywara .image_info.image_base = BL32_BASE, 62*ab13adddSAndre Przywara .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 63*ab13adddSAndre Przywara 64*ab13adddSAndre Przywara .next_handoff_image_id = BL33_IMAGE_ID, 65*ab13adddSAndre Przywara }, 66*ab13adddSAndre Przywara 67*ab13adddSAndre Przywara /* 68*ab13adddSAndre Przywara * Fill BL32 external 1 related information. 69*ab13adddSAndre Przywara * A typical use for extra1 image is with OP-TEE where it is the pager 70*ab13adddSAndre Przywara * image. 71*ab13adddSAndre Przywara */ 72*ab13adddSAndre Przywara { 73*ab13adddSAndre Przywara .image_id = BL32_EXTRA1_IMAGE_ID, 74*ab13adddSAndre Przywara 75*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 76*ab13adddSAndre Przywara VERSION_2, entry_point_info_t, 77*ab13adddSAndre Przywara SECURE | NON_EXECUTABLE), 78*ab13adddSAndre Przywara 79*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 80*ab13adddSAndre Przywara VERSION_2, image_info_t, 81*ab13adddSAndre Przywara IMAGE_ATTRIB_SKIP_LOADING), 82*ab13adddSAndre Przywara .image_info.image_base = BL32_BASE, 83*ab13adddSAndre Przywara .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 84*ab13adddSAndre Przywara 85*ab13adddSAndre Przywara .next_handoff_image_id = INVALID_IMAGE_ID, 86*ab13adddSAndre Przywara }, 87*ab13adddSAndre Przywara 88*ab13adddSAndre Przywara /* 89*ab13adddSAndre Przywara * Fill BL32 external 2 related information. 90*ab13adddSAndre Przywara * A typical use for extra2 image is with OP-TEE where it is the paged 91*ab13adddSAndre Przywara * image. 92*ab13adddSAndre Przywara */ 93*ab13adddSAndre Przywara { 94*ab13adddSAndre Przywara .image_id = BL32_EXTRA2_IMAGE_ID, 95*ab13adddSAndre Przywara 96*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 97*ab13adddSAndre Przywara VERSION_2, entry_point_info_t, 98*ab13adddSAndre Przywara SECURE | NON_EXECUTABLE), 99*ab13adddSAndre Przywara 100*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 101*ab13adddSAndre Przywara VERSION_2, image_info_t, 102*ab13adddSAndre Przywara IMAGE_ATTRIB_SKIP_LOADING), 103*ab13adddSAndre Przywara #ifdef SPD_opteed 104*ab13adddSAndre Przywara .image_info.image_base = RPI3_OPTEE_PAGEABLE_LOAD_BASE, 105*ab13adddSAndre Przywara .image_info.image_max_size = RPI3_OPTEE_PAGEABLE_LOAD_SIZE, 106*ab13adddSAndre Przywara #endif 107*ab13adddSAndre Przywara .next_handoff_image_id = INVALID_IMAGE_ID, 108*ab13adddSAndre Przywara }, 109*ab13adddSAndre Przywara # endif /* BL32_BASE */ 110*ab13adddSAndre Przywara 111*ab13adddSAndre Przywara /* Fill BL33 related information */ 112*ab13adddSAndre Przywara { 113*ab13adddSAndre Przywara .image_id = BL33_IMAGE_ID, 114*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 115*ab13adddSAndre Przywara VERSION_2, entry_point_info_t, 116*ab13adddSAndre Przywara NON_SECURE | EXECUTABLE), 117*ab13adddSAndre Przywara # ifdef PRELOADED_BL33_BASE 118*ab13adddSAndre Przywara .ep_info.pc = PRELOADED_BL33_BASE, 119*ab13adddSAndre Przywara 120*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 121*ab13adddSAndre Przywara VERSION_2, image_info_t, 122*ab13adddSAndre Przywara IMAGE_ATTRIB_SKIP_LOADING), 123*ab13adddSAndre Przywara # else 124*ab13adddSAndre Przywara .ep_info.pc = PLAT_RPI3_NS_IMAGE_OFFSET, 125*ab13adddSAndre Przywara 126*ab13adddSAndre Przywara SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 127*ab13adddSAndre Przywara VERSION_2, image_info_t, 0), 128*ab13adddSAndre Przywara .image_info.image_base = PLAT_RPI3_NS_IMAGE_OFFSET, 129*ab13adddSAndre Przywara .image_info.image_max_size = PLAT_RPI3_NS_IMAGE_MAX_SIZE, 130*ab13adddSAndre Przywara # endif /* PRELOADED_BL33_BASE */ 131*ab13adddSAndre Przywara 132*ab13adddSAndre Przywara .next_handoff_image_id = INVALID_IMAGE_ID, 133*ab13adddSAndre Przywara } 134*ab13adddSAndre Przywara }; 135*ab13adddSAndre Przywara 136*ab13adddSAndre Przywara REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs) 137