mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-03-23 06:25:12 +00:00
target/arm: Move some system registers into a substructure
Create struct ARMISARegisters, to be accessed during translation. Backports commit 47576b94af5c406fc6521fb336fb5c12beeac3f8 from qemu
This commit is contained in:
parent
7087f7f398
commit
1a714e97af
|
@ -136,9 +136,9 @@ static void arm_cpu_reset(CPUState *s)
|
|||
g_hash_table_foreach(cpu->cp_regs, cp_reg_reset, cpu);
|
||||
g_hash_table_foreach(cpu->cp_regs, cp_reg_check_reset, cpu);
|
||||
env->vfp.xregs[ARM_VFP_FPSID] = cpu->reset_fpsid;
|
||||
env->vfp.xregs[ARM_VFP_MVFR0] = cpu->mvfr0;
|
||||
env->vfp.xregs[ARM_VFP_MVFR1] = cpu->mvfr1;
|
||||
env->vfp.xregs[ARM_VFP_MVFR2] = cpu->mvfr2;
|
||||
env->vfp.xregs[ARM_VFP_MVFR0] = cpu->isar.mvfr0;
|
||||
env->vfp.xregs[ARM_VFP_MVFR1] = cpu->isar.mvfr1;
|
||||
env->vfp.xregs[ARM_VFP_MVFR2] = cpu->isar.mvfr2;
|
||||
|
||||
cpu->powered_off = cpu->start_powered_off;
|
||||
s->halted = cpu->start_powered_off;
|
||||
|
@ -684,7 +684,7 @@ static int arm_cpu_realizefn(struct uc_struct *uc, DeviceState *dev, Error **err
|
|||
* registers as well. These are id_pfr1[7:4] and id_aa64pfr0[15:12].
|
||||
*/
|
||||
cpu->id_pfr1 &= ~0xf0;
|
||||
cpu->id_aa64pfr0 &= ~0xf000;
|
||||
cpu->isar.id_aa64pfr0 &= ~0xf000;
|
||||
}
|
||||
|
||||
if (!cpu->has_el2) {
|
||||
|
@ -701,7 +701,7 @@ static int arm_cpu_realizefn(struct uc_struct *uc, DeviceState *dev, Error **err
|
|||
* registers if we don't have EL2. These are id_pfr1[15:12] and
|
||||
* id_aa64pfr0_el1[11:8].
|
||||
*/
|
||||
cpu->id_aa64pfr0 &= ~0xf00;
|
||||
cpu->isar.id_aa64pfr0 &= ~0xf00;
|
||||
cpu->id_pfr1 &= ~0xf000;
|
||||
}
|
||||
|
||||
|
@ -903,8 +903,8 @@ static void arm1136_r2_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
set_feature(&cpu->env, ARM_FEATURE_CACHE_BLOCK_OPS);
|
||||
cpu->midr = 0x4107b362;
|
||||
cpu->reset_fpsid = 0x410120b4;
|
||||
cpu->mvfr0 = 0x11111111;
|
||||
cpu->mvfr1 = 0x00000000;
|
||||
cpu->isar.mvfr0 = 0x11111111;
|
||||
cpu->isar.mvfr1 = 0x00000000;
|
||||
cpu->ctr = 0x1dd20d2;
|
||||
cpu->reset_sctlr = 0x00050078;
|
||||
cpu->id_pfr0 = 0x111;
|
||||
|
@ -914,11 +914,11 @@ static void arm1136_r2_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr0 = 0x01130003;
|
||||
cpu->id_mmfr1 = 0x10030302;
|
||||
cpu->id_mmfr2 = 0x01222110;
|
||||
cpu->id_isar0 = 0x00140011;
|
||||
cpu->id_isar1 = 0x12002111;
|
||||
cpu->id_isar2 = 0x11231111;
|
||||
cpu->id_isar3 = 0x01102131;
|
||||
cpu->id_isar4 = 0x141;
|
||||
cpu->isar.id_isar0 = 0x00140011;
|
||||
cpu->isar.id_isar1 = 0x12002111;
|
||||
cpu->isar.id_isar2 = 0x11231111;
|
||||
cpu->isar.id_isar3 = 0x01102131;
|
||||
cpu->isar.id_isar4 = 0x141;
|
||||
cpu->reset_auxcr = 7;
|
||||
}
|
||||
|
||||
|
@ -935,8 +935,8 @@ static void arm1136_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
set_feature(&cpu->env, ARM_FEATURE_CACHE_BLOCK_OPS);
|
||||
cpu->midr = 0x4117b363;
|
||||
cpu->reset_fpsid = 0x410120b4;
|
||||
cpu->mvfr0 = 0x11111111;
|
||||
cpu->mvfr1 = 0x00000000;
|
||||
cpu->isar.mvfr0 = 0x11111111;
|
||||
cpu->isar.mvfr1 = 0x00000000;
|
||||
cpu->ctr = 0x1dd20d2;
|
||||
cpu->reset_sctlr = 0x00050078;
|
||||
cpu->id_pfr0 = 0x111;
|
||||
|
@ -946,11 +946,11 @@ static void arm1136_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr0 = 0x01130003;
|
||||
cpu->id_mmfr1 = 0x10030302;
|
||||
cpu->id_mmfr2 = 0x01222110;
|
||||
cpu->id_isar0 = 0x00140011;
|
||||
cpu->id_isar1 = 0x12002111;
|
||||
cpu->id_isar2 = 0x11231111;
|
||||
cpu->id_isar3 = 0x01102131;
|
||||
cpu->id_isar4 = 0x141;
|
||||
cpu->isar.id_isar0 = 0x00140011;
|
||||
cpu->isar.id_isar1 = 0x12002111;
|
||||
cpu->isar.id_isar2 = 0x11231111;
|
||||
cpu->isar.id_isar3 = 0x01102131;
|
||||
cpu->isar.id_isar4 = 0x141;
|
||||
cpu->reset_auxcr = 7;
|
||||
}
|
||||
|
||||
|
@ -968,8 +968,8 @@ static void arm1176_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
set_feature(&cpu->env, ARM_FEATURE_EL3);
|
||||
cpu->midr = 0x410fb767;
|
||||
cpu->reset_fpsid = 0x410120b5;
|
||||
cpu->mvfr0 = 0x11111111;
|
||||
cpu->mvfr1 = 0x00000000;
|
||||
cpu->isar.mvfr0 = 0x11111111;
|
||||
cpu->isar.mvfr1 = 0x00000000;
|
||||
cpu->ctr = 0x1dd20d2;
|
||||
cpu->reset_sctlr = 0x00050078;
|
||||
cpu->id_pfr0 = 0x111;
|
||||
|
@ -979,11 +979,11 @@ static void arm1176_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr0 = 0x01130003;
|
||||
cpu->id_mmfr1 = 0x10030302;
|
||||
cpu->id_mmfr2 = 0x01222100;
|
||||
cpu->id_isar0 = 0x0140011;
|
||||
cpu->id_isar1 = 0x12002111;
|
||||
cpu->id_isar2 = 0x11231121;
|
||||
cpu->id_isar3 = 0x01102131;
|
||||
cpu->id_isar4 = 0x01141;
|
||||
cpu->isar.id_isar0 = 0x0140011;
|
||||
cpu->isar.id_isar1 = 0x12002111;
|
||||
cpu->isar.id_isar2 = 0x11231121;
|
||||
cpu->isar.id_isar3 = 0x01102131;
|
||||
cpu->isar.id_isar4 = 0x01141;
|
||||
cpu->reset_auxcr = 7;
|
||||
}
|
||||
|
||||
|
@ -999,8 +999,8 @@ static void arm11mpcore_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
set_feature(&cpu->env, ARM_FEATURE_DUMMY_C15_REGS);
|
||||
cpu->midr = 0x410fb022;
|
||||
cpu->reset_fpsid = 0x410120b4;
|
||||
cpu->mvfr0 = 0x11111111;
|
||||
cpu->mvfr1 = 0x00000000;
|
||||
cpu->isar.mvfr0 = 0x11111111;
|
||||
cpu->isar.mvfr1 = 0x00000000;
|
||||
cpu->ctr = 0x1d192992; /* 32K icache 32K dcache */
|
||||
cpu->id_pfr0 = 0x111;
|
||||
cpu->id_pfr1 = 0x1;
|
||||
|
@ -1009,11 +1009,11 @@ static void arm11mpcore_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr0 = 0x01100103;
|
||||
cpu->id_mmfr1 = 0x10020302;
|
||||
cpu->id_mmfr2 = 0x01222000;
|
||||
cpu->id_isar0 = 0x00100011;
|
||||
cpu->id_isar1 = 0x12002111;
|
||||
cpu->id_isar2 = 0x11221011;
|
||||
cpu->id_isar3 = 0x01102131;
|
||||
cpu->id_isar4 = 0x141;
|
||||
cpu->isar.id_isar0 = 0x00100011;
|
||||
cpu->isar.id_isar1 = 0x12002111;
|
||||
cpu->isar.id_isar2 = 0x11221011;
|
||||
cpu->isar.id_isar3 = 0x01102131;
|
||||
cpu->isar.id_isar4 = 0x141;
|
||||
cpu->reset_auxcr = 1;
|
||||
}
|
||||
|
||||
|
@ -1042,13 +1042,13 @@ static void cortex_m3_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x00000000;
|
||||
cpu->id_mmfr2 = 0x00000000;
|
||||
cpu->id_mmfr3 = 0x00000000;
|
||||
cpu->id_isar0 = 0x01141110;
|
||||
cpu->id_isar1 = 0x02111000;
|
||||
cpu->id_isar2 = 0x21112231;
|
||||
cpu->id_isar3 = 0x01111110;
|
||||
cpu->id_isar4 = 0x01310102;
|
||||
cpu->id_isar5 = 0x00000000;
|
||||
cpu->id_isar6 = 0x00000000;
|
||||
cpu->isar.id_isar0 = 0x01141110;
|
||||
cpu->isar.id_isar1 = 0x02111000;
|
||||
cpu->isar.id_isar2 = 0x21112231;
|
||||
cpu->isar.id_isar3 = 0x01111110;
|
||||
cpu->isar.id_isar4 = 0x01310102;
|
||||
cpu->isar.id_isar5 = 0x00000000;
|
||||
cpu->isar.id_isar6 = 0x00000000;
|
||||
}
|
||||
|
||||
static void cortex_m4_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
||||
|
@ -1069,13 +1069,13 @@ static void cortex_m4_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x00000000;
|
||||
cpu->id_mmfr2 = 0x00000000;
|
||||
cpu->id_mmfr3 = 0x00000000;
|
||||
cpu->id_isar0 = 0x01141110;
|
||||
cpu->id_isar1 = 0x02111000;
|
||||
cpu->id_isar2 = 0x21112231;
|
||||
cpu->id_isar3 = 0x01111110;
|
||||
cpu->id_isar4 = 0x01310102;
|
||||
cpu->id_isar5 = 0x00000000;
|
||||
cpu->id_isar6 = 0x00000000;
|
||||
cpu->isar.id_isar0 = 0x01141110;
|
||||
cpu->isar.id_isar1 = 0x02111000;
|
||||
cpu->isar.id_isar2 = 0x21112231;
|
||||
cpu->isar.id_isar3 = 0x01111110;
|
||||
cpu->isar.id_isar4 = 0x01310102;
|
||||
cpu->isar.id_isar5 = 0x00000000;
|
||||
cpu->isar.id_isar6 = 0x00000000;
|
||||
}
|
||||
|
||||
static void cortex_m33_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
||||
|
@ -1098,13 +1098,13 @@ static void cortex_m33_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x00000000;
|
||||
cpu->id_mmfr2 = 0x01000000;
|
||||
cpu->id_mmfr3 = 0x00000000;
|
||||
cpu->id_isar0 = 0x01101110;
|
||||
cpu->id_isar1 = 0x02212000;
|
||||
cpu->id_isar2 = 0x20232232;
|
||||
cpu->id_isar3 = 0x01111131;
|
||||
cpu->id_isar4 = 0x01310132;
|
||||
cpu->id_isar5 = 0x00000000;
|
||||
cpu->id_isar6 = 0x00000000;
|
||||
cpu->isar.id_isar0 = 0x01101110;
|
||||
cpu->isar.id_isar1 = 0x02212000;
|
||||
cpu->isar.id_isar2 = 0x20232232;
|
||||
cpu->isar.id_isar3 = 0x01111131;
|
||||
cpu->isar.id_isar4 = 0x01310132;
|
||||
cpu->isar.id_isar5 = 0x00000000;
|
||||
cpu->isar.id_isar6 = 0x00000000;
|
||||
cpu->clidr = 0x00000000;
|
||||
cpu->ctr = 0x8000c000;
|
||||
}
|
||||
|
@ -1146,13 +1146,13 @@ static void cortex_r5_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x00000000;
|
||||
cpu->id_mmfr2 = 0x01200000;
|
||||
cpu->id_mmfr3 = 0x0211;
|
||||
cpu->id_isar0 = 0x02101111;
|
||||
cpu->id_isar1 = 0x13112111;
|
||||
cpu->id_isar2 = 0x21232141;
|
||||
cpu->id_isar3 = 0x01112131;
|
||||
cpu->id_isar4 = 0x0010142;
|
||||
cpu->id_isar5 = 0x0;
|
||||
cpu->id_isar6 = 0x0;
|
||||
cpu->isar.id_isar0 = 0x02101111;
|
||||
cpu->isar.id_isar1 = 0x13112111;
|
||||
cpu->isar.id_isar2 = 0x21232141;
|
||||
cpu->isar.id_isar3 = 0x01112131;
|
||||
cpu->isar.id_isar4 = 0x0010142;
|
||||
cpu->isar.id_isar5 = 0x0;
|
||||
cpu->isar.id_isar6 = 0x0;
|
||||
cpu->mp_is_up = true;
|
||||
define_arm_cp_regs(cpu, cortexr5_cp_reginfo);
|
||||
}
|
||||
|
@ -1186,8 +1186,8 @@ static void cortex_a8_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
set_feature(&cpu->env, ARM_FEATURE_EL3);
|
||||
cpu->midr = 0x410fc080;
|
||||
cpu->reset_fpsid = 0x410330c0;
|
||||
cpu->mvfr0 = 0x11110222;
|
||||
cpu->mvfr1 = 0x00011111;
|
||||
cpu->isar.mvfr0 = 0x11110222;
|
||||
cpu->isar.mvfr1 = 0x00011111;
|
||||
cpu->ctr = 0x82048004;
|
||||
cpu->reset_sctlr = 0x00c50078;
|
||||
cpu->id_pfr0 = 0x1031;
|
||||
|
@ -1198,11 +1198,11 @@ static void cortex_a8_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x20000000;
|
||||
cpu->id_mmfr2 = 0x01202000;
|
||||
cpu->id_mmfr3 = 0x11;
|
||||
cpu->id_isar0 = 0x00101111;
|
||||
cpu->id_isar1 = 0x12112111;
|
||||
cpu->id_isar2 = 0x21232031;
|
||||
cpu->id_isar3 = 0x11112131;
|
||||
cpu->id_isar4 = 0x00111142;
|
||||
cpu->isar.id_isar0 = 0x00101111;
|
||||
cpu->isar.id_isar1 = 0x12112111;
|
||||
cpu->isar.id_isar2 = 0x21232031;
|
||||
cpu->isar.id_isar3 = 0x11112131;
|
||||
cpu->isar.id_isar4 = 0x00111142;
|
||||
cpu->dbgdidr = 0x15141000;
|
||||
cpu->clidr = (1 << 27) | (2 << 24) | 3;
|
||||
cpu->ccsidr[0] = 0xe007e01a; /* 16k L1 dcache. */
|
||||
|
@ -1257,8 +1257,8 @@ static void cortex_a9_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
set_feature(&cpu->env, ARM_FEATURE_CBAR);
|
||||
cpu->midr = 0x410fc090;
|
||||
cpu->reset_fpsid = 0x41033090;
|
||||
cpu->mvfr0 = 0x11110222;
|
||||
cpu->mvfr1 = 0x01111111;
|
||||
cpu->isar.mvfr0 = 0x11110222;
|
||||
cpu->isar.mvfr1 = 0x01111111;
|
||||
cpu->ctr = 0x80038003;
|
||||
cpu->reset_sctlr = 0x00c50078;
|
||||
cpu->id_pfr0 = 0x1031;
|
||||
|
@ -1269,11 +1269,11 @@ static void cortex_a9_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x20000000;
|
||||
cpu->id_mmfr2 = 0x01230000;
|
||||
cpu->id_mmfr3 = 0x00002111;
|
||||
cpu->id_isar0 = 0x00101111;
|
||||
cpu->id_isar1 = 0x13112111;
|
||||
cpu->id_isar2 = 0x21232041;
|
||||
cpu->id_isar3 = 0x11112131;
|
||||
cpu->id_isar4 = 0x00111142;
|
||||
cpu->isar.id_isar0 = 0x00101111;
|
||||
cpu->isar.id_isar1 = 0x13112111;
|
||||
cpu->isar.id_isar2 = 0x21232041;
|
||||
cpu->isar.id_isar3 = 0x11112131;
|
||||
cpu->isar.id_isar4 = 0x00111142;
|
||||
cpu->dbgdidr = 0x35141000;
|
||||
cpu->clidr = (1 << 27) | (1 << 24) | 3;
|
||||
cpu->ccsidr[0] = 0xe00fe019; /* 16k L1 dcache. */
|
||||
|
@ -1318,8 +1318,8 @@ static void cortex_a7_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->kvm_target = QEMU_KVM_ARM_TARGET_CORTEX_A7;
|
||||
cpu->midr = 0x410fc075;
|
||||
cpu->reset_fpsid = 0x41023075;
|
||||
cpu->mvfr0 = 0x10110222;
|
||||
cpu->mvfr1 = 0x11111111;
|
||||
cpu->isar.mvfr0 = 0x10110222;
|
||||
cpu->isar.mvfr1 = 0x11111111;
|
||||
cpu->ctr = 0x84448003;
|
||||
cpu->reset_sctlr = 0x00c50078;
|
||||
cpu->id_pfr0 = 0x00001131;
|
||||
|
@ -1335,11 +1335,11 @@ static void cortex_a7_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
/* a7_mpcore_r0p5_trm, page 4-4 gives 0x01101110; but
|
||||
* table 4-41 gives 0x02101110, which includes the arm div insns.
|
||||
*/
|
||||
cpu->id_isar0 = 0x02101110;
|
||||
cpu->id_isar1 = 0x13112111;
|
||||
cpu->id_isar2 = 0x21232041;
|
||||
cpu->id_isar3 = 0x11112131;
|
||||
cpu->id_isar4 = 0x10011142;
|
||||
cpu->isar.id_isar0 = 0x02101110;
|
||||
cpu->isar.id_isar1 = 0x13112111;
|
||||
cpu->isar.id_isar2 = 0x21232041;
|
||||
cpu->isar.id_isar3 = 0x11112131;
|
||||
cpu->isar.id_isar4 = 0x10011142;
|
||||
cpu->dbgdidr = 0x3515f005;
|
||||
cpu->clidr = 0x0a200023;
|
||||
cpu->ccsidr[0] = 0x701fe00a; /* 32K L1 dcache */
|
||||
|
@ -1364,8 +1364,8 @@ static void cortex_a15_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->kvm_target = QEMU_KVM_ARM_TARGET_CORTEX_A15;
|
||||
cpu->midr = 0x412fc0f1;
|
||||
cpu->reset_fpsid = 0x410430f0;
|
||||
cpu->mvfr0 = 0x10110222;
|
||||
cpu->mvfr1 = 0x11111111;
|
||||
cpu->isar.mvfr0 = 0x10110222;
|
||||
cpu->isar.mvfr1 = 0x11111111;
|
||||
cpu->ctr = 0x8444c004;
|
||||
cpu->reset_sctlr = 0x00c50078;
|
||||
cpu->id_pfr0 = 0x00001131;
|
||||
|
@ -1378,11 +1378,11 @@ static void cortex_a15_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x20000000;
|
||||
cpu->id_mmfr2 = 0x01240000;
|
||||
cpu->id_mmfr3 = 0x02102211;
|
||||
cpu->id_isar0 = 0x02101110;
|
||||
cpu->id_isar1 = 0x13112111;
|
||||
cpu->id_isar2 = 0x21232041;
|
||||
cpu->id_isar3 = 0x11112131;
|
||||
cpu->id_isar4 = 0x10011142;
|
||||
cpu->isar.id_isar0 = 0x02101110;
|
||||
cpu->isar.id_isar1 = 0x13112111;
|
||||
cpu->isar.id_isar2 = 0x21232041;
|
||||
cpu->isar.id_isar3 = 0x11112131;
|
||||
cpu->isar.id_isar4 = 0x10011142;
|
||||
cpu->dbgdidr = 0x3515f021;
|
||||
cpu->clidr = 0x0a200023;
|
||||
cpu->ccsidr[0] = 0x701fe00a; /* 32K L1 dcache */
|
||||
|
|
|
@ -773,13 +773,28 @@ typedef struct ARMCPU {
|
|||
* ARMv7AR ARM Architecture Reference Manual. A reset_ prefix
|
||||
* is used for reset values of non-constant registers; no reset_
|
||||
* prefix means a constant register.
|
||||
* Some of these registers are split out into a substructure that
|
||||
* is shared with the translators to control the ISA.
|
||||
*/
|
||||
struct ARMISARegisters {
|
||||
uint32_t id_isar0;
|
||||
uint32_t id_isar1;
|
||||
uint32_t id_isar2;
|
||||
uint32_t id_isar3;
|
||||
uint32_t id_isar4;
|
||||
uint32_t id_isar5;
|
||||
uint32_t id_isar6;
|
||||
uint32_t mvfr0;
|
||||
uint32_t mvfr1;
|
||||
uint32_t mvfr2;
|
||||
uint64_t id_aa64isar0;
|
||||
uint64_t id_aa64isar1;
|
||||
uint64_t id_aa64pfr0;
|
||||
uint64_t id_aa64pfr1;
|
||||
} isar;
|
||||
uint32_t midr;
|
||||
uint32_t revidr;
|
||||
uint32_t reset_fpsid;
|
||||
uint32_t mvfr0;
|
||||
uint32_t mvfr1;
|
||||
uint32_t mvfr2;
|
||||
uint32_t ctr;
|
||||
uint32_t reset_sctlr;
|
||||
uint32_t id_pfr0;
|
||||
|
@ -793,21 +808,10 @@ typedef struct ARMCPU {
|
|||
uint32_t id_mmfr2;
|
||||
uint32_t id_mmfr3;
|
||||
uint32_t id_mmfr4;
|
||||
uint32_t id_isar0;
|
||||
uint32_t id_isar1;
|
||||
uint32_t id_isar2;
|
||||
uint32_t id_isar3;
|
||||
uint32_t id_isar4;
|
||||
uint32_t id_isar5;
|
||||
uint32_t id_isar6;
|
||||
uint64_t id_aa64pfr0;
|
||||
uint64_t id_aa64pfr1;
|
||||
uint64_t id_aa64dfr0;
|
||||
uint64_t id_aa64dfr1;
|
||||
uint64_t id_aa64afr0;
|
||||
uint64_t id_aa64afr1;
|
||||
uint64_t id_aa64isar0;
|
||||
uint64_t id_aa64isar1;
|
||||
uint64_t id_aa64mmfr0;
|
||||
uint64_t id_aa64mmfr1;
|
||||
uint32_t dbgdidr;
|
||||
|
|
|
@ -101,9 +101,9 @@ static void aarch64_a57_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->midr = 0x411fd070;
|
||||
cpu->revidr = 0x00000000;
|
||||
cpu->reset_fpsid = 0x41034070;
|
||||
cpu->mvfr0 = 0x10110222;
|
||||
cpu->mvfr1 = 0x12111111;
|
||||
cpu->mvfr2 = 0x00000043;
|
||||
cpu->isar.mvfr0 = 0x10110222;
|
||||
cpu->isar.mvfr1 = 0x12111111;
|
||||
cpu->isar.mvfr2 = 0x00000043;
|
||||
cpu->ctr = 0x8444c004;
|
||||
cpu->reset_sctlr = 0x00c50838;
|
||||
cpu->id_pfr0 = 0x00000131;
|
||||
|
@ -114,18 +114,18 @@ static void aarch64_a57_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x40000000;
|
||||
cpu->id_mmfr2 = 0x01260000;
|
||||
cpu->id_mmfr3 = 0x02102211;
|
||||
cpu->id_isar0 = 0x02101110;
|
||||
cpu->id_isar1 = 0x13112111;
|
||||
cpu->id_isar2 = 0x21232042;
|
||||
cpu->id_isar3 = 0x01112131;
|
||||
cpu->id_isar4 = 0x00011142;
|
||||
cpu->id_isar5 = 0x00011121;
|
||||
cpu->id_isar6 = 0;
|
||||
cpu->id_aa64pfr0 = 0x00002222;
|
||||
cpu->isar.id_isar0 = 0x02101110;
|
||||
cpu->isar.id_isar1 = 0x13112111;
|
||||
cpu->isar.id_isar2 = 0x21232042;
|
||||
cpu->isar.id_isar3 = 0x01112131;
|
||||
cpu->isar.id_isar4 = 0x00011142;
|
||||
cpu->isar.id_isar5 = 0x00011121;
|
||||
cpu->isar.id_isar6 = 0;
|
||||
cpu->isar.id_aa64pfr0 = 0x00002222;
|
||||
cpu->id_aa64dfr0 = 0x10305106;
|
||||
cpu->pmceid0 = 0x00000000;
|
||||
cpu->pmceid1 = 0x00000000;
|
||||
cpu->id_aa64isar0 = 0x00011120;
|
||||
cpu->isar.id_aa64isar0 = 0x00011120;
|
||||
cpu->id_aa64mmfr0 = 0x00001124;
|
||||
cpu->dbgdidr = 0x3516d000;
|
||||
cpu->clidr = 0x0a200023;
|
||||
|
@ -159,9 +159,9 @@ static void aarch64_a53_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->midr = 0x410fd034;
|
||||
cpu->revidr = 0x00000000;
|
||||
cpu->reset_fpsid = 0x41034070;
|
||||
cpu->mvfr0 = 0x10110222;
|
||||
cpu->mvfr1 = 0x12111111;
|
||||
cpu->mvfr2 = 0x00000043;
|
||||
cpu->isar.mvfr0 = 0x10110222;
|
||||
cpu->isar.mvfr1 = 0x12111111;
|
||||
cpu->isar.mvfr2 = 0x00000043;
|
||||
cpu->ctr = 0x84448004; /* L1Ip = VIPT */
|
||||
cpu->reset_sctlr = 0x00c50838;
|
||||
cpu->id_pfr0 = 0x00000131;
|
||||
|
@ -172,16 +172,16 @@ static void aarch64_a53_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x40000000;
|
||||
cpu->id_mmfr2 = 0x01260000;
|
||||
cpu->id_mmfr3 = 0x02102211;
|
||||
cpu->id_isar0 = 0x02101110;
|
||||
cpu->id_isar1 = 0x13112111;
|
||||
cpu->id_isar2 = 0x21232042;
|
||||
cpu->id_isar3 = 0x01112131;
|
||||
cpu->id_isar4 = 0x00011142;
|
||||
cpu->id_isar5 = 0x00011121;
|
||||
cpu->id_isar6 = 0;
|
||||
cpu->id_aa64pfr0 = 0x00002222;
|
||||
cpu->isar.id_isar0 = 0x02101110;
|
||||
cpu->isar.id_isar1 = 0x13112111;
|
||||
cpu->isar.id_isar2 = 0x21232042;
|
||||
cpu->isar.id_isar3 = 0x01112131;
|
||||
cpu->isar.id_isar4 = 0x00011142;
|
||||
cpu->isar.id_isar5 = 0x00011121;
|
||||
cpu->isar.id_isar6 = 0;
|
||||
cpu->isar.id_aa64pfr0 = 0x00002222;
|
||||
cpu->id_aa64dfr0 = 0x10305106;
|
||||
cpu->id_aa64isar0 = 0x00011120;
|
||||
cpu->isar.id_aa64isar0 = 0x00011120;
|
||||
cpu->id_aa64mmfr0 = 0x00001122; /* 40 bit physical addr */
|
||||
cpu->dbgdidr = 0x3516d000;
|
||||
cpu->clidr = 0x0a200023;
|
||||
|
@ -214,9 +214,9 @@ static void aarch64_a72_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->midr = 0x410fd083;
|
||||
cpu->revidr = 0x00000000;
|
||||
cpu->reset_fpsid = 0x41034080;
|
||||
cpu->mvfr0 = 0x10110222;
|
||||
cpu->mvfr1 = 0x12111111;
|
||||
cpu->mvfr2 = 0x00000043;
|
||||
cpu->isar.mvfr0 = 0x10110222;
|
||||
cpu->isar.mvfr1 = 0x12111111;
|
||||
cpu->isar.mvfr2 = 0x00000043;
|
||||
cpu->ctr = 0x8444c004;
|
||||
cpu->reset_sctlr = 0x00c50838;
|
||||
cpu->id_pfr0 = 0x00000131;
|
||||
|
@ -227,17 +227,17 @@ static void aarch64_a72_initfn(struct uc_struct *uc, Object *obj, void *opaque)
|
|||
cpu->id_mmfr1 = 0x40000000;
|
||||
cpu->id_mmfr2 = 0x01260000;
|
||||
cpu->id_mmfr3 = 0x02102211;
|
||||
cpu->id_isar0 = 0x02101110;
|
||||
cpu->id_isar1 = 0x13112111;
|
||||
cpu->id_isar2 = 0x21232042;
|
||||
cpu->id_isar3 = 0x01112131;
|
||||
cpu->id_isar4 = 0x00011142;
|
||||
cpu->id_isar5 = 0x00011121;
|
||||
cpu->id_aa64pfr0 = 0x00002222;
|
||||
cpu->isar.id_isar0 = 0x02101110;
|
||||
cpu->isar.id_isar1 = 0x13112111;
|
||||
cpu->isar.id_isar2 = 0x21232042;
|
||||
cpu->isar.id_isar3 = 0x01112131;
|
||||
cpu->isar.id_isar4 = 0x00011142;
|
||||
cpu->isar.id_isar5 = 0x00011121;
|
||||
cpu->isar.id_aa64pfr0 = 0x00002222;
|
||||
cpu->id_aa64dfr0 = 0x10305106;
|
||||
cpu->pmceid0 = 0x00000000;
|
||||
cpu->pmceid1 = 0x00000000;
|
||||
cpu->id_aa64isar0 = 0x00011120;
|
||||
cpu->isar.id_aa64isar0 = 0x00011120;
|
||||
cpu->id_aa64mmfr0 = 0x00001124;
|
||||
cpu->dbgdidr = 0x3516d000;
|
||||
cpu->clidr = 0x0a200023;
|
||||
|
|
|
@ -4281,7 +4281,7 @@ static uint64_t id_pfr1_read(CPUARMState *env, const ARMCPRegInfo *ri)
|
|||
static uint64_t id_aa64pfr0_read(CPUARMState *env, const ARMCPRegInfo *ri)
|
||||
{
|
||||
ARMCPU *cpu = arm_env_get_cpu(env);
|
||||
uint64_t pfr0 = cpu->id_aa64pfr0;
|
||||
uint64_t pfr0 = cpu->isar.id_aa64pfr0;
|
||||
|
||||
if (env->gicv3state) {
|
||||
pfr0 |= 1 << 24;
|
||||
|
@ -4330,21 +4330,21 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
|||
{ "ID_MMFR3", 0,0,1, 3,0,7, ARM_CP_STATE_BOTH,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_mmfr3 },
|
||||
{ "ID_ISAR0", 0,0,2, 3,0,0, ARM_CP_STATE_BOTH,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_isar0 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_isar0 },
|
||||
{ "ID_ISAR1", 0,0,2, 3,0,1, ARM_CP_STATE_BOTH,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_isar1 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_isar1 },
|
||||
{ "ID_ISAR2", 0,0,2, 3,0,2, ARM_CP_STATE_BOTH,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_isar2 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_isar2 },
|
||||
{ "ID_ISAR3", 0,0,2, 3,0,3, ARM_CP_STATE_BOTH,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_isar3 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_isar3 },
|
||||
{ "ID_ISAR4", 0,0,2, 3,0,4, ARM_CP_STATE_BOTH,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_isar4 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_isar4 },
|
||||
{ "ID_ISAR5", 0,0,2, 3,0,5, ARM_CP_STATE_BOTH,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_isar5 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_isar5 },
|
||||
{ "ID_MMFR4", 0,0,2, 3,0,6, ARM_CP_STATE_BOTH, ARM_CP_CONST,
|
||||
PL1_R, 0, NULL, cpu->id_mmfr4 },
|
||||
{ "ID_ISAR6", 0,0,2, 3,0,7, ARM_CP_STATE_BOTH,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_isar6 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_isar6 },
|
||||
REGINFO_SENTINEL
|
||||
};
|
||||
define_arm_cp_regs(cpu, v6_idregs);
|
||||
|
@ -4403,7 +4403,7 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
|||
ARM_CP_NO_RAW, PL1_R, 0, NULL, cpu->id_aa64pfr0, 0, {0, 0},
|
||||
NULL, id_aa64pfr0_read, arm_cp_write_ignore },
|
||||
{ "ID_AA64PFR1_EL1", 0,0,4, 3,0,1, ARM_CP_STATE_AA64,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_aa64pfr1},
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_aa64pfr1},
|
||||
{ "ID_AA64PFR2_EL1_RESERVED", 0,0,4, 3,0,2, ARM_CP_STATE_AA64, ARM_CP_CONST,
|
||||
PL1_R, 0, NULL, 0 },
|
||||
{ "ID_AA64PFR3_EL1_RESERVED", 0,0,4, 3,0,3, ARM_CP_STATE_AA64, ARM_CP_CONST,
|
||||
|
@ -4434,9 +4434,9 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
|||
{ "ID_AA64AFR3_EL1_RESERVED", 0,0,5, 3,0,7, ARM_CP_STATE_AA64, ARM_CP_CONST,
|
||||
PL1_R, 0, NULL, 0 },
|
||||
{ "ID_AA64ISAR0_EL1", 0,0,6, 3,0,0, ARM_CP_STATE_AA64,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_aa64isar0 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_aa64isar0 },
|
||||
{ "ID_AA64ISAR1_EL1", 0,0,6, 3,0,1, ARM_CP_STATE_AA64,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->id_aa64isar1 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.id_aa64isar1 },
|
||||
{ "ID_AA64ISAR2_EL1_RESERVED", 0,0,6, 3,0,2, ARM_CP_STATE_AA64, ARM_CP_CONST,
|
||||
PL1_R, 0, NULL, 0 },
|
||||
{ "ID_AA64ISAR3_EL1_RESERVED", 0,0,6, 3,0,3, ARM_CP_STATE_AA64, ARM_CP_CONST,
|
||||
|
@ -4466,11 +4466,11 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
|||
{ "ID_AA64MMFR7_EL1_RESERVED", 0,0,7, 3,0,7, ARM_CP_STATE_AA64, ARM_CP_CONST,
|
||||
PL1_R, 0, NULL, 0 },
|
||||
{ "MVFR0_EL1", 0,0,3, 3,0,0, ARM_CP_STATE_AA64,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->mvfr0 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.mvfr0 },
|
||||
{ "MVFR1_EL1", 0,0,3, 3,0,1, ARM_CP_STATE_AA64,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->mvfr1 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.mvfr1 },
|
||||
{ "MVFR2_EL1", 0,0,3, 3,0,2, ARM_CP_STATE_AA64,
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->mvfr2 },
|
||||
ARM_CP_CONST, PL1_R, 0, NULL, cpu->isar.mvfr2 },
|
||||
{ "MVFR3_EL1_RESERVED", 0,0,3, 3,0,3, ARM_CP_STATE_AA64, ARM_CP_CONST,
|
||||
PL1_R, 0, NULL, 0 },
|
||||
{ "MVFR4_EL1_RESERVED", 0,0,3, 3,0,4, ARM_CP_STATE_AA64, ARM_CP_CONST,
|
||||
|
|
Loading…
Reference in a new issue