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