refactor(lib/arch): add macro to update SIMD related trap fields
Add macro SIMD_ENABLE_CPTR_FLAGS, SIMD_DISABLE_ALL_CPTR_FLAGS to update
SIMD related fields in the value used to write CPTR_EL2 register.
Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com>
Change-Id: Ib820dd94cc5e294ec3a2f5c269bd473f4441903b
diff --git a/lib/arch/include/arch.h b/lib/arch/include/arch.h
index 8d0ed42..c236e15 100644
--- a/lib/arch/include/arch.h
+++ b/lib/arch/include/arch.h
@@ -780,6 +780,10 @@
#define CPTR_EL2_VHE_SMEN_TRAP_ALL_00 UL(0x0)
#define CPTR_EL2_VHE_SMEN_NO_TRAP_11 UL(0x3)
+#define CPTR_EL2_VHE_SIMD_MASK (MASK(CPTR_EL2_VHE_FPEN) | \
+ MASK(CPTR_EL2_VHE_ZEN) | \
+ MASK(CPTR_EL2_VHE_SMEN))
+
/* Trap all AMU, trace, FPU, SVE, SME accesses */
#define CPTR_EL2_VHE_INIT ((CPTR_EL2_VHE_ZEN_TRAP_ALL_00 << \
CPTR_EL2_VHE_ZEN_SHIFT) | \
diff --git a/lib/arch/include/simd.h b/lib/arch/include/simd.h
index 4b7bb41..c3c7a02 100644
--- a/lib/arch/include/simd.h
+++ b/lib/arch/include/simd.h
@@ -218,6 +218,41 @@
}
/*
+ * Enable SIMD related flags like FPEN, ZEN, SMEN in 'cptr_val' based on SIMD
+ * configuration.
+ */
+#define SIMD_ENABLE_CPTR_FLAGS(simd_cfg, cptr_val) \
+ do { \
+ (cptr_val) &= ~(CPTR_EL2_VHE_SIMD_MASK); \
+ \
+ (cptr_val) |= INPLACE(CPTR_EL2_VHE_FPEN, \
+ CPTR_EL2_VHE_FPEN_NO_TRAP_11); \
+ \
+ if ((simd_cfg)->sve_en) { \
+ (cptr_val) |= INPLACE(CPTR_EL2_VHE_ZEN, \
+ CPTR_EL2_VHE_ZEN_NO_TRAP_11); \
+ } \
+ \
+ if ((simd_cfg)->sme_en) { \
+ (cptr_val) |= INPLACE(CPTR_EL2_VHE_SMEN, \
+ CPTR_EL2_VHE_SMEN_NO_TRAP_11); \
+ } \
+ } while (false)
+
+/* Disable all SIMD related flags like FPEN, ZEN, SMEN in 'cptr_val' */
+#define SIMD_DISABLE_ALL_CPTR_FLAGS(cptr_val) \
+ do { \
+ (cptr_val) &= ~(CPTR_EL2_VHE_SIMD_MASK); \
+ \
+ (cptr_val) |= INPLACE(CPTR_EL2_VHE_FPEN, \
+ CPTR_EL2_VHE_FPEN_TRAP_ALL_00) | \
+ INPLACE(CPTR_EL2_VHE_ZEN, \
+ CPTR_EL2_VHE_ZEN_TRAP_ALL_00) | \
+ INPLACE(CPTR_EL2_VHE_SMEN, \
+ CPTR_EL2_VHE_SMEN_TRAP_ALL_00); \
+ } while (false)
+
+/*
* RMM support to use SIMD (FPU) at REL2
*/
#ifdef RMM_FPU_USE_AT_REL2