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