mirror of
https://github.com/qemu/qemu.git
synced 2024-11-30 07:13:38 +08:00
PPC: booke206: move avail check to tlbwe
We can have TLBs that only support a single page size. This is defined by the absence of the AVAIL flag in TLBnCFG. If this is the case, we currently write invalid size info into the TLB, but override it on internal fault. Let's move the check over to tlbwe, so we don't have the AVAIL check in the hotter fault path. Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
3f162d119e
commit
21a0b6ed1d
@ -1298,13 +1298,7 @@ target_phys_addr_t booke206_tlb_to_page_size(CPUState *env, ppcmas_tlb_t *tlb)
|
||||
int tlbm_size;
|
||||
|
||||
tlbncfg = env->spr[SPR_BOOKE_TLB0CFG + tlbn];
|
||||
|
||||
if (tlbncfg & TLBnCFG_AVAIL) {
|
||||
tlbm_size = (tlb->mas1 & MAS1_TSIZE_MASK) >> MAS1_TSIZE_SHIFT;
|
||||
} else {
|
||||
tlbm_size = (tlbncfg & TLBnCFG_MINSIZE) >> TLBnCFG_MINSIZE_SHIFT;
|
||||
tlbm_size <<= 1;
|
||||
}
|
||||
|
||||
return 1024ULL << tlbm_size;
|
||||
}
|
||||
|
@ -4282,6 +4282,15 @@ void helper_booke206_tlbwe(void)
|
||||
tlb->mas7_3 = ((uint64_t)env->spr[SPR_BOOKE_MAS7] << 32) |
|
||||
env->spr[SPR_BOOKE_MAS3];
|
||||
tlb->mas1 = env->spr[SPR_BOOKE_MAS1];
|
||||
|
||||
/* MAV 1.0 only */
|
||||
if (!(tlbncfg & TLBnCFG_AVAIL)) {
|
||||
/* force !AVAIL TLB entries to correct page size */
|
||||
tlb->mas1 &= ~MAS1_TSIZE_MASK;
|
||||
/* XXX can be configured in MMUCSR0 */
|
||||
tlb->mas1 |= (tlbncfg & TLBnCFG_MINSIZE) >> 12;
|
||||
}
|
||||
|
||||
/* XXX needs to change when supporting 64-bit e500 */
|
||||
tlb->mas2 = env->spr[SPR_BOOKE_MAS2] & 0xffffffff;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user