1dddba19aSStephan Gerhold /* 2d833af3aSStephan Gerhold * Copyright (c) 2021-2023, Stephan Gerhold <stephan@gerhold.net> 3dddba19aSStephan Gerhold * 4dddba19aSStephan Gerhold * SPDX-License-Identifier: BSD-3-Clause 5dddba19aSStephan Gerhold */ 6dddba19aSStephan Gerhold 7dddba19aSStephan Gerhold #include <assert.h> 8dddba19aSStephan Gerhold 9dddba19aSStephan Gerhold #include <arch.h> 10dddba19aSStephan Gerhold #include <common/debug.h> 11dddba19aSStephan Gerhold #include <plat/common/platform.h> 12dddba19aSStephan Gerhold 13*840831b2SStephan Gerhold #include "msm8916_config.h" 14*840831b2SStephan Gerhold #include "msm8916_setup.h" 15dddba19aSStephan Gerhold 16dddba19aSStephan Gerhold static struct { 17dddba19aSStephan Gerhold entry_point_info_t bl32; 18dddba19aSStephan Gerhold entry_point_info_t bl33; 19dddba19aSStephan Gerhold } image_ep_info = { 20dddba19aSStephan Gerhold /* BL32 entry point */ 21dddba19aSStephan Gerhold SET_STATIC_PARAM_HEAD(bl32, PARAM_EP, VERSION_1, 22dddba19aSStephan Gerhold entry_point_info_t, SECURE), 23dddba19aSStephan Gerhold .bl32.pc = BL32_BASE, 24dddba19aSStephan Gerhold 25dddba19aSStephan Gerhold /* BL33 entry point */ 26dddba19aSStephan Gerhold SET_STATIC_PARAM_HEAD(bl33, PARAM_EP, VERSION_1, 27dddba19aSStephan Gerhold entry_point_info_t, NON_SECURE), 28dddba19aSStephan Gerhold .bl33.pc = PRELOADED_BL33_BASE, 29dddba19aSStephan Gerhold .bl33.spsr = SPSR_64(MODE_EL2, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS), 30dddba19aSStephan Gerhold }; 31dddba19aSStephan Gerhold 32dddba19aSStephan Gerhold void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, 33dddba19aSStephan Gerhold u_register_t arg2, u_register_t arg3) 34dddba19aSStephan Gerhold { 35*840831b2SStephan Gerhold msm8916_early_platform_setup(); 36dddba19aSStephan Gerhold } 37dddba19aSStephan Gerhold 38dddba19aSStephan Gerhold void bl31_plat_arch_setup(void) 39dddba19aSStephan Gerhold { 40*840831b2SStephan Gerhold msm8916_plat_arch_setup(BL31_BASE, BL31_END - BL31_BASE); 41dddba19aSStephan Gerhold enable_mmu_el3(0); 42dddba19aSStephan Gerhold } 43dddba19aSStephan Gerhold 44dddba19aSStephan Gerhold void bl31_platform_setup(void) 45dddba19aSStephan Gerhold { 46af644731SStephan Gerhold INFO("BL31: Platform setup start\n"); 47*840831b2SStephan Gerhold msm8916_platform_setup(); 48*840831b2SStephan Gerhold msm8916_configure(); 49af644731SStephan Gerhold INFO("BL31: Platform setup done\n"); 50dddba19aSStephan Gerhold } 51dddba19aSStephan Gerhold 52dddba19aSStephan Gerhold entry_point_info_t *bl31_plat_get_next_image_ep_info(uint32_t type) 53dddba19aSStephan Gerhold { 54dddba19aSStephan Gerhold switch (type) { 55dddba19aSStephan Gerhold case SECURE: 56dddba19aSStephan Gerhold return &image_ep_info.bl32; 57dddba19aSStephan Gerhold case NON_SECURE: 58dddba19aSStephan Gerhold return &image_ep_info.bl33; 59dddba19aSStephan Gerhold default: 60dddba19aSStephan Gerhold assert(sec_state_is_valid(type)); 61dddba19aSStephan Gerhold return NULL; 62dddba19aSStephan Gerhold } 63dddba19aSStephan Gerhold } 64