diff options
author | wpaul <wpaul@FreeBSD.org> | 2001-09-18 00:31:19 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 2001-09-18 00:31:19 +0000 |
commit | 2748b592895299d92eeef3189052b05c8d52e41c (patch) | |
tree | bcb25d040dbc704ddfd76ecb4c98925f43d8644b /sys | |
parent | 063f15de1d397c44fc81e5fa3e63eb49ed305bb5 (diff) | |
download | FreeBSD-src-2748b592895299d92eeef3189052b05c8d52e41c.zip FreeBSD-src-2748b592895299d92eeef3189052b05c8d52e41c.tar.gz |
Tweak the autoneg kickoff code to that it more closely resembles the
method uses in the nsgphy driver.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/mii/brgphy.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/sys/dev/mii/brgphy.c b/sys/dev/mii/brgphy.c index 8a7909c..1c0d97e 100644 --- a/sys/dev/mii/brgphy.c +++ b/sys/dev/mii/brgphy.c @@ -280,6 +280,11 @@ setit: BRGPHY_1000CTL_MSE); } break; +#ifdef foo + case IFM_NONE: + PHY_WRITE(sc, MII_BMCR, BMCR_ISO|BMCR_PDOWN); + break; +#endif case IFM_100_T4: default: return (EINVAL); @@ -407,12 +412,20 @@ brgphy_mii_phy_auto(mii, waitfor) struct mii_softc *mii; int waitfor; { - int bmsr, i; + int bmsr, ktcr = 0, i; if ((mii->mii_flags & MIIF_DOINGAUTO) == 0) { - PHY_WRITE(mii, BRGPHY_MII_1000CTL, + mii_phy_reset(mii); + PHY_WRITE(mii, BRGPHY_MII_BMCR, 0); + DELAY(1000); + ktcr = PHY_READ(mii, BRGPHY_MII_1000CTL); + PHY_WRITE(mii, BRGPHY_MII_1000CTL, ktcr | BRGPHY_1000CTL_AFD|BRGPHY_1000CTL_AHD); - PHY_WRITE(mii, BRGPHY_MII_ANAR, BRGPHY_SEL_TYPE); + ktcr = PHY_READ(mii, BRGPHY_MII_1000CTL); + DELAY(1000); + PHY_WRITE(mii, BRGPHY_MII_ANAR, + BMSR_MEDIA_TO_ANAR(mii->mii_capabilities) | ANAR_CSMA); + DELAY(1000); PHY_WRITE(mii, BRGPHY_MII_BMCR, BRGPHY_BMCR_AUTOEN | BRGPHY_BMCR_STARTNEG); PHY_WRITE(mii, BRGPHY_MII_IMR, 0xFF00); |