diff options
Diffstat (limited to 'drivers/net/sfc/mcdi.c')
-rw-r--r-- | drivers/net/sfc/mcdi.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/drivers/net/sfc/mcdi.c b/drivers/net/sfc/mcdi.c index c48669c77414..93cc3c1b9450 100644 --- a/drivers/net/sfc/mcdi.c +++ b/drivers/net/sfc/mcdi.c | |||
@@ -613,7 +613,7 @@ int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build) | |||
613 | } | 613 | } |
614 | 614 | ||
615 | if (outlength < MC_CMD_GET_VERSION_V1_OUT_LEN) { | 615 | if (outlength < MC_CMD_GET_VERSION_V1_OUT_LEN) { |
616 | rc = -EMSGSIZE; | 616 | rc = -EIO; |
617 | goto fail; | 617 | goto fail; |
618 | } | 618 | } |
619 | 619 | ||
@@ -647,8 +647,10 @@ int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, | |||
647 | outbuf, sizeof(outbuf), &outlen); | 647 | outbuf, sizeof(outbuf), &outlen); |
648 | if (rc) | 648 | if (rc) |
649 | goto fail; | 649 | goto fail; |
650 | if (outlen < MC_CMD_DRV_ATTACH_OUT_LEN) | 650 | if (outlen < MC_CMD_DRV_ATTACH_OUT_LEN) { |
651 | rc = -EIO; | ||
651 | goto fail; | 652 | goto fail; |
653 | } | ||
652 | 654 | ||
653 | if (was_attached != NULL) | 655 | if (was_attached != NULL) |
654 | *was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE); | 656 | *was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE); |
@@ -676,7 +678,7 @@ int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, | |||
676 | goto fail; | 678 | goto fail; |
677 | 679 | ||
678 | if (outlen < MC_CMD_GET_BOARD_CFG_OUT_LEN) { | 680 | if (outlen < MC_CMD_GET_BOARD_CFG_OUT_LEN) { |
679 | rc = -EMSGSIZE; | 681 | rc = -EIO; |
680 | goto fail; | 682 | goto fail; |
681 | } | 683 | } |
682 | 684 | ||
@@ -738,8 +740,10 @@ int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out) | |||
738 | outbuf, sizeof(outbuf), &outlen); | 740 | outbuf, sizeof(outbuf), &outlen); |
739 | if (rc) | 741 | if (rc) |
740 | goto fail; | 742 | goto fail; |
741 | if (outlen < MC_CMD_NVRAM_TYPES_OUT_LEN) | 743 | if (outlen < MC_CMD_NVRAM_TYPES_OUT_LEN) { |
744 | rc = -EIO; | ||
742 | goto fail; | 745 | goto fail; |
746 | } | ||
743 | 747 | ||
744 | *nvram_types_out = MCDI_DWORD(outbuf, NVRAM_TYPES_OUT_TYPES); | 748 | *nvram_types_out = MCDI_DWORD(outbuf, NVRAM_TYPES_OUT_TYPES); |
745 | return 0; | 749 | return 0; |
@@ -765,8 +769,10 @@ int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type, | |||
765 | outbuf, sizeof(outbuf), &outlen); | 769 | outbuf, sizeof(outbuf), &outlen); |
766 | if (rc) | 770 | if (rc) |
767 | goto fail; | 771 | goto fail; |
768 | if (outlen < MC_CMD_NVRAM_INFO_OUT_LEN) | 772 | if (outlen < MC_CMD_NVRAM_INFO_OUT_LEN) { |
773 | rc = -EIO; | ||
769 | goto fail; | 774 | goto fail; |
775 | } | ||
770 | 776 | ||
771 | *size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_SIZE); | 777 | *size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_SIZE); |
772 | *erase_size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_ERASESIZE); | 778 | *erase_size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_ERASESIZE); |
@@ -926,20 +932,26 @@ int efx_mcdi_nvram_test_all(struct efx_nic *efx) | |||
926 | 932 | ||
927 | rc = efx_mcdi_nvram_types(efx, &nvram_types); | 933 | rc = efx_mcdi_nvram_types(efx, &nvram_types); |
928 | if (rc) | 934 | if (rc) |
929 | return rc; | 935 | goto fail1; |
930 | 936 | ||
931 | type = 0; | 937 | type = 0; |
932 | while (nvram_types != 0) { | 938 | while (nvram_types != 0) { |
933 | if (nvram_types & 1) { | 939 | if (nvram_types & 1) { |
934 | rc = efx_mcdi_nvram_test(efx, type); | 940 | rc = efx_mcdi_nvram_test(efx, type); |
935 | if (rc) | 941 | if (rc) |
936 | return rc; | 942 | goto fail2; |
937 | } | 943 | } |
938 | type++; | 944 | type++; |
939 | nvram_types >>= 1; | 945 | nvram_types >>= 1; |
940 | } | 946 | } |
941 | 947 | ||
942 | return 0; | 948 | return 0; |
949 | |||
950 | fail2: | ||
951 | EFX_ERR(efx, "%s: failed type=%u\n", __func__, type); | ||
952 | fail1: | ||
953 | EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); | ||
954 | return rc; | ||
943 | } | 955 | } |
944 | 956 | ||
945 | static int efx_mcdi_read_assertion(struct efx_nic *efx) | 957 | static int efx_mcdi_read_assertion(struct efx_nic *efx) |
@@ -968,7 +980,7 @@ static int efx_mcdi_read_assertion(struct efx_nic *efx) | |||
968 | if (rc) | 980 | if (rc) |
969 | return rc; | 981 | return rc; |
970 | if (outlen < MC_CMD_GET_ASSERTS_OUT_LEN) | 982 | if (outlen < MC_CMD_GET_ASSERTS_OUT_LEN) |
971 | return -EINVAL; | 983 | return -EIO; |
972 | 984 | ||
973 | /* Print out any recorded assertion state */ | 985 | /* Print out any recorded assertion state */ |
974 | flags = MCDI_DWORD(outbuf, GET_ASSERTS_OUT_GLOBAL_FLAGS); | 986 | flags = MCDI_DWORD(outbuf, GET_ASSERTS_OUT_GLOBAL_FLAGS); |
@@ -1086,7 +1098,7 @@ int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type, | |||
1086 | goto fail; | 1098 | goto fail; |
1087 | 1099 | ||
1088 | if (outlen < MC_CMD_WOL_FILTER_SET_OUT_LEN) { | 1100 | if (outlen < MC_CMD_WOL_FILTER_SET_OUT_LEN) { |
1089 | rc = -EMSGSIZE; | 1101 | rc = -EIO; |
1090 | goto fail; | 1102 | goto fail; |
1091 | } | 1103 | } |
1092 | 1104 | ||
@@ -1121,7 +1133,7 @@ int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out) | |||
1121 | goto fail; | 1133 | goto fail; |
1122 | 1134 | ||
1123 | if (outlen < MC_CMD_WOL_FILTER_GET_OUT_LEN) { | 1135 | if (outlen < MC_CMD_WOL_FILTER_GET_OUT_LEN) { |
1124 | rc = -EMSGSIZE; | 1136 | rc = -EIO; |
1125 | goto fail; | 1137 | goto fail; |
1126 | } | 1138 | } |
1127 | 1139 | ||