/* Used by the 44x TLB replacement exception handler. *Justneededitdeclaredsomeplace.
*/ unsignedint tlb_44x_index; /* = 0 */ unsignedint tlb_44x_hwater = PPC44x_TLB_SIZE - 1 - PPC44x_EARLY_TLBS; int icache_44x_need_flush;
unsignedlong tlb_47x_boltmap[1024/8];
staticvoid __init ppc44x_update_tlb_hwater(void)
{ /* The TLB miss handlers hard codes the watermark in a cmpli *instructiontoimproveperformancesratherthanloadingit *fromtheglobalvariable.Thus,wepatchtheinstructions *inthe2TLBmisshandlerswhenupdatingthevalue
*/
modify_instruction_site(&patch__tlb_44x_hwater_D, 0xffff, tlb_44x_hwater);
modify_instruction_site(&patch__tlb_44x_hwater_I, 0xffff, tlb_44x_hwater);
}
/* Pin in enough TLBs to cover any lowmem not covered by the
* initial 256M mapping established in head_44x.S */ for (addr = memstart + PPC_PIN_SIZE; addr < lowmem_end_addr;
addr += PPC_PIN_SIZE) { if (mmu_has_feature(MMU_FTR_TYPE_47x))
ppc47x_pin_tlb(addr + PAGE_OFFSET, addr); else
ppc44x_pin_tlb(addr + PAGE_OFFSET, addr);
} if (mmu_has_feature(MMU_FTR_TYPE_47x)) {
ppc47x_update_boltmap();
#ifdef DEBUG
{ int i;
printk(KERN_DEBUG "bolted entries: "); for (i = 0; i < 255; i++) { if (test_bit(i, tlb_47x_boltmap))
printk("%d ", i);
}
printk("\n");
} #endif/* DEBUG */
} return total_lowmem;
}
#ifndef CONFIG_NONSTATIC_KERNEL /* We don't currently support the first MEMBLOCK not mapping 0 *physicalonthoseprocessors
*/
BUG_ON(first_memblock_base != 0); #endif
/* 44x has a 256M TLB entry pinned at boot */
size = (min_t(u64, first_memblock_size, PPC_PIN_SIZE));
memblock_set_current_limit(first_memblock_base + size);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.