[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 07/25] target/arm: Add ARM_CP_SME
From: |
Peter Maydell |
Subject: |
[PULL 07/25] target/arm: Add ARM_CP_SME |
Date: |
Mon, 27 Jun 2022 11:22:18 +0100 |
From: Richard Henderson <richard.henderson@linaro.org>
This will be used for controlling access to SME cpregs.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20220620175235.60881-5-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/cpregs.h | 5 +++++
target/arm/translate-a64.c | 18 ++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h
index d9b678c2f17..d30758ee713 100644
--- a/target/arm/cpregs.h
+++ b/target/arm/cpregs.h
@@ -113,6 +113,11 @@ enum {
ARM_CP_EL3_NO_EL2_UNDEF = 1 << 16,
ARM_CP_EL3_NO_EL2_KEEP = 1 << 17,
ARM_CP_EL3_NO_EL2_C_NZ = 1 << 18,
+ /*
+ * Flag: Access check for this sysreg is constrained by the
+ * ARM pseudocode function CheckSMEAccess().
+ */
+ ARM_CP_SME = 1 << 19,
};
/*
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
index 9a285dd1774..8f609f46b6a 100644
--- a/target/arm/translate-a64.c
+++ b/target/arm/translate-a64.c
@@ -1187,6 +1187,22 @@ bool sve_access_check(DisasContext *s)
return fp_access_check(s);
}
+/*
+ * Check that SME access is enabled, raise an exception if not.
+ * Note that this function corresponds to CheckSMEAccess and is
+ * only used directly for cpregs.
+ */
+static bool sme_access_check(DisasContext *s)
+{
+ if (s->sme_excp_el) {
+ gen_exception_insn_el(s, s->pc_curr, EXCP_UDEF,
+ syn_smetrap(SME_ET_AccessTrap, false),
+ s->sme_excp_el);
+ return false;
+ }
+ return true;
+}
+
/*
* This utility function is for doing register extension with an
* optional shift. You will likely want to pass a temporary for the
@@ -1958,6 +1974,8 @@ static void handle_sys(DisasContext *s, uint32_t insn,
bool isread,
return;
} else if ((ri->type & ARM_CP_SVE) && !sve_access_check(s)) {
return;
+ } else if ((ri->type & ARM_CP_SME) && !sme_access_check(s)) {
+ return;
}
if ((tb_cflags(s->base.tb) & CF_USE_ICOUNT) && (ri->type & ARM_CP_IO)) {
--
2.25.1
- [PULL 00/25] target-arm queue, Peter Maydell, 2022/06/27
- [PULL 07/25] target/arm: Add ARM_CP_SME,
Peter Maydell <=
- [PULL 02/25] accel: Introduce current_accel_name(), Peter Maydell, 2022/06/27
- [PULL 10/25] target/arm: Add SMIDR_EL1, SMPRI_EL1, SMPRIMAP_EL2, Peter Maydell, 2022/06/27
- [PULL 04/25] target/arm: Implement TPIDR2_EL0, Peter Maydell, 2022/06/27
- [PULL 06/25] target/arm: Add syn_smetrap, Peter Maydell, 2022/06/27
- [PULL 11/25] target/arm: Add PSTATE.{SM,ZA} to TB flags, Peter Maydell, 2022/06/27
- [PULL 12/25] target/arm: Add the SME ZA storage to CPUARMState, Peter Maydell, 2022/06/27
- [PULL 16/25] target/arm: Generalize cpu_arm_{get,set}_vq, Peter Maydell, 2022/06/27
- [PULL 15/25] target/arm: Create ARMVQMap, Peter Maydell, 2022/06/27
- [PULL 05/25] target/arm: Add SMEEXC_EL to TB flags, Peter Maydell, 2022/06/27
- [PULL 09/25] target/arm: Add SMCR_ELx, Peter Maydell, 2022/06/27