qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [PATCH] PPC: booke206: Check for min/max TLB entry size


From: Alexander Graf
Subject: Re: [Qemu-ppc] [PATCH] PPC: booke206: Check for min/max TLB entry size
Date: Sat, 21 Jan 2012 03:43:00 +0100


Am 20.01.2012 um 21:01 schrieb Scott Wood <address@hidden>:

> On 01/20/2012 07:21 AM, Alexander Graf wrote:
>> When setting a TLB entry, we need to check if the TLB we're putting it in
>> actually supports the given size. According to the 2.06 PowerPC ISA, a
>> value that's out of range results in the minimum page size for the TLB
>> to be used.
> 
> The ISA says, "If the page size specified by
> MAS1TSIZE is not supported by the specified array, the
> tlbwe may be performed as if TSIZE were some imple-
> mentation-dependent value, or an Illegal Instruction
> exception occurs."

Ah, I looked at MMUCSR0 behavior (page 955 in 2.06B) where it stated that 
invalid sizes mean MINSIZE. Apparently it's not defined for tlbwe though.

However, if we declare the implementation dependent value to be MINSIZE for us, 
we're good. If you have any idea what hardware does, that would be great. 
Otherwise when I get the chance I could of course. Also give it a try myself :).

> 
> In practice, what this means on e500 is that TLB0 (which only supports
> one page size) ignores TSIZE.  

Yes, that part is actually written out

> I'm not sure what happens when you write
> an entry to TLB1 with an invalid TSIZE.

What it says, the ISA means it's implementation dependent. What e500mc actually 
implements is an different question. Which still needs to be answered.

However for now I think wde 're ok by not modeling every odd corner case.

> 
>> +    /* XXX only applies for MAV 1.0 */
>> +    size_tlb = (tlb->mas1 & MAS1_TSIZE_MASK) >> (MAS1_TSIZE_SHIFT + 1);
>> +    size_min = (tlbncfg & TLBnCFG_MINSIZE) >> TLBnCFG_MINSIZE_SHIFT;
>> +    size_max = (tlbncfg & TLBnCFG_MAXSIZE) >> TLBnCFG_MAXSIZE_SHIFT;
>> +    if ((size_tlb > size_max) || (size_tlb < size_min)) {
>> +        /* set to min size */
>> +        tlb->mas1 &= ~MAS1_TSIZE_MASK;
>> +        tlb->mas1 |= size_min << (MAS1_TSIZE_SHIFT + 1);
>> +    }
> 
> You could just implement a bitmap now, which will work for MAV 2.0 as well.
> 
> Especially since we're using the MAV 2.0 definition of tsize already, so
> min/max isn't an accurate way to describe what we support.

Not sure I follow. In MAV 1.0 the size constraints are defined in TLBnCFG, 
while for MAV 2.0 they are defned in their own bitmap registers (TLBnPS)

Would you like to have a function called that returns a bitmap of supported 
sizes for the TLB depending on its MAV value based on either TLBnCFG or TLBnPS? 
We could then check if that size value bit is set.

Alex

> 
> -Scott
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]