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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to