From 822f63fc947bf20a2651af14b3da9a5dea7a363d Mon Sep 17 00:00:00 2001
From: Bill Paul <wpaul@FreeBSD.org>
Date: Sun, 10 Aug 2003 18:04:35 +0000
Subject: [PATCH] The BCM5704 ASIC has a smaller mbuf space than the
 5700/1/2/3. Failure to configure this correctly yields many watchdog timeouts
 even on lightly loaded machines. This is a common complaint from users with
 Dell 1750 servers with built-in dual 5704 NICs.

---
 sys/dev/bge/if_bge.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c
index d78177986c77..df389e47eaa6 100644
--- a/sys/dev/bge/if_bge.c
+++ b/sys/dev/bge/if_bge.c
@@ -1310,16 +1310,24 @@ bge_blockinit(sc)
 	 */
 	CSR_WRITE_4(sc, BGE_PCI_MEMWIN_BASEADDR, 0);
 
+	/* Note: the BCM5704 has a smaller mbuf space than other chips. */
+
 	if (sc->bge_asicrev != BGE_ASICREV_BCM5705) {
 		/* Configure mbuf memory pool */
 		if (sc->bge_extram) {
 			CSR_WRITE_4(sc, BGE_BMAN_MBUFPOOL_BASEADDR,
 			    BGE_EXT_SSRAM);
-			CSR_WRITE_4(sc, BGE_BMAN_MBUFPOOL_LEN, 0x18000);
+			if (sc->bge_asicrev == BGE_ASICREV_BCM5704)
+				CSR_WRITE_4(sc, BGE_BMAN_MBUFPOOL_LEN, 0x10000);
+			else
+				CSR_WRITE_4(sc, BGE_BMAN_MBUFPOOL_LEN, 0x18000);
 		} else {
 			CSR_WRITE_4(sc, BGE_BMAN_MBUFPOOL_BASEADDR,
 			    BGE_BUFFPOOL_1);
-			CSR_WRITE_4(sc, BGE_BMAN_MBUFPOOL_LEN, 0x18000);
+			if (sc->bge_asicrev == BGE_ASICREV_BCM5704)
+				CSR_WRITE_4(sc, BGE_BMAN_MBUFPOOL_LEN, 0x10000);
+			else
+				CSR_WRITE_4(sc, BGE_BMAN_MBUFPOOL_LEN, 0x18000);
 		}
 
 		/* Configure DMA resource pool */