All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] forcedeth: power down phy when interface is down
@ 2007-09-18 16:58 Ed Swierk
  2007-09-20  2:17 ` Ayaz Abdulla
  0 siblings, 1 reply; 3+ messages in thread
From: Ed Swierk @ 2007-09-18 16:58 UTC (permalink / raw)
  To: netdev; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 213 bytes --]

Bring the physical link down when the interface is down, by placing
the PHY in power-down state. This mirrors the behavior of other
drivers including e1000 and tg3.

Signed-off-by: Ed Swierk <eswierk@arastra.com>

[-- Attachment #2: forcedeth-phy-power-down.patch --]
[-- Type: application/octet-stream, Size: 1556 bytes --]

Bring the physical link down when the interface is down, by placing the PHY
in power-down state.  This mirrors the behavior of other drivers including
e1000 and tg3.

Signed-off-by: Ed Swierk <eswierk@arastra.com>

Index: linux-2.6.22.6/drivers/net/forcedeth.c
===================================================================
--- linux-2.6.22.6.orig/drivers/net/forcedeth.c
+++ linux-2.6.22.6/drivers/net/forcedeth.c
@@ -1307,9 +1307,9 @@ static int phy_init(struct net_device *d
 	/* some phys clear out pause advertisment on reset, set it back */
 	mii_rw(dev, np->phyaddr, MII_ADVERTISE, reg);
 
-	/* restart auto negotiation */
+	/* restart auto negotiation, power down phy */
 	mii_control = mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ);
-	mii_control |= (BMCR_ANRESTART | BMCR_ANENABLE);
+	mii_control |= (BMCR_ANRESTART | BMCR_ANENABLE | BMCR_PDOWN);
 	if (mii_rw(dev, np->phyaddr, MII_BMCR, mii_control)) {
 		return PHY_ERROR;
 	}
@@ -4792,6 +4792,10 @@ static int nv_open(struct net_device *de
 
 	dprintk(KERN_DEBUG "nv_open: begin\n");
 
+	/* power up phy */
+	mii_rw(dev, np->phyaddr, MII_BMCR,
+	       mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ) & ~BMCR_PDOWN);
+
 	/* erase previous misconfiguration */
 	if (np->driver_data & DEV_HAS_POWER_CNTRL)
 		nv_mac_reset(dev);
@@ -4972,6 +4976,10 @@ static int nv_close(struct net_device *d
 		nv_start_rx(dev);
 	}
 
+	/* power down phy */
+	mii_rw(dev, np->phyaddr, MII_BMCR,
+	       mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ) | BMCR_PDOWN);
+
 	/* FIXME: power down nic */
 
 	return 0;

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] forcedeth: power down phy when interface is down
  2007-09-18 16:58 [PATCH] forcedeth: power down phy when interface is down Ed Swierk
@ 2007-09-20  2:17 ` Ayaz Abdulla
  2007-09-21 18:12   ` [updated PATCH] " Ed Swierk
  0 siblings, 1 reply; 3+ messages in thread
From: Ayaz Abdulla @ 2007-09-20  2:17 UTC (permalink / raw)
  To: Ed Swierk; +Cc: netdev

It seems that you are powering down the phy even if WOL is enabled.

Secondly, can you powerdown the phy at the same time you start 
performing autoneg restart?


Ed Swierk wrote:
> Bring the physical link down when the interface is down, by placing
> the PHY in power-down state. This mirrors the behavior of other
> drivers including e1000 and tg3.
> 
> Signed-off-by: Ed Swierk <eswierk@arastra.com>
> 

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information.  Any unauthorized review, use, disclosure or distribution
is prohibited.  If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [updated PATCH] forcedeth: power down phy when interface is down
  2007-09-20  2:17 ` Ayaz Abdulla
@ 2007-09-21 18:12   ` Ed Swierk
  0 siblings, 0 replies; 3+ messages in thread
From: Ed Swierk @ 2007-09-21 18:12 UTC (permalink / raw)
  To: Ayaz Abdulla, netdev; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 408 bytes --]

On 9/19/07, Ayaz Abdulla <aabdulla@nvidia.com> wrote:
> It seems that you are powering down the phy even if WOL is enabled.

Right; I've updated the patch to skip powering down the phy when wol is enabled.

> Secondly, can you powerdown the phy at the same time you start
> performing autoneg restart?

This seems to work fine with a BCM5461S phy; it would be worth testing
with other phys to be sure.

--Ed

[-- Attachment #2: forcedeth-phy-power-down.patch --]
[-- Type: application/octet-stream, Size: 2264 bytes --]

Bring the physical link down when the interface is down by placing the PHY
in power-down state, unless WOL is enabled.  This mirrors the behavior of
other drivers including e1000 and tg3.

Signed-off-by: Ed Swierk <eswierk@arastra.com>

Index: linux-2.6.22.1/drivers/net/forcedeth.c
===================================================================
--- linux-2.6.22.1.orig/drivers/net/forcedeth.c
+++ linux-2.6.22.1/drivers/net/forcedeth.c
@@ -112,6 +112,7 @@
  *	0.58: 30 Oct 2006: Added support for sideband management unit.
  *	0.59: 30 Oct 2006: Added support for recoverable error.
  *	0.60: 20 Jan 2007: Code optimizations for rings, rx & tx data paths, and stats.
+ *	0.61: 21 Sep 2007: Power down phy when interface down and wol disabled.
  *
  * Known bugs:
  * We suspect that on some hardware no TX done interrupts are generated.
@@ -128,7 +129,7 @@
 #else
 #define DRIVERNAPI
 #endif
-#define FORCEDETH_VERSION		"0.60"
+#define FORCEDETH_VERSION		"0.61"
 #define DRV_NAME			"forcedeth"
 
 #include <linux/module.h>
@@ -1170,9 +1171,9 @@ static int phy_init(struct net_device *d
 	/* some phys clear out pause advertisment on reset, set it back */
 	mii_rw(dev, np->phyaddr, MII_ADVERTISE, reg);
 
-	/* restart auto negotiation */
+	/* restart auto negotiation, power down phy */
 	mii_control = mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ);
-	mii_control |= (BMCR_ANRESTART | BMCR_ANENABLE);
+	mii_control |= (BMCR_ANRESTART | BMCR_ANENABLE | BMCR_PDOWN);
 	if (mii_rw(dev, np->phyaddr, MII_BMCR, mii_control)) {
 		return PHY_ERROR;
 	}
@@ -4694,6 +4695,10 @@ static int nv_open(struct net_device *de
 
 	dprintk(KERN_DEBUG "nv_open: begin\n");
 
+	/* power up phy */
+	mii_rw(dev, np->phyaddr, MII_BMCR,
+	       mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ) & ~BMCR_PDOWN);
+
 	/* erase previous misconfiguration */
 	if (np->driver_data & DEV_HAS_POWER_CNTRL)
 		nv_mac_reset(dev);
@@ -4872,6 +4877,10 @@ static int nv_close(struct net_device *d
 	if (np->wolenabled) {
 		writel(NVREG_PFF_ALWAYS|NVREG_PFF_MYADDR, base + NvRegPacketFilterFlags);
 		nv_start_rx(dev);
+	} else {
+		/* power down phy */
+		mii_rw(dev, np->phyaddr, MII_BMCR,
+		       mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ) | BMCR_PDOWN);
 	}
 
 	/* FIXME: power down nic */

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-09-21 18:13 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-18 16:58 [PATCH] forcedeth: power down phy when interface is down Ed Swierk
2007-09-20  2:17 ` Ayaz Abdulla
2007-09-21 18:12   ` [updated PATCH] " Ed Swierk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.