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.
123 lines
3.9 KiB
123 lines
3.9 KiB
5 years ago
|
From 6fb84701e71b1a4b1fae2995c96968316124ed0c Mon Sep 17 00:00:00 2001
|
||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||
|
Date: Wed, 2 Oct 2019 18:23:19 -0400
|
||
|
Subject: [PATCH 64/96] [netdrv] bnxt_en: Refactor bnxt_sriov_enable()
|
||
|
|
||
|
Message-id: <570ee9c11a5e90122d0545caee13801f8538224f.1570027456.git.jtoppins@redhat.com>
|
||
|
Patchwork-id: 276484
|
||
|
O-Subject: [RHEL-8.2 PATCH 57/78] bnxt_en: Refactor bnxt_sriov_enable().
|
||
|
Bugzilla: 1724766
|
||
|
RH-Acked-by: John Linville <linville@redhat.com>
|
||
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||
|
|
||
|
Refactor the hardware/firmware configuration portion in
|
||
|
bnxt_sriov_enable() into a new function bnxt_cfg_hw_sriov(). This
|
||
|
new function can be called after a firmware reset to reconfigure the
|
||
|
VFs previously enabled.
|
||
|
|
||
|
v2: straight refactor of the code. Reordering done in the next patch.
|
||
|
|
||
|
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|
(cherry picked from commit 702d5011ab5e7b9afe44058d33a89d1501645a10)
|
||
|
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_sriov.c | 50 +++++++++++++++++--------
|
||
|
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h | 1 +
|
||
|
2 files changed, 35 insertions(+), 16 deletions(-)
|
||
|
|
||
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
|
||
|
===================================================================
|
||
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:18.477487753 +0100
|
||
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:18.878484072 +0100
|
||
|
@@ -667,6 +667,32 @@
|
||
|
return bnxt_hwrm_func_cfg(bp, num_vfs);
|
||
|
}
|
||
|
|
||
|
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs)
|
||
|
+{
|
||
|
+ int rc;
|
||
|
+
|
||
|
+ /* Reserve resources for VFs */
|
||
|
+ rc = bnxt_func_cfg(bp, *num_vfs);
|
||
|
+ if (rc != *num_vfs) {
|
||
|
+ if (rc <= 0) {
|
||
|
+ netdev_warn(bp->dev, "Unable to reserve resources for SRIOV.\n");
|
||
|
+ *num_vfs = 0;
|
||
|
+ return rc;
|
||
|
+ }
|
||
|
+ netdev_warn(bp->dev, "Only able to reserve resources for %d VFs.\n",
|
||
|
+ rc);
|
||
|
+ *num_vfs = rc;
|
||
|
+ }
|
||
|
+
|
||
|
+ /* Register buffers for VFs */
|
||
|
+ rc = bnxt_hwrm_func_buf_rgtr(bp);
|
||
|
+ if (rc)
|
||
|
+ return rc;
|
||
|
+
|
||
|
+ bnxt_ulp_sriov_cfg(bp, *num_vfs);
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
static int bnxt_sriov_enable(struct bnxt *bp, int *num_vfs)
|
||
|
{
|
||
|
int rc = 0, vfs_supported;
|
||
|
@@ -732,25 +758,10 @@
|
||
|
if (rc)
|
||
|
goto err_out1;
|
||
|
|
||
|
- /* Reserve resources for VFs */
|
||
|
- rc = bnxt_func_cfg(bp, *num_vfs);
|
||
|
- if (rc != *num_vfs) {
|
||
|
- if (rc <= 0) {
|
||
|
- netdev_warn(bp->dev, "Unable to reserve resources for SRIOV.\n");
|
||
|
- *num_vfs = 0;
|
||
|
- goto err_out2;
|
||
|
- }
|
||
|
- netdev_warn(bp->dev, "Only able to reserve resources for %d VFs.\n", rc);
|
||
|
- *num_vfs = rc;
|
||
|
- }
|
||
|
-
|
||
|
- /* Register buffers for VFs */
|
||
|
- rc = bnxt_hwrm_func_buf_rgtr(bp);
|
||
|
+ rc = bnxt_cfg_hw_sriov(bp, num_vfs);
|
||
|
if (rc)
|
||
|
goto err_out2;
|
||
|
|
||
|
- bnxt_ulp_sriov_cfg(bp, *num_vfs);
|
||
|
-
|
||
|
rc = pci_enable_sriov(bp->pdev, *num_vfs);
|
||
|
if (rc)
|
||
|
goto err_out2;
|
||
|
@@ -1128,6 +1139,13 @@
|
||
|
}
|
||
|
#else
|
||
|
|
||
|
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs)
|
||
|
+{
|
||
|
+ if (*num_vfs)
|
||
|
+ return -EOPNOTSUPP;
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
void bnxt_sriov_disable(struct bnxt *bp)
|
||
|
{
|
||
|
}
|
||
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h
|
||
|
===================================================================
|
||
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h 2020-02-06 16:22:54.551707373 +0100
|
||
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h 2020-02-06 16:23:18.878484072 +0100
|
||
|
@@ -36,6 +36,7 @@
|
||
|
int bnxt_set_vf_spoofchk(struct net_device *, int, bool);
|
||
|
int bnxt_set_vf_trust(struct net_device *dev, int vf_id, bool trust);
|
||
|
int bnxt_sriov_configure(struct pci_dev *pdev, int num_vfs);
|
||
|
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs);
|
||
|
void bnxt_sriov_disable(struct bnxt *);
|
||
|
void bnxt_hwrm_exec_fwd_req(struct bnxt *);
|
||
|
void bnxt_update_vf_mac(struct bnxt *);
|