On 06.10.2012, at 20:35, Aurelien Jarno <aurel...@aurel32.net> wrote:

> 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 <ag...@suse.de>
>> ---
>> 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).

Yes, these were quite critical bugfixes that I folded into the pull request. 
Sorry for not noting it anywhere :).

Alex

> 
> 
> -- 
> Aurelien Jarno                          GPG: 1024D/F1BCDB73
> aurel...@aurel32.net                 http://www.aurel32.net

Reply via email to