Module Name: src Committed By: martin Date: Wed Nov 6 09:43:20 UTC 2019
Modified Files: src/sys/arch/arm/arm32 [netbsd-9]: bus_dma.c src/sys/external/bsd/drm2/drm [netbsd-9]: drm_gem_cma_helper.c Log Message: Pull up following revision(s) (requested by jmcneill in ticket #399): sys/arch/arm/arm32/bus_dma.c: revision 1.117 sys/arch/arm/arm32/bus_dma.c: revision 1.118 sys/external/bsd/drm2/drm/drm_gem_cma_helper.c: revision 1.8 bus_dmamem_map: honour BUS_DMA_PREFETCHABLE hint Map buffer objects with BUS_DMA_PREFETCHABLE. Do not try to use direct map for prefetchable mappings To generate a diff of this commit: cvs rdiff -u -r1.115.2.1 -r1.115.2.2 src/sys/arch/arm/arm32/bus_dma.c cvs rdiff -u -r1.7 -r1.7.4.1 \ src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.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/arm/arm32/bus_dma.c diff -u src/sys/arch/arm/arm32/bus_dma.c:1.115.2.1 src/sys/arch/arm/arm32/bus_dma.c:1.115.2.2 --- src/sys/arch/arm/arm32/bus_dma.c:1.115.2.1 Tue Sep 24 02:52:09 2019 +++ src/sys/arch/arm/arm32/bus_dma.c Wed Nov 6 09:43:19 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_dma.c,v 1.115.2.1 2019/09/24 02:52:09 martin Exp $ */ +/* $NetBSD: bus_dma.c,v 1.115.2.2 2019/11/06 09:43:19 martin Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 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.115.2.1 2019/09/24 02:52:09 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.115.2.2 2019/11/06 09:43:19 martin Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -1339,7 +1339,7 @@ _bus_dmamem_map(bus_dma_tag_t t, bus_dma * contiguous area then this area is already mapped. Let's see if we * avoid having a separate mapping for it. */ - if (nsegs == 1) { + if (nsegs == 1 && (flags & BUS_DMA_PREFETCHABLE) == 0) { /* * If this is a non-COHERENT mapping, then the existing kernel * mapping is already compatible with it. @@ -1426,6 +1426,7 @@ _bus_dmamem_map(bus_dma_tag_t t, bus_dma pa < (segs[curseg].ds_addr + segs[curseg].ds_len); pa += PAGE_SIZE, va += PAGE_SIZE, size -= PAGE_SIZE) { bool uncached = (flags & BUS_DMA_COHERENT); + bool prefetchable = (flags & BUS_DMA_PREFETCHABLE); #ifdef DEBUG_DMA printf("wiring p%lx to v%lx", pa, va); #endif /* DEBUG_DMA */ @@ -1443,8 +1444,14 @@ _bus_dmamem_map(bus_dma_tag_t t, bus_dma uncached = false; } + u_int pmap_flags = PMAP_WIRED; + if (prefetchable) + pmap_flags |= PMAP_WRITE_COMBINE; + else if (uncached) + pmap_flags |= PMAP_NOCACHE; + pmap_kenter_pa(va, pa, VM_PROT_READ | VM_PROT_WRITE, - PMAP_WIRED | (uncached ? PMAP_NOCACHE : 0)); + pmap_flags); } } pmap_update(pmap_kernel()); Index: src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c diff -u src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c:1.7 src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c:1.7.4.1 --- src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c:1.7 Fri Mar 8 02:53:22 2019 +++ src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c Wed Nov 6 09:43:20 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_gem_cma_helper.c,v 1.7 2019/03/08 02:53:22 mrg Exp $ */ +/* $NetBSD: drm_gem_cma_helper.c,v 1.7.4.1 2019/11/06 09:43:20 martin Exp $ */ /*- * Copyright (c) 2015-2017 Jared McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_gem_cma_helper.c,v 1.7 2019/03/08 02:53:22 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_gem_cma_helper.c,v 1.7.4.1 2019/11/06 09:43:20 martin Exp $"); #include <drm/drmP.h> #include <drm/drm_gem_cma_helper.h> @@ -55,7 +55,8 @@ drm_gem_cma_create_internal(struct drm_d if (error) goto failed; error = bus_dmamem_map(obj->dmat, obj->dmasegs, nsegs, - obj->dmasize, &obj->vaddr, BUS_DMA_WAITOK | BUS_DMA_COHERENT); + obj->dmasize, &obj->vaddr, + BUS_DMA_WAITOK | BUS_DMA_PREFETCHABLE); if (error) goto free; error = bus_dmamap_create(obj->dmat, obj->dmasize, 1,