Subject: kern/35386: wm NICs don't do speed negotiation well
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <smb@cs.columbia.edu>
List: netbsd-bugs
Date: 01/09/2007 04:20:00
>Number: 35386
>Category: kern
>Synopsis: wm NICs don't do speed negotiation well
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Jan 09 04:20:00 +0000 2007
>Originator: Steven M. Bellovin
>Release: NetBSD 4.99.7
>Organization:
>Environment:
System: NetBSD bigboy.machshav.com 4.99.7 NetBSD 4.99.7 (BIGBOY) #0: Mon Dec 25 20:58:26 EST 2006 smb@bigboy.machshav.com:/usr/BUILD/obj/sys/arch/i386/compile/BIGBOY i386
Architecture: i386
Machine: i386
>Description:
There are numerous problems with speed negotiation on multiple
wm chips. The problems go back at least two years, and seem
to affect multiple versions of NetBSD, including very recent
-current.
On this NIC (Thinkpad T42):
wm0 at pci2 dev 1 function 0: Intel i82540EP 1000BASE-T Ethernet, rev. 3
wm0: interrupting at irq 11
wm0: 32-bit 33MHz PCI bus
wm0: 64 word (6 address bits) MicroWire EEPROM
wm0: Ethernet address 00:11:25:43:e8:a4
makphy0 at wm0 phy 1: Marvell 88E1011 Gigabit PHY, rev. 4
makphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
it will properly autonegotiate 100baseT and 1000baseT. If
connected to 10baseT, it will notice it (and ifconfig will show
it), but it won't talk unless the speed is set manually. Once
that's done, it never goes back to a higher speed, even though
ifconfig will report that that has happened. The 10baseT problem
goes back to at least Dec. 2004, when I got the machine.
This was reported in kern/30078 (which can now be closed in
favor of this PR).
On these two NICs:
wm0 at pci4 dev 0 function 0: Intel i82573E IAMT, rev. 3
wm0: interrupting at ioapic0 pin 16, event channel 4
wm0: PCI-Express bus
wm0: 256 word (8 address bits) SPI EEPROM
wm0: Ethernet address 00:30:48:8a:d8:76
makphy0 at wm0 phy 1: Marvell 88E1111 Gigabit PHY, rev. 2
makphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
makphy1 at wm1 phy 1: Marvell 88E1111 Gigabit PHY, rev. 2
makphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
it will auto-negotiate GigE but not 100baseT. Again, it will
detect the latter, but not be able to talk. That can be bypassed
by setting the media type manually. I do not know if it will
then autonegotiate, and I haven't tried it on 10baseT. I can do
either if necessary. Note that someone else reported
10baseT problems in the 82573E chip in
http://mail-index.netbsd.org/tech-net/2006/11/02/0002.html
I tried disabling makphy at boot time; it fell back to ukphy, but
that made no difference in behavior.
There's a report that fiber autonegotiation in that driver is
broken, too: http://mail-index.netbsd.org/tech-kern/2006/12/11/0002.html
>How-To-Repeat:
See above
>Fix:
Sometimes, per the above, manual ifconfigs work; other times,
they do not.
>Unformatted: