1 /*
2  * SPDX-License-Identifier: BSD-3-Clause
3  * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
4  */
5 
6 #ifndef MMIO_H
7 #define MMIO_H
8 
9 #include <arch_helpers.h>
10 #include <stdint.h>
11 
read8(volatile void * addr)12 static inline uint8_t read8(volatile void *addr)
13 {
14 	uint8_t val;
15 
16 	dsb(ld);
17 	asm volatile("ldrb %w0, [%1]" : "=r" (val) : "r" (addr));
18 	dsb(ld);
19 	return val;
20 }
21 
write8(uint8_t val,volatile void * addr)22 static inline void write8(uint8_t val, volatile void *addr)
23 {
24 	dsb(st);
25 	asm volatile("strb %w0, [%1]" :  : "r" (val), "r" (addr));
26 	dsb(st);
27 }
28 
read16(volatile void * addr)29 static inline uint16_t read16(volatile void *addr)
30 {
31 	uint16_t val;
32 
33 	dsb(ld);
34 	asm volatile("ldrh %w0, [%1]" : "=r" (val) : "r" (addr));
35 	dsb(ld);
36 	return val;
37 }
38 
write16(uint16_t val,volatile void * addr)39 static inline void write16(uint16_t val, volatile void *addr)
40 {
41 	dsb(st);
42 	asm volatile("strh %w0, [%1]" :  : "r" (val), "r" (addr));
43 	dsb(st);
44 }
45 
read32(volatile void * addr)46 static inline uint32_t read32(volatile void *addr)
47 {
48 	uint32_t val;
49 
50 	dsb(ld);
51 	asm volatile("ldr %w0, [%1]" : "=r" (val) : "r" (addr));
52 	dsb(ld);
53 	return val;
54 }
55 
write32(uint32_t val,volatile void * addr)56 static inline void write32(uint32_t val, volatile void *addr)
57 {
58 	dsb(st);
59 	asm volatile("str %w0, [%1]" :  : "r" (val), "r" (addr));
60 	dsb(st);
61 }
62 
read64(volatile void * addr)63 static inline uint64_t read64(volatile void *addr)
64 {
65 	uint64_t val;
66 
67 	dsb(ld);
68 	asm volatile("ldr %0, [%1]" : "=r" (val) : "r" (addr));
69 	dsb(ld);
70 	return val;
71 }
72 
write64(uint64_t val,volatile void * addr)73 static inline void write64(uint64_t val, volatile void *addr)
74 {
75 	dsb(st);
76 	asm volatile("str %0, [%1]" :  : "r" (val), "r" (addr));
77 	dsb(st);
78 }
79 
80 #endif /* MMIO_H */
81