Module Name:    src
Committed By:   skrll
Date:           Wed Mar 26 16:07:15 UTC 2014

Modified Files:
        src/sys/external/bsd/vchiq/dist/interface/vchiq_arm: vchiq_2835_arm.c

Log Message:
Correct some bus_dma operations.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 \
    src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c

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

Modified files:

Index: src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c
diff -u src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c:1.9 src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c:1.10
--- src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c:1.9	Sun Apr 28 20:57:26 2013
+++ src/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c	Wed Mar 26 16:07:15 2014
@@ -100,7 +100,7 @@ vchiq_platform_init(VCHIQ_STATE_T *state
 	dma_nsegs = __arraycount(dma_segs);
 	err = bus_dmamem_alloc(&bcm2835_bus_dma_tag,
 	    g_slot_mem_size + frag_mem_size, PAGE_SIZE, 0,
-	    dma_segs, dma_nsegs, &dma_nsegs, BUS_DMA_COHERENT | BUS_DMA_WAITOK);
+	    dma_segs, dma_nsegs, &dma_nsegs, BUS_DMA_WAITOK);
 	if (err) {
 		vchiq_log_error(vchiq_core_log_level, "Unable to allocate channel memory");
 		err = -ENOMEM;
@@ -289,7 +289,7 @@ vchiq_prepare_bulk_data(VCHIQ_BULK_T *bu
 		goto fail1;
 
 	ret = bus_dmamem_map(&bcm2835_bus_dma_tag, bi->pagelist_sgs, nsegs,
-	    bi->pagelist_size, &bi->pagelist, BUS_DMA_WAITOK);
+	    bi->pagelist_size, &bi->pagelist, BUS_DMA_COHERENT | BUS_DMA_WAITOK);
 	if (ret != 0)
 		goto fail2;
 
@@ -378,7 +378,7 @@ vchiq_prepare_bulk_data(VCHIQ_BULK_T *bu
 	bulk->remote_data = bi;
 
 	bus_dmamap_sync(&bcm2835_bus_dma_tag, bi->pagelist_map, 0,
-	    bi->pagelist_size, BUS_DMASYNC_PREREAD);
+	    bi->pagelist_size, BUS_DMASYNC_PREWRITE);
 
 	bus_dmamap_sync(&bcm2835_bus_dma_tag, bi->dmamap, 0, bi->size,
 	    pagelist->type == PAGELIST_WRITE ?
@@ -420,6 +420,13 @@ vchiq_complete_bulk(VCHIQ_BULK_T *bulk)
 		BULKINFO_T *bi = bulk->remote_data;
 		PAGELIST_T *pagelist = bi->pagelist;
 
+		bus_dmamap_sync(&bcm2835_bus_dma_tag, bi->pagelist_map, 0,
+		    bi->pagelist_size, BUS_DMASYNC_POSTWRITE);
+
+		bus_dmamap_sync(&bcm2835_bus_dma_tag, bi->dmamap, 0, bi->size,
+		    pagelist->type == PAGELIST_WRITE ?
+		    BUS_DMASYNC_POSTWRITE : BUS_DMASYNC_POSTREAD);
+
 		/* Deal with any partial cache lines (fragments) */
 		if (pagelist->type >= PAGELIST_READ_WITH_FRAGMENTS) {
 			FRAGMENTS_T *fragments = g_fragments_base +
@@ -469,13 +476,6 @@ vchiq_complete_bulk(VCHIQ_BULK_T *bulk)
 			up(&g_free_fragments_mutex);
 			up(&g_free_fragments_sema);
 		}
-		bus_dmamap_sync(&bcm2835_bus_dma_tag, bi->pagelist_map, 0,
-		    bi->pagelist_size, BUS_DMASYNC_POSTREAD);
-
-		bus_dmamap_sync(&bcm2835_bus_dma_tag, bi->dmamap, 0, bi->size,
-		    pagelist->type == PAGELIST_WRITE ?
-		    BUS_DMASYNC_POSTWRITE : BUS_DMASYNC_POSTREAD);
-
 		bus_dmamap_unload(&bcm2835_bus_dma_tag, bi->dmamap);
 		bus_dmamap_destroy(&bcm2835_bus_dma_tag, bi->dmamap);
 		if (IS_USER_ADDRESS(bi->buf))

Reply via email to