Add a KVM-only named CPU model for Neoverse V2 r0p1 (TRM 102375), inheriting from neoverse-v2-v1 (r0p0).
r0p1 only changes MIDR_EL1.Revision and adds FEAT_ECBHB (ID_AA64MMFR1_EL1.ECBHB). Final ID register state requested from KVM for "neoverse-v2-v2": [ 0] AIDR_EL1 = 0x0000000000000000 [ 1] CLIDR_EL1 = 0x0000000000000000 [ 2] CTR_EL0 = 0x000000009444c004 [ 3] DCZID_EL0 = 0x0000000000000004 [ 4] GMID_EL1 = 0x0000000000000000 [ 5] ID_AA64AFR0_EL1 = 0x0000000000000000 [ 6] ID_AA64AFR1_EL1 = 0x0000000000000000 [ 7] ID_AA64DFR0_EL1 = 0x000000f010305009 [ 8] ID_AA64DFR1_EL1 = 0x0000000000000000 [ 9] ID_AA64DFR2_EL1 = 0x0000000000000000 [ 10] ID_AA64FPFR0_EL1 = 0x0000000000000000 [ 11] ID_AA64ISAR0_EL1 = 0x0221100010210000 [ 12] ID_AA64ISAR1_EL1 = 0x0011111101211052 [ 13] ID_AA64ISAR2_EL1 = 0x0000000000000000 [ 14] ID_AA64ISAR3_EL1 = 0x0000000000000000 [ 15] ID_AA64MMFR0_EL1 = 0x0000011100101125 [ 16] ID_AA64MMFR1_EL1 = 0x1000000010312122 [ 17] ID_AA64MMFR2_EL1 = 0x1221011110001011 [ 18] ID_AA64MMFR3_EL1 = 0x0000000000000000 [ 19] ID_AA64MMFR4_EL1 = 0x0000000000000000 [ 20] ID_AA64PFR0_EL1 = 0x1101000120110011 [ 21] ID_AA64PFR1_EL1 = 0x0000000000000021 [ 22] ID_AA64PFR2_EL1 = 0x0000000000000000 [ 23] ID_AA64SMFR0_EL1 = 0x0000000000000000 [ 24] ID_AA64ZFR0_EL1 = 0x0000100000110001 [ 25] ID_AFR0_EL1 = 0x0000000000000000 [ 26] ID_DFR0_EL1 = 0x0000000000000000 [ 27] ID_DFR1_EL1 = 0x0000000000000000 [ 28] ID_ISAR0_EL1 = 0x0000000000000000 [ 29] ID_ISAR1_EL1 = 0x0000000000000000 [ 30] ID_ISAR2_EL1 = 0x0000000000000000 [ 31] ID_ISAR3_EL1 = 0x0000000000000000 [ 32] ID_ISAR4_EL1 = 0x0000000000000000 [ 33] ID_ISAR5_EL1 = 0x0000000000000000 [ 34] ID_ISAR6_EL1 = 0x0000000000000000 [ 35] ID_MMFR0_EL1 = 0x0000000000000000 [ 36] ID_MMFR1_EL1 = 0x0000000000000000 [ 37] ID_MMFR2_EL1 = 0x0000000000000000 [ 38] ID_MMFR3_EL1 = 0x0000000000000000 [ 39] ID_MMFR4_EL1 = 0x0000000000000000 [ 40] ID_MMFR5_EL1 = 0x0000000000000000 [ 41] ID_PFR0_EL1 = 0x0000000000000000 [ 42] ID_PFR1_EL1 = 0x0000000000000000 [ 43] ID_PFR2_EL1 = 0x0000000000000000 [ 44] MIDR_EL1 = 0x00000000410fd4f1 [ 45] MPIDR_EL1 = 0x0000000080000000 [ 46] MVFR0_EL1 = 0x0000000000000000 [ 47] MVFR1_EL1 = 0x0000000000000000 [ 48] MVFR2_EL1 = 0x0000000000000000 [ 49] REVIDR_EL1 = 0x0000000000000000 [ 50] SMIDR_EL1 = 0x0000000000000000 Signed-off-by: Khushit Shah <[email protected]> --- hw/arm/virt.c | 1 + target/arm/cpu-models.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index f5a8ea1145..90e818690c 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -4147,6 +4147,7 @@ static GPtrArray *virt_get_valid_cpu_types(const MachineState *ms) if (kvm_enabled() && target_aarch64()) { g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("arm-v9.0-a-v1"))); g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("neoverse-v2-v1"))); + g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("neoverse-v2-v2"))); } if (target_aarch64()) { g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("cortex-a53"))); diff --git a/target/arm/cpu-models.c b/target/arm/cpu-models.c index 2de67f353b..af60924953 100644 --- a/target/arm/cpu-models.c +++ b/target/arm/cpu-models.c @@ -16,6 +16,7 @@ * Current Hierarchy: * arm-v9.0-a-v1 * neoverse-v2-v1 (r0p0) + * neoverse-v2-v2 (r0p1) * SPDX-License-Identifier: GPL-2.0-or-later */ @@ -212,9 +213,21 @@ static const ArmModelPropValue neoverse_v2_v1_props[] = { MODEL_PROP_END }; +/* Neoverse V2 CPU model (TRM 102375, r0p1), inherits from neoverse-v2-v1. */ +static const ArmModelPropValue neoverse_v2_v2_props[] = { + /* MIDR_EL1 */ + MODEL_PROP("SYSREG_MIDR_EL1_Revision", NUM, 0x1), /* r0p1 */ + + /* ID_AA64MMFR1_EL1 */ + MODEL_PROP("SYSREG_ID_AA64MMFR1_EL1_ECBHB", NUM, 1), /* FEAT_ECBHB */ + + MODEL_PROP_END, +}; + static const ArmNamedCpuModel arm_cpu_models[] = { {"arm-v9.0-a-v1", NULL, arm_v9_0_a_v1_props}, {"neoverse-v2-v1", "arm-v9.0-a-v1", neoverse_v2_v1_props}, + {"neoverse-v2-v2", "neoverse-v2-v1", neoverse_v2_v2_props}, {NULL, NULL, NULL} }; -- 2.52.0
