You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
5.9 KiB
206 lines
5.9 KiB
5 years ago
|
From a9536e5d7071700b70864dd36a64c76be4cd66d9 Mon Sep 17 00:00:00 2001
|
||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||
|
Date: Wed, 2 Oct 2019 18:23:08 -0400
|
||
|
Subject: [PATCH 53/96] [netdrv] bnxt_en: Refactor bnxt_init_one() and turn on
|
||
|
TPA support on 57500 chips
|
||
|
|
||
|
Message-id: <123b7087655bc1637b5b987815609f43d1ef2caa.1570027456.git.jtoppins@redhat.com>
|
||
|
Patchwork-id: 276472
|
||
|
O-Subject: [RHEL-8.2 PATCH 46/78] bnxt_en: Refactor bnxt_init_one() and turn on TPA support on 57500 chips.
|
||
|
Bugzilla: 1724766
|
||
|
RH-Acked-by: John Linville <linville@redhat.com>
|
||
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||
|
|
||
|
With the new TPA feature in the 57500 chips, we need to discover the
|
||
|
feature first before setting up the netdev features. Refactor the
|
||
|
the firmware probe and init logic more cleanly into 2 functions and
|
||
|
and make these calls before setting up the netdev features.
|
||
|
|
||
|
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|
(cherry picked from commit 7c3809181468a219aa2abd25910bd3b02b89b0de)
|
||
|
Bugzilla: 1724766
|
||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||
|
Tested: build, boot, basic ping
|
||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||
|
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||
|
---
|
||
|
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 116 +++++++++++++++++-------------
|
||
|
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 4 +-
|
||
|
2 files changed, 67 insertions(+), 53 deletions(-)
|
||
|
|
||
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||
|
===================================================================
|
||
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.147499962 +0100
|
||
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.409497557 +0100
|
||
|
@@ -9915,6 +9915,68 @@
|
||
|
bp->stats_coal_ticks = BNXT_DEF_STATS_COAL_TICKS;
|
||
|
}
|
||
|
|
||
|
+static int bnxt_fw_init_one_p1(struct bnxt *bp)
|
||
|
+{
|
||
|
+ int rc;
|
||
|
+
|
||
|
+ bp->fw_cap = 0;
|
||
|
+ rc = bnxt_hwrm_ver_get(bp);
|
||
|
+ if (rc)
|
||
|
+ return rc;
|
||
|
+
|
||
|
+ if (bp->fw_cap & BNXT_FW_CAP_KONG_MB_CHNL) {
|
||
|
+ rc = bnxt_alloc_kong_hwrm_resources(bp);
|
||
|
+ if (rc)
|
||
|
+ bp->fw_cap &= ~BNXT_FW_CAP_KONG_MB_CHNL;
|
||
|
+ }
|
||
|
+
|
||
|
+ if ((bp->fw_cap & BNXT_FW_CAP_SHORT_CMD) ||
|
||
|
+ bp->hwrm_max_ext_req_len > BNXT_HWRM_MAX_REQ_LEN) {
|
||
|
+ rc = bnxt_alloc_hwrm_short_cmd_req(bp);
|
||
|
+ if (rc)
|
||
|
+ return rc;
|
||
|
+ }
|
||
|
+ rc = bnxt_hwrm_func_reset(bp);
|
||
|
+ if (rc)
|
||
|
+ return -ENODEV;
|
||
|
+
|
||
|
+ bnxt_hwrm_fw_set_time(bp);
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
+static int bnxt_fw_init_one_p2(struct bnxt *bp)
|
||
|
+{
|
||
|
+ int rc;
|
||
|
+
|
||
|
+ /* Get the MAX capabilities for this function */
|
||
|
+ rc = bnxt_hwrm_func_qcaps(bp);
|
||
|
+ if (rc) {
|
||
|
+ netdev_err(bp->dev, "hwrm query capability failure rc: %x\n",
|
||
|
+ rc);
|
||
|
+ return -ENODEV;
|
||
|
+ }
|
||
|
+
|
||
|
+ rc = bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(bp);
|
||
|
+ if (rc)
|
||
|
+ netdev_warn(bp->dev, "hwrm query adv flow mgnt failure rc: %d\n",
|
||
|
+ rc);
|
||
|
+
|
||
|
+ rc = bnxt_hwrm_func_drv_rgtr(bp);
|
||
|
+ if (rc)
|
||
|
+ return -ENODEV;
|
||
|
+
|
||
|
+ rc = bnxt_hwrm_func_rgtr_async_events(bp, NULL, 0);
|
||
|
+ if (rc)
|
||
|
+ return -ENODEV;
|
||
|
+
|
||
|
+ bnxt_hwrm_func_qcfg(bp);
|
||
|
+ bnxt_hwrm_vnic_qcaps(bp);
|
||
|
+ bnxt_hwrm_port_led_qcaps(bp);
|
||
|
+ bnxt_ethtool_init(bp);
|
||
|
+ bnxt_dcb_init(bp);
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||
|
{
|
||
|
int rc;
|
||
|
@@ -10894,32 +10956,18 @@
|
||
|
goto init_err_pci_clean;
|
||
|
|
||
|
mutex_init(&bp->hwrm_cmd_lock);
|
||
|
- rc = bnxt_hwrm_ver_get(bp);
|
||
|
+
|
||
|
+ rc = bnxt_fw_init_one_p1(bp);
|
||
|
if (rc)
|
||
|
goto init_err_pci_clean;
|
||
|
|
||
|
- if (bp->fw_cap & BNXT_FW_CAP_KONG_MB_CHNL) {
|
||
|
- rc = bnxt_alloc_kong_hwrm_resources(bp);
|
||
|
- if (rc)
|
||
|
- bp->fw_cap &= ~BNXT_FW_CAP_KONG_MB_CHNL;
|
||
|
- }
|
||
|
-
|
||
|
- if ((bp->fw_cap & BNXT_FW_CAP_SHORT_CMD) ||
|
||
|
- bp->hwrm_max_ext_req_len > BNXT_HWRM_MAX_REQ_LEN) {
|
||
|
- rc = bnxt_alloc_hwrm_short_cmd_req(bp);
|
||
|
- if (rc)
|
||
|
- goto init_err_pci_clean;
|
||
|
- }
|
||
|
-
|
||
|
if (BNXT_CHIP_P5(bp))
|
||
|
bp->flags |= BNXT_FLAG_CHIP_P5;
|
||
|
|
||
|
- rc = bnxt_hwrm_func_reset(bp);
|
||
|
+ rc = bnxt_fw_init_one_p2(bp);
|
||
|
if (rc)
|
||
|
goto init_err_pci_clean;
|
||
|
|
||
|
- bnxt_hwrm_fw_set_time(bp);
|
||
|
-
|
||
|
dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
|
||
|
NETIF_F_TSO | NETIF_F_TSO6 |
|
||
|
NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
|
||
|
@@ -10963,37 +11011,8 @@
|
||
|
if (!BNXT_CHIP_P4_PLUS(bp))
|
||
|
bp->flags |= BNXT_FLAG_DOUBLE_DB;
|
||
|
|
||
|
- rc = bnxt_hwrm_func_drv_rgtr(bp);
|
||
|
- if (rc)
|
||
|
- goto init_err_pci_clean;
|
||
|
-
|
||
|
- rc = bnxt_hwrm_func_rgtr_async_events(bp, NULL, 0);
|
||
|
- if (rc)
|
||
|
- goto init_err_pci_clean;
|
||
|
-
|
||
|
bp->ulp_probe = bnxt_ulp_probe;
|
||
|
|
||
|
- rc = bnxt_hwrm_queue_qportcfg(bp);
|
||
|
- if (rc) {
|
||
|
- netdev_err(bp->dev, "hwrm query qportcfg failure rc: %x\n",
|
||
|
- rc);
|
||
|
- rc = -1;
|
||
|
- goto init_err_pci_clean;
|
||
|
- }
|
||
|
- /* Get the MAX capabilities for this function */
|
||
|
- rc = bnxt_hwrm_func_qcaps(bp);
|
||
|
- if (rc) {
|
||
|
- netdev_err(bp->dev, "hwrm query capability failure rc: %x\n",
|
||
|
- rc);
|
||
|
- rc = -1;
|
||
|
- goto init_err_pci_clean;
|
||
|
- }
|
||
|
-
|
||
|
- rc = bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(bp);
|
||
|
- if (rc)
|
||
|
- netdev_warn(bp->dev, "hwrm query adv flow mgnt failure rc: %d\n",
|
||
|
- rc);
|
||
|
-
|
||
|
rc = bnxt_init_mac_addr(bp);
|
||
|
if (rc) {
|
||
|
dev_err(&pdev->dev, "Unable to initialize mac address.\n");
|
||
|
@@ -11007,11 +11026,6 @@
|
||
|
if (rc)
|
||
|
goto init_err_pci_clean;
|
||
|
}
|
||
|
- bnxt_hwrm_func_qcfg(bp);
|
||
|
- bnxt_hwrm_vnic_qcaps(bp);
|
||
|
- bnxt_hwrm_port_led_qcaps(bp);
|
||
|
- bnxt_ethtool_init(bp);
|
||
|
- bnxt_dcb_init(bp);
|
||
|
|
||
|
/* MTU range: 60 - FW defined max */
|
||
|
dev->min_mtu = ETH_ZLEN;
|
||
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||
|
===================================================================
|
||
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.148499952 +0100
|
||
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.409497557 +0100
|
||
|
@@ -1459,8 +1459,8 @@
|
||
|
#define BNXT_CHIP_TYPE_NITRO_A0(bp) ((bp)->flags & BNXT_FLAG_CHIP_NITRO_A0)
|
||
|
#define BNXT_RX_PAGE_MODE(bp) ((bp)->flags & BNXT_FLAG_RX_PAGE_MODE)
|
||
|
#define BNXT_SUPPORTS_TPA(bp) (!BNXT_CHIP_TYPE_NITRO_A0(bp) && \
|
||
|
- !(bp->flags & BNXT_FLAG_CHIP_P5) && \
|
||
|
- !is_kdump_kernel())
|
||
|
+ (!((bp)->flags & BNXT_FLAG_CHIP_P5) || \
|
||
|
+ (bp)->max_tpa_v2) && !is_kdump_kernel())
|
||
|
|
||
|
/* Chip class phase 5 */
|
||
|
#define BNXT_CHIP_P5(bp) \
|