[v2,07/27] common/cnxk: support RoC API to toggle profile state

Message ID 20210927082223.757436-7-skori@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Jerin Jacob
Headers
Series [v2,01/27] common/cnxk: update policer MBOX APIs and HW definitions |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Sunil Kumar Kori Sept. 27, 2021, 8:22 a.m. UTC
  From: Sunil Kumar Kori <skori@marvell.com>

Implement RoC API to enable or disable HW bandwidth profiles
on CN10K platform.

Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
---
v2:
 - Rebase support on latest DPDK
 - Handled multilevel chaining for linear hierarchy
 - Review comments incorporated

 drivers/common/cnxk/roc_nix.h     |  4 ++++
 drivers/common/cnxk/roc_nix_bpf.c | 39 +++++++++++++++++++++++++++++++
 drivers/common/cnxk/version.map   |  1 +
 3 files changed, 44 insertions(+)
  

Patch

diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h
index af9bbb659c..b4995cd014 100644
--- a/drivers/common/cnxk/roc_nix.h
+++ b/drivers/common/cnxk/roc_nix.h
@@ -262,6 +262,7 @@  struct roc_nix_stats_queue {
 struct roc_nix_rq {
 	/* Input parameters */
 	uint16_t qid;
+	uint16_t bpf_id;
 	uint64_t aura_handle;
 	bool ipsech_ena;
 	uint16_t first_skip;
@@ -607,6 +608,9 @@  int __roc_api roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
 				 enum roc_nix_bpf_level_flag lvl_flag,
 				 struct roc_nix_bpf_cfg *cfg);
 
+int __roc_api roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id,
+				  struct roc_nix_rq *rq, bool enable);
+
 uint8_t __roc_api
 roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag);
 
diff --git a/drivers/common/cnxk/roc_nix_bpf.c b/drivers/common/cnxk/roc_nix_bpf.c
index b1a427caaf..4dcf4cd5b9 100644
--- a/drivers/common/cnxk/roc_nix_bpf.c
+++ b/drivers/common/cnxk/roc_nix_bpf.c
@@ -441,3 +441,42 @@  roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
 
 	return mbox_process(mbox);
 }
+
+int
+roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id, struct roc_nix_rq *rq,
+		    bool enable)
+{
+	struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+	struct mbox *mbox = get_mbox(roc_nix);
+	struct nix_cn10k_aq_enq_req *aq;
+	int rc;
+
+	if (roc_model_is_cn9k())
+		return NIX_ERR_HW_NOTSUP;
+
+	if (rq->qid >= nix->nb_rx_queues)
+		return NIX_ERR_QUEUE_INVALID_RANGE;
+
+	aq = mbox_alloc_msg_nix_cn10k_aq_enq(mbox);
+	if (aq == NULL)
+		return -ENOSPC;
+	aq->qidx = rq->qid;
+	aq->ctype = NIX_AQ_CTYPE_RQ;
+	aq->op = NIX_AQ_INSTOP_WRITE;
+
+	aq->rq.policer_ena = enable;
+	aq->rq_mask.policer_ena = ~(aq->rq_mask.policer_ena);
+	if (enable) {
+		aq->rq.band_prof_id = id;
+		aq->rq_mask.band_prof_id = ~(aq->rq_mask.band_prof_id);
+	}
+
+	rc = mbox_process(mbox);
+	if (rc)
+		goto exit;
+
+	rq->bpf_id = id;
+
+exit:
+	return rc;
+}
diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
index 6a009eaf35..4c5adb8212 100644
--- a/drivers/common/cnxk/version.map
+++ b/drivers/common/cnxk/version.map
@@ -80,6 +80,7 @@  INTERNAL {
 	roc_nix_bpf_alloc;
 	roc_nix_bpf_config;
 	roc_nix_bpf_count_get;
+	roc_nix_bpf_ena_dis;
 	roc_nix_bpf_free;
 	roc_nix_bpf_free_all;
 	roc_nix_bpf_level_to_idx;