Date: Thu, 2 Apr 2009 09:53:08 +0900 From: Pyun YongHyeon <pyunyh@gmail.com> To: "M. Warner Losh" <imp@bsdimp.com> Cc: net@freebsd.org Subject: Re: Small change to ukphy Message-ID: <20090402005308.GA19091@michelle.cdnetworks.co.kr> In-Reply-To: <20090401.093740.669301742.imp@bsdimp.com> References: <20090401.013246.-1253043078.imp@bsdimp.com> <20090401100939.GB12246@michelle.cdnetworks.co.kr> <20090401.093740.669301742.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Apr 01, 2009 at 09:37:40AM -0600, M. Warner Losh wrote: > In message: <20090401100939.GB12246@michelle.cdnetworks.co.kr> > Pyun YongHyeon <pyunyh@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.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090402005308.GA19091>