1 /* 2 * linux/arch/arm/mm/nommu.c 3 * 4 * ARM uCLinux supporting functions. 5 */ 6 #include <linux/module.h> 7 #include <linux/mm.h> 8 #include <linux/pagemap.h> 9 #include <linux/bootmem.h> 10 #include <linux/io.h> 11 12 #include <asm/cacheflush.h> 13 #include <asm/page.h> 14 #include <asm/mach/arch.h> 15 16 #include "mm.h" 17 18 /* 19 * Reserve the various regions of node 0 20 */ 21 void __init reserve_node_zero(pg_data_t *pgdat) 22 { 23 /* 24 * Register the kernel text and data with bootmem. 25 * Note that this can only be in node 0. 26 */ 27 #ifdef CONFIG_XIP_KERNEL 28 reserve_bootmem_node(pgdat, __pa(&__data_start), &_end - &__data_start, 29 BOOTMEM_DEFAULT); 30 #else 31 reserve_bootmem_node(pgdat, __pa(&_stext), &_end - &_stext, 32 BOOTMEM_DEFAULT); 33 #endif 34 35 /* 36 * Register the exception vector page. 37 * some architectures which the DRAM is the exception vector to trap, 38 * alloc_page breaks with error, although it is not NULL, but "0." 39 */ 40 reserve_bootmem_node(pgdat, CONFIG_VECTORS_BASE, PAGE_SIZE, 41 BOOTMEM_DEFAULT); 42 } 43 44 static void __init sanity_check_meminfo(struct meminfo *mi) 45 { 46 int i, j; 47 48 for (i = 0, j = 0; i < mi->nr_banks; i++) { 49 struct membank *mb = &mi->bank[i]; 50 51 if (mb->size != 0 && mb->node < MAX_NUMNODES) 52 mi->bank[j++] = mi->bank[i]; 53 } 54 mi->nr_banks = j; 55 } 56 57 /* 58 * paging_init() sets up the page tables, initialises the zone memory 59 * maps, and sets up the zero page, bad page and bad page tables. 60 */ 61 void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc) 62 { 63 sanity_check_meminfo(mi); 64 bootmem_init(mi); 65 } 66 67 /* 68 * We don't need to do anything here for nommu machines. 69 */ 70 void setup_mm_for_reboot(char mode) 71 { 72 } 73 74 void flush_dcache_page(struct page *page) 75 { 76 __cpuc_flush_dcache_page(page_address(page)); 77 } 78 EXPORT_SYMBOL(flush_dcache_page); 79 80 void __iomem *__arm_ioremap_pfn(unsigned long pfn, unsigned long offset, 81 size_t size, unsigned int mtype) 82 { 83 if (pfn >= (0x100000000ULL >> PAGE_SHIFT)) 84 return NULL; 85 return (void __iomem *) (offset + (pfn << PAGE_SHIFT)); 86 } 87 EXPORT_SYMBOL(__arm_ioremap_pfn); 88 89 void __iomem *__arm_ioremap(unsigned long phys_addr, size_t size, 90 unsigned int mtype) 91 { 92 return (void __iomem *)phys_addr; 93 } 94 EXPORT_SYMBOL(__arm_ioremap); 95 96 void __iounmap(volatile void __iomem *addr) 97 { 98 } 99 EXPORT_SYMBOL(__iounmap); 100