Commit 4e04478a authored by Chris Kay's avatar Chris Kay
Browse files

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: default avatarChris Kay <chris.kay@arm.com>
Change-Id: I978ed38829385b221b10ba56d49b78f4756e20ea
parent e3ff1766
...@@ -245,6 +245,13 @@ endif # arch-features ...@@ -245,6 +245,13 @@ endif # arch-features
# Determine if FEAT_RNG is supported # Determine if FEAT_RNG is supported
ENABLE_FEAT_RNG = $(if $(findstring rng,${arch-features}),1,0) 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))),) ifneq ($(findstring armclang,$(notdir $(CC))),)
TF_CFLAGS_aarch32 = -target arm-arm-none-eabi $(march32-directive) TF_CFLAGS_aarch32 = -target arm-arm-none-eabi $(march32-directive)
TF_CFLAGS_aarch64 = -target aarch64-arm-none-eabi $(march64-directive) TF_CFLAGS_aarch64 = -target aarch64-arm-none-eabi $(march64-directive)
...@@ -945,6 +952,7 @@ $(eval $(call assert_booleans,\ ...@@ -945,6 +952,7 @@ $(eval $(call assert_booleans,\
COT_DESC_IN_DTB \ COT_DESC_IN_DTB \
USE_SP804_TIMER \ USE_SP804_TIMER \
ENABLE_FEAT_RNG \ ENABLE_FEAT_RNG \
ENABLE_FEAT_SB \
))) )))
$(eval $(call assert_numerics,\ $(eval $(call assert_numerics,\
...@@ -1038,6 +1046,7 @@ $(eval $(call add_defines,\ ...@@ -1038,6 +1046,7 @@ $(eval $(call add_defines,\
COT_DESC_IN_DTB \ COT_DESC_IN_DTB \
USE_SP804_TIMER \ USE_SP804_TIMER \
ENABLE_FEAT_RNG \ ENABLE_FEAT_RNG \
ENABLE_FEAT_SB \
))) )))
ifeq (${SANITIZE_UB},trap) ifeq (${SANITIZE_UB},trap)
......
...@@ -107,12 +107,12 @@ ...@@ -107,12 +107,12 @@
#else #else
/* /*
* Macro for mitigating against speculative execution beyond ERET. * Macro for mitigating against speculative execution beyond ERET. Uses the
* If possible use Speculation Barrier instruction defined in ARMv8.5 * speculation barrier instruction introduced by FEAT_SB, if it's enabled.
*/ */
.macro exception_return .macro exception_return
eret eret
#if ARM_ARCH_AT_LEAST(8, 5) #if ENABLE_FEAT_SB
sb sb
#else #else
dsb nsh dsb nsh
......
...@@ -219,12 +219,12 @@ ...@@ -219,12 +219,12 @@
.endm .endm
/* /*
* Macro for mitigating against speculative execution beyond ERET. * Macro for mitigating against speculative execution beyond ERET. Uses the
* If possible use Speculation Barrier instruction defined in ARMv8.5 * speculation barrier instruction introduced by FEAT_SB, if it's enabled.
*/ */
.macro exception_return .macro exception_return
eret eret
#if ARM_ARCH_AT_LEAST(8, 5) #if ENABLE_FEAT_SB
sb sb
#else #else
dsb nsh dsb nsh
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment