forcedeth: Initialize link settings in every nv_open()
Subsystems (2)
PATCH 1/1 forcedeth: Initialize link settings in every nv_open()
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 <[email protected]>
drivers/net/forcedeth.c +5 -0
@@ -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);