asm-generic: don't provide ioremap for CONFIG_MMU
All MMU-enabled ports have a non-trivial ioremap and should thus provide the prototype for their implementation instead of providing a generic one unless a different symbol is not defined. Note that this only affects sparc32 nds32 as all others do provide their own version. Also update the kerneldoc comments in asm-generic/io.h to explain the situation around the default ioremap* implementations correctly. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
e97133959a
commit
97c9801a15
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
|
||||
void __iomem *ioremap(phys_addr_t phys_addr, size_t size);
|
||||
extern void iounmap(volatile void __iomem *addr);
|
||||
#define __raw_writeb __raw_writeb
|
||||
static inline void __raw_writeb(u8 val, volatile void __iomem *addr)
|
||||
|
@ -80,4 +81,5 @@ static inline u32 __raw_readl(const volatile void __iomem *addr)
|
|||
#define writew(v,c) ({ __iowmb(); writew_relaxed((v),(c)); })
|
||||
#define writel(v,c) ({ __iowmb(); writel_relaxed((v),(c)); })
|
||||
#include <asm-generic/io.h>
|
||||
|
||||
#endif /* __ASM_NDS32_IO_H */
|
||||
|
|
|
@ -127,6 +127,7 @@ static inline void sbus_memcpy_toio(volatile void __iomem *dst,
|
|||
* Bus number may be embedded in the higher bits of the physical address.
|
||||
* This is why we have no bus number argument to ioremap().
|
||||
*/
|
||||
void __iomem *ioremap(phys_addr_t offset, size_t size);
|
||||
void iounmap(volatile void __iomem *addr);
|
||||
/* Create a virtual mapping cookie for an IO port range */
|
||||
void __iomem *ioport_map(unsigned long port, unsigned int nr);
|
||||
|
|
|
@ -922,28 +922,16 @@ static inline void *phys_to_virt(unsigned long address)
|
|||
/**
|
||||
* DOC: ioremap() and ioremap_*() variants
|
||||
*
|
||||
* If you have an IOMMU your architecture is expected to have both ioremap()
|
||||
* and iounmap() implemented otherwise the asm-generic helpers will provide a
|
||||
* direct mapping.
|
||||
* 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.
|
||||
*
|
||||
* There are ioremap_*() call variants, if you have no IOMMU we naturally will
|
||||
* default to direct mapping for all of them, you can override these defaults.
|
||||
* If you have an IOMMU you are highly encouraged to provide your own
|
||||
* ioremap variant implementation as there currently is no safe architecture
|
||||
* agnostic default. To avoid possible improper behaviour default asm-generic
|
||||
* ioremap_*() variants all return NULL when an IOMMU is available. If you've
|
||||
* defined your own ioremap_*() variant you must then declare your own
|
||||
* ioremap_*() variant as defined to itself to avoid the default NULL return.
|
||||
* ioremap_wc() and ioremap_wt() can provide more relaxed caching attributes
|
||||
* for specific drivers if the architecture choses to implement them. If they
|
||||
* are not implemented we fall back to plain ioremap.
|
||||
*/
|
||||
#ifndef CONFIG_MMU
|
||||
|
||||
/*
|
||||
* Change "struct page" to physical address.
|
||||
*
|
||||
* This implementation is for the no-MMU case only... if you have an MMU
|
||||
* you'll need to provide your own definitions.
|
||||
*/
|
||||
|
||||
#ifndef ioremap
|
||||
#define ioremap ioremap
|
||||
static inline void __iomem *ioremap(phys_addr_t offset, size_t size)
|
||||
|
@ -954,14 +942,13 @@ static inline void __iomem *ioremap(phys_addr_t offset, size_t size)
|
|||
|
||||
#ifndef iounmap
|
||||
#define iounmap iounmap
|
||||
|
||||
static inline void iounmap(void __iomem *addr)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#endif /* CONFIG_MMU */
|
||||
|
||||
#ifndef ioremap_nocache
|
||||
void __iomem *ioremap(phys_addr_t phys_addr, size_t size);
|
||||
#define ioremap_nocache ioremap_nocache
|
||||
static inline void __iomem *ioremap_nocache(phys_addr_t offset, size_t size)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue