diff options
author | marius <marius@FreeBSD.org> | 2011-05-12 14:16:07 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2011-05-12 14:16:07 +0000 |
commit | c7f911d054f834b624d062972b1eebddaf9dcfe3 (patch) | |
tree | 76fd158c57c24a42951c7037288ad1bbe7776166 /sys/dev/mii | |
parent | 2572f17fb8305451a825536bcff63a8fccbd477c (diff) | |
download | FreeBSD-src-c7f911d054f834b624d062972b1eebddaf9dcfe3.zip FreeBSD-src-c7f911d054f834b624d062972b1eebddaf9dcfe3.tar.gz |
Some PHYs like the Level One LXT970 optionally can default to isolation
after rest, in which case we may need to deisolate it.
Tested by: nwhitehorn
MFC after 1 week
Diffstat (limited to 'sys/dev/mii')
-rw-r--r-- | sys/dev/mii/mii_physubr.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/sys/dev/mii/mii_physubr.c b/sys/dev/mii/mii_physubr.c index b3013ba..be66505 100644 --- a/sys/dev/mii/mii_physubr.c +++ b/sys/dev/mii/mii_physubr.c @@ -257,7 +257,7 @@ void mii_phy_reset(struct mii_softc *sc) { struct ifmedia_entry *ife = sc->mii_pdata->mii_media.ifm_cur; - int reg, i; + int i, reg; if ((sc->mii_flags & MIIF_NOISOLATE) != 0) reg = BMCR_RESET; @@ -273,11 +273,14 @@ mii_phy_reset(struct mii_softc *sc) DELAY(1000); } - if ((sc->mii_flags & MIIF_NOISOLATE) == 0) { - if ((ife == NULL && sc->mii_inst != 0) || - (ife != NULL && IFM_INST(ife->ifm_media) != sc->mii_inst)) - PHY_WRITE(sc, MII_BMCR, reg | BMCR_ISO); - } + /* NB: a PHY may default to isolation. */ + reg &= ~BMCR_ISO; + if ((sc->mii_flags & MIIF_NOISOLATE) == 0 && + ((ife == NULL && sc->mii_inst != 0) || + (ife != NULL && IFM_INST(ife->ifm_media) != sc->mii_inst))) + reg |= BMCR_ISO; + if (PHY_READ(sc, MII_BMCR) != reg) + PHY_WRITE(sc, MII_BMCR, reg); } void |