Module Name: src Committed By: martin Date: Thu Oct 24 15:58:45 UTC 2019
Modified Files: src/sys/dev/mii [netbsd-8]: ciphy.c miidevs Log Message: Pull up the following revisions, requested by msaitoh in ticket #1414: sys/dev/mii/ciphy.c 1.34-1.37 via patch sys/dev/mii/miidevs 1.158 - Indicate master mode if the negotiated result say so. - Call mii_phy_flowstatus() to show the flow setting. - Match a lot of Cicada and Vitesse devices correctly. - Add support for VSC8221, VSC8234 and VSC8641. - KNF To generate a diff of this commit: cvs rdiff -u -r1.26.10.2 -r1.26.10.3 src/sys/dev/mii/ciphy.c cvs rdiff -u -r1.125.6.6 -r1.125.6.7 src/sys/dev/mii/miidevs Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/mii/ciphy.c diff -u src/sys/dev/mii/ciphy.c:1.26.10.2 src/sys/dev/mii/ciphy.c:1.26.10.3 --- src/sys/dev/mii/ciphy.c:1.26.10.2 Sun Sep 1 10:19:04 2019 +++ src/sys/dev/mii/ciphy.c Thu Oct 24 15:58:45 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ciphy.c,v 1.26.10.2 2019/09/01 10:19:04 martin Exp $ */ +/* $NetBSD: ciphy.c,v 1.26.10.3 2019/10/24 15:58:45 martin Exp $ */ /*- * Copyright (c) 2004 @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ciphy.c,v 1.26.10.2 2019/09/01 10:19:04 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ciphy.c,v 1.26.10.3 2019/10/24 15:58:45 martin Exp $"); /* * Driver for the Cicada CS8201 10/100/1000 copper PHY. @@ -74,35 +74,35 @@ static const struct mii_phy_funcs ciphy_ }; static const struct mii_phydesc ciphys[] = { - { MII_OUI_CICADA, MII_MODEL_CICADA_CS8201, - MII_STR_CICADA_CS8201 }, + { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_CIS8201, + MII_STR_xxCICADA_CIS8201 }, - { MII_OUI_CICADA, MII_MODEL_CICADA_CS8201A, - MII_STR_CICADA_CS8201A }, + { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_CIS8201A, + MII_STR_xxCICADA_CIS8201A }, - { MII_OUI_CICADA, MII_MODEL_CICADA_CS8201B, - MII_STR_CICADA_CS8201B }, + { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_CIS8201B, + MII_STR_xxCICADA_CIS8201B }, - { MII_OUI_CICADA, MII_MODEL_CICADA_CS8204, - MII_STR_CICADA_CS8204 }, + { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_CIS8204, + MII_STR_xxCICADA_CIS8204 }, - { MII_OUI_CICADA, MII_MODEL_CICADA_VSC8211, - MII_STR_CICADA_VSC8211 }, + { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_VSC8211, + MII_STR_xxCICADA_VSC8211 }, - { MII_OUI_CICADA, MII_MODEL_CICADA_CS8244, - MII_STR_CICADA_CS8244 }, + { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_VSC8221, + MII_STR_xxCICADA_VSC8221 }, - { MII_OUI_xxCICADA, MII_MODEL_CICADA_CS8201, - MII_STR_CICADA_CS8201 }, + { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_VSC8234, + MII_STR_xxCICADA_VSC8234 }, - { MII_OUI_xxCICADA, MII_MODEL_CICADA_CS8201A, - MII_STR_CICADA_CS8201A }, + { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_VSC8244, + MII_STR_xxCICADA_VSC8244 }, - { MII_OUI_xxCICADA, MII_MODEL_xxCICADA_CS8201B, - MII_STR_xxCICADA_CS8201B }, + { MII_OUI_xxVITESSE, MII_MODEL_xxVITESSE_VSC8601, + MII_STR_xxVITESSE_VSC8601 }, - { MII_OUI_VITESSE, MII_MODEL_VITESSE_VSC8601, - MII_STR_VITESSE_VSC8601 }, + { MII_OUI_xxVITESSE, MII_MODEL_xxVITESSE_VSC8641, + MII_STR_xxVITESSE_VSC8641 }, { 0, 0, NULL }, @@ -231,9 +231,8 @@ setit: if ((mii->mii_ifp->if_flags & IFF_LINK0)) { PHY_WRITE(sc, MII_100T2CR, gig | GTCR_MAN_MS | GTCR_ADV_MS); - } else { + } else PHY_WRITE(sc, MII_100T2CR, gig | GTCR_MAN_MS); - } break; case IFM_NONE: PHY_WRITE(sc, MII_BMCR, BMCR_ISO | BMCR_PDOWN); @@ -316,7 +315,7 @@ static void ciphy_status(struct mii_softc *sc) { struct mii_data *mii = sc->mii_pdata; - int bmsr, bmcr; + int bmsr, bmcr, gtsr; mii->mii_media_status = IFM_AVALID; mii->mii_media_active = IFM_ETHER; @@ -357,20 +356,23 @@ ciphy_status(struct mii_softc *sc) } if (bmsr & CIPHY_AUXCSR_FDX) - mii->mii_media_active |= IFM_FDX; + mii->mii_media_active |= IFM_FDX | mii_phy_flowstatus(sc); else mii->mii_media_active |= IFM_HDX; - return; + if (IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T) { + gtsr = PHY_READ(sc, MII_100T2SR); + if ((gtsr & GTSR_MS_RES) != 0) + mii->mii_media_active |= IFM_ETH_MASTER; + } } static void ciphy_reset(struct mii_softc *sc) { + mii_phy_reset(sc); DELAY(1000); - - return; } #define PHY_SETBIT(x, y, z) \ @@ -395,9 +397,8 @@ ciphy_fixup(struct mii_softc *sc) } switch (model) { - case MII_MODEL_CICADA_CS8201: - case MII_MODEL_CICADA_CS8204: - + case MII_MODEL_xxCICADA_CIS8201: + case MII_MODEL_xxCICADA_CIS8204: /* Turn off "aux mode" (whatever that means) */ PHY_SETBIT(sc, CIPHY_MII_AUXCSR, CIPHY_AUXCSR_MDPPS); @@ -406,40 +407,39 @@ ciphy_fixup(struct mii_softc *sc) * when using MII in full duplex mode. */ if ((speed == CIPHY_SPEED10 || speed == CIPHY_SPEED100) && - (status & CIPHY_AUXCSR_FDX)) { + (status & CIPHY_AUXCSR_FDX)) PHY_SETBIT(sc, CIPHY_MII_10BTCSR, CIPHY_10BTCSR_ECHO); - } else { + else PHY_CLRBIT(sc, CIPHY_MII_10BTCSR, CIPHY_10BTCSR_ECHO); - } /* Enable link/activity LED blink. */ PHY_SETBIT(sc, CIPHY_MII_LED, CIPHY_LED_LINKACTBLINK); break; - case MII_MODEL_CICADA_CS8201A: - case MII_MODEL_CICADA_CS8201B: - + case MII_MODEL_xxCICADA_CIS8201A: + case MII_MODEL_xxCICADA_CIS8201B: /* * Work around speed polling bug in VT3119/VT3216 * when using MII in full duplex mode. */ if ((speed == CIPHY_SPEED10 || speed == CIPHY_SPEED100) && - (status & CIPHY_AUXCSR_FDX)) { + (status & CIPHY_AUXCSR_FDX)) PHY_SETBIT(sc, CIPHY_MII_10BTCSR, CIPHY_10BTCSR_ECHO); - } else + else PHY_CLRBIT(sc, CIPHY_MII_10BTCSR, CIPHY_10BTCSR_ECHO); break; - case MII_MODEL_CICADA_VSC8211: - case MII_MODEL_CICADA_CS8244: - case MII_MODEL_VITESSE_VSC8601: + case MII_MODEL_xxCICADA_VSC8211: + case MII_MODEL_xxCICADA_VSC8221: + case MII_MODEL_xxCICADA_VSC8234: + case MII_MODEL_xxCICADA_VSC8244: + case MII_MODEL_xxVITESSE_VSC8601: + case MII_MODEL_xxVITESSE_VSC8641: break; default: aprint_error_dev(sc->mii_dev, "unknown CICADA PHY model %x\n", model); break; } - - return; } Index: src/sys/dev/mii/miidevs diff -u src/sys/dev/mii/miidevs:1.125.6.6 src/sys/dev/mii/miidevs:1.125.6.7 --- src/sys/dev/mii/miidevs:1.125.6.6 Thu Aug 1 14:22:55 2019 +++ src/sys/dev/mii/miidevs Thu Oct 24 15:58:45 2019 @@ -1,4 +1,4 @@ -$NetBSD: miidevs,v 1.125.6.6 2019/08/01 14:22:55 martin Exp $ +$NetBSD: miidevs,v 1.125.6.7 2019/10/24 15:58:45 martin Exp $ /*- * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. @@ -50,10 +50,8 @@ $NetBSD: miidevs,v 1.125.6.6 2019/08/01 */ oui AMD 0x00001a Advanced Micro Devices -oui VITESSE 0x0001c1 Vitesse oui TRIDIUM 0x0001f0 Tridium oui DATATRACK 0x0002c6 Data Track Technology -oui CICADA 0x0003f1 Cicada Semiconductor oui AGERE 0x00053d Agere oui BANKSPEED 0x0006b8 Bankspeed Pty oui NETEXCELL 0x0008bb NetExcell @@ -111,6 +109,7 @@ oui xxINTEL 0x001f00 Intel oui xxBROADCOM_ALT1 0x0050ef Broadcom Corporation oui yyINTEL 0x005500 Intel oui yyASIX 0x007063 Asix Semiconductor +oui xxVITESSE 0x008083 Vitesse Semiconductor oui xxPMCSIERRA2 0x009057 PMC-Sierra oui xxCICADA 0x00c08f Cicada Semiconductor oui xxNATSEMI 0x1000e8 National Semiconductor @@ -219,15 +218,17 @@ model BROADCOM3 BCM5720C 0x0036 BCM5720C model BROADCOM4 BCM5725C 0x0038 BCM5725C 1000BASE-T media interface model xxBROADCOM_ALT1 BCM5906 0x0004 BCM5906 10/100baseTX media interface -/* Cicada Semiconductor PHYs (now owned by Vitesse?) */ -model CICADA CS8201 0x0001 Cicada CS8201 10/100/1000TX PHY -model CICADA CS8204 0x0004 Cicada CS8204 10/100/1000TX PHY -model CICADA VSC8211 0x000b Cicada VSC8211 10/100/1000TX PHY -model CICADA CS8201A 0x0020 Cicada CS8201 10/100/1000TX PHY -model CICADA CS8201B 0x0021 Cicada CS8201 10/100/1000TX PHY -model CICADA CS8244 0x002c Vitesse VSC8244 Quad 10/100/1000BASE-T PHY +/* Cicada Semiconductor PHYs (-> Vitesse -> Microsemi) */ + +model xxCICADA CIS8201 0x0001 Cicada CIS8201 10/100/1000TX PHY +model xxCICADA CIS8204 0x0004 Cicada CIS8204 10/100/1000TX PHY +model xxCICADA VSC8211 0x000b Cicada VSC8211 10/100/1000TX PHY model xxCICADA VSC8221 0x0015 Vitesse VSC8221 10/100/1000BASE-T PHY -model xxCICADA CS8201B 0x0021 Cicada CS8201 10/100/1000TX PHY +model xxCICADA VSC8224 0x0018 Vitesse VSC8224 10/100/1000BASE-T PHY +model xxCICADA CIS8201A 0x0020 Cicada CIS8201 10/100/1000TX PHY +model xxCICADA CIS8201B 0x0021 Cicada CIS8201 10/100/1000TX PHY +model xxCICADA VSC8234 0x0022 Vitesse VSC8234 10/100/1000TX PHY +model xxCICADA VSC8244 0x002c Vitesse VSC8244 Quad 10/100/1000BASE-T PHY /* Davicom Semiconductor PHYs */ /* AMD Am79C873 seems to be a relabeled DM9101 */ @@ -389,8 +390,10 @@ model xxTSC 78Q2121 0x0015 78Q2121 100B model VIA VT6103 0x0032 VT6103 10/100 PHY model VIA VT6103_2 0x0034 VT6103 10/100 PHY -/* Vitesse PHYs */ -model VITESSE VSC8601 0x0002 VSC8601 10/100/1000 PHY +/* Vitesse PHYs (Now Microsemi) */ +model xxVITESSE VSC8601 0x0002 VSC8601 10/100/1000 PHY +model xxVITESSE VSC8641 0x0003 Vitesse VSC8641 10/100/1000TX PHY +model xxVITESSE VSC8501 0x0013 Vitesse VSC8501 10/100/1000TX PHY /* XaQti Corp. PHYs */ model xxXAQTI XMACII 0x0000 XaQti Corp. XMAC II gigabit interface