Commit 22630e28 authored by Edwin Peer's avatar Edwin Peer Committed by David S. Miller

bnxt_en: fix error handling when flashing from file

After bnxt_hwrm_do_send_message() was updated to return standard error
codes in a recent commit, a regression in bnxt_flash_package_from_file()
was introduced.  The return value does not properly reflect all
possible firmware errors when calling firmware to flash the package.

Fix it by consolidating all errors in one local variable rc instead
of having 2 variables for different errors.

Fixes: d4f1420d ("bnxt_en: Convert error code in firmware message response to standard code.")
Signed-off-by: default avatarEdwin Peer <edwin.peer@broadcom.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a9b952d2
...@@ -2007,8 +2007,8 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, ...@@ -2007,8 +2007,8 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename,
struct hwrm_nvm_install_update_output *resp = bp->hwrm_cmd_resp_addr; struct hwrm_nvm_install_update_output *resp = bp->hwrm_cmd_resp_addr;
struct hwrm_nvm_install_update_input install = {0}; struct hwrm_nvm_install_update_input install = {0};
const struct firmware *fw; const struct firmware *fw;
int rc, hwrm_err = 0;
u32 item_len; u32 item_len;
int rc = 0;
u16 index; u16 index;
bnxt_hwrm_fw_set_time(bp); bnxt_hwrm_fw_set_time(bp);
...@@ -2052,15 +2052,14 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, ...@@ -2052,15 +2052,14 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename,
memcpy(kmem, fw->data, fw->size); memcpy(kmem, fw->data, fw->size);
modify.host_src_addr = cpu_to_le64(dma_handle); modify.host_src_addr = cpu_to_le64(dma_handle);
hwrm_err = hwrm_send_message(bp, &modify, rc = hwrm_send_message(bp, &modify, sizeof(modify),
sizeof(modify),
FLASH_PACKAGE_TIMEOUT); FLASH_PACKAGE_TIMEOUT);
dma_free_coherent(&bp->pdev->dev, fw->size, kmem, dma_free_coherent(&bp->pdev->dev, fw->size, kmem,
dma_handle); dma_handle);
} }
} }
release_firmware(fw); release_firmware(fw);
if (rc || hwrm_err) if (rc)
goto err_exit; goto err_exit;
if ((install_type & 0xffff) == 0) if ((install_type & 0xffff) == 0)
...@@ -2069,20 +2068,19 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, ...@@ -2069,20 +2068,19 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename,
install.install_type = cpu_to_le32(install_type); install.install_type = cpu_to_le32(install_type);
mutex_lock(&bp->hwrm_cmd_lock); mutex_lock(&bp->hwrm_cmd_lock);
hwrm_err = _hwrm_send_message(bp, &install, sizeof(install), rc = _hwrm_send_message(bp, &install, sizeof(install),
INSTALL_PACKAGE_TIMEOUT); INSTALL_PACKAGE_TIMEOUT);
if (hwrm_err) { if (rc) {
u8 error_code = ((struct hwrm_err_output *)resp)->cmd_err; u8 error_code = ((struct hwrm_err_output *)resp)->cmd_err;
if (resp->error_code && error_code == if (resp->error_code && error_code ==
NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR) { NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR) {
install.flags |= cpu_to_le16( install.flags |= cpu_to_le16(
NVM_INSTALL_UPDATE_REQ_FLAGS_ALLOWED_TO_DEFRAG); NVM_INSTALL_UPDATE_REQ_FLAGS_ALLOWED_TO_DEFRAG);
hwrm_err = _hwrm_send_message(bp, &install, rc = _hwrm_send_message(bp, &install, sizeof(install),
sizeof(install),
INSTALL_PACKAGE_TIMEOUT); INSTALL_PACKAGE_TIMEOUT);
} }
if (hwrm_err) if (rc)
goto flash_pkg_exit; goto flash_pkg_exit;
} }
...@@ -2094,7 +2092,7 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename, ...@@ -2094,7 +2092,7 @@ int bnxt_flash_package_from_file(struct net_device *dev, const char *filename,
flash_pkg_exit: flash_pkg_exit:
mutex_unlock(&bp->hwrm_cmd_lock); mutex_unlock(&bp->hwrm_cmd_lock);
err_exit: err_exit:
if (hwrm_err == -EACCES) if (rc == -EACCES)
bnxt_print_admin_err(bp); bnxt_print_admin_err(bp);
return rc; return rc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment