Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 11:26:26 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_ih.c
        src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_gtt.c
        src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu:
            nouveau_nvkm_subdev_mmu_vmmnv44.c
        src/sys/external/bsd/drm2/dist/drm/radeon: radeon_device.c
            radeon_gart.c

Log Message:
drm: Sprinkle BUS_DMA_COHERENT/NOCACHE and bus_dmamap_sync.

Algorithm:

- For dummy pages, use NOCACHE and PREREAD|PREWRITE.
- In #ifdef __NetBSD__ #else dma_alloc_coherent, use BUS_DMA_COHERENT.
- For (GPU) page tables we program, use PREWRITE.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
    src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ih.c
cvs rdiff -u -r1.5 -r1.6 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c
cvs rdiff -u -r1.3 -r1.4 \
    
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmmnv44.c
cvs rdiff -u -r1.11 -r1.12 \
    src/sys/external/bsd/drm2/dist/drm/radeon/radeon_device.c
cvs rdiff -u -r1.13 -r1.14 \
    src/sys/external/bsd/drm2/dist/drm/radeon/radeon_gart.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/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ih.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ih.c:1.6 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ih.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ih.c:1.6	Sun Dec 19 10:20:10 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ih.c	Sun Dec 19 11:26:25 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_ih.c,v 1.6 2021/12/19 10:20:10 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_ih.c,v 1.7 2021/12/19 11:26:25 riastradh Exp $	*/
 
 /*
  * Copyright 2014 Advanced Micro Devices, Inc.
@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_ih.c,v 1.6 2021/12/19 10:20:10 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_ih.c,v 1.7 2021/12/19 11:26:25 riastradh Exp $");
 
 #include <linux/dma-mapping.h>
 
@@ -84,7 +84,7 @@ fail1:			bus_dmamem_free(adev->ddev->dma
 			goto fail0;
 		}
 		r = -bus_dmamem_map(adev->ddev->dmat, &ih->ring_seg, 1, size,
-		    &kva, BUS_DMA_WAITOK);
+		    &kva, BUS_DMA_WAITOK|BUS_DMA_COHERENT);
 		if (r) {
 fail2:			bus_dmamap_destroy(adev->ddev->dmat, ih->ring_map);
 			ih->ring_map = NULL;

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c:1.5	Sun Dec 19 11:12:13 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c	Sun Dec 19 11:26:26 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_gtt.c,v 1.5 2021/12/19 11:12:13 riastradh Exp $	*/
+/*	$NetBSD: intel_gtt.c,v 1.6 2021/12/19 11:26:26 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_gtt.c,v 1.5 2021/12/19 11:12:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_gtt.c,v 1.6 2021/12/19 11:26:26 riastradh Exp $");
 
 #include <linux/slab.h> /* fault-inject.h is not standalone! */
 
@@ -419,10 +419,12 @@ int setup_scratch_page(struct i915_addre
 
 		/* Zero the page.  */
 		ret = -bus_dmamem_map(vm->dmat, &vm->scratch_page.seg, 1,
-		    size, &kva, BUS_DMA_NOWAIT);
+		    size, &kva, BUS_DMA_NOWAIT|BUS_DMA_NOCACHE);
 		if (ret)
 			goto unload_dmamap;
 		memset(kva, 0, size);
+		bus_dmamap_sync(vm->dmat, vm->scratch_page.map, 0, size,
+		    BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
 		bus_dmamem_unmap(vm->dmat, kva, size);
 
 		/* XXX Is this page guaranteed to work as a huge page?  */

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmmnv44.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmmnv44.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmmnv44.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmmnv44.c:1.3	Sun Dec 19 10:51:58 2021
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_vmmnv44.c	Sun Dec 19 11:26:26 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_mmu_vmmnv44.c,v 1.3 2021/12/19 10:51:58 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_mmu_vmmnv44.c,v 1.4 2021/12/19 11:26:26 riastradh Exp $	*/
 
 /*
  * Copyright 2017 Red Hat Inc.
@@ -22,7 +22,7 @@
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mmu_vmmnv44.c,v 1.3 2021/12/19 10:51:58 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mmu_vmmnv44.c,v 1.4 2021/12/19 11:26:26 riastradh Exp $");
 
 #include "vmm.h"
 
@@ -254,7 +254,7 @@ fail1:		bus_dmamem_free(dmat, &vmm->null
 
 	/* XXX errno NetBSD->Linux */
 	ret = -bus_dmamem_map(dmat, &vmm->nullseg, 1, nullsz,
-	    &vmm->nullp, BUS_DMA_WAITOK);
+	    &vmm->nullp, BUS_DMA_WAITOK|BUS_DMA_COHERENT);
 	if (ret) {
 fail2:		bus_dmamap_destroy(dmat, vmm->nullmap);
 		goto fail1;

Index: src/sys/external/bsd/drm2/dist/drm/radeon/radeon_device.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_device.c:1.11 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_device.c:1.12
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_device.c:1.11	Sat Dec 18 23:45:43 2021
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_device.c	Sun Dec 19 11:26:26 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_device.c,v 1.11 2021/12/18 23:45:43 riastradh Exp $	*/
+/*	$NetBSD: radeon_device.c,v 1.12 2021/12/19 11:26:26 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeon_device.c,v 1.11 2021/12/18 23:45:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_device.c,v 1.12 2021/12/19 11:26:26 riastradh Exp $");
 
 #include <linux/console.h>
 #include <linux/efi.h>
@@ -839,6 +839,8 @@ int radeon_dummy_page_init(struct radeon
 		goto fail3;
 
 	memset(rdev->dummy_page.rdp_addr, 0, PAGE_SIZE);
+	bus_dmamap_sync(rdev->ddev->dmat, rdev->dummy_page.rdp_map, 0,
+	    PAGE_SIZE, BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
 
 	/* Success!  */
 	rdev->dummy_page.addr = rdev->dummy_page.rdp_map->dm_segs[0].ds_addr;

Index: src/sys/external/bsd/drm2/dist/drm/radeon/radeon_gart.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_gart.c:1.13 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_gart.c:1.14
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_gart.c:1.13	Sat Dec 18 23:45:43 2021
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_gart.c	Sun Dec 19 11:26:26 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_gart.c,v 1.13 2021/12/18 23:45:43 riastradh Exp $	*/
+/*	$NetBSD: radeon_gart.c,v 1.14 2021/12/19 11:26:26 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeon_gart.c,v 1.13 2021/12/18 23:45:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_gart.c,v 1.14 2021/12/19 11:26:26 riastradh Exp $");
 
 #include <linux/pci.h>
 #include <linux/vmalloc.h>
@@ -99,7 +99,9 @@ int radeon_gart_table_ram_alloc(struct r
 	if (error)
 		goto fail3;
 
-	memset((void *)rdev->gart.ptr, 0, rdev->gart.table_size);
+	memset(rdev->gart.ptr, 0, rdev->gart.table_size);
+	bus_dmamap_sync(rdev->ddev->dmat, rdev->gart.rg_table_map, 0,
+	    rdev->gart.table_size, BUS_DMASYNC_PREWRITE);
 
 	/* Success!  */
 	rdev->gart.table_addr = rdev->gart.rg_table_map->dm_segs[0].ds_addr;

Reply via email to