|
@@ -81,10 +81,10 @@ static const char * const ue_status_low_desc[] = {
|
|
|
"P1_OB_LINK ",
|
|
|
"HOST_GPIO ",
|
|
|
"MBOX ",
|
|
|
- "AXGMAC0",
|
|
|
- "AXGMAC1",
|
|
|
- "JTAG",
|
|
|
- "MPU_INTPEND"
|
|
|
+ "ERX2 ",
|
|
|
+ "SPARE ",
|
|
|
+ "JTAG ",
|
|
|
+ "MPU_INTPEND "
|
|
|
};
|
|
|
/* UE Status High CSR */
|
|
|
static const char * const ue_status_hi_desc[] = {
|
|
@@ -109,16 +109,16 @@ static const char * const ue_status_hi_desc[] = {
|
|
|
"HOST5",
|
|
|
"HOST6",
|
|
|
"HOST7",
|
|
|
- "HOST8",
|
|
|
- "HOST9",
|
|
|
+ "ECRC",
|
|
|
+ "Poison TLP",
|
|
|
"NETC",
|
|
|
- "Unknown",
|
|
|
- "Unknown",
|
|
|
- "Unknown",
|
|
|
- "Unknown",
|
|
|
- "Unknown",
|
|
|
- "Unknown",
|
|
|
- "Unknown",
|
|
|
+ "PERIPH",
|
|
|
+ "LLTXULP",
|
|
|
+ "D2P",
|
|
|
+ "RCON",
|
|
|
+ "LDMA",
|
|
|
+ "LLTXP",
|
|
|
+ "LLTXPB",
|
|
|
"Unknown"
|
|
|
};
|
|
|
|
|
@@ -1281,13 +1281,15 @@ static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
|
|
|
vf + 1);
|
|
|
}
|
|
|
|
|
|
- if (status)
|
|
|
- dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed\n",
|
|
|
- mac, vf);
|
|
|
- else
|
|
|
- memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
|
|
|
+ if (status) {
|
|
|
+ dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed: %#x",
|
|
|
+ mac, vf, status);
|
|
|
+ return be_cmd_status(status);
|
|
|
+ }
|
|
|
|
|
|
- return status;
|
|
|
+ ether_addr_copy(vf_cfg->mac_addr, mac);
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int be_get_vf_config(struct net_device *netdev, int vf,
|
|
@@ -1336,12 +1338,16 @@ static int be_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos)
|
|
|
vf + 1, vf_cfg->if_handle, 0);
|
|
|
}
|
|
|
|
|
|
- if (!status)
|
|
|
- vf_cfg->vlan_tag = vlan;
|
|
|
- else
|
|
|
- dev_info(&adapter->pdev->dev,
|
|
|
- "VLAN %d config on VF %d failed\n", vlan, vf);
|
|
|
- return status;
|
|
|
+ if (status) {
|
|
|
+ dev_err(&adapter->pdev->dev,
|
|
|
+ "VLAN %d config on VF %d failed : %#x\n", vlan,
|
|
|
+ vf, status);
|
|
|
+ return be_cmd_status(status);
|
|
|
+ }
|
|
|
+
|
|
|
+ vf_cfg->vlan_tag = vlan;
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int be_set_vf_tx_rate(struct net_device *netdev, int vf,
|
|
@@ -1372,7 +1378,7 @@ static int be_set_vf_tx_rate(struct net_device *netdev, int vf,
|
|
|
|
|
|
if (!link_status) {
|
|
|
dev_err(dev, "TX-rate setting not allowed when link is down\n");
|
|
|
- status = -EPERM;
|
|
|
+ status = -ENETDOWN;
|
|
|
goto err;
|
|
|
}
|
|
|
|
|
@@ -1403,7 +1409,7 @@ config_qos:
|
|
|
err:
|
|
|
dev_err(dev, "TX-rate setting of %dMbps on VF%d failed\n",
|
|
|
max_tx_rate, vf);
|
|
|
- return status;
|
|
|
+ return be_cmd_status(status);
|
|
|
}
|
|
|
static int be_set_vf_link_state(struct net_device *netdev, int vf,
|
|
|
int link_state)
|
|
@@ -1418,10 +1424,15 @@ static int be_set_vf_link_state(struct net_device *netdev, int vf,
|
|
|
return -EINVAL;
|
|
|
|
|
|
status = be_cmd_set_logical_link_config(adapter, link_state, vf+1);
|
|
|
- if (!status)
|
|
|
- adapter->vf_cfg[vf].plink_tracking = link_state;
|
|
|
+ if (status) {
|
|
|
+ dev_err(&adapter->pdev->dev,
|
|
|
+ "Link state change on VF %d failed: %#x\n", vf, status);
|
|
|
+ return be_cmd_status(status);
|
|
|
+ }
|
|
|
|
|
|
- return status;
|
|
|
+ adapter->vf_cfg[vf].plink_tracking = link_state;
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static void be_aic_update(struct be_aic_obj *aic, u64 rx_pkts, u64 tx_pkts,
|
|
@@ -2023,7 +2034,7 @@ static void be_rx_cq_clean(struct be_rx_obj *rxo)
|
|
|
*/
|
|
|
for (;;) {
|
|
|
rxcp = be_rx_compl_get(rxo);
|
|
|
- if (rxcp == NULL) {
|
|
|
+ if (!rxcp) {
|
|
|
if (lancer_chip(adapter))
|
|
|
break;
|
|
|
|
|
@@ -2930,8 +2941,8 @@ static int be_setup_wol(struct be_adapter *adapter, bool enable)
|
|
|
cmd.size = sizeof(struct be_cmd_req_acpi_wol_magic_config);
|
|
|
cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
|
|
|
GFP_KERNEL);
|
|
|
- if (cmd.va == NULL)
|
|
|
- return -1;
|
|
|
+ if (!cmd.va)
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
if (enable) {
|
|
|
status = pci_write_config_dword(adapter->pdev,
|
|
@@ -3038,6 +3049,7 @@ static void be_vf_clear(struct be_adapter *adapter)
|
|
|
done:
|
|
|
kfree(adapter->vf_cfg);
|
|
|
adapter->num_vfs = 0;
|
|
|
+ adapter->flags &= ~BE_FLAGS_SRIOV_ENABLED;
|
|
|
}
|
|
|
|
|
|
static void be_clear_queues(struct be_adapter *adapter)
|
|
@@ -3230,6 +3242,8 @@ static int be_vf_setup(struct be_adapter *adapter)
|
|
|
goto err;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ adapter->flags |= BE_FLAGS_SRIOV_ENABLED;
|
|
|
return 0;
|
|
|
err:
|
|
|
dev_err(dev, "VF setup failed\n");
|
|
@@ -3301,7 +3315,7 @@ static void BEx_get_resources(struct be_adapter *adapter,
|
|
|
res->max_rx_qs = res->max_rss_qs + 1;
|
|
|
|
|
|
if (be_physfn(adapter))
|
|
|
- res->max_evt_qs = (res->max_vfs > 0) ?
|
|
|
+ res->max_evt_qs = (be_max_vfs(adapter) > 0) ?
|
|
|
BE3_SRIOV_MAX_EVT_QS : BE3_MAX_EVT_QS;
|
|
|
else
|
|
|
res->max_evt_qs = 1;
|
|
@@ -3414,10 +3428,7 @@ static int be_get_config(struct be_adapter *adapter)
|
|
|
u16 profile_id;
|
|
|
int status;
|
|
|
|
|
|
- status = be_cmd_query_fw_cfg(adapter, &adapter->port_num,
|
|
|
- &adapter->function_mode,
|
|
|
- &adapter->function_caps,
|
|
|
- &adapter->asic_rev);
|
|
|
+ status = be_cmd_query_fw_cfg(adapter);
|
|
|
if (status)
|
|
|
return status;
|
|
|
|
|
@@ -3426,7 +3437,9 @@ static int be_get_config(struct be_adapter *adapter)
|
|
|
if (!status)
|
|
|
dev_info(&adapter->pdev->dev,
|
|
|
"Using profile 0x%x\n", profile_id);
|
|
|
+ }
|
|
|
|
|
|
+ if (!BE2_chip(adapter) && be_physfn(adapter)) {
|
|
|
status = be_get_sriov_config(adapter);
|
|
|
if (status)
|
|
|
return status;
|
|
@@ -3606,7 +3619,7 @@ static int be_setup(struct be_adapter *adapter)
|
|
|
if (status)
|
|
|
goto err;
|
|
|
|
|
|
- be_cmd_get_fw_ver(adapter, adapter->fw_ver, adapter->fw_on_flash);
|
|
|
+ be_cmd_get_fw_ver(adapter);
|
|
|
|
|
|
if (BE2_chip(adapter) && fw_major_num(adapter->fw_ver) < 4) {
|
|
|
dev_err(dev, "Firmware on card is old(%s), IRQs may not work.",
|
|
@@ -3956,7 +3969,7 @@ static int be_flash_skyhawk(struct be_adapter *adapter,
|
|
|
fsec = get_fsec_info(adapter, filehdr_size + img_hdrs_size, fw);
|
|
|
if (!fsec) {
|
|
|
dev_err(dev, "Invalid Cookie. FW image may be corrupted\n");
|
|
|
- return -1;
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < le32_to_cpu(fsec->fsec_hdr.num_images); i++) {
|
|
@@ -4125,7 +4138,7 @@ lancer_fw_exit:
|
|
|
static int be_get_ufi_type(struct be_adapter *adapter,
|
|
|
struct flash_file_hdr_g3 *fhdr)
|
|
|
{
|
|
|
- if (fhdr == NULL)
|
|
|
+ if (!fhdr)
|
|
|
goto be_get_ufi_exit;
|
|
|
|
|
|
if (skyhawk_chip(adapter) && fhdr->build[0] == '4')
|
|
@@ -4187,7 +4200,7 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
|
|
|
&flash_cmd,
|
|
|
num_imgs);
|
|
|
else {
|
|
|
- status = -1;
|
|
|
+ status = -EINVAL;
|
|
|
dev_err(&adapter->pdev->dev,
|
|
|
"Can't load BE3 UFI on BE3R\n");
|
|
|
}
|
|
@@ -4198,7 +4211,7 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
|
|
|
if (ufi_type == UFI_TYPE2)
|
|
|
status = be_flash_BEx(adapter, fw, &flash_cmd, 0);
|
|
|
else if (ufi_type == -1)
|
|
|
- status = -1;
|
|
|
+ status = -EINVAL;
|
|
|
|
|
|
dma_free_coherent(&adapter->pdev->dev, flash_cmd.size, flash_cmd.va,
|
|
|
flash_cmd.dma);
|
|
@@ -4221,7 +4234,7 @@ int be_load_fw(struct be_adapter *adapter, u8 *fw_file)
|
|
|
if (!netif_running(adapter->netdev)) {
|
|
|
dev_err(&adapter->pdev->dev,
|
|
|
"Firmware load not allowed (interface is down)\n");
|
|
|
- return -1;
|
|
|
+ return -ENETDOWN;
|
|
|
}
|
|
|
|
|
|
status = request_firmware(&fw, fw_file, &adapter->pdev->dev);
|
|
@@ -4236,8 +4249,7 @@ int be_load_fw(struct be_adapter *adapter, u8 *fw_file)
|
|
|
status = be_fw_download(adapter, fw);
|
|
|
|
|
|
if (!status)
|
|
|
- be_cmd_get_fw_ver(adapter, adapter->fw_ver,
|
|
|
- adapter->fw_on_flash);
|
|
|
+ be_cmd_get_fw_ver(adapter);
|
|
|
|
|
|
fw_exit:
|
|
|
release_firmware(fw);
|
|
@@ -4468,12 +4480,12 @@ static int be_map_pci_bars(struct be_adapter *adapter)
|
|
|
|
|
|
if (BEx_chip(adapter) && be_physfn(adapter)) {
|
|
|
adapter->csr = pci_iomap(adapter->pdev, 2, 0);
|
|
|
- if (adapter->csr == NULL)
|
|
|
+ if (!adapter->csr)
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
addr = pci_iomap(adapter->pdev, db_bar(adapter), 0);
|
|
|
- if (addr == NULL)
|
|
|
+ if (!addr)
|
|
|
goto pci_map_err;
|
|
|
adapter->db = addr;
|
|
|
|
|
@@ -4536,7 +4548,7 @@ static int be_ctrl_init(struct be_adapter *adapter)
|
|
|
rx_filter->va = dma_zalloc_coherent(&adapter->pdev->dev,
|
|
|
rx_filter->size, &rx_filter->dma,
|
|
|
GFP_KERNEL);
|
|
|
- if (rx_filter->va == NULL) {
|
|
|
+ if (!rx_filter->va) {
|
|
|
status = -ENOMEM;
|
|
|
goto free_mbox;
|
|
|
}
|
|
@@ -4585,8 +4597,8 @@ static int be_stats_init(struct be_adapter *adapter)
|
|
|
|
|
|
cmd->va = dma_zalloc_coherent(&adapter->pdev->dev, cmd->size, &cmd->dma,
|
|
|
GFP_KERNEL);
|
|
|
- if (cmd->va == NULL)
|
|
|
- return -1;
|
|
|
+ if (!cmd->va)
|
|
|
+ return -ENOMEM;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -4807,7 +4819,7 @@ static int be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id)
|
|
|
pci_set_master(pdev);
|
|
|
|
|
|
netdev = alloc_etherdev_mqs(sizeof(*adapter), MAX_TX_QS, MAX_RX_QS);
|
|
|
- if (netdev == NULL) {
|
|
|
+ if (!netdev) {
|
|
|
status = -ENOMEM;
|
|
|
goto rel_reg;
|
|
|
}
|