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.