|
@@ -6317,6 +6317,33 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
+ /* Ensure that the appropriate bits are set in LPI_CTRL
|
|
|
+ * for EEE in Sx
|
|
|
+ */
|
|
|
+ if ((hw->phy.type >= e1000_phy_i217) &&
|
|
|
+ adapter->eee_advert && hw->dev_spec.ich8lan.eee_lp_ability) {
|
|
|
+ u16 lpi_ctrl = 0;
|
|
|
+
|
|
|
+ retval = hw->phy.ops.acquire(hw);
|
|
|
+ if (!retval) {
|
|
|
+ retval = e1e_rphy_locked(hw, I82579_LPI_CTRL,
|
|
|
+ &lpi_ctrl);
|
|
|
+ if (!retval) {
|
|
|
+ if (adapter->eee_advert &
|
|
|
+ hw->dev_spec.ich8lan.eee_lp_ability &
|
|
|
+ I82579_EEE_100_SUPPORTED)
|
|
|
+ lpi_ctrl |= I82579_LPI_CTRL_100_ENABLE;
|
|
|
+ if (adapter->eee_advert &
|
|
|
+ hw->dev_spec.ich8lan.eee_lp_ability &
|
|
|
+ I82579_EEE_1000_SUPPORTED)
|
|
|
+ lpi_ctrl |= I82579_LPI_CTRL_1000_ENABLE;
|
|
|
+
|
|
|
+ retval = e1e_wphy_locked(hw, I82579_LPI_CTRL,
|
|
|
+ lpi_ctrl);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ hw->phy.ops.release(hw);
|
|
|
+ }
|
|
|
|
|
|
/* Release control of h/w to f/w. If f/w is AMT enabled, this
|
|
|
* would have already happened in close and is redundant.
|