This is slightly altered version of ARM946E-S CPU code from EOS QEMU (Magic Lantern project) so nearly all credits go to @a1ex.
ARM946E-S Technical Reference Manual can be found here: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0201d/index.html Signed-off-by: Antony Pavlov <[email protected]> --- target-arm/cpu.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/target-arm/cpu.c b/target-arm/cpu.c index b2556c6..409a311 100644 --- a/target-arm/cpu.c +++ b/target-arm/cpu.c @@ -322,6 +322,18 @@ static void arm926_initfn(Object *obj) cpu->reset_sctlr = 0x00090078; } +static void arm946es_initfn(Object *obj) +{ + ARMCPU *cpu = ARM_CPU(obj); + set_feature(&cpu->env, ARM_FEATURE_V5); + set_feature(&cpu->env, ARM_FEATURE_MPU); + set_feature(&cpu->env, ARM_FEATURE_DUMMY_C15_REGS); + cpu->midr = 0x41059461; + cpu->ctr = (7 << 25) | (1 << 24) | (4 << 18) | (4 << 15) \ + | (2 << 12) | (4 << 6) | (4 << 3) | (2 << 0); + cpu->reset_sctlr = 0x00000078; +} + static void arm946_initfn(Object *obj) { ARMCPU *cpu = ARM_CPU(obj); @@ -843,6 +855,7 @@ typedef struct ARMCPUInfo { static const ARMCPUInfo arm_cpus[] = { { .name = "arm926", .initfn = arm926_initfn }, + { .name = "arm946e-s", .initfn = arm946es_initfn }, { .name = "arm946", .initfn = arm946_initfn }, { .name = "arm1026", .initfn = arm1026_initfn }, /* What QEMU calls "arm1136-r2" is actually the 1136 r0p2, i.e. an -- 1.8.4.rc3
