[PATCH 1/2] common/cnxk: update RXC time config

Rahul Bhansali rbhansali at marvell.com
Mon Mar 2 14:53:18 CET 2026


For CN20k platform, CPT RXC time config is common across
all RXC queues. Reassembly configurations are updated to
have fix granularity and variable active limit time for
reassembly entries.

Signed-off-by: Rahul Bhansali <rbhansali at marvell.com>
---
 drivers/common/cnxk/roc_nix.h     |  1 +
 drivers/common/cnxk/roc_nix_inl.c | 21 +++++++++++++++++----
 drivers/common/cnxk/roc_nix_inl.h |  2 ++
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h
index 7bc3e1f5c6..8ba8b3e0b6 100644
--- a/drivers/common/cnxk/roc_nix.h
+++ b/drivers/common/cnxk/roc_nix.h
@@ -605,6 +605,7 @@ struct roc_nix {
 	bool dis_xqe_drop;
 	bool sq_resize_ena;
 	uint8_t def_first_skip;
+	uint32_t rxc_step;
 	/* End of input parameters */
 	/* LMT line base for "Per Core Tx LMT line" mode*/
 	uintptr_t lmt_base;
diff --git a/drivers/common/cnxk/roc_nix_inl.c b/drivers/common/cnxk/roc_nix_inl.c
index 26be1adac9..0c6211e68e 100644
--- a/drivers/common/cnxk/roc_nix_inl.c
+++ b/drivers/common/cnxk/roc_nix_inl.c
@@ -973,19 +973,16 @@ roc_nix_reassembly_configure(struct roc_cpt_rxc_time_cfg *req_cfg, uint32_t max_
 	struct roc_cpt_rxc_time_cfg cfg;
 	struct roc_cpt *roc_cpt;
 	struct mbox *mbox;
+	uint32_t val;
 	int rc;
 
 	if (!idev)
 		return -EFAULT;
 
-	cfg.step = req_cfg->step ? req_cfg->step :
-				   (max_wait_time * 1000 / ROC_NIX_INL_REAS_ACTIVE_LIMIT);
 	cfg.zombie_limit =
 		req_cfg->zombie_limit ? req_cfg->zombie_limit : ROC_NIX_INL_REAS_ZOMBIE_LIMIT;
 	cfg.zombie_thres =
 		req_cfg->zombie_thres ? req_cfg->zombie_thres : ROC_NIX_INL_REAS_ZOMBIE_THRESHOLD;
-	cfg.active_limit =
-		req_cfg->active_limit ? req_cfg->active_limit : ROC_NIX_INL_REAS_ACTIVE_LIMIT;
 	cfg.active_thres =
 		req_cfg->active_thres ? req_cfg->active_thres : ROC_NIX_INL_REAS_ACTIVE_THRESHOLD;
 
@@ -995,6 +992,12 @@ roc_nix_reassembly_configure(struct roc_cpt_rxc_time_cfg *req_cfg, uint32_t max_
 			plt_err("Cryptodev not probed");
 			return -ENOTSUP;
 		}
+
+		val = max_wait_time ? (max_wait_time * 1000 / ROC_NIX_INL_REAS_ACTIVE_LIMIT) : 0;
+		cfg.step = req_cfg->step ? req_cfg->step : val;
+		cfg.active_limit = req_cfg->active_limit ? req_cfg->active_limit :
+							   ROC_NIX_INL_REAS_ACTIVE_LIMIT;
+
 		return roc_cpt_rxc_time_cfg(roc_cpt, &cfg);
 	}
 
@@ -1012,6 +1015,16 @@ roc_nix_reassembly_configure(struct roc_cpt_rxc_time_cfg *req_cfg, uint32_t max_
 		goto exit;
 	}
 
+	/* For CN20K, Configure step size fix and active limit per RXC queue,
+	 * Default CPT_AF_RXC_TIME_CFG::AGE_STEP will be 1ms, so max reassembly
+	 * timeout can be up to 4095 ms.
+	 */
+	cfg.step = req_cfg->step ? req_cfg->step : ROC_NIX_INL_REAS_STEP_DFLT;
+	val = max_wait_time ? (max_wait_time * 1000 / cfg.step) : 0;
+	cfg.active_limit = req_cfg->active_limit ? req_cfg->active_limit : val;
+	if (cfg.active_limit > ROC_NIX_INL_REAS_ACTIVE_LIMIT)
+		cfg.active_limit = ROC_NIX_INL_REAS_ACTIVE_LIMIT;
+
 	req->blkaddr = 0;
 	req->queue_id = inl_dev->nix_inb_qids[inl_dev->inb_cpt_lf_id];
 	req->step = cfg.step;
diff --git a/drivers/common/cnxk/roc_nix_inl.h b/drivers/common/cnxk/roc_nix_inl.h
index d1a08a4495..82dae4b1ba 100644
--- a/drivers/common/cnxk/roc_nix_inl.h
+++ b/drivers/common/cnxk/roc_nix_inl.h
@@ -36,6 +36,8 @@
 #define ROC_NIX_INL_INB_CUSTOM_SA_SZ 512
 
 /* Reassembly configuration */
+#define ROC_NIX_INL_REAS_STEP_MAX	  0xFFFFF
+#define ROC_NIX_INL_REAS_STEP_DFLT	  0x3E8 /* 1 ms */
 #define ROC_NIX_INL_REAS_ACTIVE_LIMIT	  0xFFF
 #define ROC_NIX_INL_REAS_ACTIVE_THRESHOLD 10
 #define ROC_NIX_INL_REAS_ZOMBIE_LIMIT	  0xFFF
-- 
2.34.1



More information about the dev mailing list