SET_IDREG(&cpu->isar, ID_AA64MMFR0, t);
}
-static void aarch64_a57_initfn(Object *obj)
+static void aarch64_aa32_a57_init(Object *obj, bool aa32_only)
{
ARMCPU *cpu = ARM_CPU(obj);
ARMISARegisters *isar = &cpu->isar;
+ const bool aarch64_enabled = !aa32_only;
cpu->dtb_compatible = "arm,cortex-a57";
set_feature(&cpu->env, ARM_FEATURE_V8);
set_feature(&cpu->env, ARM_FEATURE_NEON);
set_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER);
set_feature(&cpu->env, ARM_FEATURE_BACKCOMPAT_CNTFRQ);
- set_feature(&cpu->env, ARM_FEATURE_AARCH64);
+ if (aarch64_enabled) {
+ set_feature(&cpu->env, ARM_FEATURE_AARCH64);
+ }
set_feature(&cpu->env, ARM_FEATURE_CBAR_RO);
set_feature(&cpu->env, ARM_FEATURE_EL2);
set_feature(&cpu->env, ARM_FEATURE_EL3);
SET_IDREG(isar, ID_ISAR4, 0x00011142);
SET_IDREG(isar, ID_ISAR5, 0x00011121);
SET_IDREG(isar, ID_ISAR6, 0);
- SET_IDREG(isar, ID_AA64PFR0, 0x00002222);
- SET_IDREG(isar, ID_AA64DFR0, 0x10305106);
- SET_IDREG(isar, ID_AA64ISAR0, 0x00011120);
- SET_IDREG(isar, ID_AA64MMFR0, 0x00001124);
+ if (aarch64_enabled) {
+ SET_IDREG(isar, ID_AA64PFR0, 0x00002222);
+ SET_IDREG(isar, ID_AA64DFR0, 0x10305106);
+ SET_IDREG(isar, ID_AA64ISAR0, 0x00011120);
+ SET_IDREG(isar, ID_AA64MMFR0, 0x00001124);
+ }
cpu->isar.dbgdidr = 0x3516d000;
cpu->isar.dbgdevid = 0x01110f13;
cpu->isar.dbgdevid1 = 0x2;
cpu->ccsidr[1] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 3, 64, 48 * KiB, 2);
/* 2048KB L2 cache */
cpu->ccsidr[2] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 16, 64, 2 * MiB, 7);
- set_dczid_bs(cpu, 4); /* 64 bytes */
- cpu->gic_num_lrs = 4;
- cpu->gic_vpribits = 5;
- cpu->gic_vprebits = 5;
- cpu->gic_pribits = 5;
+ if (aarch64_enabled) {
+ set_dczid_bs(cpu, 4); /* 64 bytes */
+ cpu->gic_num_lrs = 4;
+ cpu->gic_vpribits = 5;
+ cpu->gic_vprebits = 5;
+ cpu->gic_pribits = 5;
+ }
define_cortex_a72_a57_a53_cp_reginfo(cpu);
}
+static void aarch64_a57_initfn(Object *obj)
+{
+ aarch64_aa32_a57_init(obj, false);
+}
+
static void aarch64_a53_initfn(Object *obj)
{
ARMCPU *cpu = ARM_CPU(obj);
}
if (tcg_enabled() || qtest_enabled()) {
- aarch64_a57_initfn(obj);
+ aarch64_aa32_a57_init(obj, false);
}
/* '-cpu max' for TCG: we currently do this as "A57 with extra things" */