OSDN Git Service

bnxt: move bp->switch_id initialization to PF probe
authorJiri Pirko <jiri@mellanox.com>
Wed, 3 Apr 2019 12:24:20 +0000 (14:24 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 5 Apr 2019 00:42:36 +0000 (17:42 -0700)
Currently the switch_id is being only initialized when switching eswitch
mode from "legacy" to "switchdev". However, nothing prevents the id to
be initialized from the very beginning. Physical ports can show it even
in "legacy" mode.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c

index d226914..6131b99 100644 (file)
@@ -10429,6 +10429,26 @@ static int bnxt_init_mac_addr(struct bnxt *bp)
        return rc;
 }
 
+static int bnxt_pcie_dsn_get(struct bnxt *bp, u8 dsn[])
+{
+       struct pci_dev *pdev = bp->pdev;
+       int pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_DSN);
+       u32 dw;
+
+       if (!pos) {
+               netdev_info(bp->dev, "Unable do read adapter's DSN");
+               return -EOPNOTSUPP;
+       }
+
+       /* DSN (two dw) is at an offset of 4 from the cap pos */
+       pos += 4;
+       pci_read_config_dword(pdev, pos, &dw);
+       put_unaligned_le32(dw, &dsn[0]);
+       pci_read_config_dword(pdev, pos + 4, &dw);
+       put_unaligned_le32(dw, &dsn[4]);
+       return 0;
+}
+
 static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        static int version_printed;
@@ -10569,6 +10589,11 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                goto init_err_pci_clean;
        }
 
+       /* Read the adapter's DSN to use as the eswitch switch_id */
+       rc = bnxt_pcie_dsn_get(bp, bp->switch_id);
+       if (rc)
+               goto init_err_pci_clean;
+
        bnxt_hwrm_func_qcfg(bp);
        bnxt_hwrm_vnic_qcaps(bp);
        bnxt_hwrm_port_led_qcaps(bp);
index 2bdd2da..f760921 100644 (file)
@@ -406,26 +406,6 @@ static void bnxt_vf_rep_netdev_init(struct bnxt *bp, struct bnxt_vf_rep *vf_rep,
        dev->min_mtu = ETH_ZLEN;
 }
 
-static int bnxt_pcie_dsn_get(struct bnxt *bp, u8 dsn[])
-{
-       struct pci_dev *pdev = bp->pdev;
-       int pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_DSN);
-       u32 dw;
-
-       if (!pos) {
-               netdev_info(bp->dev, "Unable do read adapter's DSN");
-               return -EOPNOTSUPP;
-       }
-
-       /* DSN (two dw) is at an offset of 4 from the cap pos */
-       pos += 4;
-       pci_read_config_dword(pdev, pos, &dw);
-       put_unaligned_le32(dw, &dsn[0]);
-       pci_read_config_dword(pdev, pos + 4, &dw);
-       put_unaligned_le32(dw, &dsn[4]);
-       return 0;
-}
-
 static int bnxt_vf_reps_create(struct bnxt *bp)
 {
        u16 *cfa_code_map = NULL, num_vfs = pci_num_vf(bp->pdev);
@@ -490,11 +470,6 @@ static int bnxt_vf_reps_create(struct bnxt *bp)
                }
        }
 
-       /* Read the adapter's DSN to use as the eswitch switch_id */
-       rc = bnxt_pcie_dsn_get(bp, bp->switch_id);
-       if (rc)
-               goto err;
-
        /* publish cfa_code_map only after all VF-reps have been initialized */
        bp->cfa_code_map = cfa_code_map;
        bp->eswitch_mode = DEVLINK_ESWITCH_MODE_SWITCHDEV;