aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMadhukar Pappireddy <madhukar.pappireddy@arm.com>2022-12-06 16:58:27 +0100
committerTrustedFirmware Code Review <review@review.trustedfirmware.org>2022-12-06 16:58:27 +0100
commit69b18fe71ea8aa0334ff9fb641dc68a4b2def6c8 (patch)
treecc0d3574c8bf21ccb5ca9e93e1d3b3121450c53b
parent4ca852f826e4b1e43739493c4d0916a426a8722a (diff)
parent41bce21cb52e088f988ca2a5a5d67c0fa3ba049c (diff)
downloadtf-a-tests-69b18fe71ea8aa0334ff9fb641dc68a4b2def6c8.tar.gz
Merge "feat(spe): add support for more SPE versions"
-rw-r--r--include/lib/aarch64/arch.h12
-rw-r--r--include/lib/aarch64/arch_features.h6
-rw-r--r--tftf/tests/extensions/spe/test_spe.c28
3 files changed, 17 insertions, 29 deletions
diff --git a/include/lib/aarch64/arch.h b/include/lib/aarch64/arch.h
index e436e6bc7..d0607f1a3 100644
--- a/include/lib/aarch64/arch.h
+++ b/include/lib/aarch64/arch.h
@@ -152,9 +152,15 @@
#define ID_AA64PFR0_FEAT_RME_V1 U(1)
/* ID_AA64DFR0_EL1.PMS definitions (for ARMv8.2+) */
-#define ID_AA64DFR0_PMS_SHIFT U(32)
-#define ID_AA64DFR0_PMS_LENGTH U(4)
-#define ID_AA64DFR0_PMS_MASK ULL(0xf)
+#define ID_AA64DFR0_PMS_SHIFT U(32)
+#define ID_AA64DFR0_PMS_LENGTH U(4)
+#define ID_AA64DFR0_PMS_MASK ULL(0xf)
+#define ID_AA64DFR0_SPE_NOT_SUPPORTED U(0)
+#define ID_AA64DFR0_SPE U(1)
+#define ID_AA64DFR0_SPE_V1P1 U(2)
+#define ID_AA64DFR0_SPE_V1P2 U(3)
+#define ID_AA64DFR0_SPE_V1P3 U(4)
+#define ID_AA64DFR0_SPE_V1P4 U(5)
/* ID_AA64DFR0_EL1.DEBUG definitions */
#define ID_AA64DFR0_DEBUG_SHIFT U(0)
diff --git a/include/lib/aarch64/arch_features.h b/include/lib/aarch64/arch_features.h
index 761a42eee..705d98fb5 100644
--- a/include/lib/aarch64/arch_features.h
+++ b/include/lib/aarch64/arch_features.h
@@ -198,4 +198,10 @@ static inline bool is_feat_rng_trap_present(void)
== ID_AA64PFR1_EL1_RNG_TRAP_SUPPORTED);
}
+static inline unsigned int spe_get_version(void)
+{
+ return (unsigned int)((read_id_aa64dfr0_el1() >> ID_AA64DFR0_PMS_SHIFT) &
+ ID_AA64DFR0_PMS_MASK);
+}
+
#endif /* ARCH_FEATURES_H */
diff --git a/tftf/tests/extensions/spe/test_spe.c b/tftf/tests/extensions/spe/test_spe.c
index 8b18654f9..d0d89ef50 100644
--- a/tftf/tests/extensions/spe/test_spe.c
+++ b/tftf/tests/extensions/spe/test_spe.c
@@ -6,39 +6,15 @@
#include <test_helpers.h>
-#ifdef __aarch64__
-/*
- * Get SPE version value from id_aa64dfr0_el1.
- * Return values
- * ID_AA64DFR0_SPE_NOT_SUPPORTED: not supported
- * ID_AA64DFR0_SPE: FEAT_SPE supported (introduced in ARM v8.2)
- * ID_AA64DFR0_SPE_V1P1: FEAT_SPEv1p1 supported (introduced in ARM v8.5)
- * ID_AA64DFR0_SPE_V1P2: FEAT_SPEv1p2 supported (introduced in ARM v8.7)
- */
-
-typedef enum {
- ID_AA64DFR0_SPE_NOT_SUPPORTED = 0,
- ID_AA64DFR0_SPE,
- ID_AA64DFR0_SPE_V1P1,
- ID_AA64DFR0_SPE_V1P2
-} spe_ver_t;
-
-static spe_ver_t spe_get_version(void)
-{
- return (spe_ver_t)((read_id_aa64dfr0_el1() >> ID_AA64DFR0_PMS_SHIFT) &
- ID_AA64DFR0_PMS_MASK);
-}
-#endif /* __aarch64__ */
-
test_result_t test_spe_support(void)
{
/* SPE is an AArch64-only feature.*/
SKIP_TEST_IF_AARCH32();
#ifdef __aarch64__
- spe_ver_t spe_ver = spe_get_version();
+ unsigned int spe_ver = spe_get_version();
- assert(spe_ver <= ID_AA64DFR0_SPE_V1P2);
+ assert(spe_ver <= ID_AA64DFR0_SPE_V1P4);
if (spe_ver == ID_AA64DFR0_SPE_NOT_SUPPORTED) {
return TEST_RESULT_SKIPPED;