/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (c) 2019, Linaro Limited */ #ifndef ARM64_USER_SYSREG_H #define ARM64_USER_SYSREG_H #include #include /* * Templates for register read/write functions based on mrs/msr */ #define DEFINE_REG_READ_FUNC_(reg, type, asmreg) \ static inline __noprof type read_##reg(void) \ { \ uint64_t val64 = 0; \ \ asm volatile("mrs %0, " #asmreg : "=r" (val64)); \ return val64; \ } #define DEFINE_REG_WRITE_FUNC_(reg, type, asmreg) \ static inline __noprof void write_##reg(type val) \ { \ uint64_t val64 = val; \ \ asm volatile("msr " #asmreg ", %0" : : "r" (val64)); \ } /* ARM Generic timer functions */ DEFINE_REG_READ_FUNC_(cntfrq, uint32_t, cntfrq_el0) DEFINE_REG_READ_FUNC_(cntpct, uint64_t, cntpct_el0) DEFINE_REG_READ_FUNC_(tpidr_el0, uint64_t, tpidr_el0) DEFINE_REG_WRITE_FUNC_(tpidr_el0, uint64_t, tpidr_el0) #endif /*ARM64_USER_SYSREG_H*/