mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 17:24:17 +08:00
bnxt: move bp->switch_id initialization to PF probe
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>
This commit is contained in:
parent
aef36b8822
commit
03213a9965
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user