Module Name:    src
Committed By:   matt
Date:           Sun Jan 27 18:31:32 UTC 2013

Modified Files:
        src/sys/arch/arm/arm32: bus_dma.c
        src/sys/arch/arm/broadcom: bcm2835_obio.c
        src/sys/arch/arm/include: bus_defs.h

Log Message:
Add a _BUS_DMAMAP_NOALLOC which tells bus_dmamem_alloc to skip that
dmarange when allocating memory.
Add a second dmarange to bcm23xx obio to allow it to map coherently mapped
memory.


To generate a diff of this commit:
cvs rdiff -u -r1.69 -r1.70 src/sys/arch/arm/arm32/bus_dma.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/broadcom/bcm2835_obio.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/include/bus_defs.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/arm32/bus_dma.c
diff -u src/sys/arch/arm/arm32/bus_dma.c:1.69 src/sys/arch/arm/arm32/bus_dma.c:1.70
--- src/sys/arch/arm/arm32/bus_dma.c:1.69	Sun Jan 27 17:48:38 2013
+++ src/sys/arch/arm/arm32/bus_dma.c	Sun Jan 27 18:31:31 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_dma.c,v 1.69 2013/01/27 17:48:38 matt Exp $	*/
+/*	$NetBSD: bus_dma.c,v 1.70 2013/01/27 18:31:31 matt Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #define _ARM32_BUS_DMA_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.69 2013/01/27 17:48:38 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.70 2013/01/27 18:31:31 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1132,7 +1132,8 @@ _bus_dmamem_alloc(bus_dma_tag_t t, bus_s
 	if ((dr = t->_ranges) != NULL) {
 		error = ENOMEM;
 		for (i = 0; i < t->_nranges; i++, dr++) {
-			if (dr->dr_len == 0)
+			if (dr->dr_len == 0
+			    || (dr->dr_flags & _BUS_DMAMAP_NOALLOC))
 				continue;
 			error = _bus_dmamem_alloc_range(t, size, alignment,
 			    boundary, segs, nsegs, rsegs, flags,

Index: src/sys/arch/arm/broadcom/bcm2835_obio.c
diff -u src/sys/arch/arm/broadcom/bcm2835_obio.c:1.15 src/sys/arch/arm/broadcom/bcm2835_obio.c:1.16
--- src/sys/arch/arm/broadcom/bcm2835_obio.c:1.15	Sun Jan 27 17:44:39 2013
+++ src/sys/arch/arm/broadcom/bcm2835_obio.c	Sun Jan 27 18:31:32 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835_obio.c,v 1.15 2013/01/27 17:44:39 matt Exp $	*/
+/*	$NetBSD: bcm2835_obio.c,v 1.16 2013/01/27 18:31:32 matt Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_obio.c,v 1.15 2013/01/27 17:44:39 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_obio.c,v 1.16 2013/01/27 18:31:32 matt Exp $");
 
 #include "locators.h"
 #include "obio.h"
@@ -47,7 +47,7 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_obio
 struct obio_softc {
 	device_t		sc_dev;
 	bus_dma_tag_t		sc_dmat;
-	struct arm32_dma_range	sc_dmarange;
+	struct arm32_dma_range	sc_dmarange[2];
 	bus_space_tag_t		sc_iot;
 	bus_space_handle_t	sc_ioh;
 	bus_addr_t		sc_base;
@@ -180,11 +180,14 @@ obio_attach(device_t parent, device_t se
 	sc->sc_dev = self;
 	sc->sc_dmat = &bcm2835_bus_dma_tag;
 
-	sc->sc_dmarange.dr_sysbase = 0;
-	sc->sc_dmarange.dr_busbase = BCM2835_BUSADDR_CACHE_COHERENT;
-	sc->sc_dmarange.dr_len = physmem * PAGE_SIZE;
-	bcm2835_bus_dma_tag._ranges = &sc->sc_dmarange;
-	bcm2835_bus_dma_tag._nranges = 1;
+	sc->sc_dmarange[0].dr_sysbase = 0;
+	sc->sc_dmarange[0].dr_busbase = BCM2835_BUSADDR_CACHE_COHERENT;
+	sc->sc_dmarange[0].dr_len = physmem * PAGE_SIZE;
+	sc->sc_dmarange[1] = sc->sc_dmarange[0];
+	sc->sc_dmarange[1].dr_sysbase = BCM2835_BUSADDR_CACHE_COHERENT;
+	sc->sc_dmarange[1].dr_flags = _BUS_DMAMAP_NOALLOC;
+	bcm2835_bus_dma_tag._ranges = sc->sc_dmarange;
+	bcm2835_bus_dma_tag._nranges = __arraycount(sc->sc_dmarange);
 
 	aprint_normal("\n");
 

Index: src/sys/arch/arm/include/bus_defs.h
diff -u src/sys/arch/arm/include/bus_defs.h:1.6 src/sys/arch/arm/include/bus_defs.h:1.7
--- src/sys/arch/arm/include/bus_defs.h:1.6	Sun Jan 27 17:38:55 2013
+++ src/sys/arch/arm/include/bus_defs.h	Sun Jan 27 18:31:31 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_defs.h,v 1.6 2013/01/27 17:38:55 matt Exp $	*/
+/*	$NetBSD: bus_defs.h,v 1.7 2013/01/27 18:31:31 matt Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
@@ -300,8 +300,9 @@ struct bus_space {
  * Private flags stored in the DMA map.
  */
 #define	_BUS_DMAMAP_COHERENT	0x10000	/* no cache flush necessary on sync */
-#define	_BUS_DMAMAP_IS_BOUNCING	0x20000	/* is bouncing current xfer */
-#define	_BUS_DMAMAP_MEM_XLATE	0x40000 /* translate sys->bus for dmamam_map */
+#define	_BUS_DMAMAP_IS_BOUNCING	0x20000 /* is bouncing current xfer */
+#define	_BUS_DMAMAP_MEM_XLATE	0x40000	/* translate sys->bus for dmamam_map */
+#define	_BUS_DMAMAP_NOALLOC	0x80000	/* don't alloc memory from this range */
 
 /* Forwards needed by prototypes below. */
 struct mbuf;

Reply via email to