]> git.proxmox.com Git - qemu.git/commitdiff
PPC: e500: Only expose even TLB sizes in initial TLB
authorAlexander Graf <agraf@suse.de>
Thu, 4 Oct 2012 16:52:21 +0000 (18:52 +0200)
committerAlexander Graf <agraf@suse.de>
Fri, 5 Oct 2012 00:35:11 +0000 (02:35 +0200)
When booting our e500 machine, we automatically generate a big TLB entry
in TLB1 that covers all of the code we need to run in there until the guest
can handle its TLB on its own.

However, e500v2 can only handle MAS1.0 sizes. However, we keep our TLB
information in MAS2.0 layout, which means we have twice as many TLB sizes
to choose from. That also means we can run into a situation where we try
to add a TLB size that could not fit into the MAS1.0 size bits.

Fix it by making sure we always have the lower bit set to 0. That way we
are always guaranteed to have MAS1.0 compatible TLB size information.

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

index feb712e5a9051a6bd35152002262b9f99010ca81..d23f9b2f60b0ced5bf55e0cafa73761392a7b5eb 100644 (file)
@@ -362,6 +362,10 @@ static void mmubooke_create_initial_mapping(CPUPPCState *env)
        the device tree top */
     dt_end = bi->dt_base + bi->dt_size;
     ps = booke206_page_size_to_tlb(dt_end) + 1;
+    if (ps & 1) {
+        /* e500v2 can only do even TLB size bits */
+        ps++;
+    }
     size = (ps << MAS1_TSIZE_SHIFT);
     tlb->mas1 = MAS1_VALID | size;
     tlb->mas2 = 0;