Message ID | 20220820003125.353570-4-bhe@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm: ioremap: Convert architectures to take GENERIC_IOREMAP way | expand |
On Sat, Aug 20, 2022 at 08:31:17AM +0800, Baoquan He wrote: > Architectures like xtensa, arc, can be converted to GENERIC_IOREMAP, > to take standard ioremap_prot() and ioremap_xxx() way. But they have > ARCH specific handling for ioremap() method, than standard ioremap() > method. Do they? For arc, the arc_uncached_addr_space case can be easily handled by arch_ioremap, and the xtensa case looks very similar to that. I'd really like to kill off arch definitions of ioremap going forward, as they should just be a special case of ioremap_prot by definition.
On 08/20/22 at 11:57pm, Christoph Hellwig wrote: > On Sat, Aug 20, 2022 at 08:31:17AM +0800, Baoquan He wrote: > > Architectures like xtensa, arc, can be converted to GENERIC_IOREMAP, > > to take standard ioremap_prot() and ioremap_xxx() way. But they have > > ARCH specific handling for ioremap() method, than standard ioremap() > > method. > > Do they? > > For arc, the arc_uncached_addr_space case can be easily handled by > arch_ioremap, and the xtensa case looks very similar to that. I am worried it will impact ioremap_prot(). Arc has selected HAVE_IOREMAP_PROT in Kconfig. Putting arc_uncached_addr_space() calling into arch_ioremap() will change ioremap_prot(), right? And I have the same about xtensa. You can see ioremap() and ioremap_cache() will return different value since they take XCHAL_KIO_BYPASS_VADDR and XCHAL_KIO_CACHED_VADDR differently. I haven't figured out a way to handle them in arch_ioremap() differently. static inline void __iomem *ioremap(unsigned long offset, unsigned long size) { if (offset >= XCHAL_KIO_PADDR && offset - XCHAL_KIO_PADDR < XCHAL_KIO_SIZE) return (void*)(offset-XCHAL_KIO_PADDR+XCHAL_KIO_BYPASS_VADDR); else return xtensa_ioremap_nocache(offset, size); } static inline void __iomem *ioremap_cache(unsigned long offset, unsigned long size) { if (offset >= XCHAL_KIO_PADDR && offset - XCHAL_KIO_PADDR < XCHAL_KIO_SIZE) return (void*)(offset-XCHAL_KIO_PADDR+XCHAL_KIO_CACHED_VADDR); else return xtensa_ioremap_cache(offset, size); } > > I'd really like to kill off arch definitions of ioremap going > forward, as they should just be a special case of ioremap_prot > by definition.
diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h index fb9bda2be8ed..68a8117b30fa 100644 --- a/include/asm-generic/io.h +++ b/include/asm-generic/io.h @@ -1078,11 +1078,14 @@ void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, unsigned long prot); void iounmap(volatile void __iomem *addr); +#ifndef ioremap +#define ioremap ioremap 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 #endif /* !CONFIG_MMU || CONFIG_GENERIC_IOREMAP */ #ifndef ioremap_wc
Architectures like xtensa, arc, can be converted to GENERIC_IOREMAP, to take standard ioremap_prot() and ioremap_xxx() way. But they have ARCH specific handling for ioremap() method, than standard ioremap() method. In oder to convert them to take GENERIC_IOREMAP method, allow these architecutres to have their own ioremap definition. This is a preparation patch, no functionality change. Signed-off-by: Baoquan He <bhe@redhat.com> --- include/asm-generic/io.h | 3 +++ 1 file changed, 3 insertions(+)