xref: /rk3399_ARM-atf/include/lib/mmio.h (revision 72e8f2456af54b75a0a1d92aadfce0b4bcde6ba1)
14ecca339SDan Handley /*
2*4c700c15SGovindraj Raja  * Copyright (c) 2013-2014, Arm Limited and Contributors. All rights reserved.
34ecca339SDan Handley  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
54ecca339SDan Handley  */
64ecca339SDan Handley 
7c3cf06f1SAntonio Nino Diaz #ifndef MMIO_H
8c3cf06f1SAntonio Nino Diaz #define MMIO_H
94ecca339SDan Handley 
104ecca339SDan Handley #include <stdint.h>
114ecca339SDan Handley 
mmio_write_8(uintptr_t addr,uint8_t value)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 
mmio_read_8(uintptr_t addr)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 
mmio_write_16(uintptr_t addr,uint16_t value)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 
mmio_read_16(uintptr_t addr)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 
mmio_clrsetbits_16(uintptr_t addr,uint16_t clear,uint16_t set)32d90256a7SKonstantin Porotchkin static inline void mmio_clrsetbits_16(uintptr_t addr,
33d90256a7SKonstantin Porotchkin 				uint16_t clear,
34d90256a7SKonstantin Porotchkin 				uint16_t set)
35d90256a7SKonstantin Porotchkin {
36d90256a7SKonstantin Porotchkin 	mmio_write_16(addr, (mmio_read_16(addr) & ~clear) | set);
37d90256a7SKonstantin Porotchkin }
38d90256a7SKonstantin Porotchkin 
mmio_write_32(uintptr_t addr,uint32_t value)395e113753SAndrew Thoelke static inline void mmio_write_32(uintptr_t addr, uint32_t value)
405e113753SAndrew Thoelke {
415e113753SAndrew Thoelke 	*(volatile uint32_t*)addr = value;
425e113753SAndrew Thoelke }
435e113753SAndrew Thoelke 
mmio_read_32(uintptr_t addr)445e113753SAndrew Thoelke static inline uint32_t mmio_read_32(uintptr_t addr)
455e113753SAndrew Thoelke {
465e113753SAndrew Thoelke 	return *(volatile uint32_t*)addr;
475e113753SAndrew Thoelke }
485e113753SAndrew Thoelke 
mmio_write_64(uintptr_t addr,uint64_t value)495e113753SAndrew Thoelke static inline void mmio_write_64(uintptr_t addr, uint64_t value)
505e113753SAndrew Thoelke {
515e113753SAndrew Thoelke 	*(volatile uint64_t*)addr = value;
525e113753SAndrew Thoelke }
535e113753SAndrew Thoelke 
mmio_read_64(uintptr_t addr)545e113753SAndrew Thoelke static inline uint64_t mmio_read_64(uintptr_t addr)
555e113753SAndrew Thoelke {
565e113753SAndrew Thoelke 	return *(volatile uint64_t*)addr;
575e113753SAndrew Thoelke }
584ecca339SDan Handley 
mmio_clrbits_32(uintptr_t addr,uint32_t clear)59fd904df1SJimmy Huang static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear)
60fd904df1SJimmy Huang {
61fd904df1SJimmy Huang 	mmio_write_32(addr, mmio_read_32(addr) & ~clear);
62fd904df1SJimmy Huang }
63fd904df1SJimmy Huang 
mmio_setbits_32(uintptr_t addr,uint32_t set)64fd904df1SJimmy Huang static inline void mmio_setbits_32(uintptr_t addr, uint32_t set)
65fd904df1SJimmy Huang {
66fd904df1SJimmy Huang 	mmio_write_32(addr, mmio_read_32(addr) | set);
67fd904df1SJimmy Huang }
68fd904df1SJimmy Huang 
mmio_clrsetbits_32(uintptr_t addr,uint32_t clear,uint32_t set)69fd904df1SJimmy Huang static inline void mmio_clrsetbits_32(uintptr_t addr,
70fd904df1SJimmy Huang 				uint32_t clear,
71fd904df1SJimmy Huang 				uint32_t set)
72fd904df1SJimmy Huang {
73fd904df1SJimmy Huang 	mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set);
74fd904df1SJimmy Huang }
75fd904df1SJimmy Huang 
76c3cf06f1SAntonio Nino Diaz #endif /* MMIO_H */
77