mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-20 11:34:20 +00:00
Merge "feat(sve): support full SVE vector length" into integration
This commit is contained in:
commit
1631f9c75c
4 changed files with 22 additions and 3 deletions
3
Makefile
3
Makefile
|
@ -399,6 +399,8 @@ TF_CFLAGS += $(CPPFLAGS) $(TF_CFLAGS_$(ARCH)) \
|
||||||
-ffreestanding -fno-builtin -fno-common \
|
-ffreestanding -fno-builtin -fno-common \
|
||||||
-Os -std=gnu99
|
-Os -std=gnu99
|
||||||
|
|
||||||
|
$(eval $(call add_define,SVE_VECTOR_LEN))
|
||||||
|
|
||||||
ifeq (${SANITIZE_UB},on)
|
ifeq (${SANITIZE_UB},on)
|
||||||
TF_CFLAGS += -fsanitize=undefined -fno-sanitize-recover
|
TF_CFLAGS += -fsanitize=undefined -fno-sanitize-recover
|
||||||
endif
|
endif
|
||||||
|
@ -1085,6 +1087,7 @@ $(eval $(call assert_numerics,\
|
||||||
RAS_EXTENSION \
|
RAS_EXTENSION \
|
||||||
TWED_DELAY \
|
TWED_DELAY \
|
||||||
ENABLE_FEAT_TWED \
|
ENABLE_FEAT_TWED \
|
||||||
|
SVE_VECTOR_LEN \
|
||||||
)))
|
)))
|
||||||
|
|
||||||
ifdef KEY_SIZE
|
ifdef KEY_SIZE
|
||||||
|
|
|
@ -834,6 +834,14 @@ Common build options
|
||||||
to mask these events. Platforms that enable FIQ handling in SP_MIN shall
|
to mask these events. Platforms that enable FIQ handling in SP_MIN shall
|
||||||
implement the api ``sp_min_plat_fiq_handler()``. The default value is 0.
|
implement the api ``sp_min_plat_fiq_handler()``. The default value is 0.
|
||||||
|
|
||||||
|
- ``SVE_VECTOR_LEN``: SVE vector length to configure in ZCR_EL3.
|
||||||
|
Platforms can configure this if they need to lower the hardware
|
||||||
|
limit, for example due to asymmetric configuration or limitations of
|
||||||
|
software run at lower ELs. The default is the architectural maximum
|
||||||
|
of 2048 which should be suitable for most configurations, the
|
||||||
|
hardware will limit the effective VL to the maximum physically supported
|
||||||
|
VL.
|
||||||
|
|
||||||
- ``TRUSTED_BOARD_BOOT``: Boolean flag to include support for the Trusted Board
|
- ``TRUSTED_BOARD_BOOT``: Boolean flag to include support for the Trusted Board
|
||||||
Boot feature. When set to '1', BL1 and BL2 images include support to load
|
Boot feature. When set to '1', BL1 and BL2 images include support to load
|
||||||
and verify the certificates and images in a FIP, and BL1 includes support
|
and verify the certificates and images in a FIP, and BL1 includes support
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -8,9 +8,14 @@
|
||||||
|
|
||||||
#include <arch.h>
|
#include <arch.h>
|
||||||
#include <arch_helpers.h>
|
#include <arch_helpers.h>
|
||||||
|
#include <lib/cassert.h>
|
||||||
#include <lib/el3_runtime/pubsub.h>
|
#include <lib/el3_runtime/pubsub.h>
|
||||||
#include <lib/extensions/sve.h>
|
#include <lib/extensions/sve.h>
|
||||||
|
|
||||||
|
CASSERT(SVE_VECTOR_LEN <= 2048, assert_sve_vl_too_long);
|
||||||
|
CASSERT(SVE_VECTOR_LEN >= 128, assert_sve_vl_too_short);
|
||||||
|
CASSERT((SVE_VECTOR_LEN % 128) == 0, assert_sve_vl_granule);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Converts SVE vector size restriction in bytes to LEN according to ZCR_EL3 documentation.
|
* Converts SVE vector size restriction in bytes to LEN according to ZCR_EL3 documentation.
|
||||||
* VECTOR_SIZE = (LEN+1) * 128
|
* VECTOR_SIZE = (LEN+1) * 128
|
||||||
|
@ -39,9 +44,9 @@ void sve_enable(cpu_context_t *context)
|
||||||
cptr_el3 = (cptr_el3 | CPTR_EZ_BIT) & ~(TFP_BIT);
|
cptr_el3 = (cptr_el3 | CPTR_EZ_BIT) & ~(TFP_BIT);
|
||||||
write_ctx_reg(get_el3state_ctx(context), CTX_CPTR_EL3, cptr_el3);
|
write_ctx_reg(get_el3state_ctx(context), CTX_CPTR_EL3, cptr_el3);
|
||||||
|
|
||||||
/* Restrict maximum SVE vector length (SVE_VECTOR_LENGTH+1) * 128. */
|
/* Restrict maximum SVE vector length (SVE_VECTOR_LEN+1) * 128. */
|
||||||
write_ctx_reg(get_el3state_ctx(context), CTX_ZCR_EL3,
|
write_ctx_reg(get_el3state_ctx(context), CTX_ZCR_EL3,
|
||||||
(ZCR_EL3_LEN_MASK & CONVERT_SVE_LENGTH(512)));
|
(ZCR_EL3_LEN_MASK & CONVERT_SVE_LENGTH(SVE_VECTOR_LEN)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void sve_disable(cpu_context_t *context)
|
void sve_disable(cpu_context_t *context)
|
||||||
|
|
|
@ -373,6 +373,9 @@ ifeq (${ARCH},aarch32)
|
||||||
endif
|
endif
|
||||||
ENABLE_SVE_FOR_SWD := 0
|
ENABLE_SVE_FOR_SWD := 0
|
||||||
|
|
||||||
|
# Default SVE vector length to maximum architected value
|
||||||
|
SVE_VECTOR_LEN := 2048
|
||||||
|
|
||||||
# SME defaults to disabled
|
# SME defaults to disabled
|
||||||
ENABLE_SME_FOR_NS := 0
|
ENABLE_SME_FOR_NS := 0
|
||||||
ENABLE_SME_FOR_SWD := 0
|
ENABLE_SME_FOR_SWD := 0
|
||||||
|
|
Loading…
Add table
Reference in a new issue