Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Nov 2012 09:19:50 +0900
From:      YongHyeon PYUN <pyunyh@gmail.com>
To:        Richard Kuhns <rjk@wintek.com>
Cc:        "freebsd-stable@freebsd.org" <freebsd-stable@freebsd.org>
Subject:   Re: bge on the new Mac Mini
Message-ID:  <20121128001950.GA3390@michelle.cdnetworks.com>
In-Reply-To: <50B4C155.8050703@wintek.com>
References:  <50A65BFC.7030406@wintek.com> <20121120085200.GB1778@michelle.cdnetworks.com> <50AD32A6.8080209@wintek.com> <20121122014921.GA3180@michelle.cdnetworks.com> <20121122020851.GB3180@michelle.cdnetworks.com> <50B3872B.9010709@wintek.com> <20121127052448.GC1452@michelle.cdnetworks.com> <50B4C155.8050703@wintek.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--ew6BAiZeqk4r7MaW
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Tue, Nov 27, 2012 at 08:34:13AM -0500, Richard Kuhns wrote:
> On 11/27/12 00:24, YongHyeon PYUN wrote:
> > On Mon, Nov 26, 2012 at 10:13:47AM -0500, Richard Kuhns wrote:
> >> On 11/21/12 21:08, YongHyeon PYUN wrote:
> >>> On Thu, Nov 22, 2012 at 10:49:21AM +0900, YongHyeon PYUN wrote:
> >>>> On Wed, Nov 21, 2012 at 02:59:34PM -0500, Richard Kuhns wrote:
> >>>>> On 11/20/12 03:52, YongHyeon PYUN wrote:
> >>>>>> On Fri, Nov 16, 2012 at 10:30:04AM -0500, Richard Kuhns wrote:
> >>>>>>> Hi all,
> >>>>>>>
> >>>>>>> Over the last month or so I've installed FreeBSD 9 (-stable) on several Mac
> >>>>>>> Minis via the memstick image; they seem to be pretty good little boxes for
> >>>>>>> things like offsite secondary nameservers, for example, and they're easily
> >>>>>>> replaced in case of problems.
> >>>>>>>
> >>>>>>> However, the newest minis have slightly different hardware, and FreeBSD can't
> >>>>>>> find the built-in NIC. pciconf -lv on the new mini shows it as
> >>>>>>>
> >>>>>>> none3@pci0:1:0:0:       class=0x020000 card=0x168614e4 chip=0x168614e4 rev=0x01
> >>>>>>
> >>>>>> It seems this controller is BCM57766.
> >>>>>>
> >>>>>>> hdr=0x00
> >>>>>>>     vendor     = 'Broadcom Corporation'
> >>>>>>>     class      = network
> >>>>>>>     subclass   = ethernet
> >>>>>>>
> >>>>>>> The previous edition mini (that works) reports
> >>>>>>>
> >>>>>>> bge0@pci0:2:0:0:	class=0x020000 card=0x16b414e4 chip=0x16b414e4 rev=0x10 hdr=0x00
> >>>>>>>     vendor     = 'Broadcom Corporation'
> >>>>>>>     device     = 'NetXtreme BCM57765 Gigabit Ethernet PCIe'
> >>>>>>>     class      = network
> >>>>>>>     subclass   = ethernet
> >>>>>>>
> >>>>>>> Is there a chance that adding the new card/chip info to the current driver would
> >>>>>>> allow it to work? I'll be happy to test and report back. I'm afraid I'm not
> >>>>>>> familiar enough with hardware at that level to figure out the patch myself.
> >>>>>>>
> >>>>>>
> >>>>>> Try attached patch and let me know whether the patch works or not.
> >>>>>> If the patch works please share dmesg output(bge(4) and brgphy(4)
> >>>>>> output only).
> >>>>>> Note, the patch was generated against CURRENT.
> >>>>>>
> >>>>>
> >>>>> I'm afraid it didn't help. I ended up grabbing if_bge.c and if_bgereg.h from
> >>>>
> >>>> I guess you also need to copy brgphy.c from HEAD to
> >>>> /usr/src/sys/dev/mii directory.
> >>>>
> >>>>> HEAD using svnweb.freebsd.org. The patch installed cleanly and there were no
> >>>>> errors during the build, but still no NIC.
> >>>>
> >>>> Does it mean you're not seeing bge0 interface? Or you can't pass
> >>>> any traffic via bge0?
> >>>
> >>> Oops, it seems I've not included your device ID in the diff.
> >>> Try attach one instead. Make sure you use brgphy.c from HEAD.
> >>>
> >>
> >> There's progress! With your latest patch using brgphy.c, if_bge.c, and
> >> if_bgereg.h from head I'm now seeing the bge0 interface. Unfortunately, the
> >> moment I try to configure it the box locks up completely; it won't even toggle
> >> the caps lock LED.
> >>
> >> Booting single user and running ifconfig shows:
> >>
> >> bge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
> >> options=8009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LINKSTATE>
> >> 	ether a8:20:66:11:3b:d6
> >> 	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
> >> 	media: Ethernet autoselect (1000baseT <full-duplex>)
> >> 	status: active
> >>
> >> I did a verbose boot; here's the part that seems to be relevant to bge0:
> >>
> >> bge0: <Broadcom NetXtreme Gigabit Ethernet Controller, ASIC rev. 0x57766001> mem
> >> 0xa0400000-0xa040ffff,0xa0410000-0xa041ffff irq 16 at device 0.0 on pci1
> >> bge0: CHIP ID 0x10110142; ASIC REV 0x10110; CHIP REV 0x101101; PCI-E
> >   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > 
> > All these information are garbage which indicates a bug in the diff.
> > 
> >> miibus0: <MII bus> on bge0
> >> brgphy0: <BCM57765 1000BASE-T media interface> PHY 1 on miibus0
> >> brgphy0: OUI 0x001be9, model 0x0024, rev. 1
> >> brgphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT,
> >> 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, auto, auto-flow
> >> bge0: bpf attached
> >> bge0: Ethernet address: a8:20:66:11:3b:d6
> >> ioapic0: routing intpin 16 (PCI IRQ 16) to lapic 0 vector 61
> >>
> >> I greatly appreciate your efforts. I'm sorry for the delay getting back with
> >> you, but we had a busy Thanksgiving weekend.
> >>
> > 
> > Try again with attached bge.57766.diff3.
> > Thanks for testing!
> > 
> 
> I don't think the patch actually got attached :-(

Oops, attached.

--ew6BAiZeqk4r7MaW
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="bge.57766.diff3"

Index: sys/dev/bge/if_bgereg.h
===================================================================
--- sys/dev/bge/if_bgereg.h	(revision 243552)
+++ sys/dev/bge/if_bgereg.h	(working copy)
@@ -360,6 +360,7 @@
 #define	BGE_ASICREV_BCM5784		0x5784
 #define	BGE_ASICREV_BCM5785		0x5785
 #define	BGE_ASICREV_BCM57765		0x57785
+#define	BGE_ASICREV_BCM57766		0x57766
 #define	BGE_ASICREV_BCM57780		0x57780
 
 /* chip revisions */
@@ -2483,7 +2484,9 @@ struct bge_status_block {
 #define	BCOM_DEVICEID_BCM5906M		0x1713
 #define	BCOM_DEVICEID_BCM57760		0x1690
 #define	BCOM_DEVICEID_BCM57761		0x16B0
+#define	BCOM_DEVICEID_BCM57762		0x1682
 #define	BCOM_DEVICEID_BCM57765		0x16B4
+#define	BCOM_DEVICEID_BCM57766		0x1686
 #define	BCOM_DEVICEID_BCM57780		0x1692
 #define	BCOM_DEVICEID_BCM57781		0x16B1
 #define	BCOM_DEVICEID_BCM57785		0x16B5
@@ -2961,6 +2964,7 @@ struct bge_softc {
 #define	BGE_FLAG_5755_PLUS	0x00100000
 #define	BGE_FLAG_5788		0x00200000
 #define	BGE_FLAG_5717_PLUS	0x00400000
+#define	BGE_FLAG_57765_PLUS	0x00800000
 #define	BGE_FLAG_40BIT_BUG	0x01000000
 #define	BGE_FLAG_4G_BNDRY_BUG	0x02000000
 #define	BGE_FLAG_RX_ALIGNBUG	0x04000000
Index: sys/dev/bge/if_bge.c
===================================================================
--- sys/dev/bge/if_bge.c	(revision 243552)
+++ sys/dev/bge/if_bge.c	(working copy)
@@ -216,7 +216,9 @@ static const struct bge_type {
 	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM5906M },
 	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM57760 },
 	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM57761 },
+	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM57762 },
 	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM57765 },
+	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM57766 },
 	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM57780 },
 	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM57781 },
 	{ BCOM_VENDORID,	BCOM_DEVICEID_BCM57785 },
@@ -347,6 +349,7 @@ static const struct bge_revision bge_majorrevs[] =
 	{ BGE_ASICREV_BCM5787,		"unknown BCM5754/5787" },
 	{ BGE_ASICREV_BCM5906,		"unknown BCM5906" },
 	{ BGE_ASICREV_BCM57765,		"unknown BCM57765" },
+	{ BGE_ASICREV_BCM57766,		"unknown BCM57766" },
 	{ BGE_ASICREV_BCM57780,		"unknown BCM57780" },
 	{ BGE_ASICREV_BCM5717,		"unknown BCM5717" },
 	{ BGE_ASICREV_BCM5719,		"unknown BCM5719" },
@@ -362,6 +365,7 @@ static const struct bge_revision bge_majorrevs[] =
 #define	BGE_IS_575X_PLUS(sc)		((sc)->bge_flags & BGE_FLAG_575X_PLUS)
 #define	BGE_IS_5755_PLUS(sc)		((sc)->bge_flags & BGE_FLAG_5755_PLUS)
 #define	BGE_IS_5717_PLUS(sc)		((sc)->bge_flags & BGE_FLAG_5717_PLUS)
+#define	BGE_IS_57765_PLUS(sc)		((sc)->bge_flags & BGE_FLAG_57765_PLUS)
 
 const struct bge_revision * bge_lookup_rev(uint32_t);
 const struct bge_vendor * bge_lookup_vendor(uint16_t);
@@ -2243,7 +2247,7 @@ bge_blockinit(struct bge_softc *sc)
 	} else if (!BGE_IS_5705_PLUS(sc))
 		limit = BGE_RX_RINGS_MAX;
 	else if (sc->bge_asicrev == BGE_ASICREV_BCM5755 ||
-	    sc->bge_asicrev == BGE_ASICREV_BCM57765)
+	    BGE_IS_57765_PLUS(sc))
 		limit = 4;
 	else
 		limit = 1;
@@ -2657,7 +2661,9 @@ bge_probe(device_t dev)
 					    BGE_PCI_GEN2_PRODID_ASICREV, 4);
 					break;
 				case BCOM_DEVICEID_BCM57761:
+				case BCOM_DEVICEID_BCM57762:
 				case BCOM_DEVICEID_BCM57765:
+				case BCOM_DEVICEID_BCM57766:
 				case BCOM_DEVICEID_BCM57781:
 				case BCOM_DEVICEID_BCM57785:
 				case BCOM_DEVICEID_BCM57791:
@@ -3258,7 +3264,9 @@ bge_attach(device_t dev)
 			    BGE_PCI_GEN2_PRODID_ASICREV, 4);
 			break;
 		case BCOM_DEVICEID_BCM57761:
+		case BCOM_DEVICEID_BCM57762:
 		case BCOM_DEVICEID_BCM57765:
+		case BCOM_DEVICEID_BCM57766:
 		case BCOM_DEVICEID_BCM57781:
 		case BCOM_DEVICEID_BCM57785:
 		case BCOM_DEVICEID_BCM57791:
@@ -3321,10 +3329,13 @@ bge_attach(device_t dev)
 
 	/* Save chipset family. */
 	switch (sc->bge_asicrev) {
+	case BGE_ASICREV_BCM57765:
+	case BGE_ASICREV_BCM57766:
+		sc->bge_flags |= BGE_FLAG_57765_PLUS;
+		/* FALLTHROUGH */
 	case BGE_ASICREV_BCM5717:
 	case BGE_ASICREV_BCM5719:
 	case BGE_ASICREV_BCM5720:
-	case BGE_ASICREV_BCM57765:
 		sc->bge_flags |= BGE_FLAG_5717_PLUS | BGE_FLAG_5755_PLUS |
 		    BGE_FLAG_575X_PLUS | BGE_FLAG_5705_PLUS | BGE_FLAG_JUMBO |
 		    BGE_FLAG_JUMBO_FRAME;
@@ -3738,12 +3749,9 @@ bge_attach(device_t dev)
 		sc->bge_phy_flags |= BGE_PHY_NO_3LED;
 	if ((BGE_IS_5705_PLUS(sc)) &&
 	    sc->bge_asicrev != BGE_ASICREV_BCM5906 &&
-	    sc->bge_asicrev != BGE_ASICREV_BCM5717 &&
-	    sc->bge_asicrev != BGE_ASICREV_BCM5719 &&
-	    sc->bge_asicrev != BGE_ASICREV_BCM5720 &&
 	    sc->bge_asicrev != BGE_ASICREV_BCM5785 &&
-	    sc->bge_asicrev != BGE_ASICREV_BCM57765 &&
-	    sc->bge_asicrev != BGE_ASICREV_BCM57780) {
+	    sc->bge_asicrev != BGE_ASICREV_BCM57780 &&
+	    !BGE_IS_5717_PLUS(sc)) {
 		if (sc->bge_asicrev == BGE_ASICREV_BCM5755 ||
 		    sc->bge_asicrev == BGE_ASICREV_BCM5761 ||
 		    sc->bge_asicrev == BGE_ASICREV_BCM5784 ||

--ew6BAiZeqk4r7MaW--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121128001950.GA3390>