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

Reply via email to