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 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