xref: /rk3399_ARM-atf/plat/intel/soc/common/aarch64/platform_common.c (revision 9118bdf4011b5a54fec5c1eb80e1ad99ab7ac4bd)
13f7b1490SHadi Asyrafi /*
23f7b1490SHadi Asyrafi  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
33f7b1490SHadi Asyrafi  *
43f7b1490SHadi Asyrafi  * SPDX-License-Identifier: BSD-3-Clause
53f7b1490SHadi Asyrafi  */
63f7b1490SHadi Asyrafi 
73f7b1490SHadi Asyrafi #include <arch.h>
83f7b1490SHadi Asyrafi #include <arch_helpers.h>
93f7b1490SHadi Asyrafi #include <platform_def.h>
103f7b1490SHadi Asyrafi #include <plat/common/platform.h>
11*e9b5e360SHadi Asyrafi 
12*e9b5e360SHadi Asyrafi #include "socfpga_private.h"
133f7b1490SHadi Asyrafi 
socfpga_get_ns_image_entrypoint(void)143f7b1490SHadi Asyrafi unsigned long socfpga_get_ns_image_entrypoint(void)
153f7b1490SHadi Asyrafi {
163f7b1490SHadi Asyrafi 	return PLAT_NS_IMAGE_OFFSET;
173f7b1490SHadi Asyrafi }
183f7b1490SHadi Asyrafi 
193f7b1490SHadi Asyrafi /******************************************************************************
203f7b1490SHadi Asyrafi  * Gets SPSR for BL32 entry
213f7b1490SHadi Asyrafi  *****************************************************************************/
socfpga_get_spsr_for_bl32_entry(void)223f7b1490SHadi Asyrafi uint32_t socfpga_get_spsr_for_bl32_entry(void)
233f7b1490SHadi Asyrafi {
243f7b1490SHadi Asyrafi 	/*
253f7b1490SHadi Asyrafi 	 * The Secure Payload Dispatcher service is responsible for
263f7b1490SHadi Asyrafi 	 * setting the SPSR prior to entry into the BL32 image.
273f7b1490SHadi Asyrafi 	 */
283f7b1490SHadi Asyrafi 	return 0;
293f7b1490SHadi Asyrafi }
303f7b1490SHadi Asyrafi 
313f7b1490SHadi Asyrafi /******************************************************************************
323f7b1490SHadi Asyrafi  * Gets SPSR for BL33 entry
333f7b1490SHadi Asyrafi  *****************************************************************************/
socfpga_get_spsr_for_bl33_entry(void)343f7b1490SHadi Asyrafi uint32_t socfpga_get_spsr_for_bl33_entry(void)
353f7b1490SHadi Asyrafi {
363f7b1490SHadi Asyrafi 	unsigned long el_status;
373f7b1490SHadi Asyrafi 	unsigned int mode;
383f7b1490SHadi Asyrafi 	uint32_t spsr;
393f7b1490SHadi Asyrafi 
403f7b1490SHadi Asyrafi 	/* Figure out what mode we enter the non-secure world in */
413f7b1490SHadi Asyrafi 	el_status = read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL2_SHIFT;
423f7b1490SHadi Asyrafi 	el_status &= ID_AA64PFR0_ELX_MASK;
433f7b1490SHadi Asyrafi 
443f7b1490SHadi Asyrafi 	mode = (el_status) ? MODE_EL2 : MODE_EL1;
453f7b1490SHadi Asyrafi 
463f7b1490SHadi Asyrafi 	/*
473f7b1490SHadi Asyrafi 	 * TODO: Consider the possibility of specifying the SPSR in
483f7b1490SHadi Asyrafi 	 * the FIP ToC and allowing the platform to have a say as
493f7b1490SHadi Asyrafi 	 * well.
503f7b1490SHadi Asyrafi 	 */
513f7b1490SHadi Asyrafi 	spsr = SPSR_64(mode, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS);
523f7b1490SHadi Asyrafi 	return spsr;
533f7b1490SHadi Asyrafi }
543f7b1490SHadi Asyrafi 
55