Date: Fri, 2 Jun 2006 15:10:12 GMT From: Pavel Merdin <freebsd-bugs@merdin.com> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/68351: [bge] bge0 watchdog timeout on 5.2.1 and -current, 5.1 is ok Message-ID: <200606021510.k52FACXu042845@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/68351; it has been noted by GNATS. From: Pavel Merdin <freebsd-bugs@merdin.com> To: bug-followup@FreeBSD.org, freebsd-bugs@mikhailov.org Cc: Subject: Re: kern/68351: [bge] bge0 watchdog timeout on 5.2.1 and -current, 5.1 is ok Date: Fri, 2 Jun 2006 18:08:17 +0300 Hello. The following patch seems to work: ============================================================== --- if_bge.c.orig Fri Jun 2 08:05:57 2006 +++ if_bge.c.new Fri Jun 2 08:06:39 2006 @@ -1085,11 +1085,21 @@ (0x3F000F); } else { /* PCI-X bus */ + if (sc->bge_asicrev == BGE_ASICREV_BCM5750) { + dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD; + dma_rw_ctl &= ~BGE_PCIDMARWCTL_ONEDMA_ATONCE; /* XXX */ + device_printf(sc->bge_dev, "Gotcha\n"); + + if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5780) + dma_rw_ctl |= (1 << 20) | (1 << 18) | + BGE_PCIDMARWCTL_ONEDMA_ATONCE; + else + dma_rw_ctl |= (1<<20) | (1<<18) | (1<<15); + } else if (sc->bge_asicrev == BGE_ASICREV_BCM5704 || BGE_ASICREV_BCM5703) /* * The 5704 uses a different encoding of read/write * watermarks. */ - if (sc->bge_asicrev == BGE_ASICREV_BCM5704 || BGE_ASICREV_BCM5703) dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD | (0x9F0000); else if (sc->bge_asicrev == BGE_ASICREV_BCM5780) ============================================================== It was imported from OpenBSD. I think that somebody could import their changes into FreeBSD :) The full patch with 5780 support: ============================================================== --- if_bge.c.orig Sat Mar 4 04:34:48 2006 +++ if_bge.c Fri Jun 2 08:06:39 2006 @@ -152,16 +152,28 @@ "Broadcom BCM5704C Dual Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5704S, "Broadcom BCM5704S Dual Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5704S_2, + "Broadcom BCM5704S v2 Dual Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5705, "Broadcom BCM5705 Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5705K, "Broadcom BCM5705K Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5705F, + "Broadcom BCM5705F Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5705M, "Broadcom BCM5705M Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5705M_ALT, "Broadcom BCM5705M Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5714C, "Broadcom BCM5714C Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5714S, + "Broadcom BCM5714S Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5715, + "Broadcom BCM5715 Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5715S, + "Broadcom BCM5715S Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5720, + "Broadcom BCM5720 Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5721, "Broadcom BCM5721 Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5750, @@ -170,10 +182,22 @@ "Broadcom BCM5750M Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5751, "Broadcom BCM5751 Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5751F, + "Broadcom BCM5751F Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5751M, "Broadcom BCM5751M Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5752, "Broadcom BCM5752 Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5753F, + "Broadcom BCM5753F Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5753M, + "Broadcom BCM5753M Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5780, + "Broadcom BCM5780 Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5780S, + "Broadcom BCM5780S Gigabit Ethernet" }, + { BCOM_VENDORID, BCOM_DEVICEID_BCM5781, + "Broadcom BCM5781 Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5782, "Broadcom BCM5782 Gigabit Ethernet" }, { BCOM_VENDORID, BCOM_DEVICEID_BCM5788, @@ -1048,30 +1072,45 @@ /* Set up the PCI DMA control register. */ if (sc->bge_pcie) { dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD | - (0xf << BGE_PCIDMARWCTL_RD_WAT_SHIFT) | - (0x2 << BGE_PCIDMARWCTL_WR_WAT_SHIFT); + (0x180000); } else if (pci_read_config(sc->bge_dev, BGE_PCI_PCISTATE, 4) & BGE_PCISTATE_PCI_BUSMODE) { /* Conventional PCI bus */ + if (sc->bge_asicrev == BGE_ASICREV_BCM5705 || + BGE_ASICREV_BCM5750) { + dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD | + (0x3F0000); } + else dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD | - (0x7 << BGE_PCIDMARWCTL_RD_WAT_SHIFT) | - (0x7 << BGE_PCIDMARWCTL_WR_WAT_SHIFT) | - (0x0F); + (0x3F000F); } else { /* PCI-X bus */ + if (sc->bge_asicrev == BGE_ASICREV_BCM5750) { + dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD; + dma_rw_ctl &= ~BGE_PCIDMARWCTL_ONEDMA_ATONCE; /* XXX */ + device_printf(sc->bge_dev, "Gotcha\n"); + + if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5780) + dma_rw_ctl |= (1 << 20) | (1 << 18) | + BGE_PCIDMARWCTL_ONEDMA_ATONCE; + else + dma_rw_ctl |= (1<<20) | (1<<18) | (1<<15); + } else if (sc->bge_asicrev == BGE_ASICREV_BCM5704 || BGE_ASICREV_BCM5703) /* * The 5704 uses a different encoding of read/write * watermarks. */ - if (sc->bge_asicrev == BGE_ASICREV_BCM5704) dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD | - (0x7 << BGE_PCIDMARWCTL_RD_WAT_SHIFT) | - (0x3 << BGE_PCIDMARWCTL_WR_WAT_SHIFT); + (0x9F0000); + else if (sc->bge_asicrev == BGE_ASICREV_BCM5780) + dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD | + (0x144000); + else if (sc->bge_asicrev == BGE_ASICREV_BCM5714) + dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD | + (0x148000); else dma_rw_ctl = BGE_PCI_READ_CMD|BGE_PCI_WRITE_CMD | - (0x3 << BGE_PCIDMARWCTL_RD_WAT_SHIFT) | - (0x3 << BGE_PCIDMARWCTL_WR_WAT_SHIFT) | - (0x0F); + (0x1B000F); /* * 5703 and 5704 need ONEDMA_AT_ONCE as a workaround @@ -2103,7 +2142,8 @@ * on this chip. */ if (sc->bge_asicrev == BGE_ASICREV_BCM5714 || - sc->bge_asicrev == BGE_ASICREV_BCM5752) + sc->bge_asicrev == BGE_ASICREV_BCM5752 || + sc->bge_asicrev == BGE_ASICREV_BCM5780) sc->bge_asicrev = BGE_ASICREV_BCM5750; /* ============================================================== -- / Pavel Merdin Fotki Inc.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200606021510.k52FACXu042845>