Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Mar 2009 03:36:08 +0000 (UTC)
From:      Pyun YongHyeon <yongari@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r189954 - in stable/7/sys: . contrib/pf dev/ath/ath_hal dev/cxgb dev/mii
Message-ID:  <200903180336.n2I3a80G014550@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: yongari
Date: Wed Mar 18 03:36:08 2009
New Revision: 189954
URL: http://svn.freebsd.org/changeset/base/189954

Log:
  MFC r189567:
    For IP1001 PHYs, read auto-negotiation advertisement register to
    get default next page configuration. While I'm here explicitly set
    IP1000PHY_ANAR_CSMA bit. This bit is read-only and always set
    by hardware so setting it has no effect but it would clear the
    intention. With this change controllers that couldn't establish
    1000baseT link should work.
  
    PR:	kern/130846

Modified:
  stable/7/sys/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)
  stable/7/sys/dev/ath/ath_hal/   (props changed)
  stable/7/sys/dev/cxgb/   (props changed)
  stable/7/sys/dev/mii/ip1000phy.c
  stable/7/sys/dev/mii/ip1000phyreg.h

Modified: stable/7/sys/dev/mii/ip1000phy.c
==============================================================================
--- stable/7/sys/dev/mii/ip1000phy.c	Wed Mar 18 03:33:45 2009	(r189953)
+++ stable/7/sys/dev/mii/ip1000phy.c	Wed Mar 18 03:36:08 2009	(r189954)
@@ -391,18 +391,24 @@ ip1000phy_status(struct mii_softc *sc)
 }
 
 static int
-ip1000phy_mii_phy_auto(struct mii_softc *mii)
+ip1000phy_mii_phy_auto(struct mii_softc *sc)
 {
+	struct ip1000phy_softc *isc;
 	uint32_t reg;
 
-	PHY_WRITE(mii, IP1000PHY_MII_ANAR,
-	    IP1000PHY_ANAR_10T | IP1000PHY_ANAR_10T_FDX |
+	isc = (struct ip1000phy_softc *)sc;
+	reg = 0;
+	if (isc->model == MII_MODEL_ICPLUS_IP1001)
+		reg = PHY_READ(sc, IP1000PHY_MII_ANAR);
+	reg |= IP1000PHY_ANAR_10T | IP1000PHY_ANAR_10T_FDX |
 	    IP1000PHY_ANAR_100TX | IP1000PHY_ANAR_100TX_FDX |
-	    IP1000PHY_ANAR_PAUSE | IP1000PHY_ANAR_APAUSE);
+	    IP1000PHY_ANAR_PAUSE | IP1000PHY_ANAR_APAUSE;
+	PHY_WRITE(sc, IP1000PHY_MII_ANAR, reg | IP1000PHY_ANAR_CSMA);
+
 	reg = IP1000PHY_1000CR_1000T | IP1000PHY_1000CR_1000T_FDX;
 	reg |= IP1000PHY_1000CR_MASTER;
-	PHY_WRITE(mii, IP1000PHY_MII_1000CR, reg);
-	PHY_WRITE(mii, IP1000PHY_MII_BMCR, (IP1000PHY_BMCR_FDX |
+	PHY_WRITE(sc, IP1000PHY_MII_1000CR, reg);
+	PHY_WRITE(sc, IP1000PHY_MII_BMCR, (IP1000PHY_BMCR_FDX |
 	    IP1000PHY_BMCR_AUTOEN | IP1000PHY_BMCR_STARTNEG));
 
 	return (EJUSTRETURN);

Modified: stable/7/sys/dev/mii/ip1000phyreg.h
==============================================================================
--- stable/7/sys/dev/mii/ip1000phyreg.h	Wed Mar 18 03:33:45 2009	(r189953)
+++ stable/7/sys/dev/mii/ip1000phyreg.h	Wed Mar 18 03:36:08 2009	(r189954)
@@ -61,6 +61,7 @@
 
 /* Autonegotiation advertisement register */
 #define	IP1000PHY_MII_ANAR		0x04
+#define	IP1000PHY_ANAR_CSMA		0x0001
 #define	IP1000PHY_ANAR_10T		0x0020
 #define	IP1000PHY_ANAR_10T_FDX		0x0040
 #define	IP1000PHY_ANAR_100TX		0x0080



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