xref: /rk3399_ARM-atf/include/lib/mmio.h (revision 82cb2c1ad9897473743f08437d0a3995bed561b9)
14ecca339SDan Handley /*
24ecca339SDan Handley  * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
34ecca339SDan Handley  *
4*82cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
54ecca339SDan Handley  */
64ecca339SDan Handley 
74ecca339SDan Handley #ifndef __MMIO_H__
84ecca339SDan Handley #define __MMIO_H__
94ecca339SDan Handley 
104ecca339SDan Handley #include <stdint.h>
114ecca339SDan Handley 
125e113753SAndrew Thoelke static inline void mmio_write_8(uintptr_t addr, uint8_t value)
135e113753SAndrew Thoelke {
145e113753SAndrew Thoelke 	*(volatile uint8_t*)addr = value;
155e113753SAndrew Thoelke }
164ecca339SDan Handley 
175e113753SAndrew Thoelke static inline uint8_t mmio_read_8(uintptr_t addr)
185e113753SAndrew Thoelke {
195e113753SAndrew Thoelke 	return *(volatile uint8_t*)addr;
205e113753SAndrew Thoelke }
214ecca339SDan Handley 
22fd904df1SJimmy Huang static inline void mmio_write_16(uintptr_t addr, uint16_t value)
23fd904df1SJimmy Huang {
24fd904df1SJimmy Huang 	*(volatile uint16_t*)addr = value;
25fd904df1SJimmy Huang }
26fd904df1SJimmy Huang 
27fd904df1SJimmy Huang static inline uint16_t mmio_read_16(uintptr_t addr)
28fd904df1SJimmy Huang {
29fd904df1SJimmy Huang 	return *(volatile uint16_t*)addr;
30fd904df1SJimmy Huang }
31fd904df1SJimmy Huang 
325e113753SAndrew Thoelke static inline void mmio_write_32(uintptr_t addr, uint32_t value)
335e113753SAndrew Thoelke {
345e113753SAndrew Thoelke 	*(volatile uint32_t*)addr = value;
355e113753SAndrew Thoelke }
365e113753SAndrew Thoelke 
375e113753SAndrew Thoelke static inline uint32_t mmio_read_32(uintptr_t addr)
385e113753SAndrew Thoelke {
395e113753SAndrew Thoelke 	return *(volatile uint32_t*)addr;
405e113753SAndrew Thoelke }
415e113753SAndrew Thoelke 
425e113753SAndrew Thoelke static inline void mmio_write_64(uintptr_t addr, uint64_t value)
435e113753SAndrew Thoelke {
445e113753SAndrew Thoelke 	*(volatile uint64_t*)addr = value;
455e113753SAndrew Thoelke }
465e113753SAndrew Thoelke 
475e113753SAndrew Thoelke static inline uint64_t mmio_read_64(uintptr_t addr)
485e113753SAndrew Thoelke {
495e113753SAndrew Thoelke 	return *(volatile uint64_t*)addr;
505e113753SAndrew Thoelke }
514ecca339SDan Handley 
52fd904df1SJimmy Huang static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear)
53fd904df1SJimmy Huang {
54fd904df1SJimmy Huang 	mmio_write_32(addr, mmio_read_32(addr) & ~clear);
55fd904df1SJimmy Huang }
56fd904df1SJimmy Huang 
57fd904df1SJimmy Huang static inline void mmio_setbits_32(uintptr_t addr, uint32_t set)
58fd904df1SJimmy Huang {
59fd904df1SJimmy Huang 	mmio_write_32(addr, mmio_read_32(addr) | set);
60fd904df1SJimmy Huang }
61fd904df1SJimmy Huang 
62fd904df1SJimmy Huang static inline void mmio_clrsetbits_32(uintptr_t addr,
63fd904df1SJimmy Huang 				uint32_t clear,
64fd904df1SJimmy Huang 				uint32_t set)
65fd904df1SJimmy Huang {
66fd904df1SJimmy Huang 	mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set);
67fd904df1SJimmy Huang }
68fd904df1SJimmy Huang 
694ecca339SDan Handley #endif /* __MMIO_H__ */
70