mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-28 05:50:37 +00:00
PPC: booke206: Check for min/max TLB entry size
When setting a TLB entry, we need to check if the TLB we're putting it in actually supports the given size. According to the 2.06 PowerPC ISA, a value that's out of range can either be redefined to something implementation dependent or we can raise an illegal opcode exception. We do the latter. Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
a1ef618a37
commit
5935ee072d
@ -4228,6 +4228,7 @@ void helper_booke206_tlbwe(void)
|
||||
{
|
||||
uint32_t tlbncfg, tlbn;
|
||||
ppcmas_tlb_t *tlb;
|
||||
uint32_t size_tlb, size_ps;
|
||||
|
||||
switch (env->spr[SPR_BOOKE_MAS0] & MAS0_WQ_MASK) {
|
||||
case MAS0_WQ_ALWAYS:
|
||||
@ -4259,6 +4260,16 @@ void helper_booke206_tlbwe(void)
|
||||
|
||||
tlb = booke206_cur_tlb(env);
|
||||
|
||||
/* check that we support the targeted size */
|
||||
size_tlb = (env->spr[SPR_BOOKE_MAS1] & MAS1_TSIZE_MASK) >> MAS1_TSIZE_SHIFT;
|
||||
size_ps = booke206_tlbnps(env, tlbn);
|
||||
if ((env->spr[SPR_BOOKE_MAS1] & MAS1_VALID) && (tlbncfg & TLBnCFG_AVAIL) &&
|
||||
!(size_ps & (1 << size_tlb))) {
|
||||
helper_raise_exception_err(POWERPC_EXCP_PROGRAM,
|
||||
POWERPC_EXCP_INVAL |
|
||||
POWERPC_EXCP_INVAL_INVAL);
|
||||
}
|
||||
|
||||
if (msr_gs) {
|
||||
cpu_abort(env, "missing HV implementation\n");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user