mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-18 02:24:18 +00:00
arch: Enable FEAT_SB
for supported non-Armv8.5-A platforms
The speculation barrier feature (`FEAT_SB`) was introduced with and made mandatory in the Armv8.5-A extension. It was retroactively made optional in prior extensions, but the checks in our code-base do not reflect that, assuming that it is only available in Armv8.5-A or later. This change introduces the `ENABLE_FEAT_SB` definition, which derives support for the `sb` instruction in the assembler from the feature flags passed to it. Note that we assume that if this feature is enabled then all the cores in the system support it - enabling speculation barriers for only a subset of the cores is unsupported. Signed-off-by: Chris Kay <chris.kay@arm.com> Change-Id: I978ed38829385b221b10ba56d49b78f4756e20ea
This commit is contained in:
parent
e3ff1766e3
commit
4e04478aac
3 changed files with 15 additions and 6 deletions
9
Makefile
9
Makefile
|
@ -245,6 +245,13 @@ endif # arch-features
|
|||
# Determine if FEAT_RNG is supported
|
||||
ENABLE_FEAT_RNG = $(if $(findstring rng,${arch-features}),1,0)
|
||||
|
||||
# Determine if FEAT_SB is supported
|
||||
ENABLE_FEAT_SB = $(if $(findstring sb,${arch-features}),1,0)
|
||||
|
||||
ifeq "8.5" "$(word 1, $(sort 8.5 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
|
||||
ENABLE_FEAT_SB = 1
|
||||
endif
|
||||
|
||||
ifneq ($(findstring armclang,$(notdir $(CC))),)
|
||||
TF_CFLAGS_aarch32 = -target arm-arm-none-eabi $(march32-directive)
|
||||
TF_CFLAGS_aarch64 = -target aarch64-arm-none-eabi $(march64-directive)
|
||||
|
@ -945,6 +952,7 @@ $(eval $(call assert_booleans,\
|
|||
COT_DESC_IN_DTB \
|
||||
USE_SP804_TIMER \
|
||||
ENABLE_FEAT_RNG \
|
||||
ENABLE_FEAT_SB \
|
||||
)))
|
||||
|
||||
$(eval $(call assert_numerics,\
|
||||
|
@ -1038,6 +1046,7 @@ $(eval $(call add_defines,\
|
|||
COT_DESC_IN_DTB \
|
||||
USE_SP804_TIMER \
|
||||
ENABLE_FEAT_RNG \
|
||||
ENABLE_FEAT_SB \
|
||||
)))
|
||||
|
||||
ifeq (${SANITIZE_UB},trap)
|
||||
|
|
|
@ -107,12 +107,12 @@
|
|||
|
||||
#else
|
||||
/*
|
||||
* Macro for mitigating against speculative execution beyond ERET.
|
||||
* If possible use Speculation Barrier instruction defined in ARMv8.5
|
||||
* Macro for mitigating against speculative execution beyond ERET. Uses the
|
||||
* speculation barrier instruction introduced by FEAT_SB, if it's enabled.
|
||||
*/
|
||||
.macro exception_return
|
||||
eret
|
||||
#if ARM_ARCH_AT_LEAST(8, 5)
|
||||
#if ENABLE_FEAT_SB
|
||||
sb
|
||||
#else
|
||||
dsb nsh
|
||||
|
|
|
@ -219,12 +219,12 @@
|
|||
.endm
|
||||
|
||||
/*
|
||||
* Macro for mitigating against speculative execution beyond ERET.
|
||||
* If possible use Speculation Barrier instruction defined in ARMv8.5
|
||||
* Macro for mitigating against speculative execution beyond ERET. Uses the
|
||||
* speculation barrier instruction introduced by FEAT_SB, if it's enabled.
|
||||
*/
|
||||
.macro exception_return
|
||||
eret
|
||||
#if ARM_ARCH_AT_LEAST(8, 5)
|
||||
#if ENABLE_FEAT_SB
|
||||
sb
|
||||
#else
|
||||
dsb nsh
|
||||
|
|
Loading…
Add table
Reference in a new issue