netdev
[Top] [All Lists]

[PATCH] forcedeth: Initialize link settings in every nv_open()

To: Jeff Garzik <jgarzik@xxxxxxxxx>
Subject: [PATCH] forcedeth: Initialize link settings in every nv_open()
From: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx>
Date: Sat, 06 Aug 2005 23:47:55 +0200
Cc: Ayaz Abdulla <AAbdulla@xxxxxxxxxx>, Netdev <netdev@xxxxxxxxxxx>, cOzmIc.FI@xxxxxxx
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.7.10) Gecko/20050719 Fedora/1.7.10-1.5.1
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 <manfred@xxxxxxxxxxxxxxxx>

--- 2.6/drivers/net/forcedeth.c 2005-08-06 19:59:56.000000000 +0200
+++ build-2.6/drivers/net/forcedeth.c   2005-08-06 19:59:06.000000000 +0200
@@ -93,6 +93,8 @@
  *      0.40: 19 Jul 2005: Add support for mac address change.
  *      0.41: 30 Jul 2005: Write back original MAC in nv_close instead
  *                        of nv_remove
+ *      0.42: 06 Aug 2005: Fix lack of link speed initialization
+ *                        in the second (and later) nv_open call
  *
  * Known bugs:
  * We suspect that on some hardware no TX done interrupts are generated.
@@ -2178,6 +2180,9 @@
                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);
<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] forcedeth: Initialize link settings in every nv_open(), Manfred Spraul <=