diff options
author | Sony Chacko <sony.chacko@qlogic.com> | 2011-08-29 12:50:26 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-08-29 22:52:49 -0400 |
commit | 44f65b290235a1b259eea1aa055b5b1be36d3c86 (patch) | |
tree | 63ffb384f7f27e06cc6f263a9440f86584ae237e /drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | |
parent | 1bddc59c2546a24a92b1e7d4d8fa1e1e38aeedb2 (diff) | |
download | talos-obmc-linux-44f65b290235a1b259eea1aa055b5b1be36d3c86.tar.gz talos-obmc-linux-44f65b290235a1b259eea1aa055b5b1be36d3c86.zip |
qlcnic: detect fan failure
Signed-off-by: Sony Chacko <sony.chacko@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index b447cc50693a..998bb1d1a91f 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c @@ -2928,15 +2928,36 @@ qlcnic_detach_work(struct work_struct *work) status = QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1); - if (status & QLCNIC_RCODE_FATAL_ERROR) + if (status & QLCNIC_RCODE_FATAL_ERROR) { + dev_err(&adapter->pdev->dev, + "Detaching the device: peg halt status1=0x%x\n", + status); + + if (QLCNIC_FWERROR_CODE(status) == QLCNIC_FWERROR_FAN_FAILURE) { + dev_err(&adapter->pdev->dev, + "On board active cooling fan failed. " + "Device has been halted.\n"); + dev_err(&adapter->pdev->dev, + "Replace the adapter.\n"); + } + goto err_ret; + } - if (adapter->temp == QLCNIC_TEMP_PANIC) + if (adapter->temp == QLCNIC_TEMP_PANIC) { + dev_err(&adapter->pdev->dev, "Detaching the device: temp=%d\n", + adapter->temp); goto err_ret; + } + /* Dont ack if this instance is the reset owner */ if (!(adapter->flags & QLCNIC_FW_RESET_OWNER)) { - if (qlcnic_set_drv_state(adapter, adapter->dev_state)) + if (qlcnic_set_drv_state(adapter, adapter->dev_state)) { + dev_err(&adapter->pdev->dev, + "Failed to set driver state," + "detaching the device.\n"); goto err_ret; + } } adapter->fw_wait_cnt = 0; @@ -2946,8 +2967,6 @@ qlcnic_detach_work(struct work_struct *work) return; err_ret: - dev_err(&adapter->pdev->dev, "detach failed; status=%d temp=%d\n", - status, adapter->temp); netif_device_attach(netdev); qlcnic_clr_all_drv_state(adapter, 1); } |