[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 10/10] PPC: booke206: move avail check to tlbwe
From: |
Alexander Graf |
Subject: |
[Qemu-ppc] [PATCH 10/10] PPC: booke206: move avail check to tlbwe |
Date: |
Wed, 25 Jan 2012 18:27:38 +0100 |
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 <address@hidden>
---
target-ppc/helper.c | 8 +-------
target-ppc/op_helper.c | 9 +++++++++
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/target-ppc/helper.c b/target-ppc/helper.c
index 672494c..31a9897 100644
--- a/target-ppc/helper.c
+++ b/target-ppc/helper.c
@@ -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;
- }
+ tlbm_size = (tlb->mas1 & MAS1_TSIZE_MASK) >> MAS1_TSIZE_SHIFT;
return 1024ULL << tlbm_size;
}
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index be4e539..0d1206a 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -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;
--
1.6.0.2
- [Qemu-ppc] [PATCH 00/10] Make -cpu e500mc useful in TCG v3, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 07/10] PPC: booke206: Check for min/max TLB entry size, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 04/10] PPC: rename msync to msync_4xx, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 09/10] PPC: booke206: Check for TLB overrun, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 02/10] PPC: e500mc: add missing IVORs to bitmap, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 03/10] PPC: e500: msync is 440 only, e500 has real sync, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 08/10] PPC: booke206: Implement tlbilx, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 10/10] PPC: booke206: move avail check to tlbwe,
Alexander Graf <=
- [Qemu-ppc] [PATCH 01/10] PPC: Add IVOR 38-42, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 06/10] PPC: booke: add tlbnps handling, Alexander Graf, 2012/01/25
- [Qemu-ppc] [PATCH 05/10] PPC: booke206: allow NULL raddr in ppcmas_tlb_check, Alexander Graf, 2012/01/25