aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2016-03-01 16:48:11 -0800
committerAndrew Waterman <waterman@cs.berkeley.edu>2016-03-01 16:48:11 -0800
commitfba40b7a8c495dbfb5219c2fd478ce993f4b4c45 (patch)
tree94ae5a126be93aeff568570e049a13a2f3e33214
parent5e29b5ccff5958ce4e8ddfd9feefdb6d562843f9 (diff)
downloadriscv-pk-fba40b7a8c495dbfb5219c2fd478ce993f4b4c45.zip
riscv-pk-fba40b7a8c495dbfb5219c2fd478ce993f4b4c45.tar.gz
riscv-pk-fba40b7a8c495dbfb5219c2fd478ce993f4b4c45.tar.bz2
Use new counter-enable CSRs
-rw-r--r--pk/emulation.c13
-rw-r--r--pk/encoding.h34
-rw-r--r--pk/minit.c2
-rw-r--r--pk/mtrap.h10
4 files changed, 54 insertions, 5 deletions
diff --git a/pk/emulation.c b/pk/emulation.c
index fb655ef..87db2de 100644
--- a/pk/emulation.c
+++ b/pk/emulation.c
@@ -248,12 +248,21 @@ static inline int emulate_read_csr(int num, uintptr_t mstatus, uintptr_t* result
switch (num)
{
case CSR_TIME:
- *result = read_csr(mtime) + HLS()->stime_delta;
+ *result = read_csr(mtime) + HLS()->utime_delta;
return 0;
case CSR_CYCLE:
- *result = read_csr(mcycle) + HLS()->scycle_delta;
+ *result = read_csr(mcycle) + HLS()->ucycle_delta;
return 0;
case CSR_INSTRET:
+ *result = read_csr(minstret) + HLS()->uinstret_delta;
+ return 0;
+ case CSR_STIME:
+ *result = read_csr(mtime) + HLS()->stime_delta;
+ return 0;
+ case CSR_SCYCLE:
+ *result = read_csr(mcycle) + HLS()->scycle_delta;
+ return 0;
+ case CSR_SINSTRET:
*result = read_csr(minstret) + HLS()->sinstret_delta;
return 0;
#ifdef __riscv32
diff --git a/pk/encoding.h b/pk/encoding.h
index 1127234..9189fde 100644
--- a/pk/encoding.h
+++ b/pk/encoding.h
@@ -647,6 +647,9 @@
#define CSR_SIP 0x144
#define CSR_SPTBR 0x180
#define CSR_SASID 0x181
+#define CSR_SCYCLE 0xd00
+#define CSR_STIME 0xd01
+#define CSR_SINSTRET 0xd02
#define CSR_MSTATUS 0x300
#define CSR_MEDELEG 0x302
#define CSR_MIDELEG 0x303
@@ -659,6 +662,14 @@
#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
+#define CSR_MUTIME_DELTA 0x701
+#define CSR_MUINSTRET_DELTA 0x702
+#define CSR_MSCYCLE_DELTA 0x704
+#define CSR_MSTIME_DELTA 0x705
+#define CSR_MSINSTRET_DELTA 0x706
#define CSR_MCYCLE 0xf00
#define CSR_MTIME 0xf01
#define CSR_MINSTRET 0xf02
@@ -675,6 +686,12 @@
#define CSR_TIMEH 0xc81
#define CSR_INSTRETH 0xc82
#define CSR_MTIMECMPH 0x361
+#define CSR_MUCYCLE_DELTAH 0x780
+#define CSR_MUTIME_DELTAH 0x781
+#define CSR_MUINSTRET_DELTAH 0x782
+#define CSR_MSCYCLE_DELTAH 0x784
+#define CSR_MSTIME_DELTAH 0x785
+#define CSR_MSINSTRET_DELTAH 0x786
#define CSR_MCYCLEH 0xf80
#define CSR_MTIMEH 0xf81
#define CSR_MINSTRETH 0xf82
@@ -952,6 +969,9 @@ DECLARE_CSR(sbadaddr, CSR_SBADADDR)
DECLARE_CSR(sip, CSR_SIP)
DECLARE_CSR(sptbr, CSR_SPTBR)
DECLARE_CSR(sasid, CSR_SASID)
+DECLARE_CSR(scycle, CSR_SCYCLE)
+DECLARE_CSR(stime, CSR_STIME)
+DECLARE_CSR(sinstret, CSR_SINSTRET)
DECLARE_CSR(mstatus, CSR_MSTATUS)
DECLARE_CSR(medeleg, CSR_MEDELEG)
DECLARE_CSR(mideleg, CSR_MIDELEG)
@@ -964,6 +984,14 @@ 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)
+DECLARE_CSR(mutime_delta, CSR_MUTIME_DELTA)
+DECLARE_CSR(muinstret_delta, CSR_MUINSTRET_DELTA)
+DECLARE_CSR(mscycle_delta, CSR_MSCYCLE_DELTA)
+DECLARE_CSR(mstime_delta, CSR_MSTIME_DELTA)
+DECLARE_CSR(msinstret_delta, CSR_MSINSTRET_DELTA)
DECLARE_CSR(mcycle, CSR_MCYCLE)
DECLARE_CSR(mtime, CSR_MTIME)
DECLARE_CSR(minstret, CSR_MINSTRET)
@@ -980,6 +1008,12 @@ DECLARE_CSR(cycleh, CSR_CYCLEH)
DECLARE_CSR(timeh, CSR_TIMEH)
DECLARE_CSR(instreth, CSR_INSTRETH)
DECLARE_CSR(mtimecmph, CSR_MTIMECMPH)
+DECLARE_CSR(mucycle_deltah, CSR_MUCYCLE_DELTAH)
+DECLARE_CSR(mutime_deltah, CSR_MUTIME_DELTAH)
+DECLARE_CSR(muinstret_deltah, CSR_MUINSTRET_DELTAH)
+DECLARE_CSR(mscycle_deltah, CSR_MSCYCLE_DELTAH)
+DECLARE_CSR(mstime_deltah, CSR_MSTIME_DELTAH)
+DECLARE_CSR(msinstret_deltah, CSR_MSINSTRET_DELTAH)
DECLARE_CSR(mcycleh, CSR_MCYCLEH)
DECLARE_CSR(mtimeh, CSR_MTIMEH)
DECLARE_CSR(minstreth, CSR_MINSTRETH)
diff --git a/pk/minit.c b/pk/minit.c
index f899864..d84d18d 100644
--- a/pk/minit.c
+++ b/pk/minit.c
@@ -22,6 +22,8 @@ static void mstatus_init()
write_csr(mtimecmp, 0);
clear_csr(mip, MIP_MSIP);
write_csr(mie, -1);
+ write_csr(mucounteren, -1);
+ write_csr(mscounteren, -1);
}
static void delegate_traps()
diff --git a/pk/mtrap.h b/pk/mtrap.h
index b20bdc0..705d09d 100644
--- a/pk/mtrap.h
+++ b/pk/mtrap.h
@@ -164,13 +164,17 @@ static inline int xlen()
typedef struct {
volatile uintptr_t* csrs;
- uint64_t stime_delta;
- uint64_t scycle_delta;
- uint64_t sinstret_delta;
int hart_id;
volatile int mipi_pending;
volatile int sipi_pending;
int console_ibuf;
+
+ uint64_t utime_delta;
+ uint64_t ucycle_delta;
+ uint64_t uinstret_delta;
+ uint64_t stime_delta;
+ uint64_t scycle_delta;
+ uint64_t sinstret_delta;
} hls_t;
#define IPI_SOFT 0x1