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