aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/myri10ge/myri10ge.c47
1 files changed, 9 insertions, 38 deletions
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index 1ce3c9e5c890..9bc5dab949fd 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -199,8 +199,6 @@ struct myri10ge_priv {
199 unsigned long serial_number; 199 unsigned long serial_number;
200 int vendor_specific_offset; 200 int vendor_specific_offset;
201 int fw_multicast_support; 201 int fw_multicast_support;
202 u32 devctl;
203 u16 msi_flags;
204 u32 read_dma; 202 u32 read_dma;
205 u32 write_dma; 203 u32 write_dma;
206 u32 read_write_dma; 204 u32 read_write_dma;
@@ -2520,34 +2518,6 @@ static void myri10ge_select_firmware(struct myri10ge_priv *mgp)
2520 } 2518 }
2521} 2519}
2522 2520
2523static void myri10ge_save_state(struct myri10ge_priv *mgp)
2524{
2525 struct pci_dev *pdev = mgp->pdev;
2526 int cap;
2527
2528 pci_save_state(pdev);
2529 /* now save PCIe and MSI state that Linux will not
2530 * save for us */
2531 cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
2532 pci_read_config_dword(pdev, cap + PCI_EXP_DEVCTL, &mgp->devctl);
2533 cap = pci_find_capability(pdev, PCI_CAP_ID_MSI);
2534 pci_read_config_word(pdev, cap + PCI_MSI_FLAGS, &mgp->msi_flags);
2535}
2536
2537static void myri10ge_restore_state(struct myri10ge_priv *mgp)
2538{
2539 struct pci_dev *pdev = mgp->pdev;
2540 int cap;
2541
2542 /* restore PCIe and MSI state that linux will not */
2543 cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
2544 pci_write_config_dword(pdev, cap + PCI_CAP_ID_EXP, mgp->devctl);
2545 cap = pci_find_capability(pdev, PCI_CAP_ID_MSI);
2546 pci_write_config_word(pdev, cap + PCI_MSI_FLAGS, mgp->msi_flags);
2547
2548 pci_restore_state(pdev);
2549}
2550
2551#ifdef CONFIG_PM 2521#ifdef CONFIG_PM
2552 2522
2553static int myri10ge_suspend(struct pci_dev *pdev, pm_message_t state) 2523static int myri10ge_suspend(struct pci_dev *pdev, pm_message_t state)
@@ -2568,7 +2538,7 @@ static int myri10ge_suspend(struct pci_dev *pdev, pm_message_t state)
2568 rtnl_unlock(); 2538 rtnl_unlock();
2569 } 2539 }
2570 myri10ge_dummy_rdma(mgp, 0); 2540 myri10ge_dummy_rdma(mgp, 0);
2571 myri10ge_save_state(mgp); 2541 pci_save_state(pdev);
2572 pci_disable_device(pdev); 2542 pci_disable_device(pdev);
2573 pci_set_power_state(pdev, pci_choose_state(pdev, state)); 2543 pci_set_power_state(pdev, pci_choose_state(pdev, state));
2574 return 0; 2544 return 0;
@@ -2593,7 +2563,8 @@ static int myri10ge_resume(struct pci_dev *pdev)
2593 mgp->dev->name); 2563 mgp->dev->name);
2594 return -EIO; 2564 return -EIO;
2595 } 2565 }
2596 myri10ge_restore_state(mgp); 2566
2567 pci_restore_state(pdev);
2597 2568
2598 status = pci_enable_device(pdev); 2569 status = pci_enable_device(pdev);
2599 if (status < 0) { 2570 if (status < 0) {
@@ -2608,7 +2579,7 @@ static int myri10ge_resume(struct pci_dev *pdev)
2608 2579
2609 /* Save configuration space to be restored if the 2580 /* Save configuration space to be restored if the
2610 * nic resets due to a parity error */ 2581 * nic resets due to a parity error */
2611 myri10ge_save_state(mgp); 2582 pci_save_state(pdev);
2612 2583
2613 if (netif_running(netdev)) { 2584 if (netif_running(netdev)) {
2614 rtnl_lock(); 2585 rtnl_lock();
@@ -2674,10 +2645,10 @@ static void myri10ge_watchdog(struct work_struct *work)
2674 * when the driver was loaded, or the last time the 2645 * when the driver was loaded, or the last time the
2675 * nic was resumed from power saving mode. 2646 * nic was resumed from power saving mode.
2676 */ 2647 */
2677 myri10ge_restore_state(mgp); 2648 pci_restore_state(mgp->pdev);
2678 2649
2679 /* save state again for accounting reasons */ 2650 /* save state again for accounting reasons */
2680 myri10ge_save_state(mgp); 2651 pci_save_state(mgp->pdev);
2681 2652
2682 } else { 2653 } else {
2683 /* if we get back -1's from our slot, perhaps somebody 2654 /* if we get back -1's from our slot, perhaps somebody
@@ -2917,7 +2888,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2917 2888
2918 /* Save configuration space to be restored if the 2889 /* Save configuration space to be restored if the
2919 * nic resets due to a parity error */ 2890 * nic resets due to a parity error */
2920 myri10ge_save_state(mgp); 2891 pci_save_state(pdev);
2921 2892
2922 /* Setup the watchdog timer */ 2893 /* Setup the watchdog timer */
2923 setup_timer(&mgp->watchdog_timer, myri10ge_watchdog_timer, 2894 setup_timer(&mgp->watchdog_timer, myri10ge_watchdog_timer,
@@ -2937,7 +2908,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2937 return 0; 2908 return 0;
2938 2909
2939abort_with_state: 2910abort_with_state:
2940 myri10ge_restore_state(mgp); 2911 pci_restore_state(pdev);
2941 2912
2942abort_with_firmware: 2913abort_with_firmware:
2943 myri10ge_dummy_rdma(mgp, 0); 2914 myri10ge_dummy_rdma(mgp, 0);
@@ -2992,7 +2963,7 @@ static void myri10ge_remove(struct pci_dev *pdev)
2992 myri10ge_dummy_rdma(mgp, 0); 2963 myri10ge_dummy_rdma(mgp, 0);
2993 2964
2994 /* avoid a memory leak */ 2965 /* avoid a memory leak */
2995 myri10ge_restore_state(mgp); 2966 pci_restore_state(pdev);
2996 2967
2997 bytes = myri10ge_max_intr_slots * sizeof(*mgp->rx_done.entry); 2968 bytes = myri10ge_max_intr_slots * sizeof(*mgp->rx_done.entry);
2998 dma_free_coherent(&pdev->dev, bytes, 2969 dma_free_coherent(&pdev->dev, bytes,