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