Module Name:    src
Committed By:   msaitoh
Date:           Fri Mar 15 06:18:14 UTC 2013

Modified Files:
        src/sys/dev/mii: brgphy.c miivar.h

Log Message:
Add BCM5756, BCM5717C, BCM5719C, BCM5720C and BCM57780.


To generate a diff of this commit:
cvs rdiff -u -r1.60 -r1.61 src/sys/dev/mii/brgphy.c src/sys/dev/mii/miivar.h

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/brgphy.c
diff -u src/sys/dev/mii/brgphy.c:1.60 src/sys/dev/mii/brgphy.c:1.61
--- src/sys/dev/mii/brgphy.c:1.60	Mon Sep 17 11:45:56 2012
+++ src/sys/dev/mii/brgphy.c	Fri Mar 15 06:18:13 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: brgphy.c,v 1.60 2012/09/17 11:45:56 tsutsui Exp $	*/
+/*	$NetBSD: brgphy.c,v 1.61 2013/03/15 06:18:13 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: brgphy.c,v 1.60 2012/09/17 11:45:56 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: brgphy.c,v 1.61 2013/03/15 06:18:13 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -196,6 +196,9 @@ static const struct mii_phydesc brgphys[
 	{ MII_OUI_BROADCOM2,		MII_MODEL_BROADCOM2_BCM5755,
 	  MII_STR_BROADCOM2_BCM5755 },
 
+	{ MII_OUI_BROADCOM2,		MII_MODEL_BROADCOM2_BCM5756,
+	  MII_STR_BROADCOM2_BCM5756 },
+
 	{ MII_OUI_BROADCOM2,		MII_MODEL_BROADCOM2_BCM5761,
 	  MII_STR_BROADCOM2_BCM5761 },
 
@@ -205,9 +208,21 @@ static const struct mii_phydesc brgphys[
 	{ MII_OUI_BROADCOM2,		MII_MODEL_BROADCOM2_BCM5785,
 	  MII_STR_BROADCOM2_BCM5785 },
 
+	{ MII_OUI_BROADCOM3,		MII_MODEL_BROADCOM3_BCM5717C,
+	  MII_STR_BROADCOM3_BCM5717C },
+
+	{ MII_OUI_BROADCOM3,		MII_MODEL_BROADCOM3_BCM5719C,
+	  MII_STR_BROADCOM3_BCM5719C },
+
+	{ MII_OUI_BROADCOM3,		MII_MODEL_BROADCOM3_BCM5720C,
+	  MII_STR_BROADCOM3_BCM5720C },
+
 	{ MII_OUI_BROADCOM3,		MII_MODEL_BROADCOM3_BCM57765,
 	  MII_STR_BROADCOM3_BCM57765 },
 
+	{ MII_OUI_BROADCOM3,		MII_MODEL_BROADCOM3_BCM57780,
+	  MII_STR_BROADCOM3_BCM57780 },
+
 	{ MII_OUI_xxBROADCOM_ALT1,	MII_MODEL_xxBROADCOM_ALT1_BCM5906,
 	  MII_STR_xxBROADCOM_ALT1_BCM5906 },
 
@@ -243,6 +258,7 @@ brgphyattach(device_t parent, device_t s
 	sc->mii_dev = self;
 	sc->mii_inst = mii->mii_instance;
 	sc->mii_phy = ma->mii_phyno;
+	sc->mii_mpd_oui = MII_OUI(ma->mii_id1, ma->mii_id2);
 	sc->mii_mpd_model = MII_MODEL(ma->mii_id2);
 	sc->mii_mpd_rev = MII_REV(ma->mii_id2);
 	sc->mii_pdata = mii;
@@ -376,7 +392,8 @@ setit:
 			PHY_WRITE(sc, MII_BMCR,
 			    speed|BMCR_AUTOEN|BMCR_STARTNEG);
 
-			if (sc->mii_mpd_model != MII_MODEL_BROADCOM_BCM5701)
+			if ((sc->mii_mpd_oui != MII_OUI_BROADCOM)
+			    || (sc->mii_mpd_model != MII_MODEL_BROADCOM_BCM5701))
 				break;
 
 			if (mii->mii_media.ifm_media & IFM_ETH_MASTER)
@@ -414,16 +431,20 @@ setit:
 	if (sc->mii_media_active != mii->mii_media_active ||
 	    sc->mii_media_status != mii->mii_media_status ||
 	    cmd == MII_MEDIACHG) {
-		switch (sc->mii_mpd_model) {
-		case MII_MODEL_BROADCOM_BCM5400:
-			brgphy_bcm5401_dspcode(sc);
-			break;
-		case MII_MODEL_BROADCOM_BCM5401:
-			if (sc->mii_mpd_rev == 1 || sc->mii_mpd_rev == 3)
+		switch (sc->mii_mpd_oui) {
+		case MII_OUI_BROADCOM:
+			switch (sc->mii_mpd_model) {
+			case MII_MODEL_BROADCOM_BCM5400:
 				brgphy_bcm5401_dspcode(sc);
-			break;
-		case MII_MODEL_BROADCOM_BCM5411:
-			brgphy_bcm5411_dspcode(sc);
+				break;
+			case MII_MODEL_BROADCOM_BCM5401:
+				if (sc->mii_mpd_rev == 1 || sc->mii_mpd_rev == 3)
+					brgphy_bcm5401_dspcode(sc);
+				break;
+			case MII_MODEL_BROADCOM_BCM5411:
+				brgphy_bcm5411_dspcode(sc);
+				break;
+			}
 			break;
 		}
 	}
@@ -468,10 +489,11 @@ brgphy_status(struct mii_softc *sc)
 			return;
 		}
 
-		if (sc->mii_mpd_model == MII_MODEL_BROADCOM2_BCM5709S) {
-
-			/* 5709S has its own general purpose status registers */
-			
+		if ((sc->mii_mpd_oui == MII_OUI_BROADCOM2)
+		    && (sc->mii_mpd_model == MII_MODEL_BROADCOM2_BCM5709S)) {
+			/*
+			 * 5709S has its own general purpose status registers
+			 */
 			PHY_WRITE(sc, BRGPHY_BLOCK_ADDR,
 			    BRGPHY_BLOCK_ADDR_GP_STATUS);
 
@@ -564,7 +586,8 @@ brgphy_mii_phy_auto(struct mii_softc *sc
 	PHY_RESET(sc);
 
 	ktcr = GTCR_ADV_1000TFDX|GTCR_ADV_1000THDX;
-	if (sc->mii_mpd_model == MII_MODEL_BROADCOM_BCM5701)
+	if ((sc->mii_mpd_oui == MII_OUI_BROADCOM)
+	    && (sc->mii_mpd_model == MII_MODEL_BROADCOM_BCM5701))
 		ktcr |= GTCR_MAN_MS|GTCR_ADV_MS;
 	PHY_WRITE(sc, MII_100T2CR, ktcr);
 	ktcr = PHY_READ(sc, MII_100T2CR);
@@ -611,23 +634,37 @@ brgphy_reset(struct mii_softc *sc)
 	struct brgphy_softc *bsc = device_private(sc->mii_dev);
 
 	mii_phy_reset(sc);
-
-	switch (sc->mii_mpd_model) {
-	case MII_MODEL_BROADCOM_BCM5400:
-		brgphy_bcm5401_dspcode(sc);
-		break;
-	case MII_MODEL_BROADCOM_BCM5401:
-		if (sc->mii_mpd_rev == 1 || sc->mii_mpd_rev == 3)
+	switch (sc->mii_mpd_oui) {
+	case MII_OUI_BROADCOM:
+		switch (sc->mii_mpd_model) {
+		case MII_MODEL_BROADCOM_BCM5400:
 			brgphy_bcm5401_dspcode(sc);
+			break;
+		case MII_MODEL_BROADCOM_BCM5401:
+			if (sc->mii_mpd_rev == 1 || sc->mii_mpd_rev == 3)
+				brgphy_bcm5401_dspcode(sc);
+			break;
+		case MII_MODEL_BROADCOM_BCM5411:
+			brgphy_bcm5411_dspcode(sc);
+			break;
+		case MII_MODEL_BROADCOM_BCM5421:
+			brgphy_bcm5421_dspcode(sc);
+			break;
+		case MII_MODEL_BROADCOM_BCM54K2:
+			brgphy_bcm54k2_dspcode(sc);
+			break;
+		}
 		break;
-	case MII_MODEL_BROADCOM_BCM5411:
-		brgphy_bcm5411_dspcode(sc);
-		break;
-	case MII_MODEL_BROADCOM_BCM5421:
-		brgphy_bcm5421_dspcode(sc);
+	case MII_OUI_BROADCOM3:
+		switch (sc->mii_mpd_model) {
+		case MII_MODEL_BROADCOM3_BCM5717C:
+		case MII_MODEL_BROADCOM3_BCM5719C:
+		case MII_MODEL_BROADCOM3_BCM5720C:
+		case MII_MODEL_BROADCOM3_BCM57765:
+			return;
+		}
 		break;
-	case MII_MODEL_BROADCOM_BCM54K2:
-		brgphy_bcm54k2_dspcode(sc);
+	default:
 		break;
 	}
 
@@ -667,7 +704,8 @@ brgphy_reset(struct mii_softc *sc)
 				brgphy_jumbo_settings(sc);
 
 			/* Adjust output voltage */
-			if (sc->mii_mpd_model == MII_MODEL_BROADCOM2_BCM5906)
+			if ((sc->mii_mpd_oui == MII_OUI_BROADCOM2)
+			    && (sc->mii_mpd_model == MII_MODEL_BROADCOM2_BCM5906))
 				PHY_WRITE(sc, BRGPHY_MII_EPHY_PTEST, 0x12);
 
 			/* Enable Ethernet@Wirespeed */
@@ -686,7 +724,8 @@ brgphy_reset(struct mii_softc *sc)
 	/* Handle any bnx (NetXtreme II) workarounds. */
 	} else if (bsc->sc_isbnx) {
 #if 0 /* not yet */
-		if (sc->mii_mpd_model == MII_MODEL_xxBROADCOM2_BCM5708S) {
+		if ((sc->mii_mpd_oui == MII_OUI_BROADCOM2)
+		    && sc->mii_mpd_model == MII_MODEL_BROADCOM2_BCM5708S) {
 			/* Store autoneg capabilities/results in digital block (Page 0) */
 			PHY_WRITE(sc, BRGPHY_5708S_BLOCK_ADDR, BRGPHY_5708S_DIG3_PG2);
 			PHY_WRITE(sc, BRGPHY_5708S_PG2_DIGCTL_3_0, 
@@ -736,7 +775,8 @@ brgphy_reset(struct mii_softc *sc)
 			}
 		} else
 #endif
-		if (sc->mii_mpd_model ==  MII_MODEL_BROADCOM2_BCM5709S) {
+		if ((sc->mii_mpd_oui == MII_OUI_BROADCOM2)
+		    && (sc->mii_mpd_model ==  MII_MODEL_BROADCOM2_BCM5709S)) {
 			/* Select the SerDes Digital block of the AN MMD. */
 			PHY_WRITE(sc, BRGPHY_BLOCK_ADDR,
 			    BRGPHY_BLOCK_ADDR_SERDES_DIG);
@@ -835,7 +875,7 @@ brgphy_bcm5401_dspcode(struct mii_softc 
 
 	for (i = 0; dspcode[i].reg != 0; i++)
 		PHY_WRITE(sc, dspcode[i].reg, dspcode[i].val);
-    delay(40);
+	delay(40);
 }
 
 static void
@@ -991,7 +1031,8 @@ brgphy_jumbo_settings(struct mii_softc *
 	u_int32_t val;
 
 	/* Set Jumbo frame settings in the PHY. */
-	if (sc->mii_mpd_model == MII_MODEL_BROADCOM_BCM5401) {
+	if ((sc->mii_mpd_oui == MII_OUI_BROADCOM)
+	    && (sc->mii_mpd_model == MII_MODEL_BROADCOM_BCM5401)) {
 		/* Cannot do read-modify-write on the BCM5401 */
 		PHY_WRITE(sc, BRGPHY_MII_AUXCTL, 0x4c20);
 	} else {
Index: src/sys/dev/mii/miivar.h
diff -u src/sys/dev/mii/miivar.h:1.60 src/sys/dev/mii/miivar.h:1.61
--- src/sys/dev/mii/miivar.h:1.60	Sun Jul 22 14:33:00 2012
+++ src/sys/dev/mii/miivar.h	Fri Mar 15 06:18:13 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: miivar.h,v 1.60 2012/07/22 14:33:00 matt Exp $	*/
+/*	$NetBSD: miivar.h,v 1.61 2013/03/15 06:18:13 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -113,6 +113,7 @@ struct mii_softc {
 
 	LIST_ENTRY(mii_softc) mii_list;	/* entry on parent's PHY list */
 
+	uint32_t mii_mpd_oui;		/* the PHY's OUI (MII_OUI())*/
 	uint32_t mii_mpd_model;		/* the PHY's model (MII_MODEL())*/
 	uint32_t mii_mpd_rev;		/* the PHY's revision (MII_REV())*/
 	int mii_phy;			/* our MII address */

Reply via email to