1*54fd6939SJiyong Park /* 2*54fd6939SJiyong Park * Copyright (c) 2019-2020, ARM Limited and Contributors. All rights reserved. 3*54fd6939SJiyong Park * 4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause 5*54fd6939SJiyong Park */ 6*54fd6939SJiyong Park 7*54fd6939SJiyong Park #include <assert.h> 8*54fd6939SJiyong Park 9*54fd6939SJiyong Park #include <arch.h> 10*54fd6939SJiyong Park #include <arch_helpers.h> 11*54fd6939SJiyong Park #include <common/debug.h> 12*54fd6939SJiyong Park #include <plat/common/platform.h> 13*54fd6939SJiyong Park 14*54fd6939SJiyong Park #include <plat_brcm.h> 15*54fd6939SJiyong Park #include <platform_def.h> 16*54fd6939SJiyong Park 17*54fd6939SJiyong Park /* Weak definitions may be overridden in specific BRCM platform */ 18*54fd6939SJiyong Park #pragma weak plat_get_ns_image_entrypoint 19*54fd6939SJiyong Park #pragma weak plat_brcm_get_mmap 20*54fd6939SJiyong Park plat_get_ns_image_entrypoint(void)21*54fd6939SJiyong Parkuintptr_t plat_get_ns_image_entrypoint(void) 22*54fd6939SJiyong Park { 23*54fd6939SJiyong Park #ifdef PRELOADED_BL33_BASE 24*54fd6939SJiyong Park return PRELOADED_BL33_BASE; 25*54fd6939SJiyong Park #else 26*54fd6939SJiyong Park return PLAT_BRCM_NS_IMAGE_OFFSET; 27*54fd6939SJiyong Park #endif 28*54fd6939SJiyong Park } 29*54fd6939SJiyong Park brcm_get_spsr_for_bl32_entry(void)30*54fd6939SJiyong Parkuint32_t brcm_get_spsr_for_bl32_entry(void) 31*54fd6939SJiyong Park { 32*54fd6939SJiyong Park /* 33*54fd6939SJiyong Park * The Secure Payload Dispatcher service is responsible for 34*54fd6939SJiyong Park * setting the SPSR prior to entry into the BL32 image. 35*54fd6939SJiyong Park */ 36*54fd6939SJiyong Park return 0; 37*54fd6939SJiyong Park } 38*54fd6939SJiyong Park brcm_get_spsr_for_bl33_entry(void)39*54fd6939SJiyong Parkuint32_t brcm_get_spsr_for_bl33_entry(void) 40*54fd6939SJiyong Park { 41*54fd6939SJiyong Park unsigned int mode; 42*54fd6939SJiyong Park uint32_t spsr; 43*54fd6939SJiyong Park 44*54fd6939SJiyong Park /* Figure out what mode we enter the non-secure world in */ 45*54fd6939SJiyong Park mode = el_implemented(2) ? MODE_EL2 : MODE_EL1; 46*54fd6939SJiyong Park 47*54fd6939SJiyong Park /* 48*54fd6939SJiyong Park * TODO: Consider the possibility of specifying the SPSR in 49*54fd6939SJiyong Park * the FIP ToC and allowing the platform to have a say as 50*54fd6939SJiyong Park * well. 51*54fd6939SJiyong Park */ 52*54fd6939SJiyong Park spsr = SPSR_64(mode, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS); 53*54fd6939SJiyong Park return spsr; 54*54fd6939SJiyong Park } 55*54fd6939SJiyong Park plat_brcm_get_mmap(void)56*54fd6939SJiyong Parkconst mmap_region_t *plat_brcm_get_mmap(void) 57*54fd6939SJiyong Park { 58*54fd6939SJiyong Park return plat_brcm_mmap; 59*54fd6939SJiyong Park } 60