addr is already __iomem, but we need to force strip that away to use it as normal pointer. Define __io_virt like Linux does and use it. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- include/asm-generic/io.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h index 150a97645b6b..a4b0dc4b4337 100644 --- a/include/asm-generic/io.h +++ b/include/asm-generic/io.h @@ -425,6 +425,8 @@ static inline void iowrite64be(u64 value, volatile void __iomem *addr) #define IOMEM(addr) ((void __force __iomem *)(addr)) #endif +#define __io_virt(x) ((void __force *)(x)) + #ifndef memset_io #define memset_io memset_io /** @@ -438,7 +440,7 @@ static inline void iowrite64be(u64 value, volatile void __iomem *addr) static inline void memset_io(volatile void __iomem *addr, int value, size_t size) { - memset(IOMEM(addr), value, size); + memset(__io_virt(addr), value, size); } #endif @@ -456,7 +458,7 @@ static inline void memcpy_fromio(void *buffer, const volatile void __iomem *addr, size_t size) { - memcpy(buffer, IOMEM(addr), size); + memcpy(buffer, __io_virt(addr), size); } #endif @@ -473,7 +475,7 @@ static inline void memcpy_fromio(void *buffer, static inline void memcpy_toio(volatile void __iomem *addr, const void *buffer, size_t size) { - memcpy(IOMEM(addr), buffer, size); + memcpy(__io_virt(addr), buffer, size); } #endif -- 2.30.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox