[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/14] target/arm: Suppress more TCG unimplemented features in ID
From: |
Peter Maydell |
Subject: |
[PULL 12/14] target/arm: Suppress more TCG unimplemented features in ID registers |
Date: |
Thu, 6 Jul 2023 14:25:10 +0100 |
We already squash the ID register field for FEAT_SPE (the Statistical
Profiling Extension) because TCG does not implement it and if we
advertise it to the guest the guest will crash trying to look at
non-existent system registers. Do the same for some other features
which a real hardware Neoverse-V1 implements but which TCG doesn't:
* FEAT_TRF (Self-hosted Trace Extension)
* Trace Macrocell system register access
* Memory mapped trace
* FEAT_AMU (Activity Monitors Extension)
* FEAT_MPAM (Memory Partitioning and Monitoring Extension)
* FEAT_NV (Nested Virtualization)
Most of these, like FEAT_SPE, are "introspection/trace" type features
which QEMU is unlikely to ever implement. The odd-one-out here is
FEAT_NV -- we could implement that and at some point we probably
will.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20230704130647.2842917-2-peter.maydell@linaro.org
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
target/arm/cpu.c | 33 +++++++++++++++++++++++++++++----
1 file changed, 29 insertions(+), 4 deletions(-)
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 822efa5b2c1..69e2bde3c2d 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -2069,13 +2069,38 @@ static void arm_cpu_realizefn(DeviceState *dev, Error
**errp)
if (tcg_enabled()) {
/*
- * Don't report the Statistical Profiling Extension in the ID
- * registers, because TCG doesn't implement it yet (not even a
- * minimal stub version) and guests will fall over when they
- * try to access the non-existent system registers for it.
+ * Don't report some architectural features in the ID registers
+ * where TCG does not yet implement it (not even a minimal
+ * stub version). This avoids guests falling over when they
+ * try to access the non-existent system registers for them.
*/
+ /* FEAT_SPE (Statistical Profiling Extension) */
cpu->isar.id_aa64dfr0 =
FIELD_DP64(cpu->isar.id_aa64dfr0, ID_AA64DFR0, PMSVER, 0);
+ /* FEAT_TRF (Self-hosted Trace Extension) */
+ cpu->isar.id_aa64dfr0 =
+ FIELD_DP64(cpu->isar.id_aa64dfr0, ID_AA64DFR0, TRACEFILT, 0);
+ cpu->isar.id_dfr0 =
+ FIELD_DP32(cpu->isar.id_dfr0, ID_DFR0, TRACEFILT, 0);
+ /* Trace Macrocell system register access */
+ cpu->isar.id_aa64dfr0 =
+ FIELD_DP64(cpu->isar.id_aa64dfr0, ID_AA64DFR0, TRACEVER, 0);
+ cpu->isar.id_dfr0 =
+ FIELD_DP32(cpu->isar.id_dfr0, ID_DFR0, COPTRC, 0);
+ /* Memory mapped trace */
+ cpu->isar.id_dfr0 =
+ FIELD_DP32(cpu->isar.id_dfr0, ID_DFR0, MMAPTRC, 0);
+ /* FEAT_AMU (Activity Monitors Extension) */
+ cpu->isar.id_aa64pfr0 =
+ FIELD_DP64(cpu->isar.id_aa64pfr0, ID_AA64PFR0, AMU, 0);
+ cpu->isar.id_pfr0 =
+ FIELD_DP32(cpu->isar.id_pfr0, ID_PFR0, AMU, 0);
+ /* FEAT_MPAM (Memory Partitioning and Monitoring Extension) */
+ cpu->isar.id_aa64pfr0 =
+ FIELD_DP64(cpu->isar.id_aa64pfr0, ID_AA64PFR0, MPAM, 0);
+ /* FEAT_NV (Nested Virtualization) */
+ cpu->isar.id_aa64mmfr2 =
+ FIELD_DP64(cpu->isar.id_aa64mmfr2, ID_AA64MMFR2, NV, 0);
}
/* MPU can be configured out of a PMSA CPU either by setting has-mpu
--
2.34.1
- [PULL v2 00/14] target-arm queue, Peter Maydell, 2023/07/06
- [PULL 02/14] hw/arm/sbsa-ref: use XHCI to replace EHCI, Peter Maydell, 2023/07/06
- [PULL 01/14] target/arm: Add raw_writes ops for register whose write induce TLB maintenance, Peter Maydell, 2023/07/06
- [PULL 08/14] tests/qtest: xlnx-canfd-test: Fix code coverity issues, Peter Maydell, 2023/07/06
- [PULL 13/14] target/arm: Define neoverse-v1, Peter Maydell, 2023/07/06
- [PULL 06/14] target/arm: Fix SME full tile indexing, Peter Maydell, 2023/07/06
- [PULL 10/14] hw: arm: allwinner-sramc: Set class_size, Peter Maydell, 2023/07/06
- [PULL 09/14] target/arm: gdbstub: Guard M-profile code with CONFIG_TCG, Peter Maydell, 2023/07/06
- [PULL 12/14] target/arm: Suppress more TCG unimplemented features in ID registers,
Peter Maydell <=
- [PULL 05/14] target/arm: Dump ZA[] when active, Peter Maydell, 2023/07/06
- [PULL 07/14] target/arm: Handle IC IVAU to improve compatibility with JITs, Peter Maydell, 2023/07/06
- [PULL 03/14] tests/tcg/aarch64/sysregs.c: Use S syntax for id_aa64zfr0_el1 and id_aa64smfr0_el1, Peter Maydell, 2023/07/06
- [PULL 11/14] target/xtensa: Assert that interrupt level is within bounds, Peter Maydell, 2023/07/06
- [PULL 04/14] target/arm: Avoid splitting Zregs across lines in dump, Peter Maydell, 2023/07/06
- [PULL 14/14] target/arm: Avoid over-length shift in arm_cpu_sve_finalize() error case, Peter Maydell, 2023/07/06
- Re: [PULL v2 00/14] target-arm queue, Richard Henderson, 2023/07/06