diff mbox series

[v1,3/8] Revert "UBUNTU: SAUCE: mlxbf-pmc: Fix error when reading unprogrammed events"

Message ID ab61de5bd0a375c78fed3a187f32c713a9da2853.1697539784.git.shravankr@nvidia.com
State New
Headers show
Series [v1,1/8] Revert "UBUNTU: SAUCE: mlxbf-pmc: Bug fix for BlueField-3 counter offsets" | expand

Commit Message

Shravan Kumar Ramani Oct. 17, 2023, 11:29 a.m. UTC
BugLink: https://bugs.launchpad.net/bugs/2039561

This reverts commit ae65968c10fd1de8f2640e6564ebbf013523032c.

Signed-off-by: Shravan Kumar Ramani <shravankr@nvidia.com>
---
 drivers/platform/mellanox/mlxbf-pmc.c | 32 ++++++++++++++++++++++-----
 drivers/platform/mellanox/mlxbf-pmc.h |  6 -----
 2 files changed, 26 insertions(+), 12 deletions(-)
diff mbox series

Patch

diff --git a/drivers/platform/mellanox/mlxbf-pmc.c b/drivers/platform/mellanox/mlxbf-pmc.c
index c4ebaf5f56c3..fb3b770d092c 100644
--- a/drivers/platform/mellanox/mlxbf-pmc.c
+++ b/drivers/platform/mellanox/mlxbf-pmc.c
@@ -19,7 +19,7 @@ 
 
 #include "mlxbf-pmc.h"
 
-#define DRIVER_VERSION		2.3
+#define DRIVER_VERSION		2.2
 
 static struct mlxbf_pmc_context *pmc;
 
@@ -562,7 +562,7 @@  int mlxbf_read_event(int blk_num, uint32_t cnt_num, bool is_l3,
 		     uint64_t *result)
 {
 	uint32_t perfcfg_offset, perfval_offset;
-	uint64_t perfmon_cfg, perfevt;
+	uint64_t perfmon_cfg, perfevt, perfctl;
 
 	if (cnt_num >= pmc->block[blk_num].counters)
 		return -EINVAL;
@@ -573,6 +573,26 @@  int mlxbf_read_event(int blk_num, uint32_t cnt_num, bool is_l3,
 	perfcfg_offset = cnt_num * 8;
 	perfval_offset = perfcfg_offset + pmc->block[blk_num].counters * 8;
 
+	/* Set counter in "read" mode */
+	perfmon_cfg = 0;
+	perfmon_cfg |= FIELD_PREP(MLXBF_GEN_PERFMON_CONFIG__ADDR,
+				  MLXBF_PERFCTL);
+	perfmon_cfg |= FIELD_PREP(MLXBF_GEN_PERFMON_CONFIG__STROBE, 1);
+	perfmon_cfg |= FIELD_PREP(MLXBF_GEN_PERFMON_CONFIG__WR_R_B, 0);
+
+	if (mlxbf_pmc_writeq(perfmon_cfg,
+		       pmc->block[blk_num].mmio_base + perfcfg_offset))
+		return -EFAULT;
+
+	/* Check if the counter is enabled */
+
+	if (mlxbf_pmc_readq(&perfctl,
+		      pmc->block[blk_num].mmio_base + perfval_offset))
+		return -EFAULT;
+
+	if (FIELD_GET(MLXBF_GEN_PERFCTL__EN0, perfctl) == 0)
+		return -EINVAL;
+
 	/* Set counter in "read" mode */
 	perfmon_cfg = 0;
 	perfmon_cfg |= FIELD_PREP(MLXBF_GEN_PERFMON_CONFIG__ADDR,
@@ -792,10 +812,10 @@  static ssize_t mlxbf_print_event_list(struct kobject *ko,
 	buf[0] = '\0';
 	while (events[i].evt_name != NULL) {
 		size += snprintf(e_info,
-				 sizeof(e_info),
-				 "%x: %s\n",
-				 events[i].evt_num,
-				 events[i].evt_name);
+				sizeof(e_info),
+				"%x: %s\n",
+				events[i].evt_num,
+				events[i].evt_name);
 		if (size >= PAGE_SIZE)
 			break;
 		strcat(buf, e_info);
diff --git a/drivers/platform/mellanox/mlxbf-pmc.h b/drivers/platform/mellanox/mlxbf-pmc.h
index a6f7aade4bce..41fe15085930 100644
--- a/drivers/platform/mellanox/mlxbf-pmc.h
+++ b/drivers/platform/mellanox/mlxbf-pmc.h
@@ -186,7 +186,6 @@  struct mlxbf_pmc_events mlxbf_smgen_events[] = {
 };
 
 struct mlxbf_pmc_events mlxbf1_trio_events[] = {
-{0x00, "DISABLE"},
 {0xa0, "TPIO_DATA_BEAT"},
 {0xa1, "TDMA_DATA_BEAT"},
 {0xa2, "MAP_DATA_BEAT"},
@@ -211,7 +210,6 @@  struct mlxbf_pmc_events mlxbf1_trio_events[] = {
 };
 
 struct mlxbf_pmc_events mlxbf2_trio_events[] = {
-{0x00, "DISABLE"},
 {0xa0, "TPIO_DATA_BEAT"},
 {0xa1, "TDMA_DATA_BEAT"},
 {0xa2, "MAP_DATA_BEAT"},
@@ -245,7 +243,6 @@  struct mlxbf_pmc_events mlxbf2_trio_events[] = {
 };
 
 struct mlxbf_pmc_events mlxbf_ecc_events[] = {
-{0x00, "DISABLE"},
 {0x100, "ECC_SINGLE_ERROR_CNT"},
 {0x104, "ECC_DOUBLE_ERROR_CNT"},
 {0x114, "SERR_INJ"},
@@ -259,7 +256,6 @@  struct mlxbf_pmc_events mlxbf_ecc_events[] = {
 };
 
 struct mlxbf_pmc_events mlxbf_mss_events[] = {
-{0x00, "DISABLE"},
 {0xc0, "RXREQ_MSS"},
 {0xc1, "RXDAT_MSS"},
 {0xc2, "TXRSP_MSS"},
@@ -268,7 +264,6 @@  struct mlxbf_pmc_events mlxbf_mss_events[] = {
 };
 
 struct mlxbf_pmc_events mlxbf_hnf_events[] = {
-{0x00, "DISABLE"},
 {0x45, "HNF_REQUESTS"},
 {0x46, "HNF_REJECTS"},
 {0x47, "ALL_BUSY"},
@@ -328,7 +323,6 @@  struct mlxbf_pmc_events mlxbf_hnf_events[] = {
 };
 
 struct mlxbf_pmc_events mlxbf2_hnfnet_events[] = {
-{0x00, "DISABLE"},
 {0x12, "CDN_REQ"},
 {0x13, "DDN_REQ"},
 {0x14, "NDN_REQ"},