diff options
Diffstat (limited to 'drivers/net/ethernet/emulex/benet/be_main.c')
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index fee64bf10446..0fde69d5cb6a 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -2464,8 +2464,16 @@ void be_detect_error(struct be_adapter *adapter) | |||
2464 | */ | 2464 | */ |
2465 | if (sliport_status & SLIPORT_STATUS_ERR_MASK) { | 2465 | if (sliport_status & SLIPORT_STATUS_ERR_MASK) { |
2466 | adapter->hw_error = true; | 2466 | adapter->hw_error = true; |
2467 | dev_err(&adapter->pdev->dev, | 2467 | /* Do not log error messages if its a FW reset */ |
2468 | "Error detected in the card\n"); | 2468 | if (sliport_err1 == SLIPORT_ERROR_FW_RESET1 && |
2469 | sliport_err2 == SLIPORT_ERROR_FW_RESET2) { | ||
2470 | dev_info(&adapter->pdev->dev, | ||
2471 | "Firmware update in progress\n"); | ||
2472 | return; | ||
2473 | } else { | ||
2474 | dev_err(&adapter->pdev->dev, | ||
2475 | "Error detected in the card\n"); | ||
2476 | } | ||
2469 | } | 2477 | } |
2470 | 2478 | ||
2471 | if (sliport_status & SLIPORT_STATUS_ERR_MASK) { | 2479 | if (sliport_status & SLIPORT_STATUS_ERR_MASK) { |
@@ -2932,28 +2940,35 @@ static void be_cancel_worker(struct be_adapter *adapter) | |||
2932 | } | 2940 | } |
2933 | } | 2941 | } |
2934 | 2942 | ||
2935 | static int be_clear(struct be_adapter *adapter) | 2943 | static void be_mac_clear(struct be_adapter *adapter) |
2936 | { | 2944 | { |
2937 | int i; | 2945 | int i; |
2938 | 2946 | ||
2947 | if (adapter->pmac_id) { | ||
2948 | for (i = 0; i < (adapter->uc_macs + 1); i++) | ||
2949 | be_cmd_pmac_del(adapter, adapter->if_handle, | ||
2950 | adapter->pmac_id[i], 0); | ||
2951 | adapter->uc_macs = 0; | ||
2952 | |||
2953 | kfree(adapter->pmac_id); | ||
2954 | adapter->pmac_id = NULL; | ||
2955 | } | ||
2956 | } | ||
2957 | |||
2958 | static int be_clear(struct be_adapter *adapter) | ||
2959 | { | ||
2939 | be_cancel_worker(adapter); | 2960 | be_cancel_worker(adapter); |
2940 | 2961 | ||
2941 | if (sriov_enabled(adapter)) | 2962 | if (sriov_enabled(adapter)) |
2942 | be_vf_clear(adapter); | 2963 | be_vf_clear(adapter); |
2943 | 2964 | ||
2944 | /* delete the primary mac along with the uc-mac list */ | 2965 | /* delete the primary mac along with the uc-mac list */ |
2945 | for (i = 0; i < (adapter->uc_macs + 1); i++) | 2966 | be_mac_clear(adapter); |
2946 | be_cmd_pmac_del(adapter, adapter->if_handle, | ||
2947 | adapter->pmac_id[i], 0); | ||
2948 | adapter->uc_macs = 0; | ||
2949 | 2967 | ||
2950 | be_cmd_if_destroy(adapter, adapter->if_handle, 0); | 2968 | be_cmd_if_destroy(adapter, adapter->if_handle, 0); |
2951 | 2969 | ||
2952 | be_clear_queues(adapter); | 2970 | be_clear_queues(adapter); |
2953 | 2971 | ||
2954 | kfree(adapter->pmac_id); | ||
2955 | adapter->pmac_id = NULL; | ||
2956 | |||
2957 | be_msix_disable(adapter); | 2972 | be_msix_disable(adapter); |
2958 | return 0; | 2973 | return 0; |
2959 | } | 2974 | } |
@@ -3812,6 +3827,8 @@ static int lancer_fw_download(struct be_adapter *adapter, | |||
3812 | } | 3827 | } |
3813 | 3828 | ||
3814 | if (change_status == LANCER_FW_RESET_NEEDED) { | 3829 | if (change_status == LANCER_FW_RESET_NEEDED) { |
3830 | dev_info(&adapter->pdev->dev, | ||
3831 | "Resetting adapter to activate new FW\n"); | ||
3815 | status = lancer_physdev_ctrl(adapter, | 3832 | status = lancer_physdev_ctrl(adapter, |
3816 | PHYSDEV_CONTROL_FW_RESET_MASK); | 3833 | PHYSDEV_CONTROL_FW_RESET_MASK); |
3817 | if (status) { | 3834 | if (status) { |
@@ -4363,13 +4380,13 @@ static int lancer_recover_func(struct be_adapter *adapter) | |||
4363 | goto err; | 4380 | goto err; |
4364 | } | 4381 | } |
4365 | 4382 | ||
4366 | dev_err(dev, "Error recovery successful\n"); | 4383 | dev_err(dev, "Adapter recovery successful\n"); |
4367 | return 0; | 4384 | return 0; |
4368 | err: | 4385 | err: |
4369 | if (status == -EAGAIN) | 4386 | if (status == -EAGAIN) |
4370 | dev_err(dev, "Waiting for resource provisioning\n"); | 4387 | dev_err(dev, "Waiting for resource provisioning\n"); |
4371 | else | 4388 | else |
4372 | dev_err(dev, "Error recovery failed\n"); | 4389 | dev_err(dev, "Adapter recovery failed\n"); |
4373 | 4390 | ||
4374 | return status; | 4391 | return status; |
4375 | } | 4392 | } |