lkml.org 
[lkml]   [2020]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 035/151] bnxt_en: fix error handling when flashing from file
    Date
    From: Edwin Peer <edwin.peer@broadcom.com>

    [ Upstream commit 22630e28f9c2b55abd217869cc0696def89f2284 ]

    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: d4f1420d3656 ("bnxt_en: Convert error code in firmware message response to standard code.")
    Signed-off-by: Edwin Peer <edwin.peer@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 24 ++++++++++------------
    1 file changed, 11 insertions(+), 13 deletions(-)

    --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
    +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
    @@ -2007,8 +2007,8 @@ int bnxt_flash_package_from_file(struct
    struct hwrm_nvm_install_update_output *resp = bp->hwrm_cmd_resp_addr;
    struct hwrm_nvm_install_update_input install = {0};
    const struct firmware *fw;
    - int rc, hwrm_err = 0;
    u32 item_len;
    + int rc = 0;
    u16 index;

    bnxt_hwrm_fw_set_time(bp);
    @@ -2052,15 +2052,14 @@ int bnxt_flash_package_from_file(struct
    memcpy(kmem, fw->data, fw->size);
    modify.host_src_addr = cpu_to_le64(dma_handle);

    - hwrm_err = hwrm_send_message(bp, &modify,
    - sizeof(modify),
    - FLASH_PACKAGE_TIMEOUT);
    + rc = hwrm_send_message(bp, &modify, sizeof(modify),
    + FLASH_PACKAGE_TIMEOUT);
    dma_free_coherent(&bp->pdev->dev, fw->size, kmem,
    dma_handle);
    }
    }
    release_firmware(fw);
    - if (rc || hwrm_err)
    + if (rc)
    goto err_exit;

    if ((install_type & 0xffff) == 0)
    @@ -2069,20 +2068,19 @@ int bnxt_flash_package_from_file(struct
    install.install_type = cpu_to_le32(install_type);

    mutex_lock(&bp->hwrm_cmd_lock);
    - hwrm_err = _hwrm_send_message(bp, &install, sizeof(install),
    - INSTALL_PACKAGE_TIMEOUT);
    - if (hwrm_err) {
    + rc = _hwrm_send_message(bp, &install, sizeof(install),
    + INSTALL_PACKAGE_TIMEOUT);
    + if (rc) {
    u8 error_code = ((struct hwrm_err_output *)resp)->cmd_err;

    if (resp->error_code && error_code ==
    NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR) {
    install.flags |= cpu_to_le16(
    NVM_INSTALL_UPDATE_REQ_FLAGS_ALLOWED_TO_DEFRAG);
    - hwrm_err = _hwrm_send_message(bp, &install,
    - sizeof(install),
    - INSTALL_PACKAGE_TIMEOUT);
    + rc = _hwrm_send_message(bp, &install, sizeof(install),
    + INSTALL_PACKAGE_TIMEOUT);
    }
    - if (hwrm_err)
    + if (rc)
    goto flash_pkg_exit;
    }

    @@ -2094,7 +2092,7 @@ int bnxt_flash_package_from_file(struct
    flash_pkg_exit:
    mutex_unlock(&bp->hwrm_cmd_lock);
    err_exit:
    - if (hwrm_err == -EACCES)
    + if (rc == -EACCES)
    bnxt_print_admin_err(bp);
    return rc;
    }

    \
     
     \ /
      Last update: 2020-03-17 12:09    [W:4.342 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site