From 6fb84701e71b1a4b1fae2995c96968316124ed0c Mon Sep 17 00:00:00 2001 From: Jonathan Toppins 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 RH-Acked-by: Jarod Wilson 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 Signed-off-by: David S. Miller (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 Signed-off-by: Bruno Meneguele --- 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 *);