From 2498037d5a6668b733acc712a3106ffd4e1ef735 Mon Sep 17 00:00:00 2001 From: Manfred Spraul Date: Sun, 11 Sep 2005 21:33:28 +0100 Subject: [PATCH] [PATCH] forcedeth: Initialize link settings in every nv_open() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit R�diger found a bug in nv_open that explains some of the reports with duplex mismatches: nv_open calls nv_update_link_speed for initializing the hardware link speed registers. If current link setting matches the values in np->linkspeed and np->duplex, then the function does nothing. Usually, doing nothing is the right thing, but not in nv_open: During nv_open, the registers must be initialized because the nic was reset. The attached patch fixes that by setting np->linkspeed to an invalid value before calling nv_update_link_speed from nv_open. Signed-Off-By: Manfred Spraul Signed-off-by: Jeff Garzik Signed-off-by: Chris Wright --- drivers/net/forcedeth.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 64f0f697c958..96ee37bb9399 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c @@ -1888,6 +1888,9 @@ static int nv_open(struct net_device *dev) writel(NVREG_MIISTAT_MASK, base + NvRegMIIStatus); dprintk(KERN_INFO "startup: got 0x%08x.\n", miistat); } + /* set linkspeed to invalid value, thus force nv_update_linkspeed + * to init hw */ + np->linkspeed = 0; ret = nv_update_linkspeed(dev); nv_start_rx(dev); nv_start_tx(dev); -- 2.39.5