(2013/06/06 15:48), Masanobu SAITOH wrote: > > Hi, all. > > Without following patch. Some drivers which don't use link > interrput check the link status only every sc->mii_anegticks. > It's late. The patch is a part of FreeBSD's mii_physubr.c r158649: > > > http://svnweb.freebsd.org/base/head/sys/dev/mii/mii_physubr.c?r1=150756&r2=158649 > > Any objection to commit? > > Index: mii_physubr.c > =================================================================== > RCS file: /cvsroot/src/sys/dev/mii/mii_physubr.c,v > retrieving revision 1.76 > diff -u -r1.76 mii_physubr.c > --- mii_physubr.c 6 Jun 2013 03:10:48 -0000 1.76 > +++ mii_physubr.c 6 Jun 2013 06:07:47 -0000 > @@ -324,23 +324,43 @@ > /* > * If we're not doing autonegotiation, we don't need to do > * any extra work here. However, we need to check the link > - * status so we can generate an announcement if the status > - * changes. > + * status so we can generate an announcement by returning > + * with 0 if the status changes. > */ > if ((IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO) && > - (IFM_SUBTYPE(ife->ifm_media) != IFM_1000_T)) > + (IFM_SUBTYPE(ife->ifm_media) != IFM_1000_T)) { > + /* > + * Reset autonegotiation timer to 0 to make sure > + * the future autonegotiation start with 0. > + */ > + sc->mii_tick = 0; > return (0); > + } > > /* Read the status register twice; BMSR_LINK is latch-low. */ > reg = PHY_READ(sc, MII_BMSR) | PHY_READ(sc, MII_BMSR); > if (reg & BMSR_LINK) { > /* > - * See above. > + * Reset autonegotiation timer to 0 in case the link is down > + * in the next tick. > */ > + sc->mii_tick = 0; > + /* See above. */ > return (0); > } > > /* > + * mii_tick == 0 means it's the first tick after changing the media or > + * the link became down since the last tick (see above), so return with > + * 0 to update the status. > + */ > + if (sc->mii_ticks == 0) > + return (0); > + > + /* Now increment the tick */ > + sc->mii_ticks++; > + > + /* > * Only retry autonegotiation every N seconds. > */ > KASSERT(sc->mii_anegticks != 0);
Done. Some MII PHY drivers have the same problem and have been fixed now. -- ----------------------------------------------- SAITOH Masanobu (msai...@execsw.org msai...@netbsd.org)