Subject: Re: Ethernet, MII & PHY, round two
To: Erik E. Fair <fair@clock.org>
From: Chuck Silvers <chuq@chuq.com>
List: tech-net
Date: 10/27/2002 09:03:43
how about just selecting the first matching PHY instead of the last
when there are multiple matches?  that would more closely match the
previous behaviour.  preventing the interface from selecting certain
media just because it isn't available at that moment doesn't seem
so great, I've done testing where I have various interfaces ready to go
and move cables around while things are running, which would be a more
cumbersome process if I couldn't set all the parameters ahead of time.

(for the peanut gallery, I also have a box with the problem described below.)

-Chuck


On Sat, Oct 26, 2002 at 09:55:40AM -0700, Erik E. Fair wrote:
> I've been in correspondence with a NetBSD user of -current whose
> setup stopped working when I committed the change to the Ethernet
> drivers so that PHYs other than instance zero could be selected. His
> set up probes as follows:
> 
> fxp0 at pci0 dev 15 function 0: Intel i82557 Ethernet, rev 2
> fxp0: interrupting at apic 2 int 19 (irq 11)
> fxp0: Ethernet address 00:a0:c9:6e:b7:0f
> icsphy0 at fxp0 phy 1: ICS1890 10/100 media interface, rev. 3
> icsphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
> ukphy0 at fxp0 phy 2: Generic IEEE 802.3u media interface
> ukphy0: OUI 0xc0b703, model 0x0008, rev. 3
> ukphy0: 10baseT, 100baseTX, 100baseTX-FDX, auto
> 
> Note, as previously mentioned: no instance numbers are reported by
> the autoconfig output - just PHY numbers. In this case, PHY 1 is
> instance zero, and PHY 2 is instance one.
> 
> The change that I made to the drivers changed which PHY was selected
> by default by the kernel because all it asks for is "whichever PHY
> can do auto select" and in this case, both of them have that
> attribute, so the last one found was selected. It's my guess that
> only the first of them is actually wired up to an RJ-45 (the ICS
> PHY); end result: Ethernet doesn't work any more, because the wrong
> PHY was selected by the kernel, and the user didn't override with
> ifconfig(8).
> 
> I suggested adding "instance 0" after the "media" statement in his
> "ifconfig" line in /etc/rc.conf (or /etc/ifconfig.fxp0), but there
> is another fix we could make: allow twisted-pair PHYs to refuse to
> be selected when "link" is not present; I believe if I'm reading
> the code right that there is a testable bit for it. I haven't checked
> to see if the media change code is allowed to return errors, though.
> 
> 	comments?
> 
> 	Erik <fair@clock.org>