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;