aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/emulex
diff options
context:
space:
mode:
authorPadmanabh Ratnakar <padmanabh.ratnakar@emulex.com>2012-07-11 23:56:58 -0400
committerDavid S. Miller <davem@davemloft.net>2012-07-12 11:16:46 -0400
commitbf99e50dc2ec49fc1256f9499987699a3f7f158b (patch)
treee97f373260bb15d4edc3f1cece0e548f9df1c192 /drivers/net/ethernet/emulex
parent7aeb21564332bcf0dacc198e4f795e8e5e347126 (diff)
be2net: Fix initialization sequence for Lancer
Invoke only required initialization routines for Lancer. Remove invocation of unnecessary routines. Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/emulex')
-rw-r--r--drivers/net/ethernet/emulex/benet/be_cmds.c76
-rw-r--r--drivers/net/ethernet/emulex/benet/be_cmds.h4
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c75
3 files changed, 87 insertions, 68 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
index d75c9fb9a188..431f7749eea2 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -426,12 +426,65 @@ static int be_POST_stage_get(struct be_adapter *adapter, u16 *stage)
426 return 0; 426 return 0;
427} 427}
428 428
429int be_cmd_POST(struct be_adapter *adapter) 429int lancer_wait_ready(struct be_adapter *adapter)
430{
431#define SLIPORT_READY_TIMEOUT 30
432 u32 sliport_status;
433 int status = 0, i;
434
435 for (i = 0; i < SLIPORT_READY_TIMEOUT; i++) {
436 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
437 if (sliport_status & SLIPORT_STATUS_RDY_MASK)
438 break;
439
440 msleep(1000);
441 }
442
443 if (i == SLIPORT_READY_TIMEOUT)
444 status = -1;
445
446 return status;
447}
448
449int lancer_test_and_set_rdy_state(struct be_adapter *adapter)
450{
451 int status;
452 u32 sliport_status, err, reset_needed;
453 status = lancer_wait_ready(adapter);
454 if (!status) {
455 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
456 err = sliport_status & SLIPORT_STATUS_ERR_MASK;
457 reset_needed = sliport_status & SLIPORT_STATUS_RN_MASK;
458 if (err && reset_needed) {
459 iowrite32(SLI_PORT_CONTROL_IP_MASK,
460 adapter->db + SLIPORT_CONTROL_OFFSET);
461
462 /* check adapter has corrected the error */
463 status = lancer_wait_ready(adapter);
464 sliport_status = ioread32(adapter->db +
465 SLIPORT_STATUS_OFFSET);
466 sliport_status &= (SLIPORT_STATUS_ERR_MASK |
467 SLIPORT_STATUS_RN_MASK);
468 if (status || sliport_status)
469 status = -1;
470 } else if (err || reset_needed) {
471 status = -1;
472 }
473 }
474 return status;
475}
476
477int be_fw_wait_ready(struct be_adapter *adapter)
430{ 478{
431 u16 stage; 479 u16 stage;
432 int status, timeout = 0; 480 int status, timeout = 0;
433 struct device *dev = &adapter->pdev->dev; 481 struct device *dev = &adapter->pdev->dev;
434 482
483 if (lancer_chip(adapter)) {
484 status = lancer_wait_ready(adapter);
485 return status;
486 }
487
435 do { 488 do {
436 status = be_POST_stage_get(adapter, &stage); 489 status = be_POST_stage_get(adapter, &stage);
437 if (status) { 490 if (status) {
@@ -562,6 +615,9 @@ int be_cmd_fw_init(struct be_adapter *adapter)
562 u8 *wrb; 615 u8 *wrb;
563 int status; 616 int status;
564 617
618 if (lancer_chip(adapter))
619 return 0;
620
565 if (mutex_lock_interruptible(&adapter->mbox_lock)) 621 if (mutex_lock_interruptible(&adapter->mbox_lock))
566 return -1; 622 return -1;
567 623
@@ -589,6 +645,9 @@ int be_cmd_fw_clean(struct be_adapter *adapter)
589 u8 *wrb; 645 u8 *wrb;
590 int status; 646 int status;
591 647
648 if (lancer_chip(adapter))
649 return 0;
650
592 if (mutex_lock_interruptible(&adapter->mbox_lock)) 651 if (mutex_lock_interruptible(&adapter->mbox_lock))
593 return -1; 652 return -1;
594 653
@@ -607,6 +666,7 @@ int be_cmd_fw_clean(struct be_adapter *adapter)
607 mutex_unlock(&adapter->mbox_lock); 666 mutex_unlock(&adapter->mbox_lock);
608 return status; 667 return status;
609} 668}
669
610int be_cmd_eq_create(struct be_adapter *adapter, 670int be_cmd_eq_create(struct be_adapter *adapter,
611 struct be_queue_info *eq, int eq_delay) 671 struct be_queue_info *eq, int eq_delay)
612{ 672{
@@ -1682,6 +1742,20 @@ int be_cmd_reset_function(struct be_adapter *adapter)
1682 struct be_cmd_req_hdr *req; 1742 struct be_cmd_req_hdr *req;
1683 int status; 1743 int status;
1684 1744
1745 if (lancer_chip(adapter)) {
1746 status = lancer_wait_ready(adapter);
1747 if (!status) {
1748 iowrite32(SLI_PORT_CONTROL_IP_MASK,
1749 adapter->db + SLIPORT_CONTROL_OFFSET);
1750 status = lancer_test_and_set_rdy_state(adapter);
1751 }
1752 if (status) {
1753 dev_err(&adapter->pdev->dev,
1754 "Adapter in non recoverable error\n");
1755 }
1756 return status;
1757 }
1758
1685 if (mutex_lock_interruptible(&adapter->mbox_lock)) 1759 if (mutex_lock_interruptible(&adapter->mbox_lock))
1686 return -1; 1760 return -1;
1687 1761
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.h b/drivers/net/ethernet/emulex/benet/be_cmds.h
index 3c938f55c00b..cfc0620b747b 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.h
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.h
@@ -1656,7 +1656,7 @@ struct be_cmd_req_set_ext_fat_caps {
1656}; 1656};
1657 1657
1658extern int be_pci_fnum_get(struct be_adapter *adapter); 1658extern int be_pci_fnum_get(struct be_adapter *adapter);
1659extern int be_cmd_POST(struct be_adapter *adapter); 1659extern int be_fw_wait_ready(struct be_adapter *adapter);
1660extern int be_cmd_mac_addr_query(struct be_adapter *adapter, u8 *mac_addr, 1660extern int be_cmd_mac_addr_query(struct be_adapter *adapter, u8 *mac_addr,
1661 u8 type, bool permanent, u32 if_handle, u32 pmac_id); 1661 u8 type, bool permanent, u32 if_handle, u32 pmac_id);
1662extern int be_cmd_pmac_add(struct be_adapter *adapter, u8 *mac_addr, 1662extern int be_cmd_pmac_add(struct be_adapter *adapter, u8 *mac_addr,
@@ -1765,4 +1765,6 @@ extern int be_cmd_get_ext_fat_capabilites(struct be_adapter *adapter,
1765extern int be_cmd_set_ext_fat_capabilites(struct be_adapter *adapter, 1765extern int be_cmd_set_ext_fat_capabilites(struct be_adapter *adapter,
1766 struct be_dma_mem *cmd, 1766 struct be_dma_mem *cmd,
1767 struct be_fat_conf_params *cfgs); 1767 struct be_fat_conf_params *cfgs);
1768extern int lancer_wait_ready(struct be_adapter *adapter);
1769extern int lancer_test_and_set_rdy_state(struct be_adapter *adapter);
1768 1770
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 2436c3a60f93..a3641baa8604 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2573,9 +2573,6 @@ static int be_clear(struct be_adapter *adapter)
2573 be_tx_queues_destroy(adapter); 2573 be_tx_queues_destroy(adapter);
2574 be_evt_queues_destroy(adapter); 2574 be_evt_queues_destroy(adapter);
2575 2575
2576 /* tell fw we're done with firing cmds */
2577 be_cmd_fw_clean(adapter);
2578
2579 be_msix_disable(adapter); 2576 be_msix_disable(adapter);
2580 return 0; 2577 return 0;
2581} 2578}
@@ -3476,6 +3473,9 @@ static void __devexit be_remove(struct pci_dev *pdev)
3476 3473
3477 be_clear(adapter); 3474 be_clear(adapter);
3478 3475
3476 /* tell fw we're done with firing cmds */
3477 be_cmd_fw_clean(adapter);
3478
3479 be_stats_cleanup(adapter); 3479 be_stats_cleanup(adapter);
3480 3480
3481 be_ctrl_cleanup(adapter); 3481 be_ctrl_cleanup(adapter);
@@ -3625,54 +3625,6 @@ static int be_dev_type_check(struct be_adapter *adapter)
3625 return 0; 3625 return 0;
3626} 3626}
3627 3627
3628static int lancer_wait_ready(struct be_adapter *adapter)
3629{
3630#define SLIPORT_READY_TIMEOUT 30
3631 u32 sliport_status;
3632 int status = 0, i;
3633
3634 for (i = 0; i < SLIPORT_READY_TIMEOUT; i++) {
3635 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
3636 if (sliport_status & SLIPORT_STATUS_RDY_MASK)
3637 break;
3638
3639 msleep(1000);
3640 }
3641
3642 if (i == SLIPORT_READY_TIMEOUT)
3643 status = -1;
3644
3645 return status;
3646}
3647
3648static int lancer_test_and_set_rdy_state(struct be_adapter *adapter)
3649{
3650 int status;
3651 u32 sliport_status, err, reset_needed;
3652 status = lancer_wait_ready(adapter);
3653 if (!status) {
3654 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
3655 err = sliport_status & SLIPORT_STATUS_ERR_MASK;
3656 reset_needed = sliport_status & SLIPORT_STATUS_RN_MASK;
3657 if (err && reset_needed) {
3658 iowrite32(SLI_PORT_CONTROL_IP_MASK,
3659 adapter->db + SLIPORT_CONTROL_OFFSET);
3660
3661 /* check adapter has corrected the error */
3662 status = lancer_wait_ready(adapter);
3663 sliport_status = ioread32(adapter->db +
3664 SLIPORT_STATUS_OFFSET);
3665 sliport_status &= (SLIPORT_STATUS_ERR_MASK |
3666 SLIPORT_STATUS_RN_MASK);
3667 if (status || sliport_status)
3668 status = -1;
3669 } else if (err || reset_needed) {
3670 status = -1;
3671 }
3672 }
3673 return status;
3674}
3675
3676static void lancer_test_and_recover_fn_err(struct be_adapter *adapter) 3628static void lancer_test_and_recover_fn_err(struct be_adapter *adapter)
3677{ 3629{
3678 int status; 3630 int status;
@@ -3820,22 +3772,9 @@ static int __devinit be_probe(struct pci_dev *pdev,
3820 if (status) 3772 if (status)
3821 goto free_netdev; 3773 goto free_netdev;
3822 3774
3823 if (lancer_chip(adapter)) {
3824 status = lancer_wait_ready(adapter);
3825 if (!status) {
3826 iowrite32(SLI_PORT_CONTROL_IP_MASK,
3827 adapter->db + SLIPORT_CONTROL_OFFSET);
3828 status = lancer_test_and_set_rdy_state(adapter);
3829 }
3830 if (status) {
3831 dev_err(&pdev->dev, "Adapter in non recoverable error\n");
3832 goto ctrl_clean;
3833 }
3834 }
3835
3836 /* sync up with fw's ready state */ 3775 /* sync up with fw's ready state */
3837 if (be_physfn(adapter)) { 3776 if (be_physfn(adapter)) {
3838 status = be_cmd_POST(adapter); 3777 status = be_fw_wait_ready(adapter);
3839 if (status) 3778 if (status)
3840 goto ctrl_clean; 3779 goto ctrl_clean;
3841 } 3780 }
@@ -4033,7 +3972,7 @@ static pci_ers_result_t be_eeh_reset(struct pci_dev *pdev)
4033 pci_restore_state(pdev); 3972 pci_restore_state(pdev);
4034 3973
4035 /* Check if card is ok and fw is ready */ 3974 /* Check if card is ok and fw is ready */
4036 status = be_cmd_POST(adapter); 3975 status = be_fw_wait_ready(adapter);
4037 if (status) 3976 if (status)
4038 return PCI_ERS_RESULT_DISCONNECT; 3977 return PCI_ERS_RESULT_DISCONNECT;
4039 3978
@@ -4055,6 +3994,10 @@ static void be_eeh_resume(struct pci_dev *pdev)
4055 if (status) 3994 if (status)
4056 goto err; 3995 goto err;
4057 3996
3997 status = be_cmd_reset_function(adapter);
3998 if (status)
3999 goto err;
4000
4058 status = be_setup(adapter); 4001 status = be_setup(adapter);
4059 if (status) 4002 if (status)
4060 goto err; 4003 goto err;