diff options
author | Jitendra Kalsaria <jitendra.kalsaria@qlogic.com> | 2013-02-09 04:29:53 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-02-11 02:04:13 -0500 |
commit | 9a05f92bbb46211b315222f4cf70731a97f932ed (patch) | |
tree | 1f2e4c9dd5d9072f4e23403558516a397ee61f88 | |
parent | 58ead415a1a7d6800ed4eb3eeed12daedc27ffe6 (diff) |
qlcnic: fix async event handling during diagnostic loopback test
o Handle async events during diagnostic loopback test
o Clear loopback mode on failure to receive async events
Signed-off-by: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c index 36c147486366..51b4340deffa 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | |||
@@ -1436,13 +1436,15 @@ int qlcnic_83xx_set_lb_mode(struct qlcnic_adapter *adapter, u8 mode) | |||
1436 | return status; | 1436 | return status; |
1437 | } | 1437 | } |
1438 | 1438 | ||
1439 | /* Wait until firmware send IDC Completion AEN */ | 1439 | /* Wait for Link and IDC Completion AEN */ |
1440 | do { | 1440 | do { |
1441 | msleep(300); | 1441 | msleep(300); |
1442 | qlcnic_83xx_process_aen(adapter); | ||
1442 | if (loop++ > QLCNIC_ILB_MAX_RCV_LOOP) { | 1443 | if (loop++ > QLCNIC_ILB_MAX_RCV_LOOP) { |
1443 | dev_err(&adapter->pdev->dev, | 1444 | dev_err(&adapter->pdev->dev, |
1444 | "FW did not generate IDC completion AEN\n"); | 1445 | "FW did not generate IDC completion AEN\n"); |
1445 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); | 1446 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); |
1447 | qlcnic_83xx_clear_lb_mode(adapter, mode); | ||
1446 | return -EIO; | 1448 | return -EIO; |
1447 | } | 1449 | } |
1448 | } while (test_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status)); | 1450 | } while (test_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status)); |
@@ -1474,9 +1476,10 @@ int qlcnic_83xx_clear_lb_mode(struct qlcnic_adapter *adapter, u8 mode) | |||
1474 | return status; | 1476 | return status; |
1475 | } | 1477 | } |
1476 | 1478 | ||
1477 | /* Wait until firmware send IDC Completion AEN */ | 1479 | /* Wait for Link and IDC Completion AEN */ |
1478 | do { | 1480 | do { |
1479 | msleep(300); | 1481 | msleep(300); |
1482 | qlcnic_83xx_process_aen(adapter); | ||
1480 | if (loop++ > QLCNIC_ILB_MAX_RCV_LOOP) { | 1483 | if (loop++ > QLCNIC_ILB_MAX_RCV_LOOP) { |
1481 | dev_err(&adapter->pdev->dev, | 1484 | dev_err(&adapter->pdev->dev, |
1482 | "Firmware didn't sent IDC completion AEN\n"); | 1485 | "Firmware didn't sent IDC completion AEN\n"); |