static int be_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
 {
        struct be_adapter *adapter = netdev_priv(netdev);
+       struct device *dev = &adapter->pdev->dev;
+       struct be_dma_mem cmd;
+       u8 mac[ETH_ALEN];
+       bool enable;
+       int status;
 
        if (wol->wolopts & ~WAKE_MAGIC)
                return -EOPNOTSUPP;
                return -EOPNOTSUPP;
        }
 
-       if (wol->wolopts & WAKE_MAGIC)
-               adapter->wol_en = true;
-       else
-               adapter->wol_en = false;
+       cmd.size = sizeof(struct be_cmd_req_acpi_wol_magic_config);
+       cmd.va = dma_zalloc_coherent(dev, cmd.size, &cmd.dma, GFP_KERNEL);
+       if (!cmd.va)
+               return -ENOMEM;
 
-       return 0;
+       eth_zero_addr(mac);
+
+       enable = wol->wolopts & WAKE_MAGIC;
+       if (enable)
+               ether_addr_copy(mac, adapter->netdev->dev_addr);
+
+       status = be_cmd_enable_magic_wol(adapter, mac, &cmd);
+       if (status) {
+               dev_err(dev, "Could not set Wake-on-lan mac address\n");
+               status = be_cmd_status(status);
+               goto err;
+       }
+
+       pci_enable_wake(adapter->pdev, PCI_D3hot, enable);
+       pci_enable_wake(adapter->pdev, PCI_D3cold, enable);
+
+       adapter->wol_en = enable ? true : false;
+
+err:
+       dma_free_coherent(dev, cmd.size, cmd.va, cmd.dma);
+       return status;
 }
 
 static int be_test_ddr_dma(struct be_adapter *adapter)
 
        return -EIO;
 }
 
-static int be_setup_wol(struct be_adapter *adapter, bool enable)
-{
-       struct device *dev = &adapter->pdev->dev;
-       struct be_dma_mem cmd;
-       u8 mac[ETH_ALEN];
-       int status;
-
-       eth_zero_addr(mac);
-
-       cmd.size = sizeof(struct be_cmd_req_acpi_wol_magic_config);
-       cmd.va = dma_zalloc_coherent(dev, cmd.size, &cmd.dma, GFP_KERNEL);
-       if (!cmd.va)
-               return -ENOMEM;
-
-       if (enable) {
-               status = pci_write_config_dword(adapter->pdev,
-                                               PCICFG_PM_CONTROL_OFFSET,
-                                               PCICFG_PM_CONTROL_MASK);
-               if (status) {
-                       dev_err(dev, "Could not enable Wake-on-lan\n");
-                       goto err;
-               }
-       } else {
-               ether_addr_copy(mac, adapter->netdev->dev_addr);
-       }
-
-       status = be_cmd_enable_magic_wol(adapter, mac, &cmd);
-       pci_enable_wake(adapter->pdev, PCI_D3hot, enable);
-       pci_enable_wake(adapter->pdev, PCI_D3cold, enable);
-err:
-       dma_free_coherent(dev, cmd.size, cmd.va, cmd.dma);
-       return status;
-}
-
 static void be_vf_eth_addr_generate(struct be_adapter *adapter, u8 *mac)
 {
        u32 addr;
        }
 
        be_cmd_get_acpi_wol_cap(adapter);
+       pci_enable_wake(adapter->pdev, PCI_D3hot, adapter->wol_en);
+       pci_enable_wake(adapter->pdev, PCI_D3cold, adapter->wol_en);
 
        be_cmd_query_port_name(adapter);
 
 {
        struct be_adapter *adapter = pci_get_drvdata(pdev);
 
-       if (adapter->wol_en)
-               be_setup_wol(adapter, true);
-
        be_intr_set(adapter, false);
        be_cancel_err_detection(adapter);
 
 
        be_schedule_err_detection(adapter, ERR_DETECTION_DELAY);
 
-       if (adapter->wol_en)
-               be_setup_wol(adapter, false);
-
        return 0;
 }