PPC: e500: Fix TLB lookup for 32bit CPUs
authorAlexander Graf <agraf@suse.de>
Tue, 3 Jun 2014 22:27:31 +0000 (00:27 +0200)
committerAlexander Graf <agraf@suse.de>
Mon, 16 Jun 2014 11:24:41 +0000 (13:24 +0200)
When we run 32bit guest CPUs (or 32bit guest code on 64bit CPUs) on
qemu-system-ppc64 the TLB lookup will use the full effective address
as pointer.

However, only the first 32bits are valid when MSR.CM = 0. Check for
that condition.

This makes QEMU boot an e500v2 guest with more than 1G of RAM for me.

Signed-off-by: Alexander Graf <agraf@suse.de>
target-ppc/mmu_helper.c

index 1e70536e361d2922a520d9594792b145db13f51e..4d6b1e20c053f6b79c4c9712ddaae322ccb73c28 100644 (file)
@@ -903,6 +903,11 @@ static int ppcmas_tlb_check(CPUPPCState *env, ppcmas_tlb_t *tlb,
     target_ulong mask;
     uint32_t tlb_pid;
 
+    if (!msr_cm) {
+        /* In 32bit mode we can only address 32bit EAs */
+        address = (uint32_t)address;
+    }
+
     /* Check valid flag */
     if (!(tlb->mas1 & MAS1_VALID)) {
         return -1;