1*bd744d46SAndrew Jones /* SPDX-License-Identifier: GPL-2.0-only */ 2*bd744d46SAndrew Jones /* 3*bd744d46SAndrew Jones * From Linux arch/riscv/include/asm/mmio.h 4*bd744d46SAndrew Jones */ 5*bd744d46SAndrew Jones #ifndef _ASMRISCV_IO_H_ 6*bd744d46SAndrew Jones #define _ASMRISCV_IO_H_ 7*bd744d46SAndrew Jones #include <libcflat.h> 8*bd744d46SAndrew Jones 9*bd744d46SAndrew Jones #define __iomem 10*bd744d46SAndrew Jones 11*bd744d46SAndrew Jones /* Generic IO read/write. These perform native-endian accesses. */ 12*bd744d46SAndrew Jones #define __raw_writeb __raw_writeb 13*bd744d46SAndrew Jones static inline void __raw_writeb(u8 val, volatile void __iomem *addr) 14*bd744d46SAndrew Jones { 15*bd744d46SAndrew Jones asm volatile("sb %0, 0(%1)" : : "r" (val), "r" (addr)); 16*bd744d46SAndrew Jones } 17*bd744d46SAndrew Jones 18*bd744d46SAndrew Jones #define __raw_writew __raw_writew 19*bd744d46SAndrew Jones static inline void __raw_writew(u16 val, volatile void __iomem *addr) 20*bd744d46SAndrew Jones { 21*bd744d46SAndrew Jones asm volatile("sh %0, 0(%1)" : : "r" (val), "r" (addr)); 22*bd744d46SAndrew Jones } 23*bd744d46SAndrew Jones 24*bd744d46SAndrew Jones #define __raw_writel __raw_writel 25*bd744d46SAndrew Jones static inline void __raw_writel(u32 val, volatile void __iomem *addr) 26*bd744d46SAndrew Jones { 27*bd744d46SAndrew Jones asm volatile("sw %0, 0(%1)" : : "r" (val), "r" (addr)); 28*bd744d46SAndrew Jones } 29*bd744d46SAndrew Jones 30*bd744d46SAndrew Jones #ifdef CONFIG_64BIT 31*bd744d46SAndrew Jones #define __raw_writeq __raw_writeq 32*bd744d46SAndrew Jones static inline void __raw_writeq(u64 val, volatile void __iomem *addr) 33*bd744d46SAndrew Jones { 34*bd744d46SAndrew Jones asm volatile("sd %0, 0(%1)" : : "r" (val), "r" (addr)); 35*bd744d46SAndrew Jones } 36*bd744d46SAndrew Jones #endif 37*bd744d46SAndrew Jones 38*bd744d46SAndrew Jones #define __raw_readb __raw_readb 39*bd744d46SAndrew Jones static inline u8 __raw_readb(const volatile void __iomem *addr) 40*bd744d46SAndrew Jones { 41*bd744d46SAndrew Jones u8 val; 42*bd744d46SAndrew Jones 43*bd744d46SAndrew Jones asm volatile("lb %0, 0(%1)" : "=r" (val) : "r" (addr)); 44*bd744d46SAndrew Jones return val; 45*bd744d46SAndrew Jones } 46*bd744d46SAndrew Jones 47*bd744d46SAndrew Jones #define __raw_readw __raw_readw 48*bd744d46SAndrew Jones static inline u16 __raw_readw(const volatile void __iomem *addr) 49*bd744d46SAndrew Jones { 50*bd744d46SAndrew Jones u16 val; 51*bd744d46SAndrew Jones 52*bd744d46SAndrew Jones asm volatile("lh %0, 0(%1)" : "=r" (val) : "r" (addr)); 53*bd744d46SAndrew Jones return val; 54*bd744d46SAndrew Jones } 55*bd744d46SAndrew Jones 56*bd744d46SAndrew Jones #define __raw_readl __raw_readl 57*bd744d46SAndrew Jones static inline u32 __raw_readl(const volatile void __iomem *addr) 58*bd744d46SAndrew Jones { 59*bd744d46SAndrew Jones u32 val; 60*bd744d46SAndrew Jones 61*bd744d46SAndrew Jones asm volatile("lw %0, 0(%1)" : "=r" (val) : "r" (addr)); 62*bd744d46SAndrew Jones return val; 63*bd744d46SAndrew Jones } 64*bd744d46SAndrew Jones 65*bd744d46SAndrew Jones #ifdef CONFIG_64BIT 66*bd744d46SAndrew Jones #define __raw_readq __raw_readq 67*bd744d46SAndrew Jones static inline u64 __raw_readq(const volatile void __iomem *addr) 68*bd744d46SAndrew Jones { 69*bd744d46SAndrew Jones u64 val; 70*bd744d46SAndrew Jones 71*bd744d46SAndrew Jones asm volatile("ld %0, 0(%1)" : "=r" (val) : "r" (addr)); 72*bd744d46SAndrew Jones return val; 73*bd744d46SAndrew Jones } 74*bd744d46SAndrew Jones #endif 75*bd744d46SAndrew Jones 76*bd744d46SAndrew Jones #include <asm-generic/io.h> 77*bd744d46SAndrew Jones 78*bd744d46SAndrew Jones #endif /* _ASMRISCV_IO_H_ */ 79