xref: /rk3399_ARM-atf/plat/imx/common/imx_bl31_common.c (revision fcd41e8692ce8e8fc98d069bc131820cbf83c55c)
1*fcd41e86SJacky Bai /*
2*fcd41e86SJacky Bai  * Copyright 2023-2024 NXP
3*fcd41e86SJacky Bai  *
4*fcd41e86SJacky Bai  * SPDX-License-Identifier: BSD-3-Clause
5*fcd41e86SJacky Bai  */
6*fcd41e86SJacky Bai 
7*fcd41e86SJacky Bai #include <imx_plat_common.h>
8*fcd41e86SJacky Bai 
9*fcd41e86SJacky Bai uint32_t plat_get_spsr_for_bl33_entry(void)
10*fcd41e86SJacky Bai {
11*fcd41e86SJacky Bai 	unsigned long el_status;
12*fcd41e86SJacky Bai 	unsigned long mode;
13*fcd41e86SJacky Bai 	uint32_t spsr;
14*fcd41e86SJacky Bai 
15*fcd41e86SJacky Bai 	/* figure out what mode we enter the non-secure world */
16*fcd41e86SJacky Bai 	el_status = read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL2_SHIFT;
17*fcd41e86SJacky Bai 	el_status &= ID_AA64PFR0_ELX_MASK;
18*fcd41e86SJacky Bai 
19*fcd41e86SJacky Bai 	mode = (el_status) ? MODE_EL2 : MODE_EL1;
20*fcd41e86SJacky Bai 
21*fcd41e86SJacky Bai 	spsr = SPSR_64(mode, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS);
22*fcd41e86SJacky Bai 	return spsr;
23*fcd41e86SJacky Bai }
24