diff options
author | Sritej Velaga <sritej.velaga@qlogic.com> | 2012-02-03 06:35:13 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-02-04 15:59:29 -0500 |
commit | 5471aed0259298e4e258b8a9e403ebdf88ebcd56 (patch) | |
tree | d7b7559d82c60373e95bcd8f685f87b0a111ecd9 /drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | |
parent | db608c129b5258dbdff9c221857a95bc2dc1128e (diff) |
netxen_nic: Error logging on firmware hang
Log states of essential registers on firmware hang detection.
Signed-off-by: Sritej Velaga <sritej.velaga@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c')
-rw-r--r-- | drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c index f67655f3462c..f517c16bfa3f 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | |||
@@ -2596,6 +2596,7 @@ static int | |||
2596 | netxen_check_health(struct netxen_adapter *adapter) | 2596 | netxen_check_health(struct netxen_adapter *adapter) |
2597 | { | 2597 | { |
2598 | u32 state, heartbit; | 2598 | u32 state, heartbit; |
2599 | u32 peg_status; | ||
2599 | struct net_device *netdev = adapter->netdev; | 2600 | struct net_device *netdev = adapter->netdev; |
2600 | 2601 | ||
2601 | state = NXRD32(adapter, NX_CRB_DEV_STATE); | 2602 | state = NXRD32(adapter, NX_CRB_DEV_STATE); |
@@ -2642,8 +2643,24 @@ netxen_check_health(struct netxen_adapter *adapter) | |||
2642 | 2643 | ||
2643 | clear_bit(__NX_FW_ATTACHED, &adapter->state); | 2644 | clear_bit(__NX_FW_ATTACHED, &adapter->state); |
2644 | 2645 | ||
2645 | dev_info(&netdev->dev, "firmware hang detected\n"); | 2646 | dev_err(&netdev->dev, "firmware hang detected\n"); |
2646 | 2647 | peg_status = NXRD32(adapter, NETXEN_PEG_HALT_STATUS1); | |
2648 | dev_err(&adapter->pdev->dev, "Dumping hw/fw registers\n" | ||
2649 | "PEG_HALT_STATUS1: 0x%x, PEG_HALT_STATUS2: 0x%x,\n" | ||
2650 | "PEG_NET_0_PC: 0x%x, PEG_NET_1_PC: 0x%x,\n" | ||
2651 | "PEG_NET_2_PC: 0x%x, PEG_NET_3_PC: 0x%x,\n" | ||
2652 | "PEG_NET_4_PC: 0x%x\n", | ||
2653 | peg_status, | ||
2654 | NXRD32(adapter, NETXEN_PEG_HALT_STATUS2), | ||
2655 | NXRD32(adapter, NETXEN_CRB_PEG_NET_0 + 0x3c), | ||
2656 | NXRD32(adapter, NETXEN_CRB_PEG_NET_1 + 0x3c), | ||
2657 | NXRD32(adapter, NETXEN_CRB_PEG_NET_2 + 0x3c), | ||
2658 | NXRD32(adapter, NETXEN_CRB_PEG_NET_3 + 0x3c), | ||
2659 | NXRD32(adapter, NETXEN_CRB_PEG_NET_4 + 0x3c)); | ||
2660 | if (NX_FWERROR_PEGSTAT1(peg_status) == 0x67) | ||
2661 | dev_err(&adapter->pdev->dev, | ||
2662 | "Firmware aborted with error code 0x00006700. " | ||
2663 | "Device is being reset.\n"); | ||
2647 | detach: | 2664 | detach: |
2648 | if ((auto_fw_reset == AUTO_FW_RESET_ENABLED) && | 2665 | if ((auto_fw_reset == AUTO_FW_RESET_ENABLED) && |
2649 | !test_and_set_bit(__NX_RESETTING, &adapter->state)) | 2666 | !test_and_set_bit(__NX_RESETTING, &adapter->state)) |