From 0f3fd15d4191ed71436155c5fdb196e7ee90a2c4 Mon Sep 17 00:00:00 2001 From: jon <> Date: Wed, 17 Feb 2021 17:07:53 +0000 Subject: [PATCH] Initial implementation of map of HPM counters into supervisor and user mode. This version just unconditionally exposes them. --- src_Core/CPU/CsrFile.bsv | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src_Core/CPU/CsrFile.bsv b/src_Core/CPU/CsrFile.bsv index 47d3b39..241e2e1 100644 --- a/src_Core/CPU/CsrFile.bsv +++ b/src_Core/CPU/CsrFile.bsv @@ -514,7 +514,7 @@ module mkCsrFile #(Data hartid)(CsrFile); Reg#(Bit#(1)) mcounteren_cy_reg <- mkCsrReg(0); Reg#(Data) mcounteren_csr = concatReg5( readOnlyReg(32'b0), - readOnlyReg(29'b0), // hpmcounter 3-31 not accessible in S mode + readOnlyReg(~29'b0), // hpmcounter 3-31 currently always accessible in S mode mcounteren_ir_reg, mcounteren_tm_reg, mcounteren_cy_reg ); // mscratch @@ -624,7 +624,7 @@ module mkCsrFile #(Data hartid)(CsrFile); Reg#(Bit#(1)) scounteren_cy_reg <- mkCsrReg(0); Reg#(Data) scounteren_csr = concatReg5( readOnlyReg(32'b0), - readOnlyReg(29'b0), // hpmcounter 3-31 not accessible in U mode + readOnlyReg(~29'b0), // hpmcounter 3-31 currently always accessible in U mode scounteren_ir_reg, scounteren_tm_reg, scounteren_cy_reg ); // sscratch @@ -830,6 +830,8 @@ module mkCsrFile #(Data hartid)(CsrFile); ret = perf_counters.counter_vec[c-csrAddrMHPMCOUNTER3.addr]; if ((csrAddrMHPMEVENT3.addr <= c) && (c <= csrAddrMHPMEVENT31.addr)) ret = perf_counters.event_vec[c - csrAddrMHPMEVENT3.addr]; + if ((csrAddrHPMCOUNTER3.addr <= c) && (c <= csrAddrHPMCOUNTER31.addr)) + ret = perf_counters.counter_vec[c-csrAddrHPMCOUNTER3.addr]; `endif return (case (csr) // User CSRs