de2104x: fix ethtool
Subsystems (2)
PATCH 1/1 de2104x: fix ethtool
When the interface is up, using ethtool breaks it because:
a) link is put down but media_timer interval is not shortened to NO_LINK
b) rxtx is stopped but not restarted
Also manual 10baseT-HD (and probably FD too - untested) mode does not work - the link is forced up, packets are transmitted but nothing is received. Changing CSR14 value to match documentation (not disabling link check) fixes this.
drivers/net/tulip/de2104x.c +5 -2
@@ -364,9 +364,9 @@ static u16 t21040_csr15[] = { 0, 0, 0x00/* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/ static u16 t21041_csr13[] = {0xEF01 ,0xEF09 ,0xEF09 ,0xEF01 ,0xEF09 , }; -static u16 t21041_csr14[] = {0xFFFF ,0xF7FD ,0xF7FD ,0x6F3F ,0x6F3D , }; +static u16 t21041_csr14[] = {0xFFFF ,0xF7FD ,0xF7FD ,0x7F3F ,0x7F3D , };/* If on-chip autonegotiation is broken, use half-duplex (FF3F) instead */ -static u16 t21041_csr14_brk[] = {0xFF3F ,0xF7FD ,0xF7FD ,0x6F3F ,0x6F3D , }; +static u16 t21041_csr14_brk[] = {0xFF3F ,0xF7FD ,0xF7FD ,0x7F3F ,0x7F3D , };static u16 t21041_csr15[] = {0x0008 ,0x0006 ,0x000E ,0x0008 ,0x0008 , };
@@ -1596,12 +1596,15 @@ static int __de_set_settings(struct de_preturn 0 ;/* nothing to change */ de_link_down (de); +mod_timer (&de->media_timer, jiffies +DE_TIMER_NO_LINK );de_stop_rxtx (de); de->media_type = new_media; de->media_lock = media_lock; de->media_advertise = ecmd->advertising;de_set_media (de); +if (netif_running (de->dev)) +de_start_rxtx (de);return 0 ; }
Signature · 1 line
Ondrej Zary
Quoted 9 lines · Ondrej Zary
When the interface is up, using ethtool breaks it because:
a) link is put down butmedia_timerinterval is not shortened toNO_LINK
b) rxtx is stopped but not restartedAlso manual 10baseT-HD (and probably FD too - untested) mode does not work - the link is forced up, packets are transmitted but nothing is received. Changing CSR14 value to match documentation (not disabling link check) fixes this.
Signed-off-by Ondrej Zary<[email protected]>
Good catch on the missing de_start_rxtx()
From: Jeff Garzik <[email protected]>
Date: Mon, 27 Sep 2010 18:05:58 -0400
Quoted 13 lines · Ondrej Zary
Quoted 12 lines
When the interface is up, using ethtool breaks it because:
a) link is put down butmedia_timerinterval is not shortened toNO_LINK
b) rxtx is stopped but not restartedAlso manual 10baseT-HD (and probably FD too - untested) mode does not work -
the link is forced up, packets are transmitted but nothing is received.
Changing CSR14 value to match documentation (not disabling link check) fixes this.
Quoted 5 lines
Quoted 1 line
Signed-off-by Ondrej Zary<[email protected]>Acked-by Jeff Garzik <[email protected]>Good catch on the missing
de_start_rxtx()
Applied, thanks everyone.