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