xref: /openbmc/linux/arch/riscv/include/asm/clint.h (revision d5be89a8)
1d5be89a8SPalmer Dabbelt /* SPDX-License-Identifier: GPL-2.0-only */
2d5be89a8SPalmer Dabbelt /*
3d5be89a8SPalmer Dabbelt  * Copyright (C) 2020 Google, Inc
4d5be89a8SPalmer Dabbelt  */
5d5be89a8SPalmer Dabbelt 
6d5be89a8SPalmer Dabbelt #ifndef _ASM_RISCV_CLINT_H
7d5be89a8SPalmer Dabbelt #define _ASM_RISCV_CLINT_H
8d5be89a8SPalmer Dabbelt 
9d5be89a8SPalmer Dabbelt #include <linux/types.h>
10d5be89a8SPalmer Dabbelt #include <asm/mmio.h>
11d5be89a8SPalmer Dabbelt 
12d5be89a8SPalmer Dabbelt #ifdef CONFIG_RISCV_M_MODE
13d5be89a8SPalmer Dabbelt /*
14d5be89a8SPalmer Dabbelt  * This lives in the CLINT driver, but is accessed directly by timex.h to avoid
15d5be89a8SPalmer Dabbelt  * any overhead when accessing the MMIO timer.
16d5be89a8SPalmer Dabbelt  *
17d5be89a8SPalmer Dabbelt  * The ISA defines mtime as a 64-bit memory-mapped register that increments at
18d5be89a8SPalmer Dabbelt  * a constant frequency, but it doesn't define some other constraints we depend
19d5be89a8SPalmer Dabbelt  * on (most notably ordering constraints, but also some simpler stuff like the
20d5be89a8SPalmer Dabbelt  * memory layout).  Thus, this is called "clint_time_val" instead of something
21d5be89a8SPalmer Dabbelt  * like "riscv_mtime", to signify that these non-ISA assumptions must hold.
22d5be89a8SPalmer Dabbelt  */
23d5be89a8SPalmer Dabbelt extern u64 __iomem *clint_time_val;
24d5be89a8SPalmer Dabbelt #endif
25d5be89a8SPalmer Dabbelt 
26d5be89a8SPalmer Dabbelt #endif
27