From: Damodharam Ammepalli <[email protected]>
Do not set the RX LRO offload capability bit mask if the
hardware did not advertise the function, and let
the driver take non-tpa path in configuring the vnic
in such cases.
Fixes: b150a7e7ee66 ("net/bnxt: support LRO on Thor adapters")
Cc: [email protected]
Signed-off-by: Damodharam Ammepalli <[email protected]>
Signed-off-by: Mohammad Shuab Siddique <[email protected]>
---
drivers/net/bnxt/bnxt.h | 1 +
drivers/net/bnxt/bnxt_hwrm.c | 29 +++++++++++++++++++++++++++--
drivers/net/bnxt/bnxt_rxq.c | 3 ++-
3 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index f21753e40c..5ae4e620a4 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -1273,6 +1273,7 @@ extern int bnxt_logtype_driver;
#define BNXT_LINK_SPEEDS_V2(bp) (((bp)->link_info) &&
(((bp)->link_info->support_speeds_v2) || \
BNXT_LINK_SPEEDS_V2_VF((bp))))
#define BNXT_MAX_SPEED_LANES 8
+#define BNXT_SUPPORTS_TPA(bp) (!BNXT_CHIP_P5_P7(bp) || (bp)->max_tpa_v2)
extern const struct rte_flow_ops bnxt_ulp_rte_flow_ops;
int32_t bnxt_ulp_port_init(struct bnxt *bp);
void bnxt_ulp_port_deinit(struct bnxt *bp);
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index 02a5d00738..590543ad6a 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -3120,10 +3120,10 @@ int bnxt_hwrm_vnic_tpa_cfg(struct bnxt *bp,
return -ENOTSUP;
}
- if ((BNXT_CHIP_P5(bp) || BNXT_CHIP_P7(bp)) && !bp->max_tpa_v2) {
+ if (!BNXT_SUPPORTS_TPA(bp)) {
if (enable)
PMD_DRV_LOG_LINE(ERR, "No HW support for LRO");
- return -ENOTSUP;
+ return 0;
}
if (vnic->fw_vnic_id == INVALID_HW_RING_ID) {
@@ -4946,6 +4946,31 @@ int bnxt_hwrm_pf_evb_mode(struct bnxt *bp)
return rc;
}
+static int bnxt_hwrm_set_tpa(struct bnxt *bp)
+{
+ struct rte_eth_conf *dev_conf = &bp->eth_dev->data->dev_conf;
+ uint64_t rx_offloads = dev_conf->rxmode.offloads;
+ bool tpa_flags = 0;
+ int rc, i;
+
+ if (!BNXT_SUPPORTS_TPA(bp))
+ return 0;
+
+ tpa_flags = (rx_offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO) ? true : false;
+ for (i = 0; i < bp->max_vnics; i++) {
+ struct bnxt_vnic_info *vnic = &bp->vnic_info[i];
+
+ if (vnic->fw_vnic_id == INVALID_HW_RING_ID)
+ continue;
+
+ rc = bnxt_hwrm_vnic_tpa_cfg(bp, vnic, tpa_flags);
+ if (rc)
+ return rc;
+ }
+ return 0;
+}
+
+
int bnxt_hwrm_tunnel_dst_port_alloc(struct bnxt *bp, uint16_t port,
uint8_t tunnel_type)
{
diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
index b93f5043de..023cb0e174 100644
--- a/drivers/net/bnxt/bnxt_rxq.c
+++ b/drivers/net/bnxt/bnxt_rxq.c
@@ -38,7 +38,8 @@ uint64_t bnxt_get_rx_port_offloads(struct bnxt *bp)
RTE_ETH_RX_OFFLOAD_VLAN_EXTEND);
- if (!bnxt_compressed_rx_cqe_mode_enabled(bp))
+ if (!bnxt_compressed_rx_cqe_mode_enabled(bp) &&
+ BNXT_SUPPORTS_TPA(bp))
rx_offload_capa |= RTE_ETH_RX_OFFLOAD_TCP_LRO;
if (bp->flags & BNXT_FLAG_PTP_SUPPORTED)
rx_offload_capa |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;
--
2.47.3