Date: Wed, 3 May 2006 01:10:18 GMT From: "Internet Partners, Inc. Tech Support" <support@ipinc.net> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/94307: [bge] kernel panics when passing trafffic through bge1 Message-ID: <200605030110.k431AIkl004291@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/94307; it has been noted by GNATS. From: "Internet Partners, Inc. Tech Support" <support@ipinc.net> To: <bug-followup@FreeBSD.org>, <grehan@FreeBSD.org> Cc: Subject: Re: kern/94307: [bge] kernel panics when passing trafffic through bge1 Date: Tue, 2 May 2006 18:06:23 -0700 I made the following change in the FreeBSD driver: $ diff -c if_bge.c.dist if_bge.c *** if_bge.c.dist Tue May 2 10:58:41 2006 --- if_bge.c Tue May 2 11:55:39 2006 *************** *** 2099,2109 **** sc->bge_chiprev = BGE_CHIPREV(sc->bge_chipid); /* ! * Treat the 5714 and the 5752 like the 5750 until we have more info * on this chip. */ ! if (sc->bge_asicrev == BGE_ASICREV_BCM5714 || ! sc->bge_asicrev == BGE_ASICREV_BCM5752) sc->bge_asicrev = BGE_ASICREV_BCM5750; /* --- 2099,2108 ---- sc->bge_chiprev = BGE_CHIPREV(sc->bge_chipid); /* ! * Treat the 5752 like the 5750 until we have more info * on this chip. */ ! if (sc->bge_asicrev == BGE_ASICREV_BCM5752) sc->bge_asicrev = BGE_ASICREV_BCM5750; /* $ And the HP DL320 G4 _still_ panics when more than a few K of data is passed over the ethernet interface. Additionally, I have corrected the ASIC revs in the driver and added some more, see PR/94863 In looking at the latest Linux driver from Broadcom, it appears they are special-casing the BCM5714 in a number of places in the Linux driver. I have tested the Linux driver on OpenSUSE and it works fine, no panics on OpenSUSE. In particular in the Linux driver look at this section: /* Prevent chip from dropping frames when flow control * is enabled. */ tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, 2); if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) { /* Use hardware link auto-negotiation */ tp->tg3_flags2 |= TG3_FLG2_HW_AUTONEG; } if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) && (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) { u32 tmp; tmp = tr32(SERDES_RX_CTRL); tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); } And look at this section: /* Set bit 23 to enable PCIX hw bug fix */ tp->dma_rwctrl |= 0x009f0000; } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { /* 5780 always in PCIX mode */ tp->dma_rwctrl |= 0x00144000; } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { /* 5714 always in PCIX mode */ tp->dma_rwctrl |= 0x00148000; } else { tp->dma_rwctrl |= 0x001b000f; } Note also that in PR/94863 regarding the IBM e326m Opteron server, that the originator of the PR concluded that his server had a BCM5780 chip in it. I don't know where in the FreeBSD driver the cooresponding "PCI-X" bugfix would be located. There's a lot similar between the Linux driver and the FreeBSD driver but a lot also that's different. Ted
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200605030110.k431AIkl004291>