svn commit: r217231 - stable/7/sys/dev/bge

Pyun YongHyeon yongari at FreeBSD.org
Mon Jan 10 19:48:25 UTC 2011


Author: yongari
Date: Mon Jan 10 19:48:24 2011
New Revision: 217231
URL: http://svn.freebsd.org/changeset/base/217231

Log:
  MFC r217226:
    Apply DMA address space restriction to controllers that have 4GB
    DMA boundary bug and runs with PCI-X mode.  watchdog timeout was
    observed on BCM5704 which lives behind certain PCI-X bridge(e.g.
    AMD 8131 PCI-X bridge).  It's still not clear whether the root
    cause came from that PCI-X bridge or not. The watchdog timeout
    indicates the issue is in TX path. If the bridge reorders TX
    mailbox write accesses it would generate all kinds of problems but
    I'm not sure.  This should be revisited.
  
    Early MFC requested by re@ for inclusion in 8.2-RC2/7.4-RC2.
  
    Tested by:	Michael L. Squires (mikes <> siralan dot org)

Modified:
  stable/7/sys/dev/bge/if_bge.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/dev/bge/if_bge.c
==============================================================================
--- stable/7/sys/dev/bge/if_bge.c	Mon Jan 10 19:43:16 2011	(r217230)
+++ stable/7/sys/dev/bge/if_bge.c	Mon Jan 10 19:48:24 2011	(r217231)
@@ -2473,8 +2473,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,


More information about the svn-src-all mailing list