Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/mii Add BCM5756, BCM5717C, BCM5719C, BCM5720C and BC...
details: https://anonhg.NetBSD.org/src/rev/da19a8a1ed90
branches: trunk
changeset: 785465:da19a8a1ed90
user: msaitoh <msaitoh%NetBSD.org@localhost>
date: Fri Mar 15 06:18:13 2013 +0000
description:
Add BCM5756, BCM5717C, BCM5719C, BCM5720C and BCM57780.
diffstat:
sys/dev/mii/brgphy.c | 113 ++++++++++++++++++++++++++++++++++----------------
sys/dev/mii/miivar.h | 3 +-
2 files changed, 79 insertions(+), 37 deletions(-)
diffs (242 lines):
diff -r 9aaf85a3e5e9 -r da19a8a1ed90 sys/dev/mii/brgphy.c
--- a/sys/dev/mii/brgphy.c Thu Mar 14 21:31:35 2013 +0000
+++ b/sys/dev/mii/brgphy.c Fri Mar 15 06:18:13 2013 +0000
@@ -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 @@
{ 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 @@
{ 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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);
+ 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_BCM5421:
- brgphy_bcm5421_dspcode(sc);
- break;
- case MII_MODEL_BROADCOM_BCM54K2:
- brgphy_bcm54k2_dspcode(sc);
+ default:
break;
}
@@ -667,7 +704,8 @@
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 @@
/* 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 @@
}
} 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 @@
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 @@
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 {
diff -r 9aaf85a3e5e9 -r da19a8a1ed90 sys/dev/mii/miivar.h
--- a/sys/dev/mii/miivar.h Thu Mar 14 21:31:35 2013 +0000
+++ b/sys/dev/mii/miivar.h Fri Mar 15 06:18:13 2013 +0000
@@ -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 @@
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 */
Home |
Main Index |
Thread Index |
Old Index