qlcnic: Added error logging for firmware abort
authorAmeen Rahman <ameen.rahman@qlogic.com>
Tue, 13 Sep 2011 08:06:17 +0000 (08:06 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Sep 2011 18:23:59 +0000 (14:23 -0400)
Signed-off-by: Ameen Rahman <ameen.rahman@qlogic.com>
Signed-off-by: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c

index 501e16b9c2abee7007c689f257cf10bade5a453e..445956e2d045927144c480c1ff26067a890d65e2 100644 (file)
@@ -3087,7 +3087,7 @@ static int
 qlcnic_check_health(struct qlcnic_adapter *adapter)
 {
        u32 state = 0, heartbeat;
-       struct net_device *netdev = adapter->netdev;
+       u32 peg_status;
 
        if (qlcnic_check_temp(adapter))
                goto detach;
@@ -3127,8 +3127,8 @@ qlcnic_check_health(struct qlcnic_adapter *adapter)
        if (auto_fw_reset)
                clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state);
 
-       dev_info(&netdev->dev, "firmware hang detected\n");
-       dev_info(&adapter->pdev->dev, "Dumping hw/fw registers\n"
+       dev_err(&adapter->pdev->dev, "firmware hang detected\n");
+       dev_err(&adapter->pdev->dev, "Dumping hw/fw registers\n"
                        "PEG_HALT_STATUS1: 0x%x, PEG_HALT_STATUS2: 0x%x,\n"
                        "PEG_NET_0_PC: 0x%x, PEG_NET_1_PC: 0x%x,\n"
                        "PEG_NET_2_PC: 0x%x, PEG_NET_3_PC: 0x%x,\n"
@@ -3140,6 +3140,11 @@ qlcnic_check_health(struct qlcnic_adapter *adapter)
                        QLCRD32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x3c),
                        QLCRD32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x3c),
                        QLCRD32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x3c));
+       peg_status = QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1);
+       if (LSW(MSB(peg_status)) == 0x67)
+               dev_err(&adapter->pdev->dev,
+                       "Firmware aborted with error code 0x00006700. "
+                               "Device is being reset.\n");
 detach:
        adapter->dev_state = (state == QLCNIC_DEV_NEED_QUISCENT) ? state :
                QLCNIC_DEV_NEED_RESET;