mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 17:44:19 +00:00
Prevent RAS register access from lower ELs
This patch adds a build config 'RAS_TRAP_LOWER_EL_ERR_ACCESS' to set SCR_EL3.TERR during CPU boot. This bit enables trapping RAS register accesses from EL1 or EL2 to EL3. RAS_TRAP_LOWER_EL_ERR_ACCESS is disabled by default. Signed-off-by: Varun Wadekar <vwadekar@nvidia.com> Change-Id: Ifb0fb0afedea7dd2a29a0b0491a1161ecd241438
This commit is contained in:
parent
0d8511953e
commit
fbc44bd1bb
6 changed files with 20 additions and 1 deletions
2
Makefile
2
Makefile
|
@ -900,6 +900,7 @@ $(eval $(call assert_boolean,USE_SPINLOCK_CAS))
|
|||
$(eval $(call assert_boolean,ENCRYPT_BL31))
|
||||
$(eval $(call assert_boolean,ENCRYPT_BL32))
|
||||
$(eval $(call assert_boolean,ERRATA_SPECULATIVE_AT))
|
||||
$(eval $(call assert_boolean,RAS_TRAP_LOWER_EL_ERR_ACCESS))
|
||||
|
||||
$(eval $(call assert_numeric,ARM_ARCH_MAJOR))
|
||||
$(eval $(call assert_numeric,ARM_ARCH_MINOR))
|
||||
|
@ -979,6 +980,7 @@ $(eval $(call add_define,BL2_IN_XIP_MEM))
|
|||
$(eval $(call add_define,BL2_INV_DCACHE))
|
||||
$(eval $(call add_define,USE_SPINLOCK_CAS))
|
||||
$(eval $(call add_define,ERRATA_SPECULATIVE_AT))
|
||||
$(eval $(call add_define,RAS_TRAP_LOWER_EL_ERR_ACCESS))
|
||||
|
||||
ifeq (${SANITIZE_UB},trap)
|
||||
$(eval $(call add_define,MONITOR_TRAPS))
|
||||
|
|
|
@ -32,7 +32,8 @@ introduced by the RAS extensions.
|
|||
|
||||
The build option ``RAS_EXTENSION`` when set to ``1`` includes the RAS in run
|
||||
time firmware; ``EL3_EXCEPTION_HANDLING`` and ``HANDLE_EA_EL3_FIRST`` must also
|
||||
be set ``1``.
|
||||
be set ``1``. ``RAS_TRAP_LOWER_EL_ERR_ACCESS`` controls the access to the RAS
|
||||
error record registers from lower ELs.
|
||||
|
||||
.. _ras-figure:
|
||||
|
||||
|
|
|
@ -707,6 +707,10 @@ Common build options
|
|||
| 1530924 | Cortex-A53 |
|
||||
+---------+--------------+
|
||||
|
||||
- ``RAS_TRAP_LOWER_EL_ERR_ACCESS``: This flag enables/disables the SCR_EL3.TERR
|
||||
bit, to trap access to the RAS ERR and RAS ERX registers from lower ELs.
|
||||
This flag is disabled by default.
|
||||
|
||||
GICv3 driver options
|
||||
--------------------
|
||||
|
||||
|
|
|
@ -342,6 +342,7 @@
|
|||
#define SCR_EEL2_BIT (U(1) << 18)
|
||||
#define SCR_API_BIT (U(1) << 17)
|
||||
#define SCR_APK_BIT (U(1) << 16)
|
||||
#define SCR_TERR_BIT (U(1) << 15)
|
||||
#define SCR_TWE_BIT (U(1) << 13)
|
||||
#define SCR_TWI_BIT (U(1) << 12)
|
||||
#define SCR_ST_BIT (U(1) << 11)
|
||||
|
|
|
@ -108,6 +108,14 @@ void cm_setup_context(cpu_context_t *ctx, const entry_point_info_t *ep)
|
|||
if (EP_GET_ST(ep->h.attr) != 0U)
|
||||
scr_el3 |= SCR_ST_BIT;
|
||||
|
||||
#if RAS_TRAP_LOWER_EL_ERR_ACCESS
|
||||
/*
|
||||
* SCR_EL3.TERR: Trap Error record accesses. Accesses to the RAS ERR
|
||||
* and RAS ERX registers from EL1 and EL2 are trapped to EL3.
|
||||
*/
|
||||
scr_el3 |= SCR_TERR_BIT;
|
||||
#endif
|
||||
|
||||
#if !HANDLE_EA_EL3_FIRST
|
||||
/*
|
||||
* SCR_EL3.EA: Do not route External Abort and SError Interrupt External
|
||||
|
|
|
@ -302,3 +302,6 @@ SUPPORT_STACK_MEMTAG := no
|
|||
|
||||
# Select workaround for AT speculative behaviour.
|
||||
ERRATA_SPECULATIVE_AT := 0
|
||||
|
||||
# Trap RAS error record access from lower EL
|
||||
RAS_TRAP_LOWER_EL_ERR_ACCESS := 0
|
||||
|
|
Loading…
Add table
Reference in a new issue