diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2016-05-03 18:49:46 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2016-05-03 18:49:46 -0700 |
commit | ee610c0ff858b73b01a3e54d14e640fe08de092d (patch) | |
tree | 06cd2bce7165273e20cd39d1117c162805b6aa63 | |
parent | 2001632142a11d9a940eee7e3bfbe7c0186fe6ce (diff) | |
download | riscv-pk-ee610c0ff858b73b01a3e54d14e640fe08de092d.zip riscv-pk-ee610c0ff858b73b01a3e54d14e640fe08de092d.tar.gz riscv-pk-ee610c0ff858b73b01a3e54d14e640fe08de092d.tar.bz2 |
Find IPI address in configuration string
-rw-r--r-- | machine/configstring.c | 3 | ||||
-rw-r--r-- | machine/encoding.h | 6 | ||||
-rw-r--r-- | machine/mtrap.c | 3 | ||||
-rw-r--r-- | machine/mtrap.h | 1 |
4 files changed, 4 insertions, 9 deletions
diff --git a/machine/configstring.c b/machine/configstring.c index 6e34f6a..843053c 100644 --- a/machine/configstring.c +++ b/machine/configstring.c @@ -25,11 +25,12 @@ static void query_harts(const char* config_string) for (int core = 0, hart; ; core++) { for (hart = 0; ; hart++) { char buf[32]; - snprintf(buf, sizeof buf, "core{%d{%d{isa", core, hart); + snprintf(buf, sizeof buf, "core{%d{%d{ipi", core, hart); query_result res = query_config_string(config_string, buf); if (!res.start) break; hls_t* hls = hls_init(num_harts); + hls->ipi = (void*)get_uint(res); snprintf(buf, sizeof buf, "core{%d{%d{timecmp", core, hart); res = query_config_string(config_string, buf); diff --git a/machine/encoding.h b/machine/encoding.h index 5cb7ff5..5405148 100644 --- a/machine/encoding.h +++ b/machine/encoding.h @@ -661,7 +661,6 @@ #define CSR_MCAUSE 0x342 #define CSR_MBADADDR 0x343 #define CSR_MIP 0x344 -#define CSR_MIPI 0x345 #define CSR_MUCOUNTEREN 0x310 #define CSR_MSCOUNTEREN 0x311 #define CSR_MUCYCLE_DELTA 0x700 @@ -678,8 +677,6 @@ #define CSR_MARCHID 0xf12 #define CSR_MIMPID 0xf13 #define CSR_MHARTID 0xf14 -#define CSR_MTOHOST 0x7c0 -#define CSR_MFROMHOST 0x7c1 #define CSR_MRESET 0x7c2 #define CSR_CYCLEH 0xc80 #define CSR_TIMEH 0xc81 @@ -966,7 +963,6 @@ DECLARE_CSR(mepc, CSR_MEPC) DECLARE_CSR(mcause, CSR_MCAUSE) DECLARE_CSR(mbadaddr, CSR_MBADADDR) DECLARE_CSR(mip, CSR_MIP) -DECLARE_CSR(mipi, CSR_MIPI) DECLARE_CSR(mucounteren, CSR_MUCOUNTEREN) DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN) DECLARE_CSR(mucycle_delta, CSR_MUCYCLE_DELTA) @@ -983,8 +979,6 @@ DECLARE_CSR(mvendorid, CSR_MVENDORID) DECLARE_CSR(marchid, CSR_MARCHID) DECLARE_CSR(mimpid, CSR_MIMPID) DECLARE_CSR(mhartid, CSR_MHARTID) -DECLARE_CSR(mtohost, CSR_MTOHOST) -DECLARE_CSR(mfromhost, CSR_MFROMHOST) DECLARE_CSR(mreset, CSR_MRESET) DECLARE_CSR(cycleh, CSR_CYCLEH) DECLARE_CSR(timeh, CSR_TIMEH) diff --git a/machine/mtrap.c b/machine/mtrap.c index 15ecf8f..5c835cb 100644 --- a/machine/mtrap.c +++ b/machine/mtrap.c @@ -96,8 +96,7 @@ static void send_ipi(uintptr_t recipient, int event) { if ((atomic_or(&OTHER_HLS(recipient)->mipi_pending, event) & event) == 0) { mb(); - if (recipient != read_const_csr(mhartid)) - assert(!"IPIs temporarily missing"); + *OTHER_HLS(recipient)->ipi = 1; } } diff --git a/machine/mtrap.h b/machine/mtrap.h index 514df98..b859a63 100644 --- a/machine/mtrap.h +++ b/machine/mtrap.h @@ -35,6 +35,7 @@ extern volatile uint64_t* mtime; typedef struct { uint64_t* timecmp; + uint32_t* ipi; volatile int mipi_pending; volatile int sipi_pending; int console_ibuf; |