|
@@ -1123,16 +1123,21 @@ void cpu_ppc_tb_reset(CPUPPCState *env)
|
|
|
timer_del(tb_env->hdecr_timer);
|
|
|
ppc_set_irq(cpu, PPC_INTERRUPT_HDECR, 0);
|
|
|
tb_env->hdecr_next = 0;
|
|
|
+ _cpu_ppc_store_hdecr(cpu, 0, 0, 0, 64);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* There is a bug in Linux 2.4 kernels:
|
|
|
* if a decrementer exception is pending when it enables msr_ee at startup,
|
|
|
* it's not ready to handle it...
|
|
|
+ *
|
|
|
+ * On machine reset, this is called before icount is reset, so for
|
|
|
+ * icount-mode, setting TB registers using now == qemu_clock_get_ns()
|
|
|
+ * results in them being garbage after icount is reset. Use an
|
|
|
+ * explicit now == 0 to get a consistent reset state.
|
|
|
*/
|
|
|
- cpu_ppc_store_decr(env, -1);
|
|
|
- cpu_ppc_store_hdecr(env, -1);
|
|
|
- cpu_ppc_store_purr(env, 0x0000000000000000ULL);
|
|
|
+ _cpu_ppc_store_decr(cpu, 0, 0, -1, 64);
|
|
|
+ _cpu_ppc_store_purr(env, 0, 0);
|
|
|
}
|
|
|
|
|
|
void cpu_ppc_tb_free(CPUPPCState *env)
|