OSDN Git Service

ixgbe: enable multicast on shutdown for WOL
authorEmil Tantilov <emil.s.tantilov@intel.com>
Tue, 10 Oct 2017 20:20:01 +0000 (13:20 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 9 Jan 2018 16:26:42 +0000 (08:26 -0800)
Previously we only enabled the reception of multicast packets when
wake on multicast is set, but we also need this to allow waking with
IPv6 magic packets.

Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index 95aba97..b3a1a12 100644 (file)
@@ -6791,7 +6791,7 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
        struct ixgbe_adapter *adapter = pci_get_drvdata(pdev);
        struct net_device *netdev = adapter->netdev;
        struct ixgbe_hw *hw = &adapter->hw;
-       u32 ctrl, fctrl;
+       u32 ctrl;
        u32 wufc = adapter->wol;
 #ifdef CONFIG_PM
        int retval = 0;
@@ -6816,18 +6816,18 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
                hw->mac.ops.stop_link_on_d3(hw);
 
        if (wufc) {
+               u32 fctrl;
+
                ixgbe_set_rx_mode(netdev);
 
                /* enable the optics for 82599 SFP+ fiber as we can WoL */
                if (hw->mac.ops.enable_tx_laser)
                        hw->mac.ops.enable_tx_laser(hw);
 
-               /* turn on all-multi mode if wake on multicast is enabled */
-               if (wufc & IXGBE_WUFC_MC) {
-                       fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
-                       fctrl |= IXGBE_FCTRL_MPE;
-                       IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
-               }
+               /* enable the reception of multicast packets */
+               fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
+               fctrl |= IXGBE_FCTRL_MPE;
+               IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
 
                ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
                ctrl |= IXGBE_CTRL_GIO_DIS;