]> www.infradead.org Git - users/hch/misc.git/commitdiff
bnxt_en: parse result field when NVRAM package install fails
authorKalesh AP <kalesh-anakkur.purayil@broadcom.com>
Sat, 5 Mar 2022 08:54:36 +0000 (03:54 -0500)
committerDavid S. Miller <davem@davemloft.net>
Sat, 5 Mar 2022 11:16:55 +0000 (11:16 +0000)
Instead of always returning -ENOPKG, decode the firmware error
code further when the HWRM_NVM_INSTALL_UPDATE firmware call fails.
Return a more suitable error code to userspace and log an error
in dmesg.

Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

index a3151af9a279023a759f9a25b23d60aa399e3965..3927ceb581da6f196b8f5dcb510121915c9d2e78 100644 (file)
@@ -2496,6 +2496,48 @@ static int bnxt_flash_firmware_from_file(struct net_device *dev,
        return rc;
 }
 
+static int nvm_update_err_to_stderr(struct net_device *dev, u8 result)
+{
+       switch (result) {
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_TYPE_PARAMETER:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_INDEX_PARAMETER:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INSTALL_DATA_ERROR:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INSTALL_CHECKSUM_ERROR:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_ITEM_NOT_FOUND:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_ITEM_LOCKED:
+               netdev_err(dev, "PKG install error : Data integrity on NVM\n");
+               return -EINVAL;
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_PREREQUISITE:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_FILE_HEADER:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_SIGNATURE:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_PROP_STREAM:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_PROP_LENGTH:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_MANIFEST:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_TRAILER:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_CHECKSUM:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_ITEM_CHECKSUM:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_DATA_LENGTH:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_DIRECTIVE:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_DUPLICATE_ITEM:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_ZERO_LENGTH_ITEM:
+               netdev_err(dev, "PKG install error : Invalid package\n");
+               return -ENOPKG;
+       case NVM_INSTALL_UPDATE_RESP_RESULT_INSTALL_AUTHENTICATION_ERROR:
+               netdev_err(dev, "PKG install error : Authentication error\n");
+               return -EPERM;
+       case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_CHIP_REV:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_DEVICE_ID:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_SUBSYS_VENDOR:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_SUBSYS_ID:
+       case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_PLATFORM:
+               netdev_err(dev, "PKG install error : Invalid device\n");
+               return -EOPNOTSUPP;
+       default:
+               netdev_err(dev, "PKG install error : Internal error\n");
+               return -EIO;
+       }
+}
+
 #define BNXT_PKG_DMA_SIZE      0x40000
 #define BNXT_NVM_MORE_FLAG     (cpu_to_le16(NVM_MODIFY_REQ_FLAGS_BATCH_MODE))
 #define BNXT_NVM_LAST_FLAG     (cpu_to_le16(NVM_MODIFY_REQ_FLAGS_BATCH_LAST))
@@ -2650,7 +2692,7 @@ pkg_abort:
        if (resp->result) {
                netdev_err(dev, "PKG install error = %d, problem_item = %d\n",
                           (s8)resp->result, (int)resp->problem_item);
-               rc = -ENOPKG;
+               rc = nvm_update_err_to_stderr(dev, resp->result);
        }
        if (rc == -EACCES)
                bnxt_print_admin_err(bp);