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