aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Solomatnikov <sols@sifive.com>2018-04-05 10:12:18 -0700
committerAlex Solomatnikov <sols@sifive.com>2018-04-05 10:37:07 -0700
commitdd9a83b2a7a2e8b7100f7f5d915c1e81dc2486c9 (patch)
treeef5fc79eb7926049c75a22fa2664c919fef7e886
parent08239bad26f06013971526447a0c50d2014244c0 (diff)
downloadriscv-pk-sbi_for_perf.zip
riscv-pk-sbi_for_perf.tar.gz
riscv-pk-sbi_for_perf.tar.bz2
Added SBI_WRITE_PERF_CNTsbi_for_perf
-rw-r--r--machine/mcall.h3
-rw-r--r--machine/mtrap.c23
2 files changed, 25 insertions, 1 deletions
diff --git a/machine/mcall.h b/machine/mcall.h
index 874086e..b71a080 100644
--- a/machine/mcall.h
+++ b/machine/mcall.h
@@ -11,6 +11,7 @@
#define SBI_REMOTE_SFENCE_VMA_ASID 7
#define SBI_SHUTDOWN 8
#define SBI_READ_PERF_CNT 9
-#define SBI_WRITE_PERF_CFG 10
+#define SBI_WRITE_PERF_CNT 10
+#define SBI_WRITE_PERF_CFG 11
#endif
diff --git a/machine/mtrap.c b/machine/mtrap.c
index 3c10e66..b2a3011 100644
--- a/machine/mtrap.c
+++ b/machine/mtrap.c
@@ -108,6 +108,26 @@ static uintptr_t mcall_read_perf_cnt(uintptr_t id)
return -ENOSYS;
}
+static uintptr_t mcall_write_perf_cnt(uintptr_t id, uintptr_t val)
+{
+ switch (id)
+ {
+ case 0:
+ write_csr(mcycle, val);
+ return 0;
+ case 1:
+ write_csr(minstret, val);
+ return 0;
+ case 2:
+ write_csr(mhpmcounter3, val);
+ return 0;
+ case 3:
+ write_csr(mhpmcounter4, val);
+ return 0;
+ }
+ return -ENOSYS;
+}
+
static uintptr_t mcall_write_perf_cfg(uintptr_t id, uintptr_t val)
{
switch (id)
@@ -198,6 +218,9 @@ send_ipi:
case SBI_READ_PERF_CNT:
retval = mcall_read_perf_cnt(arg0);
break;
+ case SBI_WRITE_PERF_CNT:
+ retval = mcall_write_perf_cnt(arg0, arg1);
+ break;
case SBI_WRITE_PERF_CFG:
retval = mcall_write_perf_cfg(arg0, arg1);
break;