From 2a6d9fa8bce4a6c32dfd06c504104f579b76314c Mon Sep 17 00:00:00 2001 From: Srujana Challa Date: Fri, 1 Oct 2021 19:10:19 +0530 Subject: [PATCH] net/cnxk: allow zero UDP6 checksum for non-inline device Sets IP6_UDP_OPT in NIX RX config to allow optional UDP checksum for IPv6 in case of security offload. Also disable drop_re when inline inbound is enabled. Signed-off-by: Srujana Challa Acked-by: Jerin Jacob --- drivers/net/cnxk/cn10k_ethdev.c | 5 +++++ drivers/net/cnxk/cnxk_ethdev.c | 9 +++++++++ drivers/net/cnxk/cnxk_ethdev.h | 1 + 3 files changed, 15 insertions(+) diff --git a/drivers/net/cnxk/cn10k_ethdev.c b/drivers/net/cnxk/cn10k_ethdev.c index fa2343c242..9dfea99db9 100644 --- a/drivers/net/cnxk/cn10k_ethdev.c +++ b/drivers/net/cnxk/cn10k_ethdev.c @@ -553,6 +553,11 @@ cn10k_nix_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) dev = cnxk_eth_pmd_priv(eth_dev); + /* DROP_RE is not supported with inline IPSec for CN10K A0 */ + if (roc_model_is_cn10ka_a0() || roc_model_is_cnf10ka_a0() || + roc_model_is_cnf10kb_a0()) + dev->ipsecd_drop_re_dis = 1; + /* Register up msg callbacks for PTP information */ roc_nix_ptp_info_cb_register(&dev->nix, cn10k_nix_ptp_info_update_cb); diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c index 5af37d39e7..03e4e6814d 100644 --- a/drivers/net/cnxk/cnxk_ethdev.c +++ b/drivers/net/cnxk/cnxk_ethdev.c @@ -1021,6 +1021,15 @@ cnxk_nix_configure(struct rte_eth_dev *eth_dev) ROC_NIX_LF_RX_CFG_LEN_IL4 | ROC_NIX_LF_RX_CFG_LEN_IL3 | ROC_NIX_LF_RX_CFG_LEN_OL4 | ROC_NIX_LF_RX_CFG_LEN_OL3); + if (dev->rx_offloads & DEV_RX_OFFLOAD_SECURITY) { + rx_cfg |= ROC_NIX_LF_RX_CFG_IP6_UDP_OPT; + /* Disable drop re if rx offload security is enabled and + * platform does not support it. + */ + if (dev->ipsecd_drop_re_dis) + rx_cfg &= ~(ROC_NIX_LF_RX_CFG_DROP_RE); + } + nb_rxq = RTE_MAX(data->nb_rx_queues, 1); nb_txq = RTE_MAX(data->nb_tx_queues, 1); diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h index e9784c3fa6..ff21b977b7 100644 --- a/drivers/net/cnxk/cnxk_ethdev.h +++ b/drivers/net/cnxk/cnxk_ethdev.h @@ -269,6 +269,7 @@ struct cnxk_eth_dev { union { struct { uint64_t cq_min_4k : 1; + uint64_t ipsecd_drop_re_dis : 1; }; uint64_t hwcap; }; -- 2.20.1