1 /*
2  * Copyright (c) 2023 Meta
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /* Memory mapped registers I/O functions in riscv arch C code */
8 
9 #ifndef ZEPHYR_INCLUDE_ARCH_RISCV_SYS_IO_H_
10 #define ZEPHYR_INCLUDE_ARCH_RISCV_SYS_IO_H_
11 
12 #ifndef _ASMLANGUAGE
13 
14 #include <zephyr/toolchain.h>
15 #include <zephyr/types.h>
16 #include <zephyr/sys/sys_io.h>
17 
18 #ifndef CONFIG_RISCV_SOC_HAS_CUSTOM_SYS_IO
19 #include <zephyr/arch/common/sys_io.h>
20 #endif
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #ifdef CONFIG_RISCV_SOC_HAS_CUSTOM_SYS_IO
27 
28 extern uint8_t z_soc_sys_read8(mem_addr_t addr);
29 extern void z_soc_sys_write8(uint8_t data, mem_addr_t addr);
30 extern uint16_t z_soc_sys_read16(mem_addr_t addr);
31 extern void z_soc_sys_write16(uint16_t data, mem_addr_t addr);
32 extern uint32_t z_soc_sys_read32(mem_addr_t addr);
33 extern void z_soc_sys_write32(uint32_t data, mem_addr_t addr);
34 extern uint64_t z_soc_sys_read64(mem_addr_t addr);
35 extern void z_soc_sys_write64(uint64_t data, mem_addr_t addr);
36 
sys_read8(mem_addr_t addr)37 static ALWAYS_INLINE uint8_t sys_read8(mem_addr_t addr)
38 {
39 	return z_soc_sys_read8(addr);
40 }
41 
sys_write8(uint8_t data,mem_addr_t addr)42 static ALWAYS_INLINE void sys_write8(uint8_t data, mem_addr_t addr)
43 {
44 	z_soc_sys_write8(data, addr);
45 }
46 
sys_read16(mem_addr_t addr)47 static ALWAYS_INLINE uint16_t sys_read16(mem_addr_t addr)
48 {
49 	return z_soc_sys_read16(addr);
50 }
51 
sys_write16(uint16_t data,mem_addr_t addr)52 static ALWAYS_INLINE void sys_write16(uint16_t data, mem_addr_t addr)
53 {
54 	z_soc_sys_write16(data, addr);
55 }
56 
sys_read32(mem_addr_t addr)57 static ALWAYS_INLINE uint32_t sys_read32(mem_addr_t addr)
58 {
59 	return z_soc_sys_read32(addr);
60 }
61 
sys_write32(uint32_t data,mem_addr_t addr)62 static ALWAYS_INLINE void sys_write32(uint32_t data, mem_addr_t addr)
63 {
64 	z_soc_sys_write32(data, addr);
65 }
66 
sys_read64(mem_addr_t addr)67 static ALWAYS_INLINE uint64_t sys_read64(mem_addr_t addr)
68 {
69 	return z_soc_sys_read64(addr);
70 }
71 
sys_write64(uint64_t data,mem_addr_t addr)72 static ALWAYS_INLINE void sys_write64(uint64_t data, mem_addr_t addr)
73 {
74 	z_soc_sys_write64(data, addr);
75 }
76 
77 #endif /* CONFIG_RISCV_SOC_HAS_CUSTOM_SYS_IO */
78 
79 #ifdef __cplusplus
80 }
81 #endif
82 
83 #endif /* _ASMLANGUAGE */
84 
85 #endif /* ZEPHYR_INCLUDE_ARCH_RISCV_SYS_IO_H_ */
86