lib: provide a simple generic ioremap implementation
A lot of architectures reuse the same simple ioremap implementation, so start lifting the most simple variant to lib/ioremap.c. It provides ioremap_prot and iounmap, plus a default ioremap that uses prot_noncached, although that can be overridden by asm/io.h. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Palmer Dabbelt <palmer@dabbelt.com>
This commit is contained in:
@@ -923,9 +923,10 @@ static inline void *phys_to_virt(unsigned long address)
|
||||
* DOC: ioremap() and ioremap_*() variants
|
||||
*
|
||||
* Architectures with an MMU are expected to provide ioremap() and iounmap()
|
||||
* themselves. For NOMMU architectures we provide a default nop-op
|
||||
* implementation that expect that the physical address used for MMIO are
|
||||
* already marked as uncached, and can be used as kernel virtual addresses.
|
||||
* themselves or rely on GENERIC_IOREMAP. For NOMMU architectures we provide
|
||||
* a default nop-op implementation that expect that the physical address used
|
||||
* for MMIO are already marked as uncached, and can be used as kernel virtual
|
||||
* addresses.
|
||||
*
|
||||
* ioremap_wc() and ioremap_wt() can provide more relaxed caching attributes
|
||||
* for specific drivers if the architecture choses to implement them. If they
|
||||
@@ -946,7 +947,18 @@ static inline void iounmap(void __iomem *addr)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#endif /* CONFIG_MMU */
|
||||
#elif defined(CONFIG_GENERIC_IOREMAP)
|
||||
#include <asm/pgtable.h>
|
||||
|
||||
void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot);
|
||||
void iounmap(volatile void __iomem *addr);
|
||||
|
||||
static inline void __iomem *ioremap(phys_addr_t addr, size_t size)
|
||||
{
|
||||
/* _PAGE_IOREMAP needs to be supplied by the architecture */
|
||||
return ioremap_prot(addr, size, _PAGE_IOREMAP);
|
||||
}
|
||||
#endif /* !CONFIG_MMU || CONFIG_GENERIC_IOREMAP */
|
||||
|
||||
#ifndef ioremap_nocache
|
||||
#define ioremap_nocache ioremap
|
||||
|
Reference in New Issue
Block a user