Small change to ukphy
Pyun YongHyeon
pyunyh at gmail.com
Wed Apr 1 17:53:33 PDT 2009
On Wed, Apr 01, 2009 at 09:37:40AM -0600, M. Warner Losh wrote:
> In message: <20090401100939.GB12246 at michelle.cdnetworks.co.kr>
> Pyun YongHyeon <pyunyh at gmail.com> writes:
> : On Wed, Apr 01, 2009 at 01:32:46AM -0600, M. Warner Losh wrote:
> : > I've encountered a number of PHY chips that need auto negotiation
> : > kicked off to come out of ISO state. This makes sense, because the
> : > ukphy driver never seems to take the PHY out of isolation state
> : > otherwise.
> : >
> : > Index: ukphy.c
> : > ===================================================================
> : > --- ukphy.c (revision 190463)
> : > +++ ukphy.c (working copy)
> : > @@ -146,6 +146,7 @@
> : > sc->mii_phy = ma->mii_phyno;
> : > sc->mii_service = ukphy_service;
> : > sc->mii_pdata = mii;
> : > + sc->mii_flags |= MIIF_FORCEANEG;
> : >
> : > mii->mii_instance++;
> : >
> : >
> : > This forces auto negotiation. The reason for this is that it takes it
> : > out of ISO state (Isolate). Once out of that state, things work
> :
> : If the purpose is to take PHY out of isolated state couldn't this
> : be handled in ifm_change_cb_t handler of parent interface? I guess
> : the callback can reset the PHY and subsequent mii_mediachg() call
> : may start auto-negotiation.
>
> This callback isn't called. The problem is that the PHY is in ISO
Oops, you're right.
> state. Since it is in ISO state with auto negotiation enabled, we
> never kick off an explicit auto negotiation, so the state never
> changes so we never get this callback...
>
> : > well. The question I have is will we properly go back into ISO state
> : > for PHYs that should be isolated.
> : >
> :
> : If the PHY requires special handing for ISO state in reset it may
> : need separated PHY driver as ukphy(4) does not set MIIF_NOISOLATE.
> : As you said it would be really great if we have a generic way to
> : pass various MII flags or driver specific information to mii(4).
>
> This seems to be a common quirk. I'd hate to have a driver that's
> just ukphy but with the one line added above and play what-a-mole with
> all the odd-balls that are out there. Doesn't seem like a strategy
> that will win the day.
>
> I think we have a way to do this... I could do the following in my
> attach routine:
>
> mii = device_get_softc(sc->miibus);
> LIST_FOREACH(miisc, &mii->mii_phys, mii_list) {
> miisc->mii_flags |= MIIF_FORCEANEG;
> mii_phy_reset(miisc);
> }
> mii_mediachg(mii);
>
> which is similar to what fxp does in its change routine (it is what I
> put in my status change routine). Also MIIF_NOISOLATE works as well.
>
> Is the above too insane?
>
That looks ok to me but marius's patch would be the right
direction.
More information about the freebsd-net
mailing list