Commit 3d29fbef063ab1e8bfb9bc759ca94ab0becca9fa

Authored by blueswir1
1 parent 69d35728

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
hw/slavio_timer.c
@@ -263,7 +263,7 @@ static void slavio_timer_reset(void *opaque) @@ -263,7 +263,7 @@ static void slavio_timer_reset(void *opaque)
263 s->reached = 0; 263 s->reached = 0;
264 s->mode &= 2; 264 s->mode &= 2;
265 s->stopped = 1; 265 s->stopped = 1;
266 - slavio_timer_get_out(s); 266 + slavio_timer_irq(s);
267 } 267 }
268 268
269 void slavio_timer_init(uint32_t addr, int irq, int mode, unsigned int cpu, 269 void slavio_timer_init(uint32_t addr, int irq, int mode, unsigned int cpu,
hw/sun4m.c
@@ -243,7 +243,17 @@ void qemu_system_powerdown(void) @@ -243,7 +243,17 @@ void qemu_system_powerdown(void)
243 static void main_cpu_reset(void *opaque) 243 static void main_cpu_reset(void *opaque)
244 { 244 {
245 CPUState *env = opaque; 245 CPUState *env = opaque;
  246 +
246 cpu_reset(env); 247 cpu_reset(env);
  248 + env->halted = 0;
  249 +}
  250 +
  251 +static void secondary_cpu_reset(void *opaque)
  252 +{
  253 + CPUState *env = opaque;
  254 +
  255 + cpu_reset(env);
  256 + env->halted = 1;
247 } 257 }
248 258
249 static void sun4m_hw_init(const struct hwdef *hwdef, int ram_size, 259 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, @@ -266,10 +276,13 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int ram_size,
266 env = cpu_init(); 276 env = cpu_init();
267 cpu_sparc_register(env, def); 277 cpu_sparc_register(env, def);
268 envs[i] = env; 278 envs[i] = env;
269 - if (i != 0) 279 + if (i == 0) {
  280 + qemu_register_reset(main_cpu_reset, env);
  281 + } else {
  282 + qemu_register_reset(secondary_cpu_reset, env);
270 env->halted = 1; 283 env->halted = 1;
  284 + }
271 register_savevm("cpu", i, 3, cpu_save, cpu_load, env); 285 register_savevm("cpu", i, 3, cpu_save, cpu_load, env);
272 - qemu_register_reset(main_cpu_reset, env);  
273 } 286 }
274 /* allocate RAM */ 287 /* allocate RAM */
275 cpu_register_physical_memory(0, ram_size, 0); 288 cpu_register_physical_memory(0, ram_size, 0);