aboutsummaryrefslogtreecommitdiff
path: root/riscv/devices.h
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2023-02-28 14:56:27 -0800
committerAndrew Waterman <andrew@sifive.com>2023-03-01 13:34:07 -0800
commit74064f806737925c2efeb9e617c1d9c57d26172e (patch)
tree440124e6d35607886225fa5371513fb78787ff37 /riscv/devices.h
parent9d3f3672039393675218268b447f5b039708265e (diff)
downloadspike-74064f806737925c2efeb9e617c1d9c57d26172e.zip
spike-74064f806737925c2efeb9e617c1d9c57d26172e.tar.gz
spike-74064f806737925c2efeb9e617c1d9c57d26172e.tar.bz2
Support discontiguous hart IDs in CLINT
This is a large delta because the old implementation baked in multiple assumptions about the contiguity of hart IDs. As a side effect, fix implementation for big-endian hosts.
Diffstat (limited to 'riscv/devices.h')
-rw-r--r--riscv/devices.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/riscv/devices.h b/riscv/devices.h
index f7e631e..2a9c005 100644
--- a/riscv/devices.h
+++ b/riscv/devices.h
@@ -58,7 +58,7 @@ class mem_t : public abstract_device_t {
class clint_t : public abstract_device_t {
public:
- clint_t(std::vector<processor_t*>&, uint64_t freq_hz, bool real_time);
+ clint_t(sim_t*, uint64_t freq_hz, bool real_time);
bool load(reg_t addr, size_t len, uint8_t* bytes);
bool store(reg_t addr, size_t len, const uint8_t* bytes);
size_t size() { return CLINT_SIZE; }
@@ -69,13 +69,13 @@ class clint_t : public abstract_device_t {
typedef uint64_t mtime_t;
typedef uint64_t mtimecmp_t;
typedef uint32_t msip_t;
- std::vector<processor_t*>& procs;
+ sim_t* sim;
uint64_t freq_hz;
bool real_time;
uint64_t real_time_ref_secs;
uint64_t real_time_ref_usecs;
mtime_t mtime;
- std::vector<mtimecmp_t> mtimecmp;
+ std::map<size_t, mtimecmp_t> mtimecmp;
};
#define PLIC_MAX_DEVICES 1024