Enable backpressure on CPT with inline inbound enabled.

Signed-off-by: Nithin Dabilpuram <ndabilpu...@marvell.com>
---
 drivers/common/cnxk/roc_mbox.h   |  4 ++++
 drivers/common/cnxk/roc_nix_fc.c | 28 ++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/common/cnxk/roc_mbox.h b/drivers/common/cnxk/roc_mbox.h
index 5dcb445..bf5495d 100644
--- a/drivers/common/cnxk/roc_mbox.h
+++ b/drivers/common/cnxk/roc_mbox.h
@@ -239,6 +239,10 @@ struct mbox_msghdr {
        M(NIX_BANDPROF_ALLOC, 0x801d, nix_bandprof_alloc,                      \
          nix_bandprof_alloc_req, nix_bandprof_alloc_rsp)                      \
        M(NIX_BANDPROF_FREE, 0x801e, nix_bandprof_free, nix_bandprof_free_req, \
+         msg_rsp)                                                             \
+       M(NIX_CPT_BP_ENABLE, 0x8020, nix_cpt_bp_enable, nix_bp_cfg_req,        \
+         nix_bp_cfg_rsp)                                                      \
+       M(NIX_CPT_BP_DISABLE, 0x8021, nix_cpt_bp_disable, nix_bp_cfg_req,      \
          msg_rsp)
 
 /* Messages initiated by AF (range 0xC00 - 0xDFF) */
diff --git a/drivers/common/cnxk/roc_nix_fc.c b/drivers/common/cnxk/roc_nix_fc.c
index 6453258..ca29cd2 100644
--- a/drivers/common/cnxk/roc_nix_fc.c
+++ b/drivers/common/cnxk/roc_nix_fc.c
@@ -70,6 +70,34 @@ nix_fc_rxchan_bpid_set(struct roc_nix *roc_nix, bool enable)
                nix->chan_cnt = 0;
        }
 
+       if (roc_model_is_cn9k())
+               goto exit;
+
+       /* Enable backpressure on CPT if inline inb is enabled */
+       if (enable && roc_nix_inl_inb_is_enabled(roc_nix)) {
+               req = mbox_alloc_msg_nix_cpt_bp_enable(mbox);
+               if (req == NULL)
+                       return rc;
+               req->chan_base = 0;
+               req->chan_cnt = 1;
+               req->bpid_per_chan = 0;
+
+               rc = mbox_process_msg(mbox, (void *)&rsp);
+               if (rc)
+                       goto exit;
+       } else {
+               req = mbox_alloc_msg_nix_cpt_bp_disable(mbox);
+               if (req == NULL)
+                       return rc;
+               req->chan_base = 0;
+               req->chan_cnt = 1;
+               req->bpid_per_chan = 0;
+
+               rc = mbox_process_msg(mbox, (void *)&rsp);
+               if (rc)
+                       goto exit;
+       }
+
 exit:
        return rc;
 }
-- 
2.8.4

Reply via email to