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