diff options
author | Andreas Färber <afaerber@suse.de> | 2012-04-11 23:35:40 +0200 |
---|---|---|
committer | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2012-04-24 16:04:56 +0200 |
commit | 1c3b52fb1a44b407b52f4852c1931c571e77d308 (patch) | |
tree | e8d9677d0b8bffe079aca57a9ab4fdbf0fbb325e /target-cris/cpu.c | |
parent | e739a48e58c41fc0d3caa24103abef9988c77cdf (diff) |
target-cris: QOM'ify CPU reset
Move code from cpu_state_reset() into QOM cris_cpu_reset().
Let CPU init call cpu_reset().
Signed-off-by: Andreas Färber <afaerber@suse.de>
Diffstat (limited to 'target-cris/cpu.c')
-rw-r--r-- | target-cris/cpu.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/target-cris/cpu.c b/target-cris/cpu.c index 784846ba3c..93c7e005f8 100644 --- a/target-cris/cpu.c +++ b/target-cris/cpu.c @@ -1,6 +1,9 @@ /* * QEMU CRIS CPU * + * Copyright (c) 2008 AXIS Communications AB + * Written by Edgar E. Iglesias. + * * Copyright (c) 2012 SUSE LINUX Products GmbH * * This library is free software; you can redistribute it and/or @@ -20,6 +23,7 @@ #include "cpu.h" #include "qemu-common.h" +#include "mmu.h" /* CPUClass::reset() */ @@ -28,10 +32,27 @@ static void cris_cpu_reset(CPUState *s) CRISCPU *cpu = CRIS_CPU(s); CRISCPUClass *ccc = CRIS_CPU_GET_CLASS(cpu); CPUCRISState *env = &cpu->env; + uint32_t vr; + + if (qemu_loglevel_mask(CPU_LOG_RESET)) { + qemu_log("CPU Reset (CPU %d)\n", env->cpu_index); + log_cpu_state(env, 0); + } ccc->parent_reset(s); - cpu_state_reset(env); + vr = env->pregs[PR_VR]; + memset(env, 0, offsetof(CPUCRISState, breakpoints)); + env->pregs[PR_VR] = vr; + tlb_flush(env, 1); + +#if defined(CONFIG_USER_ONLY) + /* start in user mode with interrupts enabled. */ + env->pregs[PR_CCS] |= U_FLAG | I_FLAG | P_FLAG; +#else + cris_mmu_init(env); + env->pregs[PR_CCS] = 0; +#endif } static void cris_cpu_class_init(ObjectClass *oc, void *data) |