From: Nithin Dabilpuram Date: Tue, 2 Nov 2021 15:54:17 +0000 (+0530) Subject: common/cnxk: support changing drop Rx error flag X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=c89e976c5fa97668d3b60993a076a1ec30eaf523;p=dpdk.git common/cnxk: support changing drop Rx error flag Added API to toggle drop_re flag after nix_lf_alloc() so that it can be used to toggle it runtime. Signed-off-by: Nithin Dabilpuram Acked-by: Jerin Jacob --- diff --git a/drivers/common/cnxk/roc_mbox.h b/drivers/common/cnxk/roc_mbox.h index bf5495dc49..a7e77766a8 100644 --- a/drivers/common/cnxk/roc_mbox.h +++ b/drivers/common/cnxk/roc_mbox.h @@ -1075,6 +1075,7 @@ struct nix_rx_cfg { struct mbox_msghdr hdr; #define NIX_RX_OL3_VERIFY BIT(0) #define NIX_RX_OL4_VERIFY BIT(1) +#define NIX_RX_DROP_RE BIT(2) uint8_t __io len_verify; /* Outer L3/L4 len check */ #define NIX_RX_CSUM_OL4_VERIFY BIT(0) uint8_t __io csum_verify; /* Outer L4 checksum verification */ diff --git a/drivers/common/cnxk/roc_nix.c b/drivers/common/cnxk/roc_nix.c index c96b26604c..151d8c3426 100644 --- a/drivers/common/cnxk/roc_nix.c +++ b/drivers/common/cnxk/roc_nix.c @@ -173,6 +173,7 @@ roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq, uint32_t nb_txq, if (rc) goto fail; + nix->rx_cfg = rx_cfg; nix->sqb_size = rsp->sqb_size; nix->tx_chan_base = rsp->tx_chan_base; nix->rx_chan_base = rsp->rx_chan_base; diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h index 8f36ce7021..82d74de409 100644 --- a/drivers/common/cnxk/roc_nix.h +++ b/drivers/common/cnxk/roc_nix.h @@ -445,6 +445,7 @@ int __roc_api roc_nix_lf_free(struct roc_nix *roc_nix); int __roc_api roc_nix_lf_inl_ipsec_cfg(struct roc_nix *roc_nix, struct roc_nix_ipsec_cfg *cfg, bool enb); int __roc_api roc_nix_cpt_ctx_cache_sync(struct roc_nix *roc_nix); +int __roc_api roc_nix_rx_drop_re_set(struct roc_nix *roc_nix, bool ena); /* Debug */ int __roc_api roc_nix_lf_get_reg_count(struct roc_nix *roc_nix); diff --git a/drivers/common/cnxk/roc_nix_ops.c b/drivers/common/cnxk/roc_nix_ops.c index 0e28302e74..04a78cf4ca 100644 --- a/drivers/common/cnxk/roc_nix_ops.c +++ b/drivers/common/cnxk/roc_nix_ops.c @@ -450,3 +450,42 @@ roc_nix_eeprom_info_get(struct roc_nix *roc_nix, mbox_memcpy(info->buf, rsp->fwdata.sfp_eeprom.buf, SFP_EEPROM_SIZE); return 0; } + +int +roc_nix_rx_drop_re_set(struct roc_nix *roc_nix, bool ena) +{ + struct nix *nix = roc_nix_to_nix_priv(roc_nix); + struct mbox *mbox = get_mbox(roc_nix); + struct nix_rx_cfg *req; + int rc = -EIO; + + /* No-op if no change */ + if (ena == !!(nix->rx_cfg & ROC_NIX_LF_RX_CFG_DROP_RE)) + return 0; + + req = mbox_alloc_msg_nix_set_rx_cfg(mbox); + if (req == NULL) + return rc; + + if (ena) + req->len_verify |= NIX_RX_DROP_RE; + /* Keep other flags intact */ + if (nix->rx_cfg & ROC_NIX_LF_RX_CFG_LEN_OL3) + req->len_verify |= NIX_RX_OL3_VERIFY; + + if (nix->rx_cfg & ROC_NIX_LF_RX_CFG_LEN_OL4) + req->len_verify |= NIX_RX_OL4_VERIFY; + + if (nix->rx_cfg & ROC_NIX_LF_RX_CFG_CSUM_OL4) + req->csum_verify |= NIX_RX_CSUM_OL4_VERIFY; + + rc = mbox_process(mbox); + if (rc) + return rc; + + if (ena) + nix->rx_cfg |= ROC_NIX_LF_RX_CFG_DROP_RE; + else + nix->rx_cfg &= ~ROC_NIX_LF_RX_CFG_DROP_RE; + return 0; +} diff --git a/drivers/common/cnxk/roc_nix_priv.h b/drivers/common/cnxk/roc_nix_priv.h index 60a00a3141..04575af295 100644 --- a/drivers/common/cnxk/roc_nix_priv.h +++ b/drivers/common/cnxk/roc_nix_priv.h @@ -139,6 +139,7 @@ struct nix { uint16_t msixoff; uint8_t rx_pause; uint8_t tx_pause; + uint64_t rx_cfg; struct dev dev; uint16_t cints; uint16_t qints; diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map index a90e5fca28..a139f0dd9e 100644 --- a/drivers/common/cnxk/version.map +++ b/drivers/common/cnxk/version.map @@ -211,6 +211,7 @@ INTERNAL { roc_nix_rss_key_set; roc_nix_rss_reta_get; roc_nix_rss_reta_set; + roc_nix_rx_drop_re_set; roc_nix_rx_queue_intr_disable; roc_nix_rx_queue_intr_enable; roc_nix_sq_dump;