mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 17:44:19 +00:00
![]() The EL2 context save/restore functions have an optimisation to not bother with the EL2 context when SEL2 is not in use. However, this decision is made on the current value of SCR_EL3.EEL2, which is not the value for the selected security state, but rather, for the security state that came before it. This relies on the EEL2 bit's value to propagate identically to all worlds. This has an unintended side effect that for the first entry into secure world, the restoring of the context is fully skipped, because SCR_EL3 is only initialized after the call to the restoring routine which means the EEL2 bit is not initialized (except when FEAT_RME is present). This is inconsistent with normal and realm worlds which always get their EL2 registers zeroed. Remove this optimization to remove all the complexity with managing the EEL2 bit's value. Instead unconditionally save/restore all registers. It is worth noting that there is no performance penalty in the case where SEL2 is empty with this change. This is because SEL2 will never be entered, and as such no secure save/restore will happen anyway, while normal world remains unchanged. Removing the value management of the EEL2 bit causes the CTX_ICC_SRE_EL2 register to be inaccessible in Secure world for some configurations. Make the SCR_EL3.NS workaround in cm_prepare_el3_exit_ns() generic on every access to the register. Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: I1f56d85814c5897b468e82d4bd4a08e3a90a7f8f |
||
---|---|---|
.. | ||
aarch32 | ||
aarch64 | ||
bl_aux_params | ||
compiler-rt | ||
coreboot | ||
cpus | ||
debugfs | ||
el3_runtime | ||
extensions | ||
fconf | ||
gpt_rme | ||
libc | ||
libfdt | ||
locks | ||
mpmm | ||
optee | ||
pmf | ||
psa | ||
psci | ||
romlib | ||
semihosting | ||
stack_protector | ||
transfer_list | ||
utils | ||
xlat_mpu | ||
xlat_tables | ||
xlat_tables_v2 | ||
zlib |