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);