1 /* This code is directly from Microwatt and is Copyright and Licensed
2 under the same terms as Microwatt source code.
3 https://github.com/antonblanchard/microwatt/blob/master/include/io.h
9 static inline uint8_t readb(unsigned long addr
)
12 __asm__
volatile("sync; lbzcix %0,0,%1" : "=r" (val
) : "r" (addr
) : "memory");
16 static inline uint16_t readw(unsigned long addr
)
19 __asm__
volatile("sync; lhzcix %0,0,%1" : "=r" (val
) : "r" (addr
) : "memory");
23 static inline uint32_t readl(unsigned long addr
)
26 __asm__
volatile("sync; lwzcix %0,0,%1" : "=r" (val
) : "r" (addr
) : "memory");
30 static inline uint64_t readq(unsigned long addr
)
33 __asm__
volatile("sync; ldcix %0,0,%1" : "=r" (val
) : "r" (addr
) : "memory");
37 static inline void writeb(uint8_t val
, unsigned long addr
)
39 __asm__
volatile("sync; stbcix %0,0,%1" : : "r" (val
), "r" (addr
) : "memory");
42 static inline void writew(uint16_t val
, unsigned long addr
)
44 __asm__
volatile("sync; sthcix %0,0,%1" : : "r" (val
), "r" (addr
) : "memory");
47 static inline void writel(uint32_t val
, unsigned long addr
)
49 __asm__
volatile("sync; stwcix %0,0,%1" : : "r" (val
), "r" (addr
) : "memory");
52 static inline void writeq(uint64_t val
, unsigned long addr
)
54 __asm__
volatile("sync; stdcix %0,0,%1" : : "r" (val
), "r" (addr
) : "memory");