2006-06-22 15:05:36 +01:00
/*
* linux / arch / arm / mm / nommu . c
*
* ARM uCLinux supporting functions .
*/
# include <linux/module.h>
2006-06-24 10:46:23 +01:00
# include <linux/mm.h>
# include <linux/pagemap.h>
2006-11-30 13:53:54 +00:00
# include <linux/bootmem.h>
2006-06-22 15:05:36 +01:00
2006-06-24 10:46:23 +01:00
# include <asm/cacheflush.h>
2006-06-22 15:05:36 +01:00
# include <asm/io.h>
# include <asm/page.h>
2006-11-30 13:53:54 +00:00
# include <asm/mach/arch.h>
2006-06-22 15:05:36 +01:00
2006-09-27 15:27:33 +01:00
# include "mm.h"
extern void _stext , __data_start , _end ;
/*
* Reserve the various regions of node 0
*/
void __init reserve_node_zero ( pg_data_t * pgdat )
{
/*
* Register the kernel text and data with bootmem .
* Note that this can only be in node 0.
*/
# ifdef CONFIG_XIP_KERNEL
2008-02-07 00:15:17 -08:00
reserve_bootmem_node ( pgdat , __pa ( & __data_start ) , & _end - & __data_start ,
BOOTMEM_DEFAULT ) ;
2006-09-27 15:27:33 +01:00
# else
2008-02-07 00:15:17 -08:00
reserve_bootmem_node ( pgdat , __pa ( & _stext ) , & _end - & _stext ,
BOOTMEM_DEFAULT ) ;
2006-09-27 15:27:33 +01:00
# endif
/*
* Register the exception vector page .
* some architectures which the DRAM is the exception vector to trap ,
* alloc_page breaks with error , although it is not NULL , but " 0. "
*/
2008-02-07 00:15:17 -08:00
reserve_bootmem_node ( pgdat , CONFIG_VECTORS_BASE , PAGE_SIZE ,
BOOTMEM_DEFAULT ) ;
2006-09-27 15:27:33 +01:00
}
/*
* paging_init ( ) sets up the page tables , initialises the zone memory
* maps , and sets up the zero page , bad page and bad page tables .
*/
void __init paging_init ( struct meminfo * mi , struct machine_desc * mdesc )
{
bootmem_init ( mi ) ;
}
2006-09-27 15:43:47 +01:00
/*
* We don ' t need to do anything here for nommu machines .
*/
void setup_mm_for_reboot ( char mode )
{
}
2006-06-24 10:46:23 +01:00
void flush_dcache_page ( struct page * page )
{
__cpuc_flush_dcache_page ( page_address ( page ) ) ;
}
2006-06-27 20:55:43 +01:00
EXPORT_SYMBOL ( flush_dcache_page ) ;
2006-06-24 10:46:23 +01:00
2007-05-05 20:59:27 +01:00
void __iomem * __arm_ioremap_pfn ( unsigned long pfn , unsigned long offset ,
size_t size , unsigned int mtype )
2006-06-22 15:05:36 +01:00
{
if ( pfn > = ( 0x100000000ULL > > PAGE_SHIFT ) )
return NULL ;
return ( void __iomem * ) ( offset + ( pfn < < PAGE_SHIFT ) ) ;
}
2007-05-05 20:59:27 +01:00
EXPORT_SYMBOL ( __arm_ioremap_pfn ) ;
2006-06-22 15:05:36 +01:00
2007-05-05 20:59:27 +01:00
void __iomem * __arm_ioremap ( unsigned long phys_addr , size_t size ,
unsigned int mtype )
2006-06-22 15:05:36 +01:00
{
return ( void __iomem * ) phys_addr ;
}
2007-05-05 20:59:27 +01:00
EXPORT_SYMBOL ( __arm_ioremap ) ;
2006-06-22 15:05:36 +01:00
2006-11-30 13:53:54 +00:00
void __iounmap ( volatile void __iomem * addr )
2006-06-22 15:05:36 +01:00
{
}
EXPORT_SYMBOL ( __iounmap ) ;