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.
118 lines
4.0 KiB
118 lines
4.0 KiB
5 years ago
|
From bbe3117afaa0ff9fca4b8691a7f138c5c609c8f9 Mon Sep 17 00:00:00 2001
|
||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||
|
Date: Wed, 2 Oct 2019 18:22:40 -0400
|
||
|
Subject: [PATCH 25/96] [netdrv] bnxt_en: Query firmware capability to support
|
||
|
aRFS on 57500 chips
|
||
|
|
||
|
Message-id: <76a89a755982ba153852e5f3c8364a30c283f28c.1570027456.git.jtoppins@redhat.com>
|
||
|
Patchwork-id: 276446
|
||
|
O-Subject: [RHEL-8.2 PATCH 18/78] bnxt_en: Query firmware capability to support aRFS on 57500 chips.
|
||
|
Bugzilla: 1724766
|
||
|
RH-Acked-by: John Linville <linville@redhat.com>
|
||
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||
|
|
||
|
Query support for the aRFS ring table index in the firmware.
|
||
|
|
||
|
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|
(cherry picked from commit e969ae5bbfcf48e3ff2d159870453121d5a8441d)
|
||
|
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 | 43 ++++++++++++++++++++++++++++++-
|
||
|
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 ++
|
||
|
2 files changed, 44 insertions(+), 1 deletion(-)
|
||
|
|
||
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||
|
===================================================================
|
||
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.520533254 +0100
|
||
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.662531951 +0100
|
||
|
@@ -6636,6 +6636,34 @@
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
+static int bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(struct bnxt *bp)
|
||
|
+{
|
||
|
+ struct hwrm_cfa_adv_flow_mgnt_qcaps_input req = {0};
|
||
|
+ struct hwrm_cfa_adv_flow_mgnt_qcaps_output *resp;
|
||
|
+ int rc = 0;
|
||
|
+ u32 flags;
|
||
|
+
|
||
|
+ if (!(bp->fw_cap & BNXT_FW_CAP_CFA_ADV_FLOW))
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ resp = bp->hwrm_cmd_resp_addr;
|
||
|
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_ADV_FLOW_MGNT_QCAPS, -1, -1);
|
||
|
+
|
||
|
+ mutex_lock(&bp->hwrm_cmd_lock);
|
||
|
+ rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||
|
+ if (rc)
|
||
|
+ goto hwrm_cfa_adv_qcaps_exit;
|
||
|
+
|
||
|
+ flags = le32_to_cpu(resp->flags);
|
||
|
+ if (flags &
|
||
|
+ CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_RFS_RING_TBL_IDX_SUPPORTED)
|
||
|
+ bp->fw_cap |= BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX;
|
||
|
+
|
||
|
+hwrm_cfa_adv_qcaps_exit:
|
||
|
+ mutex_unlock(&bp->hwrm_cmd_lock);
|
||
|
+ return rc;
|
||
|
+}
|
||
|
+
|
||
|
static int bnxt_hwrm_func_reset(struct bnxt *bp)
|
||
|
{
|
||
|
struct hwrm_func_reset_input req = {0};
|
||
|
@@ -6768,6 +6796,10 @@
|
||
|
VER_GET_RESP_DEV_CAPS_CFG_TRUSTED_VF_SUPPORTED)
|
||
|
bp->fw_cap |= BNXT_FW_CAP_TRUSTED_VF;
|
||
|
|
||
|
+ if (dev_caps_cfg &
|
||
|
+ VER_GET_RESP_DEV_CAPS_CFG_CFA_ADV_FLOW_MGNT_SUPPORTED)
|
||
|
+ bp->fw_cap |= BNXT_FW_CAP_CFA_ADV_FLOW;
|
||
|
+
|
||
|
hwrm_ver_get_exit:
|
||
|
mutex_unlock(&bp->hwrm_cmd_lock);
|
||
|
return rc;
|
||
|
@@ -9075,8 +9107,11 @@
|
||
|
/* If the chip and firmware supports RFS */
|
||
|
static bool bnxt_rfs_supported(struct bnxt *bp)
|
||
|
{
|
||
|
- if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||
|
+ if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||
|
+ if (bp->fw_cap & BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX)
|
||
|
+ return true;
|
||
|
return false;
|
||
|
+ }
|
||
|
if (BNXT_PF(bp) && !BNXT_CHIP_TYPE_NITRO_A0(bp))
|
||
|
return true;
|
||
|
if (bp->flags & BNXT_FLAG_NEW_RSS_CAP)
|
||
|
@@ -10688,6 +10723,12 @@
|
||
|
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");
|
||
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||
|
===================================================================
|
||
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.520533254 +0100
|
||
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.662531951 +0100
|
||
|
@@ -1485,6 +1485,8 @@
|
||
|
#define BNXT_FW_CAP_OVS_64BIT_HANDLE 0x00000400
|
||
|
#define BNXT_FW_CAP_TRUSTED_VF 0x00000800
|
||
|
#define BNXT_FW_CAP_PKG_VER 0x00004000
|
||
|
+ #define BNXT_FW_CAP_CFA_ADV_FLOW 0x00008000
|
||
|
+ #define BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX 0x00010000
|
||
|
#define BNXT_FW_CAP_PCIE_STATS_SUPPORTED 0x00020000
|
||
|
#define BNXT_FW_CAP_EXT_STATS_SUPPORTED 0x00040000
|
||
|
|