Commit 5a9a8e32 authored by Ed Swierk's avatar Ed Swierk Committed by David S. Miller
Browse files

forcedeth: add phy_power_down parameter, leave phy powered up by default (v2)

Add a phy_power_down parameter to forcedeth: set to 1 to power down the
phy and disable the link when an interface goes down; set to 0 to always
leave the phy powered up.

The phy power state persists across reboots; Windows, some BIOSes, and
older versions of Linux don't bother to power up the phy again, forcing
users to remove all power to get the interface working (see

).  Leaving the phy
powered on is the safest default behavior.  Users accustomed to seeing
the link state reflect the interface state and/or wanting to minimize
power consumption can set phy_power_down=1 if compatibility with other
OSes is not an issue.
Signed-off-by: default avatarEd Swierk <>
Signed-off-by: default avatarDavid S. Miller <>
parent fc23ffe0
......@@ -897,6 +897,12 @@ enum {
* Power down phy when interface is down (persists through reboot;
* older Linux and other OSes may not power it up again)
static int phy_power_down = 0;
static inline struct fe_priv *get_nvpriv(struct net_device *dev)
return netdev_priv(dev);
......@@ -1485,7 +1491,10 @@ static int phy_init(struct net_device *dev)
/* restart auto negotiation, power down phy */
mii_control = mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ);
if (phy_power_down) {
mii_control |= BMCR_PDOWN;
if (mii_rw(dev, np->phyaddr, MII_BMCR, mii_control)) {
return PHY_ERROR;
......@@ -5513,7 +5522,7 @@ static int nv_close(struct net_device *dev)
if (np->wolenabled) {
if (np->wolenabled || !phy_power_down) {
writel(NVREG_PFF_ALWAYS|NVREG_PFF_MYADDR, base + NvRegPacketFilterFlags);
} else {
......@@ -6367,6 +6376,8 @@ module_param(dma_64bit, int, 0);
MODULE_PARM_DESC(dma_64bit, "High DMA is enabled by setting to 1 and disabled by setting to 0.");
module_param(phy_cross, int, 0);
MODULE_PARM_DESC(phy_cross, "Phy crossover detection for Realtek 8201 phy is enabled by setting to 1 and disabled by setting to 0.");
module_param(phy_power_down, int, 0);
MODULE_PARM_DESC(phy_power_down, "Power down phy and disable link when interface is down (1), or leave phy powered up (0).");
MODULE_AUTHOR("Manfred Spraul <>");
MODULE_DESCRIPTION("Reverse Engineered nForce ethernet driver");
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment