diff options
Diffstat (limited to 'arch/powerpc/mm/pgtable_32.c')
| -rw-r--r-- | arch/powerpc/mm/pgtable_32.c | 155 | 
1 files changed, 1 insertions, 154 deletions
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index 35cb96cfc258..8ec5dfb65b2e 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c @@ -27,166 +27,13 @@  #include <asm/pgtable.h>  #include <asm/pgalloc.h>  #include <asm/fixmap.h> -#include <asm/io.h>  #include <asm/setup.h>  #include <asm/sections.h>  #include <mm/mmu_decl.h> -unsigned long ioremap_bot; -EXPORT_SYMBOL(ioremap_bot);	/* aka VMALLOC_END */ -  extern char etext[], _stext[], _sinittext[], _einittext[]; -void __iomem * -ioremap(phys_addr_t addr, unsigned long size) -{ -	pgprot_t prot = pgprot_noncached(PAGE_KERNEL); - -	return __ioremap_caller(addr, size, prot, __builtin_return_address(0)); -} -EXPORT_SYMBOL(ioremap); - -void __iomem * -ioremap_wc(phys_addr_t addr, unsigned long size) -{ -	pgprot_t prot = pgprot_noncached_wc(PAGE_KERNEL); - -	return __ioremap_caller(addr, size, prot, __builtin_return_address(0)); -} -EXPORT_SYMBOL(ioremap_wc); - -void __iomem * -ioremap_wt(phys_addr_t addr, unsigned long size) -{ -	pgprot_t prot = pgprot_cached_wthru(PAGE_KERNEL); - -	return __ioremap_caller(addr, size, prot, __builtin_return_address(0)); -} -EXPORT_SYMBOL(ioremap_wt); - -void __iomem * -ioremap_coherent(phys_addr_t addr, unsigned long size) -{ -	pgprot_t prot = pgprot_cached(PAGE_KERNEL); - -	return __ioremap_caller(addr, size, prot, __builtin_return_address(0)); -} -EXPORT_SYMBOL(ioremap_coherent); - -void __iomem * -ioremap_prot(phys_addr_t addr, unsigned long size, unsigned long flags) -{ -	pte_t pte = __pte(flags); - -	/* writeable implies dirty for kernel addresses */ -	if (pte_write(pte)) -		pte = pte_mkdirty(pte); - -	/* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */ -	pte = pte_exprotect(pte); -	pte = pte_mkprivileged(pte); - -	return __ioremap_caller(addr, size, pte_pgprot(pte), __builtin_return_address(0)); -} -EXPORT_SYMBOL(ioremap_prot); - -void __iomem * -__ioremap(phys_addr_t addr, unsigned long size, unsigned long flags) -{ -	return __ioremap_caller(addr, size, __pgprot(flags), __builtin_return_address(0)); -} - -void __iomem * -__ioremap_caller(phys_addr_t addr, unsigned long size, pgprot_t prot, void *caller) -{ -	unsigned long v, i; -	phys_addr_t p; -	int err; - -	/* -	 * Choose an address to map it to. -	 * Once the vmalloc system is running, we use it. -	 * Before then, we use space going down from IOREMAP_TOP -	 * (ioremap_bot records where we're up to). -	 */ -	p = addr & PAGE_MASK; -	size = PAGE_ALIGN(addr + size) - p; - -	/* -	 * If the address lies within the first 16 MB, assume it's in ISA -	 * memory space -	 */ -	if (p < 16*1024*1024) -		p += _ISA_MEM_BASE; - -#ifndef CONFIG_CRASH_DUMP -	/* -	 * Don't allow anybody to remap normal RAM that we're using. -	 * mem_init() sets high_memory so only do the check after that. -	 */ -	if (slab_is_available() && p <= virt_to_phys(high_memory - 1) && -	    page_is_ram(__phys_to_pfn(p))) { -		printk("__ioremap(): phys addr 0x%llx is RAM lr %ps\n", -		       (unsigned long long)p, __builtin_return_address(0)); -		return NULL; -	} -#endif - -	if (size == 0) -		return NULL; - -	/* -	 * Is it already mapped?  Perhaps overlapped by a previous -	 * mapping. -	 */ -	v = p_block_mapped(p); -	if (v) -		goto out; - -	if (slab_is_available()) { -		struct vm_struct *area; -		area = get_vm_area_caller(size, VM_IOREMAP, caller); -		if (area == 0) -			return NULL; -		area->phys_addr = p; -		v = (unsigned long) area->addr; -	} else { -		v = (ioremap_bot -= size); -	} - -	/* -	 * Should check if it is a candidate for a BAT mapping -	 */ - -	err = 0; -	for (i = 0; i < size && err == 0; i += PAGE_SIZE) -		err = map_kernel_page(v + i, p + i, prot); -	if (err) { -		if (slab_is_available()) -			vunmap((void *)v); -		return NULL; -	} - -out: -	return (void __iomem *) (v + ((unsigned long)addr & ~PAGE_MASK)); -} -EXPORT_SYMBOL(__ioremap); - -void iounmap(volatile void __iomem *addr) -{ -	/* -	 * If mapped by BATs then there is nothing to do. -	 * Calling vfree() generates a benign warning. -	 */ -	if (v_block_mapped((unsigned long)addr)) -		return; - -	if (addr > high_memory && (unsigned long) addr < ioremap_bot) -		vunmap((void *) (PAGE_MASK & (unsigned long)addr)); -} -EXPORT_SYMBOL(iounmap); -  static void __init *early_alloc_pgtable(unsigned long size)  {  	void *ptr = memblock_alloc(size, size); @@ -252,7 +99,7 @@ static void __init __mapin_ram_chunk(unsigned long offset, unsigned long top)  		map_kernel_page(v, p, ktext ? PAGE_KERNEL_TEXT : PAGE_KERNEL);  #ifdef CONFIG_PPC_BOOK3S_32  		if (ktext) -			hash_preload(&init_mm, v, false, 0x300); +			hash_preload(&init_mm, v);  #endif  		v += PAGE_SIZE;  		p += PAGE_SIZE;  |