aboutsummaryrefslogtreecommitdiff
path: root/src/soc/sifive/fu740/clint.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/sifive/fu740/clint.c')
-rw-r--r--src/soc/sifive/fu740/clint.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/soc/sifive/fu740/clint.c b/src/soc/sifive/fu740/clint.c
new file mode 100644
index 0000000000..818b62821d
--- /dev/null
+++ b/src/soc/sifive/fu740/clint.c
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <mcall.h>
+#include <stdint.h>
+#include <device/mmio.h>
+#include <soc/addressmap.h>
+
+#define CLINT_MTIME 0xBFF8
+#define CLINT_MTIMECMP 0x4000
+
+void mtime_init(void)
+{
+ long hart_id = read_csr(mhartid);
+ HLS()->time = (uint64_t *)(FU740_CLINT + CLINT_MTIME);
+ HLS()->timecmp = (uint64_t *)(FU740_CLINT + CLINT_MTIMECMP + 8 * hart_id);
+}
+
+void set_msip(int hartid, int val)
+{
+ write32((void *)(FU740_CLINT + 4 * (uintptr_t)hartid), !!val);
+}