|
@@ -643,8 +643,11 @@ static void get_brd_name(struct qlcnic_adapter *adapter, char *name)
|
|
|
static void
|
|
|
qlcnic_check_options(struct qlcnic_adapter *adapter)
|
|
|
{
|
|
|
- u32 fw_major, fw_minor, fw_build;
|
|
|
+ u32 fw_major, fw_minor, fw_build, prev_fw_version;
|
|
|
struct pci_dev *pdev = adapter->pdev;
|
|
|
+ struct qlcnic_fw_dump *fw_dump = &adapter->ahw->fw_dump;
|
|
|
+
|
|
|
+ prev_fw_version = adapter->fw_version;
|
|
|
|
|
|
fw_major = QLCRD32(adapter, QLCNIC_FW_VERSION_MAJOR);
|
|
|
fw_minor = QLCRD32(adapter, QLCNIC_FW_VERSION_MINOR);
|
|
@@ -652,6 +655,17 @@ qlcnic_check_options(struct qlcnic_adapter *adapter)
|
|
|
|
|
|
adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build);
|
|
|
|
|
|
+ if (adapter->op_mode != QLCNIC_NON_PRIV_FUNC) {
|
|
|
+ if (fw_dump->tmpl_hdr == NULL ||
|
|
|
+ adapter->fw_version > prev_fw_version) {
|
|
|
+ if (fw_dump->tmpl_hdr)
|
|
|
+ vfree(fw_dump->tmpl_hdr);
|
|
|
+ if (!qlcnic_fw_cmd_get_minidump_temp(adapter))
|
|
|
+ dev_info(&pdev->dev,
|
|
|
+ "Supports FW dump capability\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
dev_info(&pdev->dev, "firmware v%d.%d.%d\n",
|
|
|
fw_major, fw_minor, fw_build);
|
|
|
if (adapter->ahw->port_type == QLCNIC_XGBE) {
|
|
@@ -1610,12 +1624,6 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
goto err_out_decr_ref;
|
|
|
}
|
|
|
|
|
|
- /* Get FW dump template and store it */
|
|
|
- if (adapter->op_mode != QLCNIC_NON_PRIV_FUNC)
|
|
|
- if (!qlcnic_fw_cmd_get_minidump_temp(adapter))
|
|
|
- dev_info(&pdev->dev,
|
|
|
- "Supports FW dump capability\n");
|
|
|
-
|
|
|
if (qlcnic_read_mac_addr(adapter))
|
|
|
dev_warn(&pdev->dev, "failed to read mac addr\n");
|
|
|
|