summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/bge/if_bge.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c
index 09d790ecb4ce..0fb31734ba67 100644
--- a/sys/dev/bge/if_bge.c
+++ b/sys/dev/bge/if_bge.c
@@ -2479,8 +2479,18 @@ bge_dma_alloc(struct bge_softc *sc)
/* Create parent tag for buffers. */
boundary = 0;
- if ((sc->bge_flags & BGE_FLAG_4G_BNDRY_BUG) != 0)
+ if ((sc->bge_flags & BGE_FLAG_4G_BNDRY_BUG) != 0) {
boundary = BGE_DMA_BNDRY;
+ /*
+ * XXX
+ * watchdog timeout issue was observed on BCM5704 which
+ * lives behind PCI-X bridge(e.g AMD 8131 PCI-X bridge).
+ * Limiting DMA address space to 32bits seems to address
+ * it.
+ */
+ if (sc->bge_flags & BGE_FLAG_PCIX)
+ lowaddr = BUS_SPACE_MAXADDR_32BIT;
+ }
error = bus_dma_tag_create(bus_get_dma_tag(sc->bge_dev),
1, boundary, lowaddr, BUS_SPACE_MAXADDR, NULL,
NULL, BUS_SPACE_MAXSIZE_32BIT, 0, BUS_SPACE_MAXSIZE_32BIT,