diff options
| author | jmcneill <jmcneill@NetBSD.org> | 2021-08-30 22:56:26 +0000 |
|---|---|---|
| committer | jmcneill <jmcneill@NetBSD.org> | 2021-08-30 22:56:26 +0000 |
| commit | d023deb89ec32bb7d3f34e1f05d4dedc199cdb74 (patch) | |
| tree | b81572f7812f25395920a9b1cdb571146120ed42 | |
| parent | b600f5c3e59e2111d5f9a8d2685510a8ad0066f5 (diff) | |
Add storage for an iommu cookie in bus_dmamap_t and store untranslated CPU
address in bus_dma_segment_t.
| -rw-r--r-- | sys/arch/arm/arm32/bus_dma.c | 9 | ||||
| -rw-r--r-- | sys/arch/arm/include/bus_defs.h | 4 |
2 files changed, 9 insertions, 4 deletions
diff --git a/sys/arch/arm/arm32/bus_dma.c b/sys/arch/arm/arm32/bus_dma.c index 3cb5fbb4e89..495530cb979 100644 --- a/sys/arch/arm/arm32/bus_dma.c +++ b/sys/arch/arm/arm32/bus_dma.c @@ -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, bus_dmamap_t map, /* 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, bus_size_t size, bus_size_t alignment, */ 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, bus_size_t size, bus_size_t alignment, return EFBIG; } segs[curseg].ds_addr = curaddr; + segs[curseg]._ds_paddr = curaddr; segs[curseg].ds_len = PAGE_SIZE; } lastaddr = curaddr; diff --git a/sys/arch/arm/include/bus_defs.h b/sys/arch/arm/include/bus_defs.h index 93f7fb7b335..6e1ac424b5f 100644 --- a/sys/arch/arm/include/bus_defs.h +++ b/sys/arch/arm/include/bus_defs.h @@ -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. |
