@@ -47,6 +47,9 @@
/* HW Errata */
#include "roc_errata.h"
+/* HW Features */
+#include "roc_features.h"
+
/* Mbox */
#include "roc_mbox.h"
@@ -9,8 +9,6 @@
#include "roc_platform.h"
-struct nix_inline_ipsec_cfg;
-
#define ROC_AE_CPT_BLOCK_TYPE1 0
#define ROC_AE_CPT_BLOCK_TYPE2 1
new file mode 100644
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2022 Marvell.
+ */
+#ifndef _ROC_FEATURES_H_
+#define _ROC_FEATURES_H_
+
+static inline bool
+roc_feature_nix_has_inl_ipsec_mseg(void)
+{
+ return (roc_model_is_cn10kb() || roc_model_is_cn10ka_b0());
+}
+
+static inline bool
+roc_feature_nix_has_inl_rq_mask(void)
+{
+ return (roc_model_is_cn10kb() || roc_model_is_cn10ka_b0());
+}
+
+static inline bool
+roc_feature_nix_has_late_bp(void)
+{
+ return (roc_model_is_cn10kb() || roc_model_is_cn10ka_b0());
+}
+
+static inline bool
+roc_feature_nix_has_reass(void)
+{
+ return roc_model_is_cn10ka();
+}
+
+#endif
@@ -661,6 +661,12 @@ nix_lf_cq_dump(__io struct nix_cq_ctx_s *ctx, FILE *file)
ctx->qint_idx);
nix_dump(file, "W1: bpid \t\t\t%d\nW1: bp_ena \t\t\t%d\n", ctx->bpid,
ctx->bp_ena);
+ nix_dump(file,
+ "W1: lbpid_high \t\t\t0x%03x\nW1: lbpid_med \t\t\t0x%03x\n"
+ "W1: lbpid_low \t\t\t0x%03x\n(W1: lbpid) \t\t\t0x%03x\n",
+ ctx->lbpid_high, ctx->lbpid_med, ctx->lbpid_low,
+ ctx->lbpid_high << 6 | ctx->lbpid_med << 3 | ctx->lbpid_low);
+ nix_dump(file, "W1: lbp_ena \t\t\t\t%d\n", ctx->lbp_ena);
nix_dump(file, "W2: update_time \t\t%d\nW2: avg_level \t\t\t%d",
ctx->update_time, ctx->avg_level);
@@ -671,14 +677,10 @@ nix_lf_cq_dump(__io struct nix_cq_ctx_s *ctx, FILE *file)
ctx->cq_err_int_ena, ctx->cq_err_int);
nix_dump(file, "W3: qsize \t\t\t%d\nW3: caching \t\t\t%d", ctx->qsize,
ctx->caching);
- nix_dump(file, "W3: substream \t\t\t0x%03x\nW3: ena \t\t\t%d\nW3: lbp_ena \t\t\t%d",
- ctx->substream, ctx->ena, ctx->lbp_ena);
- nix_dump(file,
- "W3: lbpid_high \t\t\t0x%03x\nW3: lbpid_med \t\t\t0x%03x\n"
- "W3: lbpid_low \t\t\t0x%03x\n(W3: lbpid) \t\t\t0x%03x",
- ctx->lbpid_high, ctx->lbpid_med, ctx->lbpid_low,
- ctx->lbpid_high << 6 | ctx->lbpid_med << 3 | ctx->lbpid_low);
nix_dump(file, "W3: lbp_frac \t\t\t%d\n", ctx->lbp_frac);
+ nix_dump(file, "W3: substream \t\t\t0x%03x\nW3: cpt_drop_err_en \t\t\t%d\n",
+ ctx->substream, ctx->cpt_drop_err_en);
+ nix_dump(file, "W3: ena \t\t\t%d\n", ctx->ena);
nix_dump(file, "W3: drop_ena \t\t\t%d\nW3: drop \t\t\t%d", ctx->drop_ena,
ctx->drop);
nix_dump(file, "W3: bp \t\t\t\t%d\n", ctx->bp);
@@ -77,7 +77,10 @@ nix_fc_rxchan_bpid_set(struct roc_nix *roc_nix, bool enable)
if (req == NULL)
goto exit;
req->chan_base = 0;
- req->chan_cnt = 1;
+ if (roc_nix_is_lbk(roc_nix) || roc_nix_is_sdp(roc_nix))
+ req->chan_cnt = NIX_LBK_MAX_CHAN;
+ else
+ req->chan_cnt = NIX_CGX_MAX_CHAN;
req->bpid_per_chan = 0;
rc = mbox_process_msg(mbox, (void *)&rsp);
@@ -89,7 +92,10 @@ nix_fc_rxchan_bpid_set(struct roc_nix *roc_nix, bool enable)
if (req == NULL)
goto exit;
req->chan_base = 0;
- req->chan_cnt = 1;
+ if (roc_nix_is_lbk(roc_nix) || roc_nix_is_sdp(roc_nix))
+ req->chan_cnt = NIX_LBK_MAX_CHAN;
+ else
+ req->chan_cnt = NIX_CGX_MAX_CHAN;
req->bpid_per_chan = 0;
rc = mbox_process_msg(mbox, (void *)&rsp);
@@ -485,13 +485,6 @@ nix_inl_rq_mask_cfg(struct roc_nix *roc_nix, bool enable)
return rc;
}
-bool
-roc_nix_has_reass_support(struct roc_nix *nix)
-{
- PLT_SET_USED(nix);
- return !!roc_model_is_cn10ka();
-}
-
int
roc_nix_inl_inb_init(struct roc_nix *roc_nix)
{
@@ -574,7 +567,7 @@ roc_nix_inl_inb_fini(struct roc_nix *roc_nix)
nix_inl_meta_aura_destroy();
}
- if (roc_model_is_cn10kb_a0()) {
+ if (roc_feature_nix_has_inl_rq_mask()) {
rc = nix_inl_rq_mask_cfg(roc_nix, false);
if (rc) {
plt_err("Failed to get rq mask rc=%d", rc);
@@ -1046,7 +1039,7 @@ roc_nix_inl_rq_ena_dis(struct roc_nix *roc_nix, bool enable)
if (!idev)
return -EFAULT;
- if (roc_model_is_cn10kb_a0()) {
+ if (roc_feature_nix_has_inl_rq_mask()) {
rc = nix_inl_rq_mask_cfg(roc_nix, true);
if (rc) {
plt_err("Failed to get rq mask rc=%d", rc);
@@ -182,7 +182,6 @@ int __roc_api roc_nix_inl_ts_pkind_set(struct roc_nix *roc_nix, bool ts_ena,
bool inb_inl_dev);
int __roc_api roc_nix_inl_rq_ena_dis(struct roc_nix *roc_nix, bool ena);
int __roc_api roc_nix_inl_meta_aura_check(struct roc_nix_rq *rq);
-bool __roc_api roc_nix_has_reass_support(struct roc_nix *nix);
/* NIX Inline Outbound API */
int __roc_api roc_nix_inl_outb_init(struct roc_nix *roc_nix);
@@ -863,7 +863,7 @@ roc_nix_cq_init(struct roc_nix *roc_nix, struct roc_nix_cq *cq)
cq_ctx->avg_level = 0xff;
cq_ctx->cq_err_int_ena = BIT(NIX_CQERRINT_CQE_FAULT);
cq_ctx->cq_err_int_ena |= BIT(NIX_CQERRINT_DOOR_ERR);
- if (roc_model_is_cn10kb() && roc_nix_inl_inb_is_enabled(roc_nix)) {
+ if (roc_feature_nix_has_late_bp() && roc_nix_inl_inb_is_enabled(roc_nix)) {
cq_ctx->cq_err_int_ena |= BIT(NIX_CQERRINT_CPT_DROP);
cq_ctx->cpt_drop_err_en = 1;
/* Enable Late BP only when non zero CPT BPID */
@@ -900,6 +900,7 @@ roc_nix_cq_init(struct roc_nix *roc_nix, struct roc_nix_cq *cq)
cq_ctx->drop_ena = 1;
}
}
+ cq_ctx->bp = cq->drop_thresh;
rc = mbox_process(mbox);
mbox_put(mbox);
@@ -960,7 +961,7 @@ roc_nix_cq_fini(struct roc_nix_cq *cq)
aq->cq.bp_ena = 0;
aq->cq_mask.ena = ~aq->cq_mask.ena;
aq->cq_mask.bp_ena = ~aq->cq_mask.bp_ena;
- if (roc_model_is_cn10kb() && roc_nix_inl_inb_is_enabled(cq->roc_nix)) {
+ if (roc_feature_nix_has_late_bp() && roc_nix_inl_inb_is_enabled(cq->roc_nix)) {
aq->cq.lbp_ena = 0;
aq->cq_mask.lbp_ena = ~aq->cq_mask.lbp_ena;
}
@@ -138,7 +138,6 @@ INTERNAL {
roc_nix_get_pf_func;
roc_nix_get_vf;
roc_nix_get_vwqe_interval;
- roc_nix_has_reass_support;
roc_nix_inl_cb_register;
roc_nix_inl_cb_unregister;
roc_nix_inl_ctx_write;
@@ -591,7 +591,7 @@ cn10k_nix_reassembly_capability_get(struct rte_eth_dev *eth_dev,
int rc = -ENOTSUP;
RTE_SET_USED(eth_dev);
- if (!roc_nix_has_reass_support(&dev->nix))
+ if (!roc_feature_nix_has_reass())
return -ENOTSUP;
if (dev->rx_offloads & RTE_ETH_RX_OFFLOAD_SECURITY) {
@@ -621,7 +621,7 @@ cn10k_nix_reassembly_conf_set(struct rte_eth_dev *eth_dev,
struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev);
int rc = 0;
- if (!roc_nix_has_reass_support(&dev->nix))
+ if (!roc_feature_nix_has_reass())
return -ENOTSUP;
if (!conf->flags) {
@@ -809,7 +809,7 @@ cn10k_eth_sec_session_create(void *device,
sess_priv.chksum = (!ipsec->options.ip_csum_enable << 1 |
!ipsec->options.l4_csum_enable);
sess_priv.dec_ttl = ipsec->options.dec_ttl;
- if (roc_model_is_cn10kb_a0())
+ if (roc_feature_nix_has_inl_ipsec_mseg())
sess_priv.nixtx_off = 1;
/* Pointer from eth_sec -> outb_sa */