summaryrefslogtreecommitdiff
path: root/lib/sbi/sbi_ipi.c
diff options
context:
space:
mode:
authorAtish Patra <atish.patra@wdc.com>2021-07-10 19:18:14 +0300
committerAnup Patel <anup@brainfault.org>2021-07-11 08:08:23 +0300
commit764a17d852a8cc80050016a6e2ccdcaddd43f68c (patch)
tree03db9a920bfd843301af4c7eecac02bb76921eb1 /lib/sbi/sbi_ipi.c
parent37f9b0f2f265b2f312d974fb8d100b85b3faf94f (diff)
downloadopensbi-764a17d852a8cc80050016a6e2ccdcaddd43f68c.tar.xz
lib: sbi: Implement firmware counters
RISC-V SBI v0.3 specification defines a set of firmware events that can provide additional information about the current firmware context. All of the firmware event monitoring are enabled now. The firmware events must be defined as raw perf event with MSB set as specified in the specification. Reviewed-by: Anup Patel <anup.patel@wdc.com> Signed-off-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'lib/sbi/sbi_ipi.c')
-rw-r--r--lib/sbi/sbi_ipi.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/sbi/sbi_ipi.c b/lib/sbi/sbi_ipi.c
index 75f86d8..1014909 100644
--- a/lib/sbi/sbi_ipi.c
+++ b/lib/sbi/sbi_ipi.c
@@ -19,6 +19,9 @@
#include <sbi/sbi_init.h>
#include <sbi/sbi_ipi.h>
#include <sbi/sbi_platform.h>
+#include <sbi/sbi_pmu.h>
+#include <sbi/sbi_string.h>
+#include <sbi/sbi_tlb.h>
struct sbi_ipi_data {
unsigned long ipi_type;
@@ -64,6 +67,8 @@ static int sbi_ipi_send(struct sbi_scratch *scratch, u32 remote_hartid,
if (ipi_dev && ipi_dev->ipi_send)
ipi_dev->ipi_send(remote_hartid);
+ sbi_pmu_ctr_incr_fw(SBI_PMU_FW_IPI_SENT);
+
if (ipi_ops->sync)
ipi_ops->sync(scratch);
@@ -183,6 +188,7 @@ void sbi_ipi_process(void)
sbi_scratch_offset_ptr(scratch, ipi_data_off);
u32 hartid = current_hartid();
+ sbi_pmu_ctr_incr_fw(SBI_PMU_FW_IPI_RECVD);
if (ipi_dev && ipi_dev->ipi_clear)
ipi_dev->ipi_clear(hartid);