1*d8e919c7SMasahiro Yamada /* 2*d8e919c7SMasahiro Yamada * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3*d8e919c7SMasahiro Yamada * 4*d8e919c7SMasahiro Yamada * SPDX-License-Identifier: BSD-3-Clause 5*d8e919c7SMasahiro Yamada */ 6*d8e919c7SMasahiro Yamada 7*d8e919c7SMasahiro Yamada #include <arch.h> 8*d8e919c7SMasahiro Yamada #include <assert.h> 9*d8e919c7SMasahiro Yamada #include <desc_image_load.h> 10*d8e919c7SMasahiro Yamada #include <platform_def.h> 11*d8e919c7SMasahiro Yamada 12*d8e919c7SMasahiro Yamada #include "uniphier.h" 13*d8e919c7SMasahiro Yamada 14*d8e919c7SMasahiro Yamada static struct bl_mem_params_node uniphier_image_descs[] = { 15*d8e919c7SMasahiro Yamada { 16*d8e919c7SMasahiro Yamada .image_id = SCP_BL2_IMAGE_ID, 17*d8e919c7SMasahiro Yamada 18*d8e919c7SMasahiro Yamada SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 19*d8e919c7SMasahiro Yamada VERSION_2, image_info_t, 0), 20*d8e919c7SMasahiro Yamada .image_info.image_base = UNIPHIER_SCP_BASE, 21*d8e919c7SMasahiro Yamada .image_info.image_max_size = UNIPHIER_SCP_MAX_SIZE, 22*d8e919c7SMasahiro Yamada 23*d8e919c7SMasahiro Yamada SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 24*d8e919c7SMasahiro Yamada VERSION_2, entry_point_info_t, 25*d8e919c7SMasahiro Yamada NON_SECURE | NON_EXECUTABLE), 26*d8e919c7SMasahiro Yamada 27*d8e919c7SMasahiro Yamada .next_handoff_image_id = INVALID_IMAGE_ID, 28*d8e919c7SMasahiro Yamada }, 29*d8e919c7SMasahiro Yamada { 30*d8e919c7SMasahiro Yamada .image_id = BL31_IMAGE_ID, 31*d8e919c7SMasahiro Yamada 32*d8e919c7SMasahiro Yamada SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 33*d8e919c7SMasahiro Yamada VERSION_2, image_info_t, 0), 34*d8e919c7SMasahiro Yamada .image_info.image_base = BL31_BASE, 35*d8e919c7SMasahiro Yamada .image_info.image_max_size = BL31_LIMIT - BL31_BASE, 36*d8e919c7SMasahiro Yamada 37*d8e919c7SMasahiro Yamada SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 38*d8e919c7SMasahiro Yamada VERSION_2, entry_point_info_t, 39*d8e919c7SMasahiro Yamada SECURE | EXECUTABLE | EP_FIRST_EXE), 40*d8e919c7SMasahiro Yamada .ep_info.pc = BL31_BASE, 41*d8e919c7SMasahiro Yamada .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, 42*d8e919c7SMasahiro Yamada DISABLE_ALL_EXCEPTIONS), 43*d8e919c7SMasahiro Yamada 44*d8e919c7SMasahiro Yamada #ifdef UNIPHIER_LOAD_BL32 45*d8e919c7SMasahiro Yamada .next_handoff_image_id = BL32_IMAGE_ID, 46*d8e919c7SMasahiro Yamada #else 47*d8e919c7SMasahiro Yamada .next_handoff_image_id = BL33_IMAGE_ID, 48*d8e919c7SMasahiro Yamada #endif 49*d8e919c7SMasahiro Yamada }, 50*d8e919c7SMasahiro Yamada #ifdef UNIPHIER_LOAD_BL32 51*d8e919c7SMasahiro Yamada { 52*d8e919c7SMasahiro Yamada .image_id = BL32_IMAGE_ID, 53*d8e919c7SMasahiro Yamada 54*d8e919c7SMasahiro Yamada SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 55*d8e919c7SMasahiro Yamada VERSION_2, image_info_t, 0), 56*d8e919c7SMasahiro Yamada .image_info.image_base = BL32_BASE, 57*d8e919c7SMasahiro Yamada .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 58*d8e919c7SMasahiro Yamada 59*d8e919c7SMasahiro Yamada SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 60*d8e919c7SMasahiro Yamada VERSION_2, entry_point_info_t, 61*d8e919c7SMasahiro Yamada SECURE | EXECUTABLE), 62*d8e919c7SMasahiro Yamada .ep_info.pc = BL32_BASE, 63*d8e919c7SMasahiro Yamada .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, 64*d8e919c7SMasahiro Yamada DISABLE_ALL_EXCEPTIONS), 65*d8e919c7SMasahiro Yamada 66*d8e919c7SMasahiro Yamada .next_handoff_image_id = BL33_IMAGE_ID, 67*d8e919c7SMasahiro Yamada }, 68*d8e919c7SMasahiro Yamada #endif 69*d8e919c7SMasahiro Yamada { 70*d8e919c7SMasahiro Yamada .image_id = BL33_IMAGE_ID, 71*d8e919c7SMasahiro Yamada 72*d8e919c7SMasahiro Yamada SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, 73*d8e919c7SMasahiro Yamada VERSION_2, image_info_t, 0), 74*d8e919c7SMasahiro Yamada .image_info.image_base = UNIPHIER_BL33_BASE, 75*d8e919c7SMasahiro Yamada .image_info.image_max_size = UNIPHIER_BL33_MAX_SIZE, 76*d8e919c7SMasahiro Yamada 77*d8e919c7SMasahiro Yamada SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, 78*d8e919c7SMasahiro Yamada VERSION_2, entry_point_info_t, 79*d8e919c7SMasahiro Yamada NON_SECURE | EXECUTABLE), 80*d8e919c7SMasahiro Yamada .ep_info.pc = UNIPHIER_BL33_BASE, 81*d8e919c7SMasahiro Yamada .ep_info.spsr = SPSR_64(MODE_EL1, MODE_SP_ELX, 82*d8e919c7SMasahiro Yamada DISABLE_ALL_EXCEPTIONS), 83*d8e919c7SMasahiro Yamada 84*d8e919c7SMasahiro Yamada .next_handoff_image_id = INVALID_IMAGE_ID, 85*d8e919c7SMasahiro Yamada }, 86*d8e919c7SMasahiro Yamada }; 87*d8e919c7SMasahiro Yamada REGISTER_BL_IMAGE_DESCS(uniphier_image_descs) 88*d8e919c7SMasahiro Yamada 89*d8e919c7SMasahiro Yamada /* SCP is optional. Allow run-time fixup of the descriptor array. */ 90*d8e919c7SMasahiro Yamada void uniphier_image_descs_fixup(void) 91*d8e919c7SMasahiro Yamada { 92*d8e919c7SMasahiro Yamada struct bl_mem_params_node *desc; 93*d8e919c7SMasahiro Yamada 94*d8e919c7SMasahiro Yamada desc = get_bl_mem_params_node(SCP_BL2_IMAGE_ID); 95*d8e919c7SMasahiro Yamada assert(desc != NULL); 96*d8e919c7SMasahiro Yamada desc->image_info.h.attr |= IMAGE_ATTRIB_SKIP_LOADING; 97*d8e919c7SMasahiro Yamada } 98