* -- Cort
*/
int __map_without_bats;
+int __map_without_ltlbs;
/* max amount of RAM to use */
unsigned long __max_memory;
printk("Mem-info:\n");
show_free_areas();
- printk("Free swap: %6dkB\n",nr_swap_pages<<(PAGE_SHIFT-10));
+ printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
i = max_mapnr;
while (i-- > 0) {
total++;
__map_without_bats = 1;
}
+ if (strstr(cmd_line, "noltlbs")) {
+ __map_without_ltlbs = 1;
+ }
+
/* Look for mem= option on command line */
if (strstr(cmd_line, "mem=")) {
char *p, *q;
if (__max_memory && total_memory > __max_memory)
total_memory = __max_memory;
total_lowmem = total_memory;
+#ifdef CONFIG_FSL_BOOKE
+ /* Freescale Book-E parts expect lowmem to be mapped by fixed TLB
+ * entries, so we need to adjust lowmem to match the amount we can map
+ * in the fixed entries */
+ adjust_total_lowmem();
+#endif /* CONFIG_FSL_BOOKE */
if (total_lowmem > __max_low_memory) {
total_lowmem = __max_low_memory;
#ifndef CONFIG_HIGHMEM
ClearPageReserved(page);
set_bit(PG_highmem, &page->flags);
- atomic_set(&page->count, 1);
+ set_page_count(page, 1);
__free_page(page);
totalhigh_pages++;
}
clear_bit(PG_arch_1, &page->flags);
}
+void flush_dcache_icache_page(struct page *page)
+{
+#ifdef CONFIG_BOOKE
+ __flush_dcache_icache(kmap(page));
+ kunmap(page);
+#else
+ __flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
+#endif
+
+}
void clear_user_page(void *page, unsigned long vaddr, struct page *pg)
{
clear_page(page);
if (vma->vm_mm == current->active_mm)
__flush_dcache_icache((void *) address);
else
- __flush_dcache_icache_phys(pfn << PAGE_SHIFT);
+ flush_dcache_icache_page(page);
set_bit(PG_arch_1, &page->flags);
}
}