Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 May 2011 14:16:07 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r221812 - head/sys/dev/mii
Message-ID:  <201105121416.p4CEG73V040260@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Thu May 12 14:16:07 2011
New Revision: 221812
URL: http://svn.freebsd.org/changeset/base/221812

Log:
  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

Modified:
  head/sys/dev/mii/mii_physubr.c

Modified: head/sys/dev/mii/mii_physubr.c
==============================================================================
--- head/sys/dev/mii/mii_physubr.c	Thu May 12 14:03:29 2011	(r221811)
+++ head/sys/dev/mii/mii_physubr.c	Thu May 12 14:16:07 2011	(r221812)
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105121416.p4CEG73V040260>