diff options
Diffstat (limited to 'src/soc/sifive/fu740/clint.c')
-rw-r--r-- | src/soc/sifive/fu740/clint.c | 21 |
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); +} |