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.