aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJitendra Kalsaria <jitendra.kalsaria@qlogic.com>2013-02-09 04:29:53 -0500
committerDavid S. Miller <davem@davemloft.net>2013-02-11 02:04:13 -0500
commit9a05f92bbb46211b315222f4cf70731a97f932ed (patch)
tree1f2e4c9dd5d9072f4e23403558516a397ee61f88
parent58ead415a1a7d6800ed4eb3eeed12daedc27ffe6 (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.c7
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");