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.
Alex