On 2010/02/15 16:39, bruce wrote:
> Thank you Brad <[email protected]>, for supplying me with this patch,
> which solves the problem (by adding the BCM57780 properly, and
> having it use brgphy instead of ukphy). And thanks for the amazingly
> fast support!
IMO this should go in, unless there are objections I'd like to
commit it tomorrow (with a manpage addition).
>
> Index: miidevs
> ===================================================================
> RCS file: /cvs/src/sys/dev/mii/miidevs,v
> retrieving revision 1.111
> diff -u -p -r1.111 miidevs
> --- miidevs 7 Sep 2009 13:46:03 -0000 1.111
> +++ miidevs 15 Feb 2010 23:19:43 -0000
> @@ -93,6 +93,7 @@ oui xxLEVEL1 0x1e0400 Level 1
>
> /* Don't know what's going on here. */
> oui xxBROADCOM2 0x0050ef Broadcom
> +oui xxBROADCOM3 0x00d897 Broadcom
> oui xxDAVICOM 0x006040 Davicom
>
> /* This is the OUI of the gigE PHY in the RealTek 8169S/8110S chips */
> @@ -152,6 +153,7 @@ model xxBROADCOM2 BCM5722 0x002d BCM5722
> model xxBROADCOM2 BCM5784 0x003a BCM5784 10/100/1000baseT PHY
> model xxBROADCOM2 BCM5709C 0x003c BCM5709 10/100/1000baseT PHY
> model xxBROADCOM2 BCM5761 0x003d BCM5761 10/100/1000baseT PHY
> +model xxBROADCOM3 BCM57780 0x0019 BCM57780 10/100/1000baseT PHY
> model BROADCOM BCM5400 0x0004 BCM5400 1000baseT PHY
> model BROADCOM BCM5401 0x0005 BCM5401 1000baseT PHY
> model BROADCOM BCM5411 0x0007 BCM5411 1000baseT PHY
> Index: brgphy.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/mii/brgphy.c,v
> retrieving revision 1.89
> diff -u -p -r1.89 brgphy.c
> --- brgphy.c 8 Aug 2009 19:07:03 -0000 1.89
> +++ brgphy.c 15 Feb 2010 23:20:36 -0000
> @@ -163,6 +163,8 @@ static const struct mii_phydesc brgphys[
> MII_STR_xxBROADCOM2_BCM5709C },
> { MII_OUI_xxBROADCOM2, MII_MODEL_xxBROADCOM2_BCM5709CAX,
> MII_STR_xxBROADCOM2_BCM5709CAX },
> + { MII_OUI_xxBROADCOM3, MII_MODEL_xxBROADCOM3_BCM57780,
> + MII_STR_xxBROADCOM3_BCM57780 },
> { MII_OUI_BROADCOM2, MII_MODEL_BROADCOM2_BCM5906,
> MII_STR_BROADCOM2_BCM5906 },
>
>
>
> On Mon, Feb 15, 2010 at 03:38:24PM -0500, Kenneth R Westerback wrote:
> > On Sun, Feb 14, 2010 at 08:36:56PM -0800, bruce wrote:
> > > I've been trying to get OpenBSD working with a new Dell Inspiron
> > > Zino, and I've run into what I think may be a bug in mii_physubr.c.
> > >
> > > First, the symptoms:
> > >
> > > (1) /bsd.rd works just fine. I can use the BCM57780 GigE
> > > network card as bge0 and reach the network. OpenBSD installs
> > > correctly.
> > >
> > > (2) /bsd panics during bootup. The last lines on console read:
> > > Starting network
> > > panic: mii_phy_setmedia
> > > (and then a warning about reporting errors)
> > >
> > > This is with the 4.6 CD set, but I get the same behavior with the
> > > latest snapshot. Looking at the source code to mii_physubr.c, I
> > > see that the panic occurs here at line 96:
> > >
> > > #ifdef DIAGNOSTIC
> > > if (ife->ifm_data < 0 || ife->ifm_data >= MII_NMEDIA)
> > > panic("mii_phy_setmedia");
> > > #endif
> > >
> > > It turns out that in bsd.rd, DIAGNOSTIC is not defined, so
> > > the section is skipped and everything works. In bsd,
> > > the value ife->ifm_data is MII_NMEDIA. After a little
> > > more poking around, I found that ife->ifm_data is set to
> > > MII_NMEDIA at line 461 of mii_physubr.c:
> > >
> > > if (sc->mii_capabilities & BMSR_ANEG) {
> > > ADD(IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, sc->mii_inst),
> > > MII_NMEDIA); /* intentionally invalid index */
> > > }
> > >
> > > I've put a bunch of printf's in both places, and I know
> > > for sure that that section of code, for the BCM57780
> > > using the bge driver and ukphy, will have BMSR_ANEG set
> > > in mii_capabilities and will fail in this way.
> > > BMSR_ANEG is defined in mii.h:
> > >
> > > define BMSR_ANEG 0x0008 /* Autonegotiation capable */
> > >
> > > Does this mean that if the network device supports Autonegotiation,
> > > then kernel panic? I can't possibly be reading this right.
> >
> > Sounds like it is expecting the autonegotiation process to set
> > ife->ifm_data to the correct value. But the autonegotiation is
> > failing, incomplete or not being done.
> >
> > .... Ken
> >
> > >
> > > If I comment out the panic, then everything works fine: the OS
> > > boots, the bge0 device works properly, I can reach the network,
> > > everything is hunky dory. The system is at least stable
> > > enough for me to be writing this email. But, I'm now running
> > > my own hacked kernel, which is a little more bleeding edge
> > > than I'm used to. So, what's the real bug here?
> > >
> > > Thanks,
> > > -Bruce