diff options
author | blueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-05-17 19:21:46 +0000 |
---|---|---|
committer | blueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-05-17 19:21:46 +0000 |
commit | 3d29fbef063ab1e8bfb9bc759ca94ab0becca9fa (patch) | |
tree | cc943bf9f87d4058ce221467149f1ff751ce9bcb | |
parent | 69d357286d0ab5a852e827dad1dc4b05917aaaa8 (diff) | |
download | hqemu-3d29fbef063ab1e8bfb9bc759ca94ab0becca9fa.zip hqemu-3d29fbef063ab1e8bfb9bc759ca94ab0becca9fa.tar.gz |
Force the primary CPU to run and other CPUs to halt, recalculate timers
after system_reset.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2822 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | hw/slavio_timer.c | 2 | ||||
-rw-r--r-- | hw/sun4m.c | 17 |
2 files changed, 16 insertions, 3 deletions
diff --git a/hw/slavio_timer.c b/hw/slavio_timer.c index 8898afc..acf94f3d 100644 --- a/hw/slavio_timer.c +++ b/hw/slavio_timer.c @@ -263,7 +263,7 @@ static void slavio_timer_reset(void *opaque) s->reached = 0; s->mode &= 2; s->stopped = 1; - slavio_timer_get_out(s); + slavio_timer_irq(s); } void slavio_timer_init(uint32_t addr, int irq, int mode, unsigned int cpu, @@ -243,7 +243,17 @@ void qemu_system_powerdown(void) static void main_cpu_reset(void *opaque) { CPUState *env = opaque; + cpu_reset(env); + env->halted = 0; +} + +static void secondary_cpu_reset(void *opaque) +{ + CPUState *env = opaque; + + cpu_reset(env); + env->halted = 1; } static void sun4m_hw_init(const struct hwdef *hwdef, int ram_size, @@ -266,10 +276,13 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int ram_size, env = cpu_init(); cpu_sparc_register(env, def); envs[i] = env; - if (i != 0) + if (i == 0) { + qemu_register_reset(main_cpu_reset, env); + } else { + qemu_register_reset(secondary_cpu_reset, env); env->halted = 1; + } register_savevm("cpu", i, 3, cpu_save, cpu_load, env); - qemu_register_reset(main_cpu_reset, env); } /* allocate RAM */ cpu_register_physical_memory(0, ram_size, 0); |