1*499c2713SBiju Das /* 2*499c2713SBiju Das * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved. 3*499c2713SBiju Das * 4*499c2713SBiju Das * SPDX-License-Identifier: BSD-3-Clause 5*499c2713SBiju Das */ 6*499c2713SBiju Das 7*499c2713SBiju Das #include <platform_def.h> 8*499c2713SBiju Das 9*499c2713SBiju Das #include <common/bl_common.h> 10*499c2713SBiju Das #include <common/desc_image_load.h> 11*499c2713SBiju Das #include <lib/xlat_tables/xlat_tables_defs.h> 12*499c2713SBiju Das #include <plat/common/platform.h> 13*499c2713SBiju Das 14*499c2713SBiju Das #if (RCAR_BL33_EXECUTION_EL != 0) && (RCAR_BL33_EXECUTION_EL != 1) 15*499c2713SBiju Das #error 16*499c2713SBiju Das #endif 17*499c2713SBiju Das 18*499c2713SBiju Das #if (RCAR_BL33_EXECUTION_EL == 0) 19*499c2713SBiju Das #define BL33_MODE MODE_EL1 20*499c2713SBiju Das #else 21*499c2713SBiju Das #define BL33_MODE MODE_EL2 22*499c2713SBiju Das #endif 23*499c2713SBiju Das 24*499c2713SBiju Das extern uint64_t fdt_blob[PAGE_SIZE_4KB / sizeof(uint64_t)]; 25*499c2713SBiju Das 26*499c2713SBiju Das static bl_mem_params_node_t bl2_mem_params_descs[] = { 27*499c2713SBiju Das { 28*499c2713SBiju Das .image_id = BL31_IMAGE_ID, 29*499c2713SBiju Das 30*499c2713SBiju Das SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 31*499c2713SBiju Das entry_point_info_t, SECURE | EXECUTABLE | EP_FIRST_EXE), 32*499c2713SBiju Das .ep_info.spsr = SPSR_64(MODE_EL3, 33*499c2713SBiju Das MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS), 34*499c2713SBiju Das .ep_info.pc = BL31_BASE, 35*499c2713SBiju Das 36*499c2713SBiju Das 37*499c2713SBiju Das SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, 38*499c2713SBiju Das image_info_t, IMAGE_ATTRIB_PLAT_SETUP), 39*499c2713SBiju Das .image_info.image_max_size = BL31_LIMIT - BL31_BASE, 40*499c2713SBiju Das .image_info.image_base = BL31_BASE, 41*499c2713SBiju Das 42*499c2713SBiju Das # ifdef BL32_BASE 43*499c2713SBiju Das .next_handoff_image_id = BL32_IMAGE_ID, 44*499c2713SBiju Das # else 45*499c2713SBiju Das .next_handoff_image_id = BL33_IMAGE_ID, 46*499c2713SBiju Das # endif 47*499c2713SBiju Das }, 48*499c2713SBiju Das # ifdef BL32_BASE 49*499c2713SBiju Das { 50*499c2713SBiju Das .image_id = BL32_IMAGE_ID, 51*499c2713SBiju Das 52*499c2713SBiju Das SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 53*499c2713SBiju Das entry_point_info_t, SECURE | EXECUTABLE), 54*499c2713SBiju Das .ep_info.pc = BL32_BASE, 55*499c2713SBiju Das .ep_info.spsr = 0, 56*499c2713SBiju Das .ep_info.args.arg3 = (uintptr_t)fdt_blob, 57*499c2713SBiju Das 58*499c2713SBiju Das SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, 59*499c2713SBiju Das image_info_t, 0), 60*499c2713SBiju Das .image_info.image_max_size = BL32_LIMIT - BL32_BASE, 61*499c2713SBiju Das .image_info.image_base = BL32_BASE, 62*499c2713SBiju Das 63*499c2713SBiju Das .next_handoff_image_id = BL33_IMAGE_ID, 64*499c2713SBiju Das }, 65*499c2713SBiju Das #endif 66*499c2713SBiju Das { 67*499c2713SBiju Das .image_id = BL33_IMAGE_ID, 68*499c2713SBiju Das 69*499c2713SBiju Das SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP, VERSION_2, 70*499c2713SBiju Das entry_point_info_t, NON_SECURE | EXECUTABLE), 71*499c2713SBiju Das .ep_info.spsr = SPSR_64(BL33_MODE, MODE_SP_ELX, 72*499c2713SBiju Das DISABLE_ALL_EXCEPTIONS), 73*499c2713SBiju Das .ep_info.pc = BL33_BASE, 74*499c2713SBiju Das #ifdef RCAR_BL33_ARG0 75*499c2713SBiju Das .ep_info.args.arg0 = RCAR_BL33_ARG0, 76*499c2713SBiju Das #endif 77*499c2713SBiju Das .ep_info.args.arg1 = (uintptr_t)fdt_blob, 78*499c2713SBiju Das SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, VERSION_2, 79*499c2713SBiju Das image_info_t, 0), 80*499c2713SBiju Das .image_info.image_max_size = 81*499c2713SBiju Das (uint32_t) (DRAM_LIMIT - BL33_BASE), 82*499c2713SBiju Das .image_info.image_base = BL33_BASE, 83*499c2713SBiju Das 84*499c2713SBiju Das .next_handoff_image_id = INVALID_IMAGE_ID, 85*499c2713SBiju Das } 86*499c2713SBiju Das }; 87*499c2713SBiju Das 88*499c2713SBiju Das REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs) 89