aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorSritej Velaga <sritej.velaga@qlogic.com>2012-02-03 06:35:13 -0500
committerDavid S. Miller <davem@davemloft.net>2012-02-04 15:59:29 -0500
commit5471aed0259298e4e258b8a9e403ebdf88ebcd56 (patch)
treed7b7559d82c60373e95bcd8f685f87b0a111ecd9 /drivers/net
parentdb608c129b5258dbdff9c221857a95bc2dc1128e (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')
-rw-r--r--drivers/net/ethernet/qlogic/netxen/netxen_nic_hdr.h1
-rw-r--r--drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c21
2 files changed, 20 insertions, 2 deletions
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_hdr.h b/drivers/net/ethernet/qlogic/netxen/netxen_nic_hdr.h
index dc1967c1f312..b1a897cd9a8d 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_hdr.h
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_hdr.h
@@ -969,6 +969,7 @@ enum {
969#define NX_RCODE_FATAL_ERROR 0x80000000 969#define NX_RCODE_FATAL_ERROR 0x80000000
970#define NX_FWERROR_PEGNUM(code) ((code) & 0xff) 970#define NX_FWERROR_PEGNUM(code) ((code) & 0xff)
971#define NX_FWERROR_CODE(code) ((code >> 8) & 0xfffff) 971#define NX_FWERROR_CODE(code) ((code >> 8) & 0xfffff)
972#define NX_FWERROR_PEGSTAT1(code) ((code >> 8) & 0x1fffff)
972 973
973#define FW_POLL_DELAY (2 * HZ) 974#define FW_POLL_DELAY (2 * HZ)
974#define FW_FAIL_THRESH 3 975#define FW_FAIL_THRESH 3
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
2596netxen_check_health(struct netxen_adapter *adapter) 2596netxen_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");
2647detach: 2664detach:
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))