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