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_clrsetbits_16(uintptr_t addr,uint16_t clear,uint16_t set)32 static inline void mmio_clrsetbits_16(uintptr_t addr,
33 				uint16_t clear,
34 				uint16_t set)
35 {
36 	mmio_write_16(addr, (mmio_read_16(addr) & ~clear) | set);
37 }
38 
mmio_write_32(uintptr_t addr,uint32_t value)39 static inline void mmio_write_32(uintptr_t addr, uint32_t value)
40 {
41 	*(volatile uint32_t*)addr = value;
42 }
43 
mmio_read_32(uintptr_t addr)44 static inline uint32_t mmio_read_32(uintptr_t addr)
45 {
46 	return *(volatile uint32_t*)addr;
47 }
48 
mmio_write_64(uintptr_t addr,uint64_t value)49 static inline void mmio_write_64(uintptr_t addr, uint64_t value)
50 {
51 	*(volatile uint64_t*)addr = value;
52 }
53 
mmio_read_64(uintptr_t addr)54 static inline uint64_t mmio_read_64(uintptr_t addr)
55 {
56 	return *(volatile uint64_t*)addr;
57 }
58 
mmio_clrbits_32(uintptr_t addr,uint32_t clear)59 static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear)
60 {
61 	mmio_write_32(addr, mmio_read_32(addr) & ~clear);
62 }
63 
mmio_setbits_32(uintptr_t addr,uint32_t set)64 static inline void mmio_setbits_32(uintptr_t addr, uint32_t set)
65 {
66 	mmio_write_32(addr, mmio_read_32(addr) | set);
67 }
68 
mmio_clrsetbits_32(uintptr_t addr,uint32_t clear,uint32_t set)69 static inline void mmio_clrsetbits_32(uintptr_t addr,
70 				uint32_t clear,
71 				uint32_t set)
72 {
73 	mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set);
74 }
75 
76 #endif /* MMIO_H */
77