mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-21 17:11:57 -06:00
target/ppc: Fix move-to timebase SPR access permissions
The move-to timebase registers TBU and TBL can not be read, and they can not be written in supervisor mode on hypervisor-capable CPUs. Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
80e28a4147
commit
f6940474fa
1 changed files with 23 additions and 8 deletions
|
@ -468,18 +468,33 @@ void register_generic_sprs(PowerPCCPU *cpu)
|
||||||
&spr_read_tbl, SPR_NOACCESS,
|
&spr_read_tbl, SPR_NOACCESS,
|
||||||
&spr_read_tbl, SPR_NOACCESS,
|
&spr_read_tbl, SPR_NOACCESS,
|
||||||
0x00000000);
|
0x00000000);
|
||||||
spr_register(env, SPR_WR_TBL, "TBL",
|
|
||||||
&spr_read_tbl, SPR_NOACCESS,
|
|
||||||
&spr_read_tbl, &spr_write_tbl,
|
|
||||||
0x00000000);
|
|
||||||
spr_register(env, SPR_TBU, "TBU",
|
spr_register(env, SPR_TBU, "TBU",
|
||||||
&spr_read_tbu, SPR_NOACCESS,
|
&spr_read_tbu, SPR_NOACCESS,
|
||||||
&spr_read_tbu, SPR_NOACCESS,
|
&spr_read_tbu, SPR_NOACCESS,
|
||||||
0x00000000);
|
0x00000000);
|
||||||
spr_register(env, SPR_WR_TBU, "TBU",
|
#ifndef CONFIG_USER_ONLY
|
||||||
&spr_read_tbu, SPR_NOACCESS,
|
if (env->has_hv_mode) {
|
||||||
&spr_read_tbu, &spr_write_tbu,
|
spr_register_hv(env, SPR_WR_TBL, "TBL",
|
||||||
|
SPR_NOACCESS, SPR_NOACCESS,
|
||||||
|
SPR_NOACCESS, SPR_NOACCESS,
|
||||||
|
SPR_NOACCESS, &spr_write_tbl,
|
||||||
0x00000000);
|
0x00000000);
|
||||||
|
spr_register_hv(env, SPR_WR_TBU, "TBU",
|
||||||
|
SPR_NOACCESS, SPR_NOACCESS,
|
||||||
|
SPR_NOACCESS, SPR_NOACCESS,
|
||||||
|
SPR_NOACCESS, &spr_write_tbu,
|
||||||
|
0x00000000);
|
||||||
|
} else {
|
||||||
|
spr_register(env, SPR_WR_TBL, "TBL",
|
||||||
|
SPR_NOACCESS, SPR_NOACCESS,
|
||||||
|
SPR_NOACCESS, &spr_write_tbl,
|
||||||
|
0x00000000);
|
||||||
|
spr_register(env, SPR_WR_TBU, "TBU",
|
||||||
|
SPR_NOACCESS, SPR_NOACCESS,
|
||||||
|
SPR_NOACCESS, &spr_write_tbu,
|
||||||
|
0x00000000);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void register_non_embedded_sprs(CPUPPCState *env)
|
void register_non_embedded_sprs(CPUPPCState *env)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue