@samitouri / QOSamiQemu / commits / e5ab3ee28d

target/arm: Factor aarch64_aa32_a57_init() out

In order to make the following commit easier to review, factor aarch64_aa32_a57_init() out of aarch64_a57_initfn() as a preliminary step. We only add a %aa32_only argument to restrict AArch64 features. Suggested-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> Acked-by: Peter Maydell <peter.maydell@linaro.org> Message-Id: <20260526203722.79463-14-philmd@linaro.org>

Philippe Mathieu-Daudé committed May 15, 2026 at 11:49 UTC e5ab3ee28d8235f0975ba44e477fcc3915163c02
1 file changed +24 -12
target/arm/cpu64.c
+24 -12
@@ -686,17 +686,20 @@ void aarch64_cpu_lpa2_finalize(ARMCPU *cpu, Error **errp)
686 SET_IDREG(&cpu->isar, ID_AA64MMFR0, t);
687 }
688
689 -static void aarch64_a57_initfn(Object *obj)
689 +static void aarch64_aa32_a57_init(Object *obj, bool aa32_only)
690 {
691 ARMCPU *cpu = ARM_CPU(obj);
692 ARMISARegisters *isar = &cpu->isar;
693 + const bool aarch64_enabled = !aa32_only;
694
695 cpu->dtb_compatible = "arm,cortex-a57";
696 set_feature(&cpu->env, ARM_FEATURE_V8);
697 set_feature(&cpu->env, ARM_FEATURE_NEON);
698 set_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER);
699 set_feature(&cpu->env, ARM_FEATURE_BACKCOMPAT_CNTFRQ);
699 - set_feature(&cpu->env, ARM_FEATURE_AARCH64);
700 + if (aarch64_enabled) {
701 + set_feature(&cpu->env, ARM_FEATURE_AARCH64);
702 + }
703 set_feature(&cpu->env, ARM_FEATURE_CBAR_RO);
704 set_feature(&cpu->env, ARM_FEATURE_EL2);
705 set_feature(&cpu->env, ARM_FEATURE_EL3);
@@ -727,10 +730,12 @@ static void aarch64_a57_initfn(Object *obj)
730 SET_IDREG(isar, ID_ISAR4, 0x00011142);
731 SET_IDREG(isar, ID_ISAR5, 0x00011121);
732 SET_IDREG(isar, ID_ISAR6, 0);
730 - SET_IDREG(isar, ID_AA64PFR0, 0x00002222);
731 - SET_IDREG(isar, ID_AA64DFR0, 0x10305106);
732 - SET_IDREG(isar, ID_AA64ISAR0, 0x00011120);
733 - SET_IDREG(isar, ID_AA64MMFR0, 0x00001124);
733 + if (aarch64_enabled) {
734 + SET_IDREG(isar, ID_AA64PFR0, 0x00002222);
735 + SET_IDREG(isar, ID_AA64DFR0, 0x10305106);
736 + SET_IDREG(isar, ID_AA64ISAR0, 0x00011120);
737 + SET_IDREG(isar, ID_AA64MMFR0, 0x00001124);
738 + }
739 cpu->isar.dbgdidr = 0x3516d000;
740 cpu->isar.dbgdevid = 0x01110f13;
741 cpu->isar.dbgdevid1 = 0x2;
@@ -742,14 +747,21 @@ static void aarch64_a57_initfn(Object *obj)
747 cpu->ccsidr[1] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 3, 64, 48 * KiB, 2);
748 /* 2048KB L2 cache */
749 cpu->ccsidr[2] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 16, 64, 2 * MiB, 7);
745 - set_dczid_bs(cpu, 4); /* 64 bytes */
746 - cpu->gic_num_lrs = 4;
747 - cpu->gic_vpribits = 5;
748 - cpu->gic_vprebits = 5;
749 - cpu->gic_pribits = 5;
750 + if (aarch64_enabled) {
751 + set_dczid_bs(cpu, 4); /* 64 bytes */
752 + cpu->gic_num_lrs = 4;
753 + cpu->gic_vpribits = 5;
754 + cpu->gic_vprebits = 5;
755 + cpu->gic_pribits = 5;
756 + }
757 define_cortex_a72_a57_a53_cp_reginfo(cpu);
758 }
759
760 +static void aarch64_a57_initfn(Object *obj)
761 +{
762 + aarch64_aa32_a57_init(obj, false);
763 +}
764 +
765 static void aarch64_a53_initfn(Object *obj)
766 {
767 ARMCPU *cpu = ARM_CPU(obj);
@@ -886,7 +898,7 @@ static void aarch64_max_initfn(Object *obj)
898 }
899
900 if (tcg_enabled() || qtest_enabled()) {
889 - aarch64_a57_initfn(obj);
901 + aarch64_aa32_a57_init(obj, false);
902 }
903
904 /* '-cpu max' for TCG: we currently do this as "A57 with extra things" */