Signed-off-by: Mohamed Mediouni <[email protected]>
---
 target/arm/hvf/hvf.c        | 77 +++++++++++--------------------------
 target/arm/hvf/sysreg.c.inc | 14 +++----
 2 files changed, 29 insertions(+), 62 deletions(-)

diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c
index 2cb4c4aa4e..4630d76930 100644
--- a/target/arm/hvf/hvf.c
+++ b/target/arm/hvf/hvf.c
@@ -481,7 +481,9 @@ static const struct hvf_reg_match hvf_sme2_preg_match[] = {
 
 #define DEF_SYSREG(HVF_ID, ...) \
   QEMU_BUILD_BUG_ON(HVF_ID != KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS__)));
-#define DEF_SYSREG_15_02(...)
+
+#define DEF_SYSREG_SME2(HVF_ID, ...) \
+  QEMU_BUILD_BUG_ON(HVF_ID != KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS__)));
 
 #define DEF_SYSREG_EL2(HVF_ID, ...) \
   QEMU_BUILD_BUG_ON(HVF_ID != KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS__)));
@@ -495,13 +497,13 @@ static const struct hvf_reg_match hvf_sme2_preg_match[] = 
{
 #include "sysreg.c.inc"
 
 #undef DEF_SYSREG
-#undef DEF_SYSREG_15_02
+#undef DEF_SYSREG_SME2
 #undef DEF_SYSREG_EL2
 #undef DEF_SYSREG_VGIC
 #undef DEF_SYSREG_VGIC_EL2
 
 #define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2)  {HVF_ID},
-#define DEF_SYSREG_15_02(...)
+#define DEF_SYSREG_SME2(HVF_ID, op0, op1, crn, crm, op2)  {HVF_ID, .sme2 = 
true},
 #define DEF_SYSREG_EL2(HVF_ID, op0, op1, crn, crm, op2)  {HVF_ID, .el2 = true},
 #define DEF_SYSREG_VGIC(HVF_ID, op0, op1, crn, crm, op2)  {HVF_ID, .vgic = 
true},
 #define DEF_SYSREG_VGIC_EL2(HVF_ID, op0, op1, crn, crm, op2)  {HVF_ID, true, 
true},
@@ -510,6 +512,7 @@ struct hvf_sreg {
     hv_sys_reg_t sreg;
     bool vgic;
     bool el2;
+    bool sme2;
 };
 
 static struct hvf_sreg hvf_sreg_list[] = {
@@ -517,30 +520,13 @@ static struct hvf_sreg hvf_sreg_list[] = {
 };
 
 #undef DEF_SYSREG
-#undef DEF_SYSREG_15_02
+#undef DEF_SYSREG_SME2
 #undef DEF_SYSREG_EL2
 #undef DEF_SYSREG_VGIC
 #undef DEF_SYSREG_VGIC_EL2
 
 #pragma clang diagnostic pop
 
-#define DEF_SYSREG(...)
-#define DEF_SYSREG_15_02(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID},
-#define DEF_SYSREG_EL2(...)
-#define DEF_SYSREG_VGIC(...)
-#define DEF_SYSREG_VGIC_EL2(...)
-
-API_AVAILABLE(macos(15.2))
-static struct hvf_sreg hvf_sreg_list_sme2[] = {
-#include "sysreg.c.inc"
-};
-
-#undef DEF_SYSREG
-#undef DEF_SYSREG_15_02
-#undef DEF_SYSREG_EL2
-#undef DEF_SYSREG_VGIC
-#undef DEF_SYSREG_VGIC_EL2
-
 /*
  * For FEAT_SME2 migration, we need to store PSTATE.{SM,ZA} bits which are
  * accessible with the SVCR pseudo-register. However, in the HVF API this is
@@ -1357,23 +1343,11 @@ int hvf_arch_init_vcpu(CPUState *cpu)
     hv_return_t ret;
     int i;
 
-    if (__builtin_available(macOS 15.2, *)) {
-        if (hvf_arm_sme2_supported()) {
-            sregs_match_len += ARRAY_SIZE(hvf_sreg_list_sme2) + 1;
-        }
-
-#define DEF_SYSREG_15_02(HVF_ID, ...) \
-        g_assert(HVF_ID == KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS__)));
-#define DEF_SYSREG(...)
-#define DEF_SYSREG_EL2(...)
-#define DEF_SYSREG_VGIC(...)
-#define DEF_SYSREG_VGIC_EL2(...)
-
-#include "sysreg.c.inc"
-
-#undef DEF_SYSREG
-#undef DEF_SYSREG_15_02
+    if (hvf_arm_sme2_supported()) {
+        /* SVCR will be added at the end. */
+        sregs_match_len += 1;
     }
+
     env->aarch64 = true;
 
     /* system count frequency sanity check */
@@ -1408,31 +1382,24 @@ int hvf_arch_init_vcpu(CPUState *cpu)
             continue;
         }
 
+        if (hvf_sreg_list[i].sme2 && !hvf_arm_sme2_supported()) {
+            continue;
+        }
+
         if (ri) {
             assert(!(ri->type & ARM_CP_NO_RAW));
             arm_cpu->cpreg_indexes[sregs_cnt++] = kvm_id;
         }
     }
-    if (__builtin_available(macOS 15.2, *)) {
-        if (hvf_arm_sme2_supported()) {
-            for (i = 0; i < ARRAY_SIZE(hvf_sreg_list_sme2); i++) {
-                hv_sys_reg_t hvf_id = hvf_sreg_list_sme2[i].sreg;
-                uint64_t kvm_id = HVF_TO_KVMID(hvf_id);
-                uint32_t key = kvm_to_cpreg_id(kvm_id);
-                const ARMCPRegInfo *ri = get_arm_cp_reginfo(arm_cpu->cp_regs, 
key);
 
-                if (ri) {
-                    assert(!(ri->type & ARM_CP_NO_RAW));
-                    arm_cpu->cpreg_indexes[sregs_cnt++] = kvm_id;
-                }
-            }
-            /*
-             * Add SVCR last. It is elsewhere assumed its index is after
-             * hvf_sreg_list and hvf_sreg_list_sme2.
-             */
-            arm_cpu->cpreg_indexes[sregs_cnt++] = HVF_TO_KVMID(SVCR);
-        }
+    if (hvf_arm_sme2_supported()) {
+        /*
+         * Add SVCR last. It is elsewhere assumed its index is after
+         * hvf_sreg_list.
+         */
+        arm_cpu->cpreg_indexes[sregs_cnt++] = HVF_TO_KVMID(SVCR);
     }
+
     arm_cpu->cpreg_array_len = sregs_cnt;
     arm_cpu->cpreg_vmstate_array_len = sregs_cnt;
 
diff --git a/target/arm/hvf/sysreg.c.inc b/target/arm/hvf/sysreg.c.inc
index c11dbf274e..2d29c2feec 100644
--- a/target/arm/hvf/sysreg.c.inc
+++ b/target/arm/hvf/sysreg.c.inc
@@ -146,13 +146,13 @@ DEF_SYSREG(HV_SYS_REG_CNTV_CTL_EL0, 3, 3, 14, 3, 1)
 DEF_SYSREG(HV_SYS_REG_CNTV_CVAL_EL0, 3, 3, 14, 3, 2)
 DEF_SYSREG(HV_SYS_REG_SP_EL1, 3, 4, 4, 1, 0)
 
-DEF_SYSREG_15_02(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6)
-DEF_SYSREG_15_02(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4)
-DEF_SYSREG_15_02(HV_SYS_REG_TPIDR2_EL0, 3, 3, 13, 0, 5)
-DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64ZFR0_EL1, 3, 0, 0, 4, 4)
-DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64SMFR0_EL1, 3, 0, 0, 4, 5)
-DEF_SYSREG_15_02(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4)
-DEF_SYSREG_15_02(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6)
+DEF_SYSREG_SME2(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6)
+DEF_SYSREG_SME2(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4)
+DEF_SYSREG_SME2(HV_SYS_REG_TPIDR2_EL0, 3, 3, 13, 0, 5)
+DEF_SYSREG_SME2(HV_SYS_REG_ID_AA64ZFR0_EL1, 3, 0, 0, 4, 4)
+DEF_SYSREG_SME2(HV_SYS_REG_ID_AA64SMFR0_EL1, 3, 0, 0, 4, 5)
+DEF_SYSREG_SME2(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4)
+DEF_SYSREG_SME2(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6)
 /*
  * Block these because of the same issue as virtual counters in
  * that caused the revert in 28b0ed32b32c7e5094cf2f1ec9c0645c65fad2aa
-- 
2.50.1 (Apple Git-155)


Reply via email to