mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
ppc/ppc405: Restore TCR and STR write handlers
The 405 timers were broken when booke support was added. Assumption
was made that the register numbers were the same but it's not :
SPR_BOOKE_TSR (0x150)
SPR_BOOKE_TCR (0x154)
SPR_40x_TSR (0x3D8)
SPR_40x_TCR (0x3DA)
Cc: Christophe Leroy <christophe.leroy@c-s.fr>
Fixes: ddd1055b07
("PPC: booke timers")
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20211222064025.1541490-5-clg@kaod.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20220103063441.3424853-6-clg@kaod.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
56964585a0
commit
cbd8f17d16
8 changed files with 57 additions and 2 deletions
25
hw/ppc/ppc.c
25
hw/ppc/ppc.c
|
@ -1300,6 +1300,31 @@ target_ulong load_40x_pit (CPUPPCState *env)
|
|||
return cpu_ppc_load_decr(env);
|
||||
}
|
||||
|
||||
void store_40x_tsr(CPUPPCState *env, target_ulong val)
|
||||
{
|
||||
PowerPCCPU *cpu = env_archcpu(env);
|
||||
|
||||
trace_ppc40x_store_tcr(val);
|
||||
|
||||
env->spr[SPR_40x_TSR] &= ~(val & 0xFC000000);
|
||||
if (val & 0x80000000) {
|
||||
ppc_set_irq(cpu, PPC_INTERRUPT_PIT, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void store_40x_tcr(CPUPPCState *env, target_ulong val)
|
||||
{
|
||||
PowerPCCPU *cpu = env_archcpu(env);
|
||||
ppc_tb_t *tb_env;
|
||||
|
||||
trace_ppc40x_store_tsr(val);
|
||||
|
||||
tb_env = env->tb_env;
|
||||
env->spr[SPR_40x_TCR] = val & 0xFFC00000;
|
||||
start_stop_pit(env, tb_env, 1);
|
||||
cpu_4xx_wdt_cb(cpu);
|
||||
}
|
||||
|
||||
static void ppc_40x_set_tb_clk (void *opaque, uint32_t freq)
|
||||
{
|
||||
CPUPPCState *env = opaque;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue