summaryrefslogtreecommitdiffstats
path: root/sys/dev/mii
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2011-05-12 14:16:07 +0000
committermarius <marius@FreeBSD.org>2011-05-12 14:16:07 +0000
commitc7f911d054f834b624d062972b1eebddaf9dcfe3 (patch)
tree76fd158c57c24a42951c7037288ad1bbe7776166 /sys/dev/mii
parent2572f17fb8305451a825536bcff63a8fccbd477c (diff)
downloadFreeBSD-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.c15
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
OpenPOWER on IntegriCloud