blob: 10827faa10e99c31d879e73f3da617019a2f1e4e [file] [log] [blame]
Angel Pons585495e2020-04-03 01:21:38 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Xiang Wang2e38dbe2018-08-28 16:34:29 +08002
3#include <mcall.h>
Philipp Hug934ae212019-09-04 09:24:45 -07004#include <device/mmio.h>
Philipp Hug2ef569a2018-12-31 14:13:47 +01005#include <mainboard/addressmap.h>
Xiang Wang2e38dbe2018-08-28 16:34:29 +08006
Xiang Wang2e38dbe2018-08-28 16:34:29 +08007/* This function is used to initialize HLS()->time/HLS()->timecmp */
8void mtime_init(void)
9{
Philipp Hug2ef569a2018-12-31 14:13:47 +010010 long hart_id = read_csr(mhartid);
11 HLS()->time = (uint64_t *)(QEMU_VIRT_CLINT + 0xbff8);
12 HLS()->timecmp = (uint64_t *)(QEMU_VIRT_CLINT + 0x4000 + 8 * hart_id);
Xiang Wang2e38dbe2018-08-28 16:34:29 +080013}
Philipp Hug934ae212019-09-04 09:24:45 -070014
15void set_msip(int hartid, int val)
16{
17 write32((void *)(QEMU_VIRT_CLINT + 4 * (uintptr_t)hartid), !!val);
18}