1*717448d6SSheetal Tigadoli /* 2*717448d6SSheetal Tigadoli * Copyright (c) 2019-2020, ARM Limited and Contributors. All rights reserved. 3*717448d6SSheetal Tigadoli * 4*717448d6SSheetal Tigadoli * SPDX-License-Identifier: BSD-3-Clause 5*717448d6SSheetal Tigadoli */ 6*717448d6SSheetal Tigadoli 7*717448d6SSheetal Tigadoli #include <common/bl_common.h> 8*717448d6SSheetal Tigadoli #include <common/desc_image_load.h> 9*717448d6SSheetal Tigadoli #include <plat/common/platform.h> 10*717448d6SSheetal Tigadoli 11*717448d6SSheetal Tigadoli #include <platform_def.h> 12*717448d6SSheetal Tigadoli 13*717448d6SSheetal Tigadoli /******************************************************************************* 14*717448d6SSheetal Tigadoli * Following descriptor provides BL image/ep information that gets used 15*717448d6SSheetal Tigadoli * by BL2 to load the images and also subset of this information is 16*717448d6SSheetal Tigadoli * passed to next BL image. The image loading sequence is managed by 17*717448d6SSheetal Tigadoli * populating the images in required loading order. The image execution 18*717448d6SSheetal Tigadoli * sequence is managed by populating the `next_handoff_image_id` with 19*717448d6SSheetal Tigadoli * the next executable image id. 20*717448d6SSheetal Tigadoli ******************************************************************************/ 21*717448d6SSheetal Tigadoli static bl_mem_params_node_t bl2_mem_params_descs[] = { 22*717448d6SSheetal Tigadoli #ifdef SCP_BL2_BASE 23*717448d6SSheetal Tigadoli /* Fill SCP_BL2 related information if it exists */ 24*717448d6SSheetal Tigadoli { 25*717448d6SSheetal Tigadoli .image_id = SCP_BL2_IMAGE_ID, 26*717448d6SSheetal Tigadoli 27*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY, 28*717448d6SSheetal Tigadoli VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE), 29*717448d6SSheetal Tigadoli 30*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY, 31*717448d6SSheetal Tigadoli VERSION_2, image_info_t, 0), 32*717448d6SSheetal Tigadoli .image_info.image_base = SCP_BL2_BASE, 33*717448d6SSheetal Tigadoli .image_info.image_max_size = PLAT_MAX_SCP_BL2_SIZE, 34*717448d6SSheetal Tigadoli 35*717448d6SSheetal Tigadoli .next_handoff_image_id = INVALID_IMAGE_ID, 36*717448d6SSheetal Tigadoli }, 37*717448d6SSheetal Tigadoli #endif /* SCP_BL2_BASE */ 38*717448d6SSheetal Tigadoli 39*717448d6SSheetal Tigadoli /* Fill BL31 related information */ 40*717448d6SSheetal Tigadoli { 41*717448d6SSheetal Tigadoli .image_id = BL31_IMAGE_ID, 42*717448d6SSheetal Tigadoli 43*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 44*717448d6SSheetal Tigadoli VERSION_2, entry_point_info_t, 45*717448d6SSheetal Tigadoli SECURE | EXECUTABLE | EP_FIRST_EXE), 46*717448d6SSheetal Tigadoli .ep_info.pc = BL31_BASE, 47*717448d6SSheetal Tigadoli .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, 48*717448d6SSheetal Tigadoli DISABLE_ALL_EXCEPTIONS), 49*717448d6SSheetal Tigadoli #if DEBUG 50*717448d6SSheetal Tigadoli .ep_info.args.arg3 = BRCM_BL31_PLAT_PARAM_VAL, 51*717448d6SSheetal Tigadoli #endif 52*717448d6SSheetal Tigadoli 53*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 54*717448d6SSheetal Tigadoli VERSION_2, image_info_t, IMAGE_ATTRIB_PLAT_SETUP), 55*717448d6SSheetal Tigadoli .image_info.image_base = BL31_BASE, 56*717448d6SSheetal Tigadoli .image_info.image_max_size = BL31_LIMIT - BL31_BASE, 57*717448d6SSheetal Tigadoli 58*717448d6SSheetal Tigadoli #ifdef BL32_BASE 59*717448d6SSheetal Tigadoli .next_handoff_image_id = BL32_IMAGE_ID, 60*717448d6SSheetal Tigadoli #else 61*717448d6SSheetal Tigadoli .next_handoff_image_id = BL33_IMAGE_ID, 62*717448d6SSheetal Tigadoli #endif 63*717448d6SSheetal Tigadoli }, 64*717448d6SSheetal Tigadoli 65*717448d6SSheetal Tigadoli #ifdef BL32_BASE 66*717448d6SSheetal Tigadoli /* Fill BL32 related information */ 67*717448d6SSheetal Tigadoli { 68*717448d6SSheetal Tigadoli .image_id = BL32_IMAGE_ID, 69*717448d6SSheetal Tigadoli 70*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 71*717448d6SSheetal Tigadoli VERSION_2, entry_point_info_t, SECURE | EXECUTABLE), 72*717448d6SSheetal Tigadoli .ep_info.pc = BL32_BASE, 73*717448d6SSheetal Tigadoli 74*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 75*717448d6SSheetal Tigadoli VERSION_2, image_info_t, 0), 76*717448d6SSheetal Tigadoli .image_info.image_base = BL32_BASE, 77*717448d6SSheetal Tigadoli .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 78*717448d6SSheetal Tigadoli 79*717448d6SSheetal Tigadoli .next_handoff_image_id = BL33_IMAGE_ID, 80*717448d6SSheetal Tigadoli }, 81*717448d6SSheetal Tigadoli #endif /* BL32_BASE */ 82*717448d6SSheetal Tigadoli 83*717448d6SSheetal Tigadoli /* Fill BL33 related information */ 84*717448d6SSheetal Tigadoli { 85*717448d6SSheetal Tigadoli .image_id = BL33_IMAGE_ID, 86*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 87*717448d6SSheetal Tigadoli VERSION_2, entry_point_info_t, NON_SECURE | EXECUTABLE), 88*717448d6SSheetal Tigadoli #ifdef PRELOADED_BL33_BASE 89*717448d6SSheetal Tigadoli .ep_info.pc = PRELOADED_BL33_BASE, 90*717448d6SSheetal Tigadoli 91*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 92*717448d6SSheetal Tigadoli VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING), 93*717448d6SSheetal Tigadoli #else 94*717448d6SSheetal Tigadoli .ep_info.pc = PLAT_BRCM_NS_IMAGE_OFFSET, 95*717448d6SSheetal Tigadoli 96*717448d6SSheetal Tigadoli SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 97*717448d6SSheetal Tigadoli VERSION_2, image_info_t, 0), 98*717448d6SSheetal Tigadoli .image_info.image_base = PLAT_BRCM_NS_IMAGE_OFFSET, 99*717448d6SSheetal Tigadoli .image_info.image_max_size = BRCM_DRAM1_SIZE, 100*717448d6SSheetal Tigadoli #endif /* PRELOADED_BL33_BASE */ 101*717448d6SSheetal Tigadoli 102*717448d6SSheetal Tigadoli .next_handoff_image_id = INVALID_IMAGE_ID, 103*717448d6SSheetal Tigadoli } 104*717448d6SSheetal Tigadoli }; 105*717448d6SSheetal Tigadoli 106*717448d6SSheetal Tigadoli REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs) 107