Module Name:    src
Committed By:   jmcneill
Date:           Mon Aug 30 22:56:26 UTC 2021

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

Log Message:
Add storage for an iommu cookie in bus_dmamap_t and store untranslated CPU
address in bus_dma_segment_t.


To generate a diff of this commit:
cvs rdiff -u -r1.132 -r1.133 src/sys/arch/arm/arm32/bus_dma.c
cvs rdiff -u -r1.16 -r1.17 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.132 src/sys/arch/arm/arm32/bus_dma.c:1.133
--- src/sys/arch/arm/arm32/bus_dma.c:1.132	Sun Feb  7 10:47:40 2021
+++ src/sys/arch/arm/arm32/bus_dma.c	Mon Aug 30 22:56:26 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_dma.c,v 1.132 2021/02/07 10:47:40 skrll Exp $	*/
+/*	$NetBSD: bus_dma.c,v 1.133 2021/08/30 22:56:26 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2020 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
 #include "opt_cputypes.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.132 2021/02/07 10:47:40 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.133 2021/08/30 22:56:26 jmcneill Exp $");
 
 #include <sys/param.h>
 
@@ -259,6 +259,7 @@ _bus_dmamap_load_paddr(bus_dma_tag_t t, 
 		/* new segment */
 		segs[nseg].ds_addr = curaddr;
 		segs[nseg].ds_len = sgsize;
+		segs[nseg]._ds_paddr = curaddr;
 		segs[nseg]._ds_flags = _ds_flags;
 		nseg++;
 	}
@@ -1717,7 +1718,8 @@ _bus_dmamem_alloc_range(bus_dma_tag_t t,
 	 */
 	m = TAILQ_FIRST(&mlist);
 	curseg = 0;
-	lastaddr = segs[curseg].ds_addr = VM_PAGE_TO_PHYS(m);
+	lastaddr = segs[curseg].ds_addr = segs[curseg]._ds_paddr =
+	    VM_PAGE_TO_PHYS(m);
 	segs[curseg].ds_len = PAGE_SIZE;
 #ifdef DEBUG_DMA
 		printf("alloc: page %#lx\n", lastaddr);
@@ -1742,6 +1744,7 @@ _bus_dmamem_alloc_range(bus_dma_tag_t t,
 				return EFBIG;
 			}
 			segs[curseg].ds_addr = curaddr;
+			segs[curseg]._ds_paddr = curaddr;
 			segs[curseg].ds_len = PAGE_SIZE;
 		}
 		lastaddr = curaddr;

Index: src/sys/arch/arm/include/bus_defs.h
diff -u src/sys/arch/arm/include/bus_defs.h:1.16 src/sys/arch/arm/include/bus_defs.h:1.17
--- src/sys/arch/arm/include/bus_defs.h:1.16	Fri Apr 23 06:02:48 2021
+++ src/sys/arch/arm/include/bus_defs.h	Mon Aug 30 22:56:26 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_defs.h,v 1.16 2021/04/23 06:02:48 skrll Exp $	*/
+/*	$NetBSD: bus_defs.h,v 1.17 2021/08/30 22:56:26 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
@@ -377,6 +377,7 @@ struct arm32_bus_dma_segment {
 	 * PRIVATE MEMBERS:
 	 */
 	uint32_t	_ds_flags;	/* _BUS_DMAMAP_COHERENT */
+	paddr_t		_ds_paddr;	/* CPU address */
 };
 typedef struct arm32_bus_dma_segment	bus_dma_segment_t;
 
@@ -481,6 +482,7 @@ struct arm32_bus_dmamap {
 	struct vmspace	*_dm_vmspace;	/* vmspace that owns the mapping */
 
 	void		*_dm_cookie;	/* cookie for bus-specific functions */
+	void		*_dm_iommu;	/* cookie for iommu functions */
 
 	/*
 	 * PUBLIC MEMBERS: these are used by machine-independent code.

Reply via email to