1 /*
2 * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #ifndef __MMIO_H__
8 #define __MMIO_H__
9
10 #include <stdint.h>
11
mmio_write_8(uintptr_t addr,uint8_t value)12 static inline void mmio_write_8(uintptr_t addr, uint8_t value)
13 {
14 *(volatile uint8_t*)addr = value;
15 }
16
mmio_read_8(uintptr_t addr)17 static inline uint8_t mmio_read_8(uintptr_t addr)
18 {
19 return *(volatile uint8_t*)addr;
20 }
21
mmio_write_16(uintptr_t addr,uint16_t value)22 static inline void mmio_write_16(uintptr_t addr, uint16_t value)
23 {
24 *(volatile uint16_t*)addr = value;
25 }
26
mmio_read_16(uintptr_t addr)27 static inline uint16_t mmio_read_16(uintptr_t addr)
28 {
29 return *(volatile uint16_t*)addr;
30 }
31
mmio_write_32(uintptr_t addr,uint32_t value)32 static inline void mmio_write_32(uintptr_t addr, uint32_t value)
33 {
34 *(volatile uint32_t*)addr = value;
35 }
36
mmio_read_32(uintptr_t addr)37 static inline uint32_t mmio_read_32(uintptr_t addr)
38 {
39 return *(volatile uint32_t*)addr;
40 }
41
mmio_write_64(uintptr_t addr,uint64_t value)42 static inline void mmio_write_64(uintptr_t addr, uint64_t value)
43 {
44 *(volatile uint64_t*)addr = value;
45 }
46
mmio_read_64(uintptr_t addr)47 static inline uint64_t mmio_read_64(uintptr_t addr)
48 {
49 return *(volatile uint64_t*)addr;
50 }
51
mmio_clrbits_32(uintptr_t addr,uint32_t clear)52 static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear)
53 {
54 mmio_write_32(addr, mmio_read_32(addr) & ~clear);
55 }
56
mmio_setbits_32(uintptr_t addr,uint32_t set)57 static inline void mmio_setbits_32(uintptr_t addr, uint32_t set)
58 {
59 mmio_write_32(addr, mmio_read_32(addr) | set);
60 }
61
mmio_clrsetbits_32(uintptr_t addr,uint32_t clear,uint32_t set)62 static inline void mmio_clrsetbits_32(uintptr_t addr,
63 uint32_t clear,
64 uint32_t set)
65 {
66 mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set);
67 }
68
69 #endif /* __MMIO_H__ */
70