[02/12] common/cnxk: avoid CPT backpressure due to errata

Message ID 20220616070743.30658-2-ndabilpuram@marvell.com (mailing list archive)
State Changes Requested, archived
Delegated to: Jerin Jacob
Headers
Series [01/12] common/cnxk: use computed value for wqe skip |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Nithin Dabilpuram June 16, 2022, 7:07 a.m. UTC
  Avoid enabling CPT backpressure due to errata where
backpressure would block requests from even other
CPT LF's. Also allow CQ size >=16K.

Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
---
 drivers/common/cnxk/roc_errata.h | 7 +++++++
 drivers/common/cnxk/roc_nix.h    | 2 +-
 drivers/common/cnxk/roc_nix_fc.c | 3 ++-
 3 files changed, 10 insertions(+), 2 deletions(-)
  

Patch

diff --git a/drivers/common/cnxk/roc_errata.h b/drivers/common/cnxk/roc_errata.h
index 31162d5..f048297 100644
--- a/drivers/common/cnxk/roc_errata.h
+++ b/drivers/common/cnxk/roc_errata.h
@@ -77,4 +77,11 @@  roc_errata_nix_has_perf_issue_on_stats_update(void)
 	return true;
 }
 
+/* Errata IPBUCPT-38726, IPBUCPT-38727 */
+static inline bool
+roc_errata_cpt_hang_on_x2p_bp(void)
+{
+	return roc_model_is_cn10ka_a0();
+}
+
 #endif /* _ROC_ERRATA_H_ */
diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h
index aedde1c..944e4c6 100644
--- a/drivers/common/cnxk/roc_nix.h
+++ b/drivers/common/cnxk/roc_nix.h
@@ -309,7 +309,7 @@  struct roc_nix_rq {
 struct roc_nix_cq {
 	/* Input parameters */
 	uint16_t qid;
-	uint16_t nb_desc;
+	uint32_t nb_desc;
 	/* End of Input parameters */
 	uint16_t drop_thresh;
 	struct roc_nix *roc_nix;
diff --git a/drivers/common/cnxk/roc_nix_fc.c b/drivers/common/cnxk/roc_nix_fc.c
index a0505bd..cef5d07 100644
--- a/drivers/common/cnxk/roc_nix_fc.c
+++ b/drivers/common/cnxk/roc_nix_fc.c
@@ -77,7 +77,8 @@  nix_fc_rxchan_bpid_set(struct roc_nix *roc_nix, bool enable)
 		goto exit;
 
 	/* Enable backpressure on CPT if inline inb is enabled */
-	if (enable && roc_nix_inl_inb_is_enabled(roc_nix)) {
+	if (enable && roc_nix_inl_inb_is_enabled(roc_nix) &&
+	    !roc_errata_cpt_hang_on_x2p_bp()) {
 		req = mbox_alloc_msg_nix_cpt_bp_enable(mbox);
 		if (req == NULL)
 			return rc;