Module Name: src Committed By: riastradh Date: Tue Jun 4 21:42:58 UTC 2024
Modified Files: src/sys/arch/x86/x86: bus_dma.c Log Message: x86: Teach bus_dmamem_map about BUS_DMA_PREFETCHABLE. PR port-amd64/58308 To generate a diff of this commit: cvs rdiff -u -r1.90 -r1.91 src/sys/arch/x86/x86/bus_dma.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/arch/x86/x86/bus_dma.c diff -u src/sys/arch/x86/x86/bus_dma.c:1.90 src/sys/arch/x86/x86/bus_dma.c:1.91 --- src/sys/arch/x86/x86/bus_dma.c:1.90 Tue Mar 28 19:55:42 2023 +++ src/sys/arch/x86/x86/bus_dma.c Tue Jun 4 21:42:58 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_dma.c,v 1.90 2023/03/28 19:55:42 riastradh Exp $ */ +/* $NetBSD: bus_dma.c,v 1.91 2024/06/04 21:42:58 riastradh Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2007, 2020 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.90 2023/03/28 19:55:42 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.91 2024/06/04 21:42:58 riastradh Exp $"); /* * The following is included because _bus_dma_uiomove is derived from @@ -1164,7 +1164,7 @@ _bus_dmamem_free(bus_dma_tag_t t, bus_dm /* * Common function for mapping DMA-safe memory. May be called by * bus-specific DMA memory map functions. - * This supports BUS_DMA_NOCACHE. + * This supports BUS_DMA_NOCACHE and BUS_DMA_PREFETCHABLE. */ static int _bus_dmamem_map(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs, @@ -1178,8 +1178,13 @@ _bus_dmamem_map(bus_dma_tag_t t, bus_dma u_int pmapflags = PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE; size = round_page(size); + KASSERTMSG(((flags & (BUS_DMA_NOCACHE|BUS_DMA_PREFETCHABLE)) != + (BUS_DMA_NOCACHE|BUS_DMA_PREFETCHABLE)), + "BUS_DMA_NOCACHE and BUS_DMA_PREFETCHABLE are mutually exclusive"); if (flags & BUS_DMA_NOCACHE) pmapflags |= PMAP_NOCACHE; + if (flags & BUS_DMA_PREFETCHABLE) + pmapflags |= PMAP_WRITE_COMBINE; va = uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);