1 /*
2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7 #pragma once
8
wfi(void)9 static inline void wfi(void)
10 {
11 asm volatile("wfi" ::: "memory");
12 }
13
dsb(void)14 static inline void dsb(void)
15 {
16 asm volatile("dsb sy" ::: "memory");
17 }
18
dmb(void)19 static inline void dmb(void)
20 {
21 asm volatile("dmb sy" ::: "memory");
22 }
23
isb(void)24 static inline void isb(void)
25 {
26 asm volatile("isb sy" ::: "memory");
27 }
28
29 #define MRS(reg, v) asm volatile("mrs %x0," reg : "=r"(v))
30 #define MSR(reg, v) \
31 do { \
32 word_t _v = v; \
33 asm volatile("msr " reg ",%x0" :: "r" (_v));\
34 }while(0)
35
36 #define SYSTEM_WRITE_WORD(reg, v) MSR(reg, v)
37 #define SYSTEM_READ_WORD(reg, v) MRS(reg, v)
38 #define SYSTEM_WRITE_64(reg, v) MSR(reg, v)
39 #define SYSTEM_READ_64(reg, v) MRS(reg, v)
40
41