diff options
author | yongari <yongari@FreeBSD.org> | 2009-05-25 02:05:00 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2009-05-25 02:05:00 +0000 |
commit | fd45d782d18ffb1d516ed5570957017ba2c2d392 (patch) | |
tree | c2d4915fceadb514c29c06be48bd47634bab0c8e /sys/dev/mii/e1000phy.c | |
parent | 544e2eb41a0ea28559b5a298b4f30b42f3d018a0 (diff) | |
download | FreeBSD-src-fd45d782d18ffb1d516ed5570957017ba2c2d392.zip FreeBSD-src-fd45d782d18ffb1d516ed5570957017ba2c2d392.tar.gz |
Do not ignore NEXT Page capability of auto-negotiation
advertisement register. Some PHYs such as 88E3016 requires NEXT
Page capability to establish valid link. Also set protocol selector
field which is read only but it makes the intention clearer.
Diffstat (limited to 'sys/dev/mii/e1000phy.c')
-rw-r--r-- | sys/dev/mii/e1000phy.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/dev/mii/e1000phy.c b/sys/dev/mii/e1000phy.c index a6c3763..0025e76 100644 --- a/sys/dev/mii/e1000phy.c +++ b/sys/dev/mii/e1000phy.c @@ -490,13 +490,16 @@ static int e1000phy_mii_phy_auto(struct e1000phy_softc *esc) { struct mii_softc *sc; + uint16_t reg; sc = &esc->mii_sc; - if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) - PHY_WRITE(sc, E1000_AR, E1000_AR_10T | E1000_AR_10T_FD | + if ((sc->mii_flags & MIIF_HAVEFIBER) == 0) { + reg = PHY_READ(sc, E1000_AR); + reg |= E1000_AR_10T | E1000_AR_10T_FD | E1000_AR_100TX | E1000_AR_100TX_FD | - E1000_AR_PAUSE | E1000_AR_ASM_DIR); - else + E1000_AR_PAUSE | E1000_AR_ASM_DIR; + PHY_WRITE(sc, E1000_AR, reg | E1000_AR_SELECTOR_FIELD); + } else PHY_WRITE(sc, E1000_AR, E1000_FA_1000X_FD | E1000_FA_1000X | E1000_FA_SYM_PAUSE | E1000_FA_ASYM_PAUSE); if ((sc->mii_extcapabilities & (EXTSR_1000TFDX | EXTSR_1000THDX)) != 0) |