aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe/ixgbe_main.c
diff options
context:
space:
mode:
authorWaskiewicz Jr, Peter P <peter.p.waskiewicz.jr@intel.com>2009-04-23 07:15:18 -0400
committerDavid S. Miller <davem@davemloft.net>2009-04-27 06:14:48 -0400
commit495dce123ceabbae035552437fcaa0f69247ff08 (patch)
tree7b5cd7c1f8f8c77d7e1e9def4be9638b34ec3bab /drivers/net/ixgbe/ixgbe_main.c
parentae0e8e82205c903978a79ebf5e31c670b61fa5b4 (diff)
ixgbe: Fix WoL functionality for 82599 KX4 devices
The current code writes the PME enabled bit in PCI config space which is wrong. This was needed for pre-release hardware, and was not removed from the driver. Also, we need to clear the WUS (wake up status) after we resume. Otherwise we can't wake for the same event again since it's still asserted in the hardware. Plus, the multicast lists were being written improperly, causing multicast WoL to fail. Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_main.c')
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 01884256f4c9..07e778d3e5d2 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -3646,6 +3646,8 @@ static int ixgbe_resume(struct pci_dev *pdev)
3646 3646
3647 ixgbe_reset(adapter); 3647 ixgbe_reset(adapter);
3648 3648
3649 IXGBE_WRITE_REG(&adapter->hw, IXGBE_WUS, ~0);
3650
3649 if (netif_running(netdev)) { 3651 if (netif_running(netdev)) {
3650 err = ixgbe_open(adapter->netdev); 3652 err = ixgbe_open(adapter->netdev);
3651 if (err) 3653 if (err)
@@ -4575,7 +4577,6 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
4575 const struct ixgbe_info *ii = ixgbe_info_tbl[ent->driver_data]; 4577 const struct ixgbe_info *ii = ixgbe_info_tbl[ent->driver_data];
4576 static int cards_found; 4578 static int cards_found;
4577 int i, err, pci_using_dac; 4579 int i, err, pci_using_dac;
4578 u16 pm_value = 0;
4579 u32 part_num, eec; 4580 u32 part_num, eec;
4580 4581
4581 err = pci_enable_device(pdev); 4582 err = pci_enable_device(pdev);
@@ -4763,11 +4764,8 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
4763 4764
4764 switch (pdev->device) { 4765 switch (pdev->device) {
4765 case IXGBE_DEV_ID_82599_KX4: 4766 case IXGBE_DEV_ID_82599_KX4:
4766#define IXGBE_PCIE_PMCSR 0x44 4767 adapter->wol = (IXGBE_WUFC_MAG | IXGBE_WUFC_EX |
4767 adapter->wol = IXGBE_WUFC_MAG; 4768 IXGBE_WUFC_MC | IXGBE_WUFC_BC);
4768 pci_read_config_word(pdev, IXGBE_PCIE_PMCSR, &pm_value);
4769 pci_write_config_word(pdev, IXGBE_PCIE_PMCSR,
4770 (pm_value | (1 << 8)));
4771 break; 4769 break;
4772 default: 4770 default:
4773 adapter->wol = 0; 4771 adapter->wol = 0;