From d2ed3fe60b74bbb38fd895cdc29c054aef3d9a14 Mon Sep 17 00:00:00 2001 From: Taylor R Campbell <riastradh@NetBSD.org> Date: Mon, 3 Jun 2024 19:57:23 +0000 Subject: [PATCH] i915_gem_mman.c: Apply mmap types via pmap flags. --- .../drm2/dist/drm/i915/gem/i915_gem_mman.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c index d5d240db673a..6f6a9bdc637c 100644 --- a/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c +++ b/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c @@ -345,6 +345,23 @@ static vm_fault_t vm_fault_cpu(struct vm_fault *vmf) KASSERT(i915_gem_object_type_has(obj, I915_GEM_OBJECT_HAS_STRUCT_PAGE)); + int pmapflags; + switch (mmo->mmap_type) { + case I915_MMAP_TYPE_WC: + case I915_MMAP_TYPE_GTT: + pmapflags = PMAP_WRITE_COMBINE; + break; + case I915_MMAP_TYPE_WB: + pmapflags = 0; /* default */ + break; + case I915_MMAP_TYPE_UC: + pmapflags = PMAP_NOCACHE; + break; + default: + panic("invalid i915 gem mmap offset type: %d", + mmo->mmap_type); + } + struct scatterlist *sg = obj->mm.pages->sgl; unsigned startpage = (ufi->entry->offset + (vaddr - ufi->entry->start)) >> PAGE_SHIFT; @@ -360,7 +377,7 @@ static vm_fault_t vm_fault_cpu(struct vm_fault *vmf) /* XXX errno NetBSD->Linux */ err = -pmap_enter(ufi->orig_map->pmap, vaddr + i*PAGE_SIZE, paddr, ufi->entry->protection, - PMAP_CANFAIL | ufi->entry->protection); + PMAP_CANFAIL | ufi->entry->protection | pmapflags); if (err) break; }