From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:44835) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TKZDr-0001Y2-8i for qemu-devel@nongnu.org; Sat, 06 Oct 2012 14:35:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TKZDq-0006lb-5v for qemu-devel@nongnu.org; Sat, 06 Oct 2012 14:35:35 -0400 Date: Sat, 6 Oct 2012 20:35:32 +0200 From: Aurelien Jarno Message-ID: <20121006183532.GA31504@ohm.aurel32.net> References: <1349369735-14997-1-git-send-email-agraf@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <1349369735-14997-1-git-send-email-agraf@suse.de> Subject: Re: [Qemu-devel] [PATCH] PPC: e500: Only expose even TLB sizes in initial TLB List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Graf Cc: "qemu-ppc@nongnu.org List" , qemu-devel qemu-devel On Thu, Oct 04, 2012 at 06:55:35PM +0200, Alexander Graf wrote: > 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 > --- > hw/ppc/e500.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c > index feb712e..d23f9b2 100644 > --- a/hw/ppc/e500.c > +++ b/hw/ppc/e500.c > @@ -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; Applied (actually as part of the PPC pull). -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net