fix(runtime): disable MTE on id_aa64pfr1_el1 read
Read from id_aa64pfr1_el1 register clears Memory Tagging Extension bits.
Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com>
Change-Id: I94be29ac94d52bddb5c6e4dd0906cd4c7d8bfc0c
diff --git a/runtime/core/sysregs.c b/runtime/core/sysregs.c
index 7a55e9a..c45b474 100644
--- a/runtime/core/sysregs.c
+++ b/runtime/core/sysregs.c
@@ -97,6 +97,15 @@
MASK(ID_AA64PFR0_EL1_SVE)
/*
+ * ID_AA64PFR1_EL1:
+ *
+ * Cleared fields:
+ * - Memory Tagging Extension is not implemented
+ */
+#define ID_AA64PFR1_EL1_CLEAR \
+ MASK(ID_AA64PFR1_EL1_MTE)
+
+/*
* Handle ID_AA64XXX<n>_EL1 instructions
*/
static bool handle_id_sysreg_trap(struct rec *rec,
@@ -163,7 +172,7 @@
value = SYSREG_READ_CLEAR(PFR0);
break;
SYSREG_CASE(PFR1)
- value = SYSREG_READ(PFR1);
+ value = SYSREG_READ_CLEAR(PFR1);
break;
/*
* TODO: not supported without SVE: