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.