[08/10] common/cnxk: add API to reset CGX stats

Message ID 20240517074448.3146611-8-ndabilpuram@marvell.com (mailing list archive)
State Changes Requested
Delegated to: Jerin Jacob
Headers
Series [01/10] common/cnxk: sync VF root weight with kernel |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Nithin Dabilpuram May 17, 2024, 7:44 a.m. UTC
  From: Sunil Kumar Kori <skori@marvell.com>

Similar to NIX stats reset API, adding API to reset
CGX stats.

When user requests to reset the stats then it clears
if nix_lf is PF otherwise silently discard the request.

Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
---
 drivers/common/cnxk/roc_nix.h     |  1 +
 drivers/common/cnxk/roc_nix_mac.c | 29 +++++++++++++++++++++++++++++
 drivers/common/cnxk/version.map   |  1 +
 3 files changed, 31 insertions(+)
  

Patch

diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h
index 63bcd5b25e..25cf261348 100644
--- a/drivers/common/cnxk/roc_nix.h
+++ b/drivers/common/cnxk/roc_nix.h
@@ -849,6 +849,7 @@  int __roc_api roc_nix_mac_link_info_get_cb_register(
 void __roc_api roc_nix_mac_link_info_get_cb_unregister(struct roc_nix *roc_nix);
 int __roc_api roc_nix_q_err_cb_register(struct roc_nix *roc_nix, q_err_get_t sq_err_handle);
 void __roc_api roc_nix_q_err_cb_unregister(struct roc_nix *roc_nix);
+int __roc_api roc_nix_mac_stats_reset(struct roc_nix *roc_nix);
 
 /* Ops */
 int __roc_api roc_nix_switch_hdr_set(struct roc_nix *roc_nix,
diff --git a/drivers/common/cnxk/roc_nix_mac.c b/drivers/common/cnxk/roc_nix_mac.c
index 2d1c29dd66..f79aaec4a5 100644
--- a/drivers/common/cnxk/roc_nix_mac.c
+++ b/drivers/common/cnxk/roc_nix_mac.c
@@ -354,6 +354,35 @@  roc_nix_mac_max_rx_len_set(struct roc_nix *roc_nix, uint16_t maxlen)
 	return rc;
 }
 
+int
+roc_nix_mac_stats_reset(struct roc_nix *roc_nix)
+{
+	struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+	struct dev *dev = &nix->dev;
+	struct mbox *mbox = mbox_get(dev->mbox);
+	struct msg_req *req;
+	int rc = -ENOSPC;
+
+	if (roc_model_is_cn10k()) {
+		rc = 0;
+		goto exit;
+	}
+
+	if (roc_nix_is_vf_or_sdp(roc_nix)) {
+		rc = 0;
+		goto exit;
+	}
+
+	req = mbox_alloc_msg_cgx_stats_rst(mbox);
+	if (req == NULL)
+		goto exit;
+
+	rc = mbox_process(mbox);
+exit:
+	mbox_put(mbox);
+	return rc;
+}
+
 int
 roc_nix_mac_link_cb_register(struct roc_nix *roc_nix, link_status_t link_update)
 {
diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
index e8d32b331e..e37c1c7b7d 100644
--- a/drivers/common/cnxk/version.map
+++ b/drivers/common/cnxk/version.map
@@ -308,6 +308,7 @@  INTERNAL {
 	roc_nix_mac_mtu_set;
 	roc_nix_mac_promisc_mode_enable;
 	roc_nix_mac_rxtx_start_stop;
+	roc_nix_mac_stats_reset;
 	roc_nix_max_pkt_len;
 	roc_nix_mcast_list_free;
 	roc_nix_mcast_list_setup;