mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-15 17:14:21 +00:00
refactor(el3-runtime): add prepare_el3_entry func
In the next patch we add an extra step of setting the PSTATE registers to a known state on el3 entry. In this patch we create the function prepare_el3_entry to wrap the steps needed for before el3 entry. For now this is only save_gp_pmcr_pauth_regs. Change-Id: Ie26dc8d89bfaec308769165d2649e84d41be196c Signed-off-by: Daniel Boulby <daniel.boulby@arm.com>
This commit is contained in:
parent
50e06da16e
commit
97215e0f25
4 changed files with 24 additions and 16 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -224,7 +224,7 @@ smc_handler:
|
|||
* TODO: Revisit to store only SMCCC specified registers.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
bl save_gp_pmcr_pauth_regs
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* -----------------------------------------------------
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2021, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2018-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -93,7 +93,7 @@ func enter_lower_el_sync_ea
|
|||
* If Secure Cycle Counter is not disabled in MDCR_EL3 when
|
||||
* ARMv8.5-PMU is implemented, save PMCR_EL0 and disable Cycle Counter.
|
||||
*/
|
||||
bl save_gp_pmcr_pauth_regs
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Load and program APIAKey firmware key */
|
||||
|
@ -140,7 +140,7 @@ handle_lower_el_async_ea:
|
|||
* If Secure Cycle Counter is not disabled in MDCR_EL3 when
|
||||
* ARMv8.5-PMU is implemented, save PMCR_EL0 and disable Cycle Counter.
|
||||
*/
|
||||
bl save_gp_pmcr_pauth_regs
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Load and program APIAKey firmware key */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2021, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -72,7 +72,7 @@
|
|||
* If Secure Cycle Counter is not disabled in MDCR_EL3 when
|
||||
* ARMv8.5-PMU is implemented, save PMCR_EL0 and disable Cycle Counter.
|
||||
*/
|
||||
bl save_gp_pmcr_pauth_regs
|
||||
bl prepare_el3_entry
|
||||
|
||||
bl handle_lower_el_ea_esb
|
||||
|
||||
|
@ -210,7 +210,7 @@ exp_from_EL3:
|
|||
* If Secure Cycle Counter is not disabled in MDCR_EL3 when
|
||||
* ARMv8.5-PMU is implemented, save PMCR_EL0 and disable Cycle Counter.
|
||||
*/
|
||||
bl save_gp_pmcr_pauth_regs
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Load and program APIAKey firmware key */
|
||||
|
@ -463,7 +463,7 @@ smc_handler64:
|
|||
* If Secure Cycle Counter is not disabled in MDCR_EL3 when
|
||||
* ARMv8.5-PMU is implemented, save PMCR_EL0 and disable Cycle Counter.
|
||||
*/
|
||||
bl save_gp_pmcr_pauth_regs
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Load and program APIAKey firmware key */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2021, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -21,7 +21,7 @@
|
|||
.global fpregs_context_save
|
||||
.global fpregs_context_restore
|
||||
#endif
|
||||
.global save_gp_pmcr_pauth_regs
|
||||
.global prepare_el3_entry
|
||||
.global restore_gp_pmcr_pauth_regs
|
||||
.global save_and_update_ptw_el1_sys_regs
|
||||
.global el3_exit
|
||||
|
@ -683,7 +683,7 @@ endfunc fpregs_context_restore
|
|||
#endif /* CTX_INCLUDE_FPREGS */
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* The following function is used to save and restore all the general
|
||||
* The following macro is used to save and restore all the general
|
||||
* purpose and ARMv8.3-PAuth (if enabled) registers.
|
||||
* It also checks if Secure Cycle Counter is not disabled in MDCR_EL3
|
||||
* when ARMv8.5-PMU is implemented, and if called from Non-secure
|
||||
|
@ -693,12 +693,10 @@ endfunc fpregs_context_restore
|
|||
* when a world switch occurs but that type of implementation is more
|
||||
* complex. So currently we will always save and restore these
|
||||
* registers on entry and exit of EL3.
|
||||
* These are not macros to ensure their invocation fits within the 32
|
||||
* instructions per exception vector.
|
||||
* clobbers: x18
|
||||
* ------------------------------------------------------------------
|
||||
*/
|
||||
func save_gp_pmcr_pauth_regs
|
||||
.macro save_gp_pmcr_pauth_regs
|
||||
stp x0, x1, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X0]
|
||||
stp x2, x3, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X2]
|
||||
stp x4, x5, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X4]
|
||||
|
@ -770,8 +768,18 @@ func save_gp_pmcr_pauth_regs
|
|||
stp x28, x29, [x19, #CTX_PACGAKEY_LO]
|
||||
#endif /* CTX_INCLUDE_PAUTH_REGS */
|
||||
|
||||
.endm /* save_gp_pmcr_pauth_regs */
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* This function saves the context preparing entry to el3.
|
||||
* Save all the general purpose and ARMv8.3-PAuth (if enabled)
|
||||
* registers.
|
||||
* -----------------------------------------------------------------
|
||||
*/
|
||||
func prepare_el3_entry
|
||||
save_gp_pmcr_pauth_regs
|
||||
ret
|
||||
endfunc save_gp_pmcr_pauth_regs
|
||||
endfunc prepare_el3_entry
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* This function restores ARMv8.3-PAuth (if enabled) and all general
|
||||
|
|
Loading…
Add table
Reference in a new issue