|
@@ -4877,6 +4877,9 @@ static void ixgbe_up_complete(struct ixgbe_adapter *adapter)
|
|
|
if (hw->mac.ops.enable_tx_laser)
|
|
|
hw->mac.ops.enable_tx_laser(hw);
|
|
|
|
|
|
+ if (hw->phy.ops.set_phy_power)
|
|
|
+ hw->phy.ops.set_phy_power(hw, true);
|
|
|
+
|
|
|
smp_mb__before_atomic();
|
|
|
clear_bit(__IXGBE_DOWN, &adapter->state);
|
|
|
ixgbe_napi_enable_all(adapter);
|
|
@@ -4996,6 +4999,13 @@ void ixgbe_reset(struct ixgbe_adapter *adapter)
|
|
|
|
|
|
if (test_bit(__IXGBE_PTP_RUNNING, &adapter->state))
|
|
|
ixgbe_ptp_reset(adapter);
|
|
|
+
|
|
|
+ if (hw->phy.ops.set_phy_power) {
|
|
|
+ if (!netif_running(adapter->netdev) && !adapter->wol)
|
|
|
+ hw->phy.ops.set_phy_power(hw, false);
|
|
|
+ else
|
|
|
+ hw->phy.ops.set_phy_power(hw, true);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -5676,6 +5686,7 @@ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
|
|
|
static int ixgbe_open(struct net_device *netdev)
|
|
|
{
|
|
|
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
|
+ struct ixgbe_hw *hw = &adapter->hw;
|
|
|
int err, queues;
|
|
|
|
|
|
/* disallow open during test */
|
|
@@ -5733,6 +5744,8 @@ err_set_queues:
|
|
|
ixgbe_free_irq(adapter);
|
|
|
err_req_irq:
|
|
|
ixgbe_free_all_rx_resources(adapter);
|
|
|
+ if (hw->phy.ops.set_phy_power && !adapter->wol)
|
|
|
+ hw->phy.ops.set_phy_power(&adapter->hw, false);
|
|
|
err_setup_rx:
|
|
|
ixgbe_free_all_tx_resources(adapter);
|
|
|
err_setup_tx:
|
|
@@ -5893,6 +5906,8 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
|
|
|
}
|
|
|
|
|
|
*enable_wake = !!wufc;
|
|
|
+ if (hw->phy.ops.set_phy_power && !*enable_wake)
|
|
|
+ hw->phy.ops.set_phy_power(hw, false);
|
|
|
|
|
|
ixgbe_release_hw_control(adapter);
|
|
|
|