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
9static inline void wfi(void)
10{
11    asm volatile("wfi" ::: "memory");
12}
13
14static inline void dsb(void)
15{
16    asm volatile("dsb sy" ::: "memory");
17}
18
19static inline void dmb(void)
20{
21    asm volatile("dmb sy" ::: "memory");
22}
23
24static inline void isb(void)
25{
26    asm volatile("isb" ::: "memory");
27}
28
29
30#define MRS(reg, v)  asm volatile("mrs %0," reg : "=r"(v))
31#define MSR(reg, v)                                \
32    do {                                           \
33        word_t _v = v;                             \
34        asm volatile("msr " reg ",%0" :: "r" (_v));\
35    } while(0)
36