Skip to content

Commit 02acd39

Browse files
Kalesh APdavem330
authored andcommitted
bnxt_en: parse result field when NVRAM package install fails
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 <[email protected]> Reviewed-by: Pavan Chebbi <[email protected]> Signed-off-by: Kalesh AP <[email protected]> Signed-off-by: Michael Chan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 54ff1e3 commit 02acd39

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2496,6 +2496,48 @@ static int bnxt_flash_firmware_from_file(struct net_device *dev,
24962496
return rc;
24972497
}
24982498

2499+
static int nvm_update_err_to_stderr(struct net_device *dev, u8 result)
2500+
{
2501+
switch (result) {
2502+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_TYPE_PARAMETER:
2503+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_INDEX_PARAMETER:
2504+
case NVM_INSTALL_UPDATE_RESP_RESULT_INSTALL_DATA_ERROR:
2505+
case NVM_INSTALL_UPDATE_RESP_RESULT_INSTALL_CHECKSUM_ERROR:
2506+
case NVM_INSTALL_UPDATE_RESP_RESULT_ITEM_NOT_FOUND:
2507+
case NVM_INSTALL_UPDATE_RESP_RESULT_ITEM_LOCKED:
2508+
netdev_err(dev, "PKG install error : Data integrity on NVM\n");
2509+
return -EINVAL;
2510+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_PREREQUISITE:
2511+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_FILE_HEADER:
2512+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_SIGNATURE:
2513+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_PROP_STREAM:
2514+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_PROP_LENGTH:
2515+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_MANIFEST:
2516+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_TRAILER:
2517+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_CHECKSUM:
2518+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_ITEM_CHECKSUM:
2519+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_DATA_LENGTH:
2520+
case NVM_INSTALL_UPDATE_RESP_RESULT_INVALID_DIRECTIVE:
2521+
case NVM_INSTALL_UPDATE_RESP_RESULT_DUPLICATE_ITEM:
2522+
case NVM_INSTALL_UPDATE_RESP_RESULT_ZERO_LENGTH_ITEM:
2523+
netdev_err(dev, "PKG install error : Invalid package\n");
2524+
return -ENOPKG;
2525+
case NVM_INSTALL_UPDATE_RESP_RESULT_INSTALL_AUTHENTICATION_ERROR:
2526+
netdev_err(dev, "PKG install error : Authentication error\n");
2527+
return -EPERM;
2528+
case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_CHIP_REV:
2529+
case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_DEVICE_ID:
2530+
case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_SUBSYS_VENDOR:
2531+
case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_SUBSYS_ID:
2532+
case NVM_INSTALL_UPDATE_RESP_RESULT_UNSUPPORTED_PLATFORM:
2533+
netdev_err(dev, "PKG install error : Invalid device\n");
2534+
return -EOPNOTSUPP;
2535+
default:
2536+
netdev_err(dev, "PKG install error : Internal error\n");
2537+
return -EIO;
2538+
}
2539+
}
2540+
24992541
#define BNXT_PKG_DMA_SIZE 0x40000
25002542
#define BNXT_NVM_MORE_FLAG (cpu_to_le16(NVM_MODIFY_REQ_FLAGS_BATCH_MODE))
25012543
#define BNXT_NVM_LAST_FLAG (cpu_to_le16(NVM_MODIFY_REQ_FLAGS_BATCH_LAST))
@@ -2650,7 +2692,7 @@ int bnxt_flash_package_from_fw_obj(struct net_device *dev, const struct firmware
26502692
if (resp->result) {
26512693
netdev_err(dev, "PKG install error = %d, problem_item = %d\n",
26522694
(s8)resp->result, (int)resp->problem_item);
2653-
rc = -ENOPKG;
2695+
rc = nvm_update_err_to_stderr(dev, resp->result);
26542696
}
26552697
if (rc == -EACCES)
26562698
bnxt_print_admin_err(bp);

0 commit comments

Comments
 (0)