diff options
author | Pyun YongHyeon <yongari@FreeBSD.org> | 2007-06-06 06:55:49 +0000 |
---|---|---|
committer | Pyun YongHyeon <yongari@FreeBSD.org> | 2007-06-06 06:55:49 +0000 |
commit | 9f6cc3adc78dfada2eef0643136b2d745289ecdb (patch) | |
tree | 61cfd04f59c71e43ea2881f6d9850e3a5cfa5868 /sys/dev/mii/ciphy.c | |
parent | 1fec2d74cf80c1ac04df28808d9f29f235448e88 (diff) | |
download | src-9f6cc3adc78dfada2eef0643136b2d745289ecdb.tar.gz src-9f6cc3adc78dfada2eef0643136b2d745289ecdb.zip |
Add support Vitesse VSC8601 PHY that is found on nVidia network
adapters.
Submitted by: Shigeaki Tagashira < shigeaki AT se DOT hiroshima-u DOT ac DOT jp >
Tested by: Yuri Pankov < yuri.pankov AT gmail DOT com>,
Rainer Hurling <rhurlin AT gwdg DOT de >
Notes
Notes:
svn path=/head/; revision=170365
Diffstat (limited to 'sys/dev/mii/ciphy.c')
-rw-r--r-- | sys/dev/mii/ciphy.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sys/dev/mii/ciphy.c b/sys/dev/mii/ciphy.c index 07eb5e06a7a6..4ad1a6cc0ebe 100644 --- a/sys/dev/mii/ciphy.c +++ b/sys/dev/mii/ciphy.c @@ -91,6 +91,7 @@ static const struct mii_phydesc ciphys[] = { MII_PHY_DESC(CICADA, CS8201), MII_PHY_DESC(CICADA, CS8201A), MII_PHY_DESC(CICADA, CS8201B), + MII_PHY_DESC(VITESSE, VSC8601), MII_PHY_END }; @@ -354,11 +355,28 @@ ciphy_fixup(struct mii_softc *sc) { uint16_t model; uint16_t status, speed; + uint16_t val; model = MII_MODEL(PHY_READ(sc, CIPHY_MII_PHYIDR2)); status = PHY_READ(sc, CIPHY_MII_AUXCSR); speed = status & CIPHY_AUXCSR_SPEED; + if (strcmp(device_get_name(device_get_parent(sc->mii_dev)), + "nfe") == 0) { + /* need to set for 2.5V RGMII for NVIDIA adapters */ + val = PHY_READ(sc, CIPHY_MII_ECTL1); + val &= ~(CIPHY_ECTL1_IOVOL | CIPHY_ECTL1_INTSEL); + val |= (CIPHY_IOVOL_2500MV | CIPHY_INTSEL_RGMII); + PHY_WRITE(sc, CIPHY_MII_ECTL1, val); + /* From Linux. */ + val = PHY_READ(sc, CIPHY_MII_AUXCSR); + val |= CIPHY_AUXCSR_MDPPS; + PHY_WRITE(sc, CIPHY_MII_AUXCSR, val); + val = PHY_READ(sc, CIPHY_MII_10BTCSR); + val |= CIPHY_10BTCSR_ECHO; + PHY_WRITE(sc, CIPHY_MII_10BTCSR, val); + } + switch (model) { case MII_MODEL_CICADA_CS8201: @@ -396,6 +414,8 @@ ciphy_fixup(struct mii_softc *sc) } break; + case MII_MODEL_VITESSE_VSC8601: + break; default: device_printf(sc->mii_dev, "unknown CICADA PHY model %x\n", model); |