xref: /aosp_15_r20/external/arm-trusted-firmware/plat/brcm/common/brcm_common.c (revision 54fd6939e177f8ff529b10183254802c76df6d08)
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 Park uintptr_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 Park uint32_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 Park uint32_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 Park const mmap_region_t *plat_brcm_get_mmap(void)
57*54fd6939SJiyong Park {
58*54fd6939SJiyong Park 	return plat_brcm_mmap;
59*54fd6939SJiyong Park }
60