On 01/23/2012 11:33 AM, Alexander Graf wrote:
> On 01/23/2012 06:32 PM, Scott Wood wrote:
>> On 01/20/2012 10:15 PM, Alexander Graf wrote:
>>> @@ -4273,6 +4274,16 @@ void helper_booke206_tlbwe(void)
>>>           tlb->mas1&= ~MAS1_IPROT;
>>>       }
>>>
>>> +    /* check that we support the targeted size */
>>> +    size_tlb = (tlb->mas1&  MAS1_TSIZE_MASK)>>  MAS1_TSIZE_SHIFT;
>>> +    size_ps = booke206_tlbnps(env, tlbn);
>>> +    if ((tlb->mas1&  MAS1_VALID)&&  (tlbncfg&  TLBnCFG_AVAIL)&&
>>> +        !(size_ps&  (1<<  size_tlb))) {
>>> +        helper_raise_exception_err(POWERPC_EXCP_PROGRAM,
>>> +                                   POWERPC_EXCP_INVAL |
>>> +                                   POWERPC_EXCP_INVAL_INVAL);
>>> +    }
>>> +
>>>       if (booke206_tlb_to_page_size(env, tlb) == TARGET_PAGE_SIZE) {
>>>           tlb_flush_page(env, tlb->mas2&  MAS2_EPN_MASK);
>>>       } else {
>> For tlb0 on e500 and derivatives, tsize is explicitly documented as
>> ignored.  Software may rely on this.
> 
> Yup, that's why there's the check for TLBnCG_AVAIL, which indicates that
> a TLB has dynamic page size capabilities, which TLB0 does not have.

Silly me, thinking "avail" meant "this TLB is available" instead of
looking up the actual meaning. :-P

Where do we check whether the TLB exists at all?

-Scott


Reply via email to