summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>2001-09-18 00:31:19 +0000
committerwpaul <wpaul@FreeBSD.org>2001-09-18 00:31:19 +0000
commit2748b592895299d92eeef3189052b05c8d52e41c (patch)
treebcb25d040dbc704ddfd76ecb4c98925f43d8644b /sys
parent063f15de1d397c44fc81e5fa3e63eb49ed305bb5 (diff)
downloadFreeBSD-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.c19
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);
OpenPOWER on IntegriCloud