forked from Minki/linux
powerpc/mm: move common 32/64 bits ioremap functions into ioremap.c
ioremap(), ioremap_wc() and ioremap_coherent() are now identical on PPC32 and PPC64 as iowa_is_active() will always return false on PPC32. Move them into a new common location called ioremap.c Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/6223803ce024d6ab4dfaa919f44098aed5b4bc33.1566309262.git.christophe.leroy@c-s.fr
This commit is contained in:
parent
14b4d97669
commit
4634c375db
@ -7,7 +7,7 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC)
|
||||
|
||||
obj-y := fault.o mem.o pgtable.o mmap.o \
|
||||
init_$(BITS).o pgtable_$(BITS).o \
|
||||
pgtable-frag.o \
|
||||
pgtable-frag.o ioremap.o \
|
||||
init-common.o mmu_context.o drmem.o
|
||||
obj-$(CONFIG_PPC_MMU_NOHASH) += nohash/
|
||||
obj-$(CONFIG_PPC_BOOK3S_32) += book3s32/
|
||||
|
36
arch/powerpc/mm/ioremap.c
Normal file
36
arch/powerpc/mm/ioremap.c
Normal file
@ -0,0 +1,36 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <asm/io-workarounds.h>
|
||||
|
||||
void __iomem *ioremap(phys_addr_t addr, unsigned long size)
|
||||
{
|
||||
pgprot_t prot = pgprot_noncached(PAGE_KERNEL);
|
||||
void *caller = __builtin_return_address(0);
|
||||
|
||||
if (iowa_is_active())
|
||||
return iowa_ioremap(addr, size, prot, caller);
|
||||
return __ioremap_caller(addr, size, prot, caller);
|
||||
}
|
||||
EXPORT_SYMBOL(ioremap);
|
||||
|
||||
void __iomem *ioremap_wc(phys_addr_t addr, unsigned long size)
|
||||
{
|
||||
pgprot_t prot = pgprot_noncached_wc(PAGE_KERNEL);
|
||||
void *caller = __builtin_return_address(0);
|
||||
|
||||
if (iowa_is_active())
|
||||
return iowa_ioremap(addr, size, prot, caller);
|
||||
return __ioremap_caller(addr, size, prot, caller);
|
||||
}
|
||||
EXPORT_SYMBOL(ioremap_wc);
|
||||
|
||||
void __iomem *ioremap_coherent(phys_addr_t addr, unsigned long size)
|
||||
{
|
||||
pgprot_t prot = pgprot_cached(PAGE_KERNEL);
|
||||
void *caller = __builtin_return_address(0);
|
||||
|
||||
if (iowa_is_active())
|
||||
return iowa_ioremap(addr, size, prot, caller);
|
||||
return __ioremap_caller(addr, size, prot, caller);
|
||||
}
|
@ -38,24 +38,6 @@ 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)
|
||||
{
|
||||
@ -65,15 +47,6 @@ ioremap_wt(phys_addr_t addr, unsigned long size)
|
||||
}
|
||||
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)
|
||||
{
|
||||
|
@ -35,7 +35,6 @@
|
||||
#include <asm/page.h>
|
||||
#include <asm/prom.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/io-workarounds.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/mmu.h>
|
||||
@ -204,36 +203,6 @@ void __iomem * __ioremap_caller(phys_addr_t addr, unsigned long size,
|
||||
return ret;
|
||||
}
|
||||
|
||||
void __iomem * ioremap(phys_addr_t addr, unsigned long size)
|
||||
{
|
||||
pgprot_t prot = pgprot_noncached(PAGE_KERNEL);
|
||||
void *caller = __builtin_return_address(0);
|
||||
|
||||
if (iowa_is_active())
|
||||
return iowa_ioremap(addr, size, prot, caller);
|
||||
return __ioremap_caller(addr, size, prot, caller);
|
||||
}
|
||||
|
||||
void __iomem * ioremap_wc(phys_addr_t addr, unsigned long size)
|
||||
{
|
||||
pgprot_t prot = pgprot_noncached_wc(PAGE_KERNEL);
|
||||
void *caller = __builtin_return_address(0);
|
||||
|
||||
if (iowa_is_active())
|
||||
return iowa_ioremap(addr, size, prot, caller);
|
||||
return __ioremap_caller(addr, size, prot, caller);
|
||||
}
|
||||
|
||||
void __iomem *ioremap_coherent(phys_addr_t addr, unsigned long size)
|
||||
{
|
||||
pgprot_t prot = pgprot_cached(PAGE_KERNEL);
|
||||
void *caller = __builtin_return_address(0);
|
||||
|
||||
if (iowa_is_active())
|
||||
return iowa_ioremap(addr, size, prot, caller);
|
||||
return __ioremap_caller(addr, size, prot, caller);
|
||||
}
|
||||
|
||||
void __iomem * ioremap_prot(phys_addr_t addr, unsigned long size,
|
||||
unsigned long flags)
|
||||
{
|
||||
@ -278,8 +247,6 @@ void iounmap(volatile void __iomem *token)
|
||||
vunmap(addr);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ioremap);
|
||||
EXPORT_SYMBOL(ioremap_wc);
|
||||
EXPORT_SYMBOL(ioremap_prot);
|
||||
EXPORT_SYMBOL(__ioremap_at);
|
||||
EXPORT_SYMBOL(iounmap);
|
||||
|
Loading…
Reference in New Issue
Block a user