CVS commit: src/sys/external/bsd/drm2/dist/drm

2024-04-20 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Apr 21 03:02:51 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_ioctl.c

Log Message:
drm: Allow DRM_IOCTL_GET_UNIQUE on render nodes.

On NetBSD, libdrm uses this to discover what kind of bus the device
is on, without which it refuses to expose the render node at all,
rendering it useless.  With this change, libdrm is able to use render
nodes on NetBSD.

Since this is just reading out information about the bus type and
bus/dev/func numbers, I don't think it's problematic to expose to
render nodes.

This requires tweaking the access path to the master.

PR kern/58180


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/external/bsd/drm2/dist/drm/drm_ioctl.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/drm_ioctl.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c:1.24 src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c:1.25
--- src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c:1.24	Sat Oct 15 15:19:28 2022
+++ src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c	Sun Apr 21 03:02:51 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_ioctl.c,v 1.24 2022/10/15 15:19:28 riastradh Exp $	*/
+/*	$NetBSD: drm_ioctl.c,v 1.25 2024/04/21 03:02:51 riastradh Exp $	*/
 
 /*
  * Created: Fri Jan  8 09:01:26 1999 by fa...@valinux.com
@@ -31,7 +31,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_ioctl.c,v 1.24 2022/10/15 15:19:28 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_ioctl.c,v 1.25 2024/04/21 03:02:51 riastradh Exp $");
 
 #include 
 #include 
@@ -129,19 +129,35 @@ int drm_getunique(struct drm_device *dev
 		  struct drm_file *file_priv)
 {
 	struct drm_unique *u = data;
-	struct drm_master *master = file_priv->master;
+	struct drm_master *master;
+	int ret;
 
-	mutex_lock(>dev->master_mutex);
-	if (u->unique_len >= master->unique_len) {
-		if (copy_to_user(u->unique, master->unique, master->unique_len)) {
-			mutex_unlock(>dev->master_mutex);
-			return -EFAULT;
-		}
+	mutex_lock(>master_mutex);
+	master = dev->master;
+	if (master == NULL) {
+		ret = -ENXIO;
+		goto out;
+	}
+
+	/*
+	 * Copy out only if the user allocated enough space.  Either
+	 * way, on success, report the actual size -- so the user can
+	 * allocate enough space if they didn't before, or so they know
+	 * exactly how much we copied out.
+	 */
+	if (u->unique_len < master->unique_len) {
+		ret = 0;
+	} else {
+		ret = copy_to_user(u->unique, master->unique,
+		master->unique_len);
+		if (ret)
+			goto out;
 	}
 	u->unique_len = master->unique_len;
-	mutex_unlock(>dev->master_mutex);
 
-	return 0;
+out:	mutex_unlock(>master_mutex);
+
+	return ret;
 }
 
 static void
@@ -597,7 +613,7 @@ EXPORT_SYMBOL(drm_ioctl_permit);
 /* Ioctl table */
 static const struct drm_ioctl_desc drm_ioctls[] = {
 	DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0),
+	DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, 0),
 	DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY),
 



CVS commit: src/sys/external/bsd/drm2/dist/drm

2024-04-20 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Apr 21 03:02:51 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_ioctl.c

Log Message:
drm: Allow DRM_IOCTL_GET_UNIQUE on render nodes.

On NetBSD, libdrm uses this to discover what kind of bus the device
is on, without which it refuses to expose the render node at all,
rendering it useless.  With this change, libdrm is able to use render
nodes on NetBSD.

Since this is just reading out information about the bus type and
bus/dev/func numbers, I don't think it's problematic to expose to
render nodes.

This requires tweaking the access path to the master.

PR kern/58180


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2024-04-18 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Apr 18 23:33:15 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_acpi.c

Log Message:
radeon_acpi.c: ifdef out unused function on NetBSD.

Should fix syzkaller build.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_acpi.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/radeon/radeon_acpi.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_acpi.c:1.5 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_acpi.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_acpi.c:1.5	Tue Apr 16 14:34:02 2024
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_acpi.c	Thu Apr 18 23:33:15 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_acpi.c,v 1.5 2024/04/16 14:34:02 riastradh Exp $	*/
+/*	$NetBSD: radeon_acpi.c,v 1.6 2024/04/18 23:33:15 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Advanced Micro Devices, Inc.
@@ -24,7 +24,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: radeon_acpi.c,v 1.5 2024/04/16 14:34:02 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_acpi.c,v 1.6 2024/04/18 23:33:15 riastradh Exp $");
 
 #include 
 #include 
@@ -50,11 +50,13 @@ ACPI_MODULE_NAME("radeon_acpi")
 #include 
 #endif
 
+#ifndef __NetBSD__		/* XXX radeon acpi */
 #if defined(CONFIG_VGA_SWITCHEROO)
 bool radeon_atpx_dgpu_req_power_for_displays(void);
 #else
 static inline bool radeon_atpx_dgpu_req_power_for_displays(void) { return false; }
 #endif
+#endif
 
 #define ACPI_AC_CLASS   "ac_adapter"
 



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2024-04-18 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Apr 18 23:33:15 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_acpi.c

Log Message:
radeon_acpi.c: ifdef out unused function on NetBSD.

Should fix syzkaller build.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_acpi.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:24:38 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_stolen.c

Log Message:
i915_gem_stolen: Fill sg_pgs, with size/PAGE_SIZE entries.

Use sg_alloc_table_from_bus_dmamem to do this.

i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so providing a table with
only one entry doesn't work (except by accident, if the object is
page-sized anyway).  And they rely on the sg_pgs entries to be
initialized, which we weren't doing before, and which
sg_alloc_table_from_bus_dmamem does for us.

Related to PR kern/57833.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.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/i915/gem/i915_gem_stolen.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.6	Fri Jan 19 22:24:27 2024
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c	Fri Jan 19 22:24:38 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_stolen.c,v 1.6 2024/01/19 22:24:27 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_stolen.c,v 1.7 2024/01/19 22:24:38 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_stolen.c,v 1.6 2024/01/19 22:24:27 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_stolen.c,v 1.7 2024/01/19 22:24:38 riastradh Exp $");
 
 #include 
 #include 
@@ -506,14 +506,13 @@ i915_pages_create_for_stolen(struct drm_
 {
 	struct drm_i915_private *i915 = to_i915(dev);
 	struct sg_table *st;
+	struct scatterlist *sg;
 #ifdef __NetBSD__
 	bus_dma_tag_t dmat = i915->drm.dmat;
 	bus_dma_segment_t *seg = NULL;
 	int nseg = 0, i;
 	bool loaded = false;
 	int ret;
-#else
-	struct scatterlist *sg;
 #endif
 
 	GEM_BUG_ON(range_overflows(offset, size, resource_size(>dsm)));
@@ -527,11 +526,6 @@ i915_pages_create_for_stolen(struct drm_
 	if (st == NULL)
 		return ERR_PTR(-ENOMEM);
 
-	if (sg_alloc_table(st, 1, GFP_KERNEL)) {
-		kfree(st);
-		return ERR_PTR(-ENOMEM);
-	}
-
 #ifdef __NetBSD__
 	KASSERT((size % PAGE_SIZE) == 0);
 	nseg = size / PAGE_SIZE;
@@ -548,6 +542,17 @@ i915_pages_create_for_stolen(struct drm_
 		seg[i].ds_len = PAGE_SIZE;
 	}
 
+	sg = NULL;
+
+	ret = sg_alloc_table_from_bus_dmamem(st, dmat, seg, nseg, GFP_KERNEL);
+	if (ret) {
+		DRM_ERROR("failed to alloc sg table for stolen object: %d\n",
+		ret);
+		ret = -ENOMEM;
+		goto out;
+	}
+	sg = st->sgl;
+
 	/* XXX errno NetBSD->Linux */
 	ret = -bus_dmamap_create(dmat, size, nseg, PAGE_SIZE, 0,
 	BUS_DMA_WAITOK, >sgl->sg_dmamap);
@@ -573,11 +578,19 @@ out:	kmem_free(seg, nseg * sizeof(seg[0]
 	if (ret) {
 		if (loaded)
 			bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
-		sg_free_table(st);
+		if (sg && sg->sg_dmamap)
+			bus_dmamap_destroy(dmat, sg->sg_dmamap);
+		if (sg)
+			sg_free_table(st);
 		kfree(st);
 		return ERR_PTR(ret);
 	}
 #else
+	if (sg_alloc_table(st, 1, GFP_KERNEL)) {
+		kfree(st);
+		return ERR_PTR(-ENOMEM);
+	}
+
 	sg = st->sgl;
 	sg->offset = 0;
 	sg->length = size;



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:24:38 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_stolen.c

Log Message:
i915_gem_stolen: Fill sg_pgs, with size/PAGE_SIZE entries.

Use sg_alloc_table_from_bus_dmamem to do this.

i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so providing a table with
only one entry doesn't work (except by accident, if the object is
page-sized anyway).  And they rely on the sg_pgs entries to be
initialized, which we weren't doing before, and which
sg_alloc_table_from_bus_dmamem does for us.

Related to PR kern/57833.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:24:27 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_stolen.c

Log Message:
i915_gem_stolen: Fix memory leak.

Found while trying to address the PR 57833 class of problems.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.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/i915/gem/i915_gem_stolen.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.5	Sun Dec 19 12:10:42 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c	Fri Jan 19 22:24:27 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_stolen.c,v 1.5 2021/12/19 12:10:42 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_stolen.c,v 1.6 2024/01/19 22:24:27 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_stolen.c,v 1.5 2021/12/19 12:10:42 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_stolen.c,v 1.6 2024/01/19 22:24:27 riastradh Exp $");
 
 #include 
 #include 
@@ -569,7 +569,8 @@ i915_pages_create_for_stolen(struct drm_
 	}
 	loaded = true;
 
-out:	if (ret) {
+out:	kmem_free(seg, nseg * sizeof(seg[0]));
+	if (ret) {
 		if (loaded)
 			bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
 		sg_free_table(st);



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:24:27 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_stolen.c

Log Message:
i915_gem_stolen: Fix memory leak.

Found while trying to address the PR 57833 class of problems.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:23:19 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_region.c

Log Message:
i915_gem_region: Fill sg_pgs, with size/PAGE_SIZE entries.

Use sg_alloc_table_from_bus_dmamem to do this.

i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so using something else like
size >> ilog2(mem->mm.chunk_size) entries doesn't work.  And they
rely on the sg_pgs entries to be initialized, which we weren't doing
before, and which sg_alloc_table_from_bus_dmamem does for us.

Related to PR kern/57833.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:23:19 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_region.c

Log Message:
i915_gem_region: Fill sg_pgs, with size/PAGE_SIZE entries.

Use sg_alloc_table_from_bus_dmamem to do this.

i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so using something else like
size >> ilog2(mem->mm.chunk_size) entries doesn't work.  And they
rely on the sg_pgs entries to be initialized, which we weren't doing
before, and which sg_alloc_table_from_bus_dmamem does for us.

Related to PR kern/57833.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.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/i915/gem/i915_gem_region.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.5	Fri Jan 19 22:22:27 2024
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c	Fri Jan 19 22:23:19 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_region.c,v 1.5 2024/01/19 22:22:27 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_region.c,v 1.6 2024/01/19 22:23:19 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_region.c,v 1.5 2024/01/19 22:22:27 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_region.c,v 1.6 2024/01/19 22:23:19 riastradh Exp $");
 
 #include "intel_memory_region.h"
 #include "i915_gem_region.h"
@@ -45,10 +45,12 @@ i915_gem_object_get_pages_buddy(struct d
 	if (!st)
 		return -ENOMEM;
 
+#ifndef __NetBSD__
 	if (sg_alloc_table(st, size >> ilog2(mem->mm.chunk_size), GFP_KERNEL)) {
 		kfree(st);
 		return -ENOMEM;
 	}
+#endif
 
 	flags = I915_ALLOC_MIN_PAGE_SIZE;
 	if (obj->flags & I915_BO_ALLOC_CONTIGUOUS)
@@ -60,7 +62,6 @@ i915_gem_object_get_pages_buddy(struct d
 
 	GEM_BUG_ON(list_empty(blocks));
 
-	sg = st->sgl;
 #ifdef __NetBSD__
 	__USE(prev_end);
 	bus_dma_tag_t dmat = obj->base.dev->dmat;
@@ -68,6 +69,8 @@ i915_gem_object_get_pages_buddy(struct d
 	int i = 0, nsegs = 0;
 	bool loaded = false;
 
+	sg = NULL;
+
 	list_for_each_entry(block, blocks, link) {
 		if (nsegs >= INT_MAX ||
 		nsegs >= SIZE_MAX/sizeof(segs[0]))
@@ -84,7 +87,15 @@ i915_gem_object_get_pages_buddy(struct d
 
 		segs[i].ds_addr = mem->region.start + offset;
 		segs[i].ds_len = block_size;
+		i++;
 	}
+	KASSERT(i == nsegs);
+
+	ret = sg_alloc_table_from_bus_dmamem(st, dmat, segs, nsegs,
+	GFP_KERNEL);
+	if (ret)
+		goto err;
+	sg = st->sgl;
 
 	/* XXX errno NetBSD->Linux */
 	ret = -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
@@ -107,6 +118,7 @@ i915_gem_object_get_pages_buddy(struct d
 
 	sg_page_sizes = i915_sg_page_sizes(sg);
 #else
+	sg = st->sgl;
 	st->nents = 0;
 	sg_page_sizes = 0;
 	prev_end = (resource_size_t)-1;
@@ -154,6 +166,8 @@ i915_gem_object_get_pages_buddy(struct d
 err:
 	if (loaded)
 		bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
+	if (sg && sg->sg_dmamap)
+		bus_dmamap_destroy(dmat, sg->sg_dmamap);
 	if (segs)
 		kmem_free(segs, nsegs * sizeof(segs[0]));
 	__intel_memory_region_put_pages_buddy(mem, blocks);



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:23:04 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_phys.c

Log Message:
i915_gem_phys: Fill sg_pgs.

This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.

This needs pmap_kenter_pa rather than pmap_enter(pmap_kernel(), ...)
in order to preserve the _kernel's_ mapping of the pages after
pmap_page_protect.

But bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...)
instead which creates a mapping that is removed by pmap_page_protect.

So we use a variant of bus_dmamem_map that uses pmap_kenter_pa
instead.  Perhaps bus_dmamem_map should do this itself, but this
change is less risky to pull up than a change to bus_dmamem_map
itself.

PR kern/57833: kernel panic on xorg exit

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.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/i915/gem/i915_gem_phys.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:1.8 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:1.9
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:1.8	Sun Dec 19 12:45:43 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c	Fri Jan 19 22:23:04 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_phys.c,v 1.8 2021/12/19 12:45:43 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_phys.c,v 1.9 2024/01/19 22:23:04 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,91 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.8 2021/12/19 12:45:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.9 2024/01/19 22:23:04 riastradh Exp $");
+
+#ifdef __NetBSD__
+/*
+ * Make sure this block comes before any linux includes, so we don't
+ * get mixed up by the PAGE_MASK complementation.
+ */
+
+#include 
+
+#include 
+#include 
+
+#include  /* kvtopte, pmap_pte_clearbits */
+
+/*
+ * Version of bus_dmamem_map that uses pmap_kenter_pa, not pmap_enter,
+ * so that it isn't affected by pmap_page_protect on the physical
+ * address.  Adapted from sys/arch/x86/x86/bus_dma.c.
+ */
+static int
+bus_dmamem_kmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs,
+size_t size, void **kvap, int flags)
+{
+	vaddr_t va;
+	bus_addr_t addr;
+	int curseg;
+	const uvm_flag_t kmflags =
+	(flags & BUS_DMA_NOWAIT) != 0 ? UVM_KMF_NOWAIT : 0;
+	u_int pmapflags = PMAP_WIRED | VM_PROT_READ | VM_PROT_WRITE;
+
+	size = round_page(size);
+	if (flags & BUS_DMA_NOCACHE)
+		pmapflags |= PMAP_NOCACHE;
+
+	va = uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+
+	if (va == 0)
+		return ENOMEM;
+
+	*kvap = (void *)va;
+
+	for (curseg = 0; curseg < nsegs; curseg++) {
+		for (addr = segs[curseg].ds_addr;
+		addr < (segs[curseg].ds_addr + segs[curseg].ds_len);
+		addr += PAGE_SIZE, va += PAGE_SIZE, size -= PAGE_SIZE) {
+			if (size == 0)
+panic("bus_dmamem_kmap: size botch");
+			pmap_kenter_pa(va, addr,
+			VM_PROT_READ | VM_PROT_WRITE,
+			pmapflags);
+		}
+	}
+	pmap_update(pmap_kernel());
+
+	return 0;
+}
+
+static void
+bus_dmamem_kunmap(bus_dma_tag_t t, void *kva, size_t size)
+{
+	pt_entry_t *pte, opte;
+	vaddr_t va, sva, eva;
+
+	KASSERTMSG(((uintptr_t)kva & PGOFSET) == 0, "kva=%p", kva);
+
+	size = round_page(size);
+	sva = (vaddr_t)kva;
+	eva = sva + size;
+
+	/*
+	 * mark pages cacheable again.
+	 */
+	for (va = sva; va < eva; va += PAGE_SIZE) {
+		pte = kvtopte(va);
+		opte = *pte;
+		if ((opte & PTE_PCD) != 0)
+			pmap_pte_clearbits(pte, PTE_PCD);
+	}
+	pmap_kremove((vaddr_t)kva, size);
+	pmap_update(pmap_kernel());
+	uvm_km_free(kernel_map, (vaddr_t)kva, size, UVM_KMF_VAONLY);
+}
+
+#endif
 
 #include 
 #include 
@@ -65,7 +149,7 @@ static int i915_gem_object_get_pages_phy
 	if (ret)
 		return -ENOMEM;
 	KASSERT(rsegs == 1);
-	ret = -bus_dmamem_map(dmat, >mm.u.phys.seg, 1,
+	ret = -bus_dmamem_kmap(dmat, >mm.u.phys.seg, 1,
 	roundup_pow_of_two(obj->base.size), ,
 	BUS_DMA_WAITOK|BUS_DMA_COHERENT);
 	if (ret)
@@ -83,7 +167,12 @@ static int i915_gem_object_get_pages_phy
 	if (!st)
 		goto err_pci;
 
+#ifdef __NetBSD__
+	if (sg_alloc_table_from_bus_dmamem(st, dmat, >mm.u.phys.seg, 1,
+		GFP_KERNEL))
+#else
 	if (sg_alloc_table(st, 1, GFP_KERNEL))
+#endif
 		goto err_st;
 
 	sg = st->sgl;
@@ -151,7 +240,7 @@ err_st:
 err_pci:
 #ifdef __NetBSD__
 	if (vaddr) {
-		bus_dmamem_unmap(dmat, vaddr,
+		bus_dmamem_kunmap(dmat, vaddr,
 		roundup_pow_of_two(obj->base.size));
 	}
 	obj->mm.u.phys.kva = NULL;
@@ -225,7 +314,7 @@ i915_gem_object_put_pages_phys(struct dr
 	kfree(pages);
 
 #ifdef __NetBSD__
-	bus_dmamem_unmap(dmat, 

CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:23:04 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_phys.c

Log Message:
i915_gem_phys: Fill sg_pgs.

This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.

This needs pmap_kenter_pa rather than pmap_enter(pmap_kernel(), ...)
in order to preserve the _kernel's_ mapping of the pages after
pmap_page_protect.

But bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...)
instead which creates a mapping that is removed by pmap_page_protect.

So we use a variant of bus_dmamem_map that uses pmap_kenter_pa
instead.  Perhaps bus_dmamem_map should do this itself, but this
change is less risky to pull up than a change to bus_dmamem_map
itself.

PR kern/57833: kernel panic on xorg exit

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:22:54 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_pages.c

Log Message:
i915_gem: Assert page array size.

Let's detect the bug of sg_npgs failing to match
obj->base.size/PAGE_SIZE earlier.

Related to PR kern/57833.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.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/i915/gem/i915_gem_pages.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c:1.6	Sun Dec 19 12:00:57 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c	Fri Jan 19 22:22:54 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_pages.c,v 1.6 2021/12/19 12:00:57 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_pages.c,v 1.7 2024/01/19 22:22:54 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_pages.c,v 1.6 2021/12/19 12:00:57 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_pages.c,v 1.7 2024/01/19 22:22:54 riastradh Exp $");
 
 #include "i915_drv.h"
 #include "i915_gem_object.h"
@@ -42,6 +42,18 @@ void __i915_gem_object_set_pages(struct 
 	}
 
 #ifndef __NetBSD__
+	/*
+	 * Paranoia: In NetBSD, a scatterlist is just an array of
+	 * pages, not an array of segments that might be larger than
+	 * pages, so the number of entries must exactly match the size
+	 * of the object (which should also be page-aligned).
+	 *
+	 * Both vm_fault_cpu and i915_gem_object_release_mmap_offset in
+	 * i915_gem_mman.c rely on this page array as such.
+	 */
+	KASSERTMSG(pages->sgl->sg_npgs == obj->base.size >> PAGE_SHIFT,
+	"npgs=%zu size=%zu", pages->sgl->sg_npgs, obj->base.size);
+
 	obj->mm.get_page.sg_pos = pages->sgl;
 	obj->mm.get_page.sg_idx = 0;
 #endif



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:22:54 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_pages.c

Log Message:
i915_gem: Assert page array size.

Let's detect the bug of sg_npgs failing to match
obj->base.size/PAGE_SIZE earlier.

Related to PR kern/57833.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:22:40 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_mman.c

Log Message:
i915_gem: Avoid walking off end of sg_pgs.

sg_npgs currently fails to match obj->base.size/PAGE_SIZE only due to
bugs in the construction of sg_pgs in various i915 gem object types,
which we should also fix, but let's avoid compounding it here.

Related to PR kern/57833.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:22:40 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_mman.c

Log Message:
i915_gem: Avoid walking off end of sg_pgs.

sg_npgs currently fails to match obj->base.size/PAGE_SIZE only due to
bugs in the construction of sg_pgs in various i915 gem object types,
which we should also fix, but let's avoid compounding it here.

Related to PR kern/57833.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.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/i915/gem/i915_gem_mman.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.21 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.22
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.21	Sun Dec 19 12:26:55 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c	Fri Jan 19 22:22:40 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_mman.c,v 1.21 2021/12/19 12:26:55 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_mman.c,v 1.22 2024/01/19 22:22:40 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.21 2021/12/19 12:26:55 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.22 2024/01/19 22:22:40 riastradh Exp $");
 
 #include 
 #include 
@@ -675,7 +675,7 @@ void i915_gem_object_release_mmap_offset
 
 	if (!i915_gem_object_has_pages(obj))
 		return;
-	for (i = 0; i < obj->base.size >> PAGE_SHIFT; i++) {
+	for (i = 0; i < obj->mm.pages->sgl->sg_npgs; i++) {
 		page = obj->mm.pages->sgl->sg_pgs[i];
 		vm_page = >p_vmp;
 		pmap_page_protect(vm_page, VM_PROT_NONE);



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:22:27 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_region.c

Log Message:
i915_gem_region: Reduce diff from upstream a little.

No functional change intended.

Prompted by upcoming nearby changes related to PR kern/57833.

XXX pullup-10 (to make subsequent pullups easier)


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.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/i915/gem/i915_gem_region.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.4	Sun Dec 19 12:10:42 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c	Fri Jan 19 22:22:27 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_region.c,v 1.4 2021/12/19 12:10:42 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_region.c,v 1.5 2024/01/19 22:22:27 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_region.c,v 1.4 2021/12/19 12:10:42 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_region.c,v 1.5 2024/01/19 22:22:27 riastradh Exp $");
 
 #include "intel_memory_region.h"
 #include "i915_gem_region.h"
@@ -63,7 +63,6 @@ i915_gem_object_get_pages_buddy(struct d
 	sg = st->sgl;
 #ifdef __NetBSD__
 	__USE(prev_end);
-	__USE(sg_page_sizes);
 	bus_dma_tag_t dmat = obj->base.dev->dmat;
 	bus_dma_segment_t *segs = NULL;
 	int i = 0, nsegs = 0;
@@ -106,7 +105,7 @@ i915_gem_object_get_pages_buddy(struct d
 	kmem_free(segs, nsegs * sizeof(segs[0]));
 	segs = NULL;
 
-	__i915_gem_object_set_pages(obj, st, i915_sg_page_sizes(sg));
+	sg_page_sizes = i915_sg_page_sizes(sg);
 #else
 	st->nents = 0;
 	sg_page_sizes = 0;
@@ -145,9 +144,9 @@ i915_gem_object_get_pages_buddy(struct d
 	sg_page_sizes |= sg->length;
 	sg_mark_end(sg);
 	i915_sg_trim(st);
+#endif
 
 	__i915_gem_object_set_pages(obj, st, sg_page_sizes);
-#endif
 
 	return 0;
 



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2024-01-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jan 19 22:22:27 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_region.c

Log Message:
i915_gem_region: Reduce diff from upstream a little.

No functional change intended.

Prompted by upcoming nearby changes related to PR kern/57833.

XXX pullup-10 (to make subsequent pullups easier)


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915

2024-01-14 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jan 14 22:15:15 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: i915_pci.c

Log Message:
i915: Backport change to downgrade gen7/vlv to aliasing-ppggtt.

PR kern/57268

XXX pullup-10

commit 4fbe112a569526e46fa2accb5763c069f78cb431
Author: Chris Wilson 
Date:   Mon Feb 24 10:11:20 2020 +

drm/i915/gtt: Downgrade gen7 (ivb, byt, hsw) back to aliasing-ppgtt

Full-ppgtt on gen7 is proving to be highly unstable and not robust.

Closes: https://gitlab.freedesktop.org/drm/intel/issues/694
Fixes: 3cd6e8860ecd ("drm/i915/gen7: Re-enable full-ppgtt for ivb & hsw")
Signed-off-by: Chris Wilson 
Cc: Joonas Lahtinen 
Cc: Rodrigo Vivi 
Cc: Jani Nikula 
Cc: Dave Airlie 
Acked-by: Rodrigo Vivi 
Link: 
https://patchwork.freedesktop.org/patch/msgid/20200224101120.4024481-1-ch...@chris-wilson.co.uk


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_pci.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/i915/i915_pci.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_pci.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/i915_pci.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_pci.c:1.4	Sun Dec 19 01:44:49 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_pci.c	Sun Jan 14 22:15:15 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_pci.c,v 1.4 2021/12/19 01:44:49 riastradh Exp $	*/
+/*	$NetBSD: i915_pci.c,v 1.5 2024/01/14 22:15:15 riastradh Exp $	*/
 
 /*
  * Copyright © 2016 Intel Corporation
@@ -25,7 +25,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.4 2021/12/19 01:44:49 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.5 2024/01/14 22:15:15 riastradh Exp $");
 
 #include 
 #include 
@@ -442,7 +442,7 @@ static const struct intel_device_info sn
 	.has_rc6 = 1, \
 	.has_rc6p = 1, \
 	.has_rps = true, \
-	.ppgtt_type = INTEL_PPGTT_FULL, \
+	.ppgtt_type = INTEL_PPGTT_ALIASING, \
 	.ppgtt_size = 31, \
 	IVB_PIPE_OFFSETS, \
 	IVB_CURSOR_OFFSETS, \
@@ -499,7 +499,7 @@ static const struct intel_device_info vl
 	.has_rps = true,
 	.display.has_gmch = 1,
 	.display.has_hotplug = 1,
-	.ppgtt_type = INTEL_PPGTT_FULL,
+	.ppgtt_type = INTEL_PPGTT_ALIASING,
 	.ppgtt_size = 31,
 	.has_snoop = true,
 	.has_coherent_ggtt = false,



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915

2024-01-14 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jan 14 22:15:15 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: i915_pci.c

Log Message:
i915: Backport change to downgrade gen7/vlv to aliasing-ppggtt.

PR kern/57268

XXX pullup-10

commit 4fbe112a569526e46fa2accb5763c069f78cb431
Author: Chris Wilson 
Date:   Mon Feb 24 10:11:20 2020 +

drm/i915/gtt: Downgrade gen7 (ivb, byt, hsw) back to aliasing-ppgtt

Full-ppgtt on gen7 is proving to be highly unstable and not robust.

Closes: https://gitlab.freedesktop.org/drm/intel/issues/694
Fixes: 3cd6e8860ecd ("drm/i915/gen7: Re-enable full-ppgtt for ivb & hsw")
Signed-off-by: Chris Wilson 
Cc: Joonas Lahtinen 
Cc: Rodrigo Vivi 
Cc: Jani Nikula 
Cc: Dave Airlie 
Acked-by: Rodrigo Vivi 
Link: 
https://patchwork.freedesktop.org/patch/msgid/20200224101120.4024481-1-ch...@chris-wilson.co.uk


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2023-11-06 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Mon Nov  6 14:33:51 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_bios.c

Log Message:
radeon: fix and enable ACPI methods for getting ROM BIOS

The hacky way of getting the BIOS mapped only works on x86. ACPI
should be preferred if available. Makes BIOS reading though VFCT
work on aarch64 with EDK2. (But only if EDK2 has POSTed the GPU.)

XXX amdgpu should get the same treatment.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_bios.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/radeon/radeon_bios.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_bios.c:1.12 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_bios.c:1.13
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_bios.c:1.12	Sat May 28 01:07:47 2022
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_bios.c	Mon Nov  6 14:33:51 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_bios.c,v 1.12 2022/05/28 01:07:47 manu Exp $	*/
+/*	$NetBSD: radeon_bios.c,v 1.13 2023/11/06 14:33:51 tnn Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -29,7 +29,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: radeon_bios.c,v 1.12 2022/05/28 01:07:47 manu Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_bios.c,v 1.13 2023/11/06 14:33:51 tnn Exp $");
 
 #include 
 #include 
@@ -42,6 +42,7 @@ __KERNEL_RCSID(0, "$NetBSD: radeon_bios.
 #include "radeon_reg.h"
 
 #if defined(__NetBSD__) && NACPICA > 0
+#define CONFIG_ACPI
 #include 
 #define	_COMPONENT	ACPI_DISPLAY_COMPONENT
 ACPI_MODULE_NAME("radeon_acpi")
@@ -252,10 +253,15 @@ static bool radeon_atrm_get_bios(struct 
 	if (rdev->flags & RADEON_IS_IGP)
 		return false;
 
-	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
 #ifdef __NetBSD__
+	pdev = rdev->pdev;
+	while (pdev != NULL) {
 		dhandle = (pdev->pd_ad ? pdev->pd_ad->ad_handle : NULL);
+		pdev = NULL;
+		if (rdev->pdev->class != PCI_CLASS_DISPLAY_VGA)
+			continue;
 #else
+	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
 		dhandle = ACPI_HANDLE(>dev);
 #endif
 		if (!dhandle)
@@ -269,11 +275,16 @@ static bool radeon_atrm_get_bios(struct 
 	}
 
 	if (!found) {
-		while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
 #ifdef __NetBSD__
+		pdev = rdev->pdev;
+		while (pdev != NULL) {
 			dhandle = (pdev->pd_ad ? pdev->pd_ad->ad_handle
 			: NULL);
+			pdev = NULL;
+			if (rdev->pdev->class != PCI_CLASS_DISPLAY_OTHER)
+continue;
 #else
+		while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
 			dhandle = ACPI_HANDLE(>dev);
 #endif
 			if (!dhandle)



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2023-11-06 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Mon Nov  6 14:33:51 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_bios.c

Log Message:
radeon: fix and enable ACPI methods for getting ROM BIOS

The hacky way of getting the BIOS mapped only works on x86. ACPI
should be preferred if available. Makes BIOS reading though VFCT
work on aarch64 with EDK2. (But only if EDK2 has POSTed the GPU.)

XXX amdgpu should get the same treatment.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_bios.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci

2023-09-30 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Sat Sep 30 10:38:31 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_pcie.c

Log Message:
avoid an unlikely array bounds issue picked up by GCC 12.

nvkm_pcie_speed() can return -1, which is then used as an array index,
so make this default return PCIe 1.0 speeds.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.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/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.c:1.3	Sun Dec 19 10:51:58 2021
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.c	Sat Sep 30 10:38:31 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_pci_pcie.c,v 1.3 2021/12/19 10:51:58 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_pci_pcie.c,v 1.4 2023/09/30 10:38:31 mrg Exp $	*/
 
 /*
  * Copyright 2015 Karol Herbst 
@@ -24,7 +24,7 @@
  * Authors: Karol Herbst 
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_pcie.c,v 1.3 2021/12/19 10:51:58 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_pcie.c,v 1.4 2023/09/30 10:38:31 mrg Exp $");
 
 #include "priv.h"
 
@@ -48,7 +48,7 @@ nvkm_pcie_speed(enum pci_bus_speed speed
 		/* XXX 0x16 is 8_0, assume 0x17 will be 16_0 for now */
 		if (speed == 0x17)
 			return NVKM_PCIE_SPEED_8_0;
-		return -1;
+		return NVKM_PCIE_SPEED_2_5;
 	}
 }
 



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci

2023-09-30 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Sat Sep 30 10:38:31 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_pcie.c

Log Message:
avoid an unlikely array bounds issue picked up by GCC 12.

nvkm_pcie_speed() can return -1, which is then used as an array index,
so make this default return PCIe 1.0 speeds.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core

2023-08-14 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Aug 15 05:01:58 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core:
amdgpu_dc_stream.c

Log Message:
avoid a GCC 12 warning.

there's a 1-element long array and a loop conditional that tries to see
if indexes for it are not identical.  as these indexes will always both
be 0, the only valid index, the condition is always false.  GCC 12
triggers a strange warning on this code that can never run (see below),
so simply assert the array size is 1 and comment the rest.

amdgpu_dc_stream.c:470:55: error: array subscript [0, 0] is outside array 
bounds of 'struct dc_writeback_info[1]' [-Werror=array-bounds]
  470 | stream->writeback_info[j] = 
stream->writeback_info[i];


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core/amdgpu_dc_stream.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core

2023-08-14 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Aug 15 05:01:58 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core:
amdgpu_dc_stream.c

Log Message:
avoid a GCC 12 warning.

there's a 1-element long array and a loop conditional that tries to see
if indexes for it are not identical.  as these indexes will always both
be 0, the only valid index, the condition is always false.  GCC 12
triggers a strange warning on this code that can never run (see below),
so simply assert the array size is 1 and comment the rest.

amdgpu_dc_stream.c:470:55: error: array subscript [0, 0] is outside array 
bounds of 'struct dc_writeback_info[1]' [-Werror=array-bounds]
  470 | stream->writeback_info[j] = 
stream->writeback_info[i];


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core/amdgpu_dc_stream.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/display/dc/core/amdgpu_dc_stream.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core/amdgpu_dc_stream.c:1.2 src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core/amdgpu_dc_stream.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core/amdgpu_dc_stream.c:1.2	Sat Dec 18 23:45:02 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/display/dc/core/amdgpu_dc_stream.c	Tue Aug 15 05:01:57 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_dc_stream.c,v 1.2 2021/12/18 23:45:02 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_dc_stream.c,v 1.3 2023/08/15 05:01:57 mrg Exp $	*/
 
 /*
  * Copyright 2012-15 Advanced Micro Devices, Inc.
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_dc_stream.c,v 1.2 2021/12/18 23:45:02 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_dc_stream.c,v 1.3 2023/08/15 05:01:57 mrg Exp $");
 
 #include 
 #include 
@@ -465,9 +465,18 @@ bool dc_stream_remove_writeback(struct d
 	/* remove writeback info for disabled writeback pipes from stream */
 	for (i = 0, j = 0; i < stream->num_wb_info; i++) {
 		if (stream->writeback_info[i].wb_enabled) {
+#ifdef __NetBSD__
+			/*
+			 * XXXGCC12
+			 * The array is only 1 entry long, so i and j must
+			 * always be 0 here, so the below test fails.
+			 */
+			CTASSERT(ARRAY_SIZE(stream->writeback_info) == 1);
+#else
 			if (i != j)
 /* trim the array */
 stream->writeback_info[j] = stream->writeback_info[i];
+#endif
 			j++;
 		}
 	}



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915

2023-08-08 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Aug  8 06:59:41 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: i915_gem.h

Log Message:
nix the NetBSD specific GEM_BUG_ON().

avoids GCC 12 warnings, and matches upstream closer.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.h

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/i915/i915_gem.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.h:1.7 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.h:1.8
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.h:1.7	Mon Dec 20 19:54:07 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.h	Tue Aug  8 06:59:40 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem.h,v 1.7 2021/12/20 19:54:07 riastradh Exp $	*/
+/*	$NetBSD: i915_gem.h,v 1.8 2023/08/08 06:59:40 mrg Exp $	*/
 
 /*
  * Copyright © 2016 Intel Corporation
@@ -41,13 +41,6 @@ struct drm_i915_private;
 
 #define GEM_SHOW_DEBUG() drm_debug_enabled(DRM_UT_DRIVER)
 
-#ifdef __NetBSD__
-#ifdef DIAGNOSTIC
-#define	GEM_BUG_ON(condition)	KASSERT(!(condition))
-#else
-#define	GEM_BUG_ON(condition)	BUILD_BUG_ON_INVALID(condition)
-#endif
-#else
 #define GEM_BUG_ON(condition) do { if (unlikely((condition))) {	\
 		GEM_TRACE_ERR("%s:%d GEM_BUG_ON(%s)\n", \
 			  __func__, __LINE__, __stringify(condition)); \
@@ -55,7 +48,6 @@ struct drm_i915_private;
 		BUG(); \
 		} \
 	} while(0)
-#endif
 #define GEM_WARN_ON(expr) WARN_ON(expr)
 
 #define GEM_DEBUG_DECL(var) var



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915

2023-08-08 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Aug  8 06:59:41 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: i915_gem.h

Log Message:
nix the NetBSD specific GEM_BUG_ON().

avoids GCC 12 warnings, and matches upstream closer.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm

2023-08-08 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Aug  8 06:58:20 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_dp_helper.c

Log Message:
comment a function that has a clear overbounds read but it isn't used.

found by GCC 12.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/drm2/dist/drm/drm_dp_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/external/bsd/drm2/dist/drm/drm_dp_helper.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_dp_helper.c:1.16 src/sys/external/bsd/drm2/dist/drm/drm_dp_helper.c:1.17
--- src/sys/external/bsd/drm2/dist/drm/drm_dp_helper.c:1.16	Sun Dec 19 12:41:54 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_dp_helper.c	Tue Aug  8 06:58:20 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_dp_helper.c,v 1.16 2021/12/19 12:41:54 riastradh Exp $	*/
+/*	$NetBSD: drm_dp_helper.c,v 1.17 2023/08/08 06:58:20 mrg Exp $	*/
 
 /*
  * Copyright © 2009 Keith Packard
@@ -23,7 +23,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_dp_helper.c,v 1.16 2021/12/19 12:41:54 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_dp_helper.c,v 1.17 2023/08/08 06:58:20 mrg Exp $");
 
 #include 
 #include 
@@ -128,6 +128,13 @@ u8 drm_dp_get_adjust_request_pre_emphasi
 }
 EXPORT_SYMBOL(drm_dp_get_adjust_request_pre_emphasis);
 
+#ifndef __NetBSD__
+/*
+ * XXXGCC12
+ * this unused function is bad.  DP_LINK_STATUS_SIZE is 6, and
+ * DP_ADJUST_REQUEST_POST_CURSOR2 triggers an offset of 10 into link_status[].
+ * fortunately, it is not used.
+ */
 u8 drm_dp_get_adjust_request_post_cursor(const u8 link_status[DP_LINK_STATUS_SIZE],
 	 unsigned int lane)
 {
@@ -137,6 +144,7 @@ u8 drm_dp_get_adjust_request_post_cursor
 	return (value >> (lane << 1)) & 0x3;
 }
 EXPORT_SYMBOL(drm_dp_get_adjust_request_post_cursor);
+#endif
 
 void drm_dp_link_train_clock_recovery_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE])
 {



CVS commit: src/sys/external/bsd/drm2/dist/drm

2023-08-08 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Aug  8 06:58:20 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_dp_helper.c

Log Message:
comment a function that has a clear overbounds read but it isn't used.

found by GCC 12.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/drm2/dist/drm/drm_dp_helper.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/display/dc

2023-07-20 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Jul 20 21:48:49 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/calcs:
amdgpu_dcn_calcs.c
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20:
amdgpu_dcn20_resource.c

Log Message:
amdgpu: Mark float-dependent variables volatile.

This way they are computed -- using FP instructions -- before
DC_FP_END, after which point FP instructions will trap or behave
unpredictably.

This is a workaround, not a proper solution -- really, the
DC_FP_START/END calls should happen in a separate compilation unit
built without -mhard-float or whatever, but that's a lot more work to
make happen for now.

PR kern/57059

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/calcs/amdgpu_dcn_calcs.c
cvs rdiff -u -r1.4 -r1.5 \

src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20/amdgpu_dcn20_resource.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/display/dc/calcs/amdgpu_dcn_calcs.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/display/dc/calcs/amdgpu_dcn_calcs.c:1.3 src/sys/external/bsd/drm2/dist/drm/amd/display/dc/calcs/amdgpu_dcn_calcs.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/amd/display/dc/calcs/amdgpu_dcn_calcs.c:1.3	Sun Dec 19 11:35:07 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/display/dc/calcs/amdgpu_dcn_calcs.c	Thu Jul 20 21:48:49 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_dcn_calcs.c,v 1.3 2021/12/19 11:35:07 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_dcn_calcs.c,v 1.4 2023/07/20 21:48:49 riastradh Exp $	*/
 
 /*
  * Copyright 2017 Advanced Micro Devices, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_dcn_calcs.c,v 1.3 2021/12/19 11:35:07 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_dcn_calcs.c,v 1.4 2023/07/20 21:48:49 riastradh Exp $");
 
 #include "dm_services.h"
 #include "dc.h"
@@ -626,7 +626,7 @@ static void calc_wm_sets_and_perf_params
 
 static bool dcn_bw_apply_registry_override(struct dc *dc)
 {
-	bool updated = false;
+	volatile bool updated = false;
 
 	DC_FP_START();
 	if ((int)(dc->dcn_soc->sr_exit_time * 1000) != dc->debug.sr_exit_time_ns
@@ -733,7 +733,7 @@ bool dcn_validate_bandwidth(
 	struct dcn_bw_internal_vars *v = >dcn_bw_vars;
 	int i, input_idx, k;
 	int vesa_sync_start, asic_blank_end, asic_blank_start;
-	bool bw_limit_pass;
+	volatile bool bw_limit_pass;
 	float bw_limit;
 
 	PERFORMANCE_TRACE_START();
@@ -1502,7 +1502,7 @@ void dcn_bw_notify_pplib_of_wm_ranges(st
 {
 	struct pp_smu_funcs_rv *pp = NULL;
 	struct pp_smu_wm_range_sets ranges = {0};
-	int min_fclk_khz, min_dcfclk_khz, socclk_khz;
+	volatile int min_fclk_khz, min_dcfclk_khz, socclk_khz;
 	const int overdrive = 500; /* 5 GHz to cover Overdrive */
 
 	if (dc->res_pool->pp_smu)

Index: src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20/amdgpu_dcn20_resource.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20/amdgpu_dcn20_resource.c:1.4 src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20/amdgpu_dcn20_resource.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20/amdgpu_dcn20_resource.c:1.4	Sun Dec 19 11:59:31 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20/amdgpu_dcn20_resource.c	Thu Jul 20 21:48:49 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_dcn20_resource.c,v 1.4 2021/12/19 11:59:31 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_dcn20_resource.c,v 1.5 2023/07/20 21:48:49 riastradh Exp $	*/
 
 /*
 * Copyright 2016 Advanced Micro Devices, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_dcn20_resource.c,v 1.4 2021/12/19 11:59:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_dcn20_resource.c,v 1.5 2023/07/20 21:48:49 riastradh Exp $");
 
 #include 
 
@@ -2932,7 +2932,7 @@ validate_out:
 bool dcn20_validate_bandwidth(struct dc *dc, struct dc_state *context,
 		bool fast_validate)
 {
-	bool voltage_supported = false;
+	volatile bool voltage_supported = false;
 	bool full_pstate_supported = false;
 	bool dummy_pstate_supported = false;
 	double p_state_latency_us;



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/display/dc

2023-07-20 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Jul 20 21:48:49 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/calcs:
amdgpu_dcn_calcs.c
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20:
amdgpu_dcn20_resource.c

Log Message:
amdgpu: Mark float-dependent variables volatile.

This way they are computed -- using FP instructions -- before
DC_FP_END, after which point FP instructions will trap or behave
unpredictably.

This is a workaround, not a proper solution -- really, the
DC_FP_START/END calls should happen in a separate compilation unit
built without -mhard-float or whatever, but that's a lot more work to
make happen for now.

PR kern/57059

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/calcs/amdgpu_dcn_calcs.c
cvs rdiff -u -r1.4 -r1.5 \

src/sys/external/bsd/drm2/dist/drm/amd/display/dc/dcn20/amdgpu_dcn20_resource.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2023-07-20 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Thu Jul 20 18:02:45 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_fence.c

Log Message:
avoid calling drm_sched_fini() for AMDGPU_RING_TYPE_KIQ rings.

drm_sched_init() is not called for these rings, and we'd panic trying
to mutex_destroy() a mutex that wasn't initialised.

this seems like a general bug, not a bug in netbsd port.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_fence.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_fence.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_fence.c:1.10 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_fence.c:1.11
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_fence.c:1.10	Sun Dec 19 12:02:39 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_fence.c	Thu Jul 20 18:02:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_fence.c,v 1.10 2021/12/19 12:02:39 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_fence.c,v 1.11 2023/07/20 18:02:45 mrg Exp $	*/
 
 /*
  * Copyright 2009 Jerome Glisse.
@@ -31,7 +31,7 @@
  *Dave Airlie
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_fence.c,v 1.10 2021/12/19 12:02:39 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_fence.c,v 1.11 2023/07/20 18:02:45 mrg Exp $");
 
 #include 
 #include 
@@ -541,7 +541,9 @@ void amdgpu_fence_driver_fini(struct amd
 		}
 		amdgpu_irq_put(adev, ring->fence_drv.irq_src,
 			   ring->fence_drv.irq_type);
-		drm_sched_fini(>sched);
+		if (ring->funcs->type != AMDGPU_RING_TYPE_KIQ) {
+			drm_sched_fini(>sched);
+		}
 		del_timer_sync(>fence_drv.fallback_timer);
 		for (j = 0; j <= ring->fence_drv.num_fences_mask; ++j)
 			dma_fence_put(ring->fence_drv.fences[j]);



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2023-07-20 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Thu Jul 20 18:02:45 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_fence.c

Log Message:
avoid calling drm_sched_fini() for AMDGPU_RING_TYPE_KIQ rings.

drm_sched_init() is not called for these rings, and we'd panic trying
to mutex_destroy() a mutex that wasn't initialised.

this seems like a general bug, not a bug in netbsd port.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_fence.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gt

2023-07-09 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jul  9 20:24:06 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_ggtt.c

Log Message:
i915: Fail gracefully, don't panic, with unsupported ggtt views.

Workaround for part of PR kern/56648.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 \
src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.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/i915/gt/intel_ggtt.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.15 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.16
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.15	Sun Dec 19 12:35:13 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c	Sun Jul  9 20:24:06 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_ggtt.c,v 1.15 2021/12/19 12:35:13 riastradh Exp $	*/
+/*	$NetBSD: intel_ggtt.c,v 1.16 2023/07/09 20:24:06 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: intel_ggtt.c,v 1.15 2021/12/19 12:35:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_ggtt.c,v 1.16 2023/07/09 20:24:06 riastradh Exp $");
 
 #include 
 
@@ -1772,17 +1772,23 @@ i915_get_ggtt_vma_pages(struct i915_vma 
 		vma->pages = vma->obj->mm.pages;
 		return 0;
 
-#ifndef __NetBSD__
 	case I915_GGTT_VIEW_ROTATED:
+#ifdef __NetBSD__
+		vma->pages = ERR_PTR(-ENODEV);
+#else
 		vma->pages =
 			intel_rotate_pages(>ggtt_view.rotated, vma->obj);
+#endif
 		break;
 
 	case I915_GGTT_VIEW_REMAPPED:
+#ifdef __NetBSD__
+		vma->pages = ERR_PTR(-ENODEV);
+#else
 		vma->pages =
 			intel_remap_pages(>ggtt_view.remapped, vma->obj);
-		break;
 #endif
+		break;
 
 	case I915_GGTT_VIEW_PARTIAL:
 		vma->pages = intel_partial_pages(>ggtt_view, vma->obj);



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gt

2023-07-09 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jul  9 20:24:06 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_ggtt.c

Log Message:
i915: Fail gracefully, don't panic, with unsupported ggtt views.

Workaround for part of PR kern/56648.

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 \
src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2023-05-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu May 25 12:07:43 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_device.c

Log Message:
amdgpu: Fix mostly harmless merge botch.

Avoids confusing error message that should have been confined to an
error branch.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2023-05-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu May 25 12:07:43 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_device.c

Log Message:
amdgpu: Fix mostly harmless merge botch.

Avoids confusing error message that should have been confined to an
error branch.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.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_device.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c:1.18 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c:1.19
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c:1.18	Tue Feb 21 11:39:39 2023
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c	Thu May 25 12:07:43 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_device.c,v 1.18 2023/02/21 11:39:39 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_device.c,v 1.19 2023/05/25 12:07:43 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -28,7 +28,7 @@
  *  Jerome Glisse
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_device.c,v 1.18 2023/02/21 11:39:39 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_device.c,v 1.19 2023/05/25 12:07:43 riastradh Exp $");
 
 #include 
 #include 
@@ -3085,7 +3085,6 @@ int amdgpu_device_init(struct amdgpu_dev
 	}
 #ifdef __NetBSD__
 	if (i == DEVICE_COUNT_RESOURCE)
-		DRM_ERROR("Unable to find PCI I/O BAR\n");
 #else
 	if (adev->rio_mem == NULL)
 #endif



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2023-05-12 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri May 12 10:13:37 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_busy.c

Log Message:
i915: Avoid dereferencing null fence if resv has changed.

PR kern/57402

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_busy.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2023-05-12 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri May 12 10:13:37 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_busy.c

Log Message:
i915: Avoid dereferencing null fence if resv has changed.

PR kern/57402

XXX pullup-10


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_busy.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/i915/gem/i915_gem_busy.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_busy.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_busy.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_busy.c:1.3	Sun Dec 19 11:20:25 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_busy.c	Fri May 12 10:13:37 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_busy.c,v 1.3 2021/12/19 11:20:25 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_busy.c,v 1.4 2023/05/12 10:13:37 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_busy.c,v 1.3 2021/12/19 11:20:25 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_busy.c,v 1.4 2023/05/12 10:13:37 riastradh Exp $");
 
 #include "gt/intel_engine.h"
 
@@ -130,6 +130,8 @@ retry:
 			struct dma_fence *fence =
 rcu_dereference(list->shared[i]);
 
+			if (read_seqcount_retry(>base.resv->seq, seq))
+goto retry;
 			args->busy |= busy_check_reader(fence);
 		}
 	}



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2023-03-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Mar  1 08:14:13 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_gart.c

Log Message:
amdgpu: Fix bogus loop invariant assertions in amdgpu_gart_map.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_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_gart.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.10 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.11
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.10	Sat Jul 30 17:12:39 2022
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c	Wed Mar  1 08:14:13 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_gart.c,v 1.10 2022/07/30 17:12:39 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_gart.c,v 1.11 2023/03/01 08:14:13 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -29,7 +29,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_gart.c,v 1.10 2022/07/30 17:12:39 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_gart.c,v 1.11 2023/03/01 08:14:13 riastradh Exp $");
 
 #include 
 #include 
@@ -440,8 +440,9 @@ int amdgpu_gart_map(struct amdgpu_device
 	t = gpu_start / AMDGPU_GPU_PAGE_SIZE;
 
 	for (i = 0; npages --> 0;) {
-		KASSERT(i < dmamap->dm_nsegs);
 		for (j = 0; j < AMDGPU_GPU_PAGES_IN_CPU_PAGE; j++) {
+			KASSERT(i < dmamap->dm_nsegs);
+			KASSERT(seg_off < dmamap->dm_segs[i].ds_len);
 			amdgpu_gmc_set_pte_pde(adev, dst, t,
 			dmamap->dm_segs[i].ds_addr + seg_off, flags);
 			seg_off += AMDGPU_GPU_PAGE_SIZE;
@@ -449,7 +450,6 @@ int amdgpu_gart_map(struct amdgpu_device
 i++;
 seg_off = 0;
 			}
-			KASSERT(seg_off < dmamap->dm_segs[i].ds_len);
 		}
 	}
 



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2023-03-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Mar  1 08:14:13 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_gart.c

Log Message:
amdgpu: Fix bogus loop invariant assertions in amdgpu_gart_map.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2023-02-21 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Feb 21 11:39:39 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_device.c

Log Message:
amdgpu: Fix scale factor for 64-bit doorbell indexing.

The register is 64 bits wide, but the indexing is for 32-bit
quantities (and presumably index must be even here).

Found by Jeff Frasca -- thanks!


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.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_device.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c:1.17 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c:1.18
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c:1.17	Tue Sep 20 23:01:42 2022
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c	Tue Feb 21 11:39:39 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_device.c,v 1.17 2022/09/20 23:01:42 mrg Exp $	*/
+/*	$NetBSD: amdgpu_device.c,v 1.18 2023/02/21 11:39:39 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -28,7 +28,7 @@
  *  Jerome Glisse
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_device.c,v 1.17 2022/09/20 23:01:42 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_device.c,v 1.18 2023/02/21 11:39:39 riastradh Exp $");
 
 #include 
 #include 
@@ -483,19 +483,19 @@ u64 amdgpu_mm_rdoorbell64(struct amdgpu_
 #ifdef __NetBSD__
 #ifdef _LP64
 		return bus_space_read_8(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index);
+		4*index);
 #else
 		uint64_t lo, hi;
 #if _BYTE_ORDER == _LITTLE_ENDIAN
 		lo = bus_space_read_4(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index);
+		4*index);
 		hi = bus_space_read_4(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index + 4);
+		4*index + 4);
 #else
 		hi = bus_space_read_4(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index);
+		4*index);
 		lo = bus_space_read_4(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index + 4);
+		4*index + 4);
 #endif
 		return lo | (hi << 32);
 #endif
@@ -524,21 +524,21 @@ void amdgpu_mm_wdoorbell64(struct amdgpu
 #ifdef __NetBSD__
 #ifdef _LP64
 		bus_space_write_8(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index, v);
+		4*index, v);
 #else
 		/*
 		 * XXX This might not be as atomic as one might hope...
 		 */
 #if _BYTE_ORDER == _LITTLE_ENDIAN
 		bus_space_write_4(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index, v & 0xU);
+		4*index, v & 0xU);
 		bus_space_write_4(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index + 4, v >> 32);
+		4*index + 4, v >> 32);
 #else
 		bus_space_write_4(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index, v >> 32);
+		4*index, v >> 32);
 		bus_space_write_4(adev->doorbell.bst, adev->doorbell.bsh,
-		8*index + 4, v & 0xU);
+		4*index + 4, v & 0xU);
 #endif
 #endif
 #else



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2023-02-21 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Feb 21 11:39:39 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_device.c

Log Message:
amdgpu: Fix scale factor for 64-bit doorbell indexing.

The register is 64 bits wide, but the indexing is for 32-bit
quantities (and presumably index must be even here).

Found by Jeff Frasca -- thanks!


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:39:13 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_bo.c

Log Message:
vmwgfx(4): Partially adapt rbtree.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_bo.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/vmwgfx/vmwgfx_bo.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_bo.c:1.2 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_bo.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_bo.c:1.2	Sat Dec 18 23:45:45 2021
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_bo.c	Tue Oct 25 23:39:13 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_bo.c,v 1.2 2021/12/18 23:45:45 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_bo.c,v 1.3 2022/10/25 23:39:13 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -29,7 +29,7 @@
  **/
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_bo.c,v 1.2 2021/12/18 23:45:45 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_bo.c,v 1.3 2022/10/25 23:39:13 riastradh Exp $");
 
 #include 
 
@@ -490,6 +490,9 @@ static void vmw_user_bo_destroy(struct t
 	ttm_prime_object_kfree(vmw_user_bo, prime);
 }
 
+#ifdef __NetBSD__
+extern rb_tree_ops_t vmwgfx_res_rb_ops;
+#endif
 
 /**
  * vmw_bo_init - Initialize a vmw buffer object
@@ -521,7 +524,11 @@ int vmw_bo_init(struct vmw_private *dev_
 	memset(vmw_bo, 0, sizeof(*vmw_bo));
 	BUILD_BUG_ON(TTM_MAX_BO_PRIORITY <= 3);
 	vmw_bo->base.priority = 3;
+#ifdef __NetBSD__
+	rb_tree_init(_bo->res_tree.rbr_tree, _res_rb_ops);
+#else
 	vmw_bo->res_tree = RB_ROOT;
+#endif
 
 	ret = ttm_bo_init(bdev, _bo->base, size,
 			  ttm_bo_type_device, placement,



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:39:13 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_bo.c

Log Message:
vmwgfx(4): Partially adapt rbtree.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_bo.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:36:21 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_drv.h vmwgfx_irq.c

Log Message:
vmwgfx(4): Hand-cruft threaded irq with a workqueue(9).


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:36:21 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_drv.h vmwgfx_irq.c

Log Message:
vmwgfx(4): Hand-cruft threaded irq with a workqueue(9).


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.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/vmwgfx/vmwgfx_drv.h
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h:1.8 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h:1.9
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h:1.8	Tue Oct 25 23:35:43 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h	Tue Oct 25 23:36:21 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_drv.h,v 1.8 2022/10/25 23:35:43 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_drv.h,v 1.9 2022/10/25 23:36:21 riastradh Exp $	*/
 
 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /**
@@ -30,6 +30,10 @@
 #ifndef _VMWGFX_DRV_H_
 #define _VMWGFX_DRV_H_
 
+#ifdef __NetBSD__
+#include 
+#endif
+
 #include 
 #include 
 #include 
@@ -629,6 +633,11 @@ struct vmw_private {
 
 	struct vmw_cmdbuf_man *cman;
 	DECLARE_BITMAP(irqthread_pending, VMW_IRQTHREAD_MAX);
+#ifdef __NetBSD__
+	struct workqueue *irqthread_wq;
+	struct work irqthread_work;
+	volatile unsigned irqthread_scheduled;
+#endif
 
 	/* Validation memory reservation */
 	struct vmw_validation_mem vvm;

Index: src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.c:1.5 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.c:1.5	Tue Oct 25 23:35:43 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.c	Tue Oct 25 23:36:21 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_irq.c,v 1.5 2022/10/25 23:35:43 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_irq.c,v 1.6 2022/10/25 23:36:21 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -28,7 +28,7 @@
  **/
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_irq.c,v 1.5 2022/10/25 23:35:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_irq.c,v 1.6 2022/10/25 23:36:21 riastradh Exp $");
 
 #include 
 
@@ -49,12 +49,21 @@ __KERNEL_RCSID(0, "$NetBSD: vmwgfx_irq.c
  * vmw_irq_handler has returned with IRQ_WAKE_THREAD.
  *
  */
+#ifdef __NetBSD__
+static void
+vmw_thread_fn(struct work *work, void *arg)
+#else
 static irqreturn_t vmw_thread_fn(int irq, void *arg)
+#endif
 {
 	struct drm_device *dev = (struct drm_device *)arg;
 	struct vmw_private *dev_priv = vmw_priv(dev);
 	irqreturn_t ret = IRQ_NONE;
 
+#ifdef __NetBSD__
+	atomic_store_relaxed(_priv->irqthread_scheduled, false);
+#endif
+
 	if (test_and_clear_bit(VMW_IRQTHREAD_FENCE,
 			   dev_priv->irqthread_pending)) {
 		spin_lock(_priv->fence_lock);
@@ -71,7 +80,9 @@ static irqreturn_t vmw_thread_fn(int irq
 		ret = IRQ_HANDLED;
 	}
 
+#ifndef __NetBSD__
 	return ret;
+#endif
 }
 
 /**
@@ -129,6 +140,16 @@ static irqreturn_t vmw_irq_handler(int i
 			  dev_priv->irqthread_pending))
 		ret = IRQ_WAKE_THREAD;
 
+#ifdef __NetBSD__
+	if (ret == IRQ_WAKE_THREAD) {
+		if (atomic_swap_uint(_priv->irqthread_scheduled, 1) == 0) {
+			workqueue_enqueue(dev_priv->irqthread_wq,
+			_priv->irqthread_work, NULL);
+		}
+		ret = IRQ_HANDLED;
+	}
+#endif
+
 	return ret;
 }
 
@@ -450,7 +471,13 @@ void vmw_irq_uninstall(struct drm_device
 #endif
 
 	dev->irq_enabled = false;
+#ifdef __NetBSD__
+	int ret = drm_irq_uninstall(dev);
+	KASSERT(ret == 0);
+	workqueue_destroy(dev_priv->irqthread_wq);
+#else
 	free_irq(dev->irq, dev);
+#endif
 }
 
 /**
@@ -469,8 +496,21 @@ int vmw_irq_install(struct drm_device *d
 
 	vmw_irq_preinstall(dev);
 
+#ifdef __NetBSD__
+	/* XXX errno NetBSD->Linux */
+	ret = -workqueue_create(_priv(dev)->irqthread_wq, "vmwgfirq",
+	vmw_thread_fn, dev, PRI_NONE, IPL_DRM, WQ_MPSAFE);
+	if (ret < 0)
+		return ret;
+	ret = drm_irq_install(dev);
+	if (ret < 0) {
+		workqueue_destroy(vmw_priv(dev)->irqthread_wq);
+		vmw_priv(dev)->irqthread_wq = NULL;
+	}
+#else
 	ret = request_threaded_irq(irq, vmw_irq_handler, vmw_thread_fn,
    IRQF_SHARED, VMWGFX_DRIVER_NAME, dev);
+#endif
 	if (ret < 0)
 		return ret;
 



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:35:57 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_execbuf.c

Log Message:
vmwgfx(4): Port fd creation.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.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/vmwgfx/vmwgfx_execbuf.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c:1.4 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c:1.4	Tue Oct 25 23:34:05 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c	Tue Oct 25 23:35:57 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_execbuf.c,v 1.4 2022/10/25 23:34:05 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_execbuf.c,v 1.5 2022/10/25 23:35:57 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -27,10 +27,14 @@
  *
  **/
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_execbuf.c,v 1.4 2022/10/25 23:34:05 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_execbuf.c,v 1.5 2022/10/25 23:35:57 riastradh Exp $");
 
 #include 
 
+#ifdef __NetBSD__
+#include 
+#endif
+
 #include "vmwgfx_drv.h"
 #include "vmwgfx_reg.h"
 #include 
@@ -3466,6 +3470,10 @@ vmw_execbuf_copy_fence_user(struct vmw_p
 	 * handle.
 	 */
 	if (unlikely(ret != 0) && (fence_rep.error == 0)) {
+#ifdef __NetBSD__
+		if (fd_getfile(fence_rep.fd))
+			(void)fd_close(fence_rep.fd);
+#else
 		if (sync_file)
 			fput(sync_file->file);
 
@@ -3473,6 +3481,7 @@ vmw_execbuf_copy_fence_user(struct vmw_p
 			put_unused_fd(fence_rep.fd);
 			fence_rep.fd = -1;
 		}
+#endif
 
 		ttm_ref_object_base_unref(vmw_fp->tfile, fence_handle,
 	  TTM_REF_USAGE);
@@ -3655,18 +3664,29 @@ int vmw_execbuf_process(struct drm_file 
 	struct vmw_cmdbuf_header *header;
 	uint32_t handle = 0;
 	int ret;
+#ifdef __NetBSD__
+	int out_fence_fd = -1;
+	struct file *out_fence_fp = NULL;
+#else
 	int32_t out_fence_fd = -1;
+#endif
 	struct sync_file *sync_file = NULL;
 	DECLARE_VAL_CONTEXT(val_ctx, _context->res_ht, 1);
 
 	vmw_validation_set_val_mem(_ctx, _priv->vvm);
 
 	if (flags & DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD) {
+#ifdef __NetBSD__
+		ret = -fd_allocfile(_fence_fp, _fence_fd);
+		if (ret)
+			return ret;
+#else
 		out_fence_fd = get_unused_fd_flags(O_CLOEXEC);
 		if (out_fence_fd < 0) {
 			VMW_DEBUG_USER("Failed to get a fence fd.\n");
 			return out_fence_fd;
 		}
+#endif
 	}
 
 	if (throttle_us) {
@@ -3813,17 +3833,30 @@ int vmw_execbuf_process(struct drm_file 
 	 */
 	if (flags & DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD) {
 
+#ifdef __NetBSD__
+		sync_file = sync_file_create(>base, out_fence_fp);
+#else
 		sync_file = sync_file_create(>base);
+#endif
 		if (!sync_file) {
 			VMW_DEBUG_USER("Sync file create failed for fence\n");
+#ifdef __NetBSD__
+			fd_abort(curproc, out_fence_fp, out_fence_fd);
+			out_fence_fp = NULL;
+#else
 			put_unused_fd(out_fence_fd);
+#endif
 			out_fence_fd = -1;
 
 			(void) vmw_fence_obj_wait(fence, false, false,
 		  VMW_FENCE_WAIT_TIMEOUT);
 		} else {
 			/* Link the fence with the FD created earlier */
+#ifdef __NetBSD__
+			fd_affix(curproc, out_fence_fp, out_fence_fd);
+#else
 			fd_install(out_fence_fd, sync_file->file);
+#endif
 		}
 	}
 
@@ -3877,7 +3910,11 @@ out_free_header:
 		vmw_cmdbuf_header_free(header);
 out_free_fence_fd:
 	if (out_fence_fd >= 0)
+#ifdef __NetBSD__
+		fd_abort(curproc, out_fence_fp, out_fence_fd);
+#else
 		put_unused_fd(out_fence_fd);
+#endif
 
 	return ret;
 }



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:35:57 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_execbuf.c

Log Message:
vmwgfx(4): Port fd creation.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:35:43 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_drv.c vmwgfx_drv.h
vmwgfx_ioctl.c vmwgfx_irq.c vmwgfx_marker.c vmwgfx_overlay.c
vmwgfx_reg.h

Log Message:
vmwgfx(4): Misc porting too.

- inl/outl -> bus_space_read/write
- struct device for DMA stuff -> bus_dma_tag_t
- spin_lock_destroy (and don't hold spin lock across kfree)
- driver load/unload, fops, 
- drm_irq_install/uninstall


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c
cvs rdiff -u -r1.7 -r1.8 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_ioctl.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_marker.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_overlay.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_reg.h
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.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/vmwgfx/vmwgfx_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.6 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.6	Tue Oct 25 23:34:05 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c	Tue Oct 25 23:35:43 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_drv.c,v 1.6 2022/10/25 23:34:05 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_drv.c,v 1.7 2022/10/25 23:35:43 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -28,7 +28,7 @@
  **/
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_drv.c,v 1.6 2022/10/25 23:34:05 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_drv.c,v 1.7 2022/10/25 23:35:43 riastradh Exp $");
 
 #include 
 #include 
@@ -46,6 +46,8 @@ __KERNEL_RCSID(0, "$NetBSD: vmwgfx_drv.c
 #include "vmwgfx_binding.h"
 #include "vmwgfx_drv.h"
 
+#include 
+
 #define VMWGFX_DRIVER_DESC "Linux drm driver for VMware graphics devices"
 #define VMWGFX_CHIP_SVGAII 0
 #define VMW_FB_RESERVATION 0
@@ -269,7 +271,9 @@ static int vmw_force_coherent;
 static int vmw_restrict_dma_mask;
 static int vmw_assume_16bpp;
 
+#ifndef __NetBSD__
 static int vmw_probe(struct pci_dev *, const struct pci_device_id *);
+#endif
 static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val,
 			  void *ptr);
 
@@ -608,11 +612,19 @@ static int vmw_dma_masks(struct vmw_priv
 	struct drm_device *dev = dev_priv->dev;
 	int ret = 0;
 
+#ifdef __NetBSD__
+	ret = drm_limit_dma_space(dev, 0, __BITS(63,0));
+#else
 	ret = dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(64));
+#endif
 	if (dev_priv->map_mode != vmw_dma_phys &&
 	(sizeof(unsigned long) == 4 || vmw_restrict_dma_mask)) {
 		DRM_INFO("Restricting DMA addresses to 44 bits.\n");
+#ifdef __NetBSD__
+		return drm_limit_dma_space(dev, 0, __BITS(43,0));
+#else
 		return dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(44));
+#endif
 	}
 
 	return ret;
@@ -762,8 +774,10 @@ static int vmw_driver_load(struct drm_de
 	if (unlikely(ret != 0))
 		goto out_err0;
 
+#ifndef __NetBSD__		/* XXX set bus_dma maxsegsz? */
 	dma_set_max_seg_size(dev->dev, min_t(unsigned int, U32_MAX & PAGE_MASK,
 	 SCATTERLIST_MAX_SEGMENT));
+#endif
 
 	if (dev_priv->capabilities & SVGA_CAP_GMR2) {
 		DRM_INFO("Max GMR ids is %u\n",
@@ -780,8 +794,20 @@ static int vmw_driver_load(struct drm_de
 	DRM_INFO("MMIO at 0x%08x size is %u kiB\n",
 		 dev_priv->mmio_start, dev_priv->mmio_size / 1024);
 
+#ifdef __NetBSD__
+	dev_priv->mmio_bst = dev->bst;
+	if (bus_space_map(dev_priv->mmio_bst, dev_priv->mmio_start,
+		dev_priv->mmio_size, BUS_SPACE_MAP_LINEAR,
+		_priv->mmio_bsh) == 0) {
+		dev_priv->mmio_virt = bus_space_vaddr(dev_priv->mmio_bst,
+		dev_priv->mmio_bsh);
+	} else {
+		dev_priv->mmio_virt = NULL;
+	}
+#else
 	dev_priv->mmio_virt = memremap(dev_priv->mmio_start,
    dev_priv->mmio_size, MEMREMAP_WB);
+#endif
 
 	if (unlikely(dev_priv->mmio_virt == NULL)) {
 		ret = -ENOMEM;
@@ -789,6 +815,18 @@ static int vmw_driver_load(struct drm_de
 		goto out_err0;
 	}
 
+#ifdef __NetBSD__
+	dev_priv->iot = dev->pdev->pd_pa.pa_iot;
+
+	/* XXX errno NetBSD->Linux */
+	ret = -bus_space_map(dev_priv->iot, dev_priv->io_start, VMWGFX_IOSIZE,
+	0, _priv->ioh);
+	if (ret) {
+		DRM_ERROR("Failed mapping IO ports.\n");
+		goto out_err3;
+	}
+#endif
+
 	/* Need mmio memory to check for fifo pitchlock cap. */
 	if (!(dev_priv->capabilities & SVGA_CAP_DISPLAY_TOPOLOGY) &&
 	!(dev_priv->capabilities & SVGA_CAP_PITCHLOCK) &&
@@ -826,7 +864,11 @@ static int vmw_driver_load(struct 

CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:35:43 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_drv.c vmwgfx_drv.h
vmwgfx_ioctl.c vmwgfx_irq.c vmwgfx_marker.c vmwgfx_overlay.c
vmwgfx_reg.h

Log Message:
vmwgfx(4): Misc porting too.

- inl/outl -> bus_space_read/write
- struct device for DMA stuff -> bus_dma_tag_t
- spin_lock_destroy (and don't hold spin lock across kfree)
- driver load/unload, fops, 
- drm_irq_install/uninstall


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c
cvs rdiff -u -r1.7 -r1.8 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_ioctl.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_marker.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_overlay.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_reg.h
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:35:29 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_cmdbuf.c

Log Message:
vmwgfx(4): Use bus_dma tag, not struct device, for dma_pool shims.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.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/vmwgfx/vmwgfx_cmdbuf.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.6 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.6	Tue Oct 25 23:33:44 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c	Tue Oct 25 23:35:29 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_cmdbuf.c,v 1.6 2022/10/25 23:33:44 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_cmdbuf.c,v 1.7 2022/10/25 23:35:29 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -28,7 +28,7 @@
  **/
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_cmdbuf.c,v 1.6 2022/10/25 23:33:44 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_cmdbuf.c,v 1.7 2022/10/25 23:35:29 riastradh Exp $");
 
 #include 
 #include 
@@ -1373,7 +1373,11 @@ struct vmw_cmdbuf_man *vmw_cmdbuf_man_cr
 	man->num_contexts = (dev_priv->capabilities & SVGA_CAP_HP_CMD_QUEUE) ?
 		2 : 1;
 	man->headers = dma_pool_create("vmwgfx cmdbuf",
+#ifdef __NetBSD__
+   dev_priv->dev->dmat,
+#else
    _priv->dev->pdev->dev,
+#endif
    sizeof(SVGACBHeader),
    64, PAGE_SIZE);
 	if (!man->headers) {
@@ -1382,7 +1386,11 @@ struct vmw_cmdbuf_man *vmw_cmdbuf_man_cr
 	}
 
 	man->dheaders = dma_pool_create("vmwgfx inline cmdbuf",
+#ifdef __NetBSD__
+	dev_priv->dev->dmat,
+#else
 	_priv->dev->pdev->dev,
+#endif
 	sizeof(struct vmw_cmdbuf_dheader),
 	64, PAGE_SIZE);
 	if (!man->dheaders) {



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:35:29 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_cmdbuf.c

Log Message:
vmwgfx(4): Use bus_dma tag, not struct device, for dma_pool shims.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:34:06 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_drv.c vmwgfx_drv.h
vmwgfx_execbuf.c vmwgfx_fence.c vmwgfx_fifo.c vmwgfx_irq.c

Log Message:
vmwgfx(4): Convert fence_queue and fifo_queue to drm_waitqueue_t.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_fence.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_fifo.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.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/vmwgfx/vmwgfx_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.5 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.5	Thu Feb 17 01:21:02 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c	Tue Oct 25 23:34:05 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_drv.c,v 1.5 2022/02/17 01:21:02 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_drv.c,v 1.6 2022/10/25 23:34:05 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -28,7 +28,7 @@
  **/
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_drv.c,v 1.5 2022/02/17 01:21:02 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_drv.c,v 1.6 2022/10/25 23:34:05 riastradh Exp $");
 
 #include 
 #include 
@@ -655,8 +655,10 @@ static int vmw_driver_load(struct drm_de
 		INIT_LIST_HEAD(_priv->res_lru[i]);
 	}
 
-	init_waitqueue_head(_priv->fence_queue);
-	init_waitqueue_head(_priv->fifo_queue);
+	DRM_INIT_WAITQUEUE(_priv->fence_queue, "vmwgfence");
+	spin_lock_init(_priv->fence_lock);
+	DRM_INIT_WAITQUEUE(_priv->fifo_queue, "vmwgfifo");
+	spin_lock_init(_priv->fifo_lock);
 	dev_priv->fence_queue_waiters = 0;
 	dev_priv->fifo_queue_waiters = 0;
 
@@ -963,6 +965,11 @@ out_no_device:
 out_err4:
 	memunmap(dev_priv->mmio_virt);
 out_err0:
+	spin_lock_destroy(_priv->fifo_lock);
+	DRM_DESTROY_WAITQUEUE(_priv->fifo_queue);
+	spin_lock_destroy(_priv->fence_lock);
+	DRM_DESTROY_WAITQUEUE(_priv->fence_queue);
+
 	for (i = vmw_res_context; i < vmw_res_max; ++i)
 		idr_destroy(_priv->res_idr[i]);
 
@@ -1015,6 +1022,11 @@ static void vmw_driver_unload(struct drm
 	if (dev_priv->ctx.staged_bindings)
 		vmw_binding_state_free(dev_priv->ctx.staged_bindings);
 
+	spin_lock_destroy(_priv->fifo_lock);
+	DRM_DESTROY_WAITQUEUE(_priv->fifo_queue);
+	spin_lock_destroy(_priv->fence_lock);
+	DRM_DESTROY_WAITQUEUE(_priv->fence_queue);
+
 	for (i = vmw_res_context; i < vmw_res_max; ++i)
 		idr_destroy(_priv->res_idr[i]);
 

Index: src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h:1.6 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h:1.7
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h:1.6	Thu Feb 17 01:21:02 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h	Tue Oct 25 23:34:05 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_drv.h,v 1.6 2022/02/17 01:21:02 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_drv.h,v 1.7 2022/10/25 23:34:05 riastradh Exp $	*/
 
 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /**
@@ -538,7 +538,9 @@ struct vmw_private {
 
 	atomic_t marker_seq;
 	drm_waitqueue_t fence_queue;
+	spinlock_t fence_lock;
 	drm_waitqueue_t fifo_queue;
+	spinlock_t fifo_lock;
 	spinlock_t waiter_lock;
 	int fence_queue_waiters; /* Protected by waiter_lock */
 	int goal_queue_waiters; /* Protected by waiter_lock */

Index: src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c:1.3 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c:1.3	Sat Dec 18 23:45:45 2021
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c	Tue Oct 25 23:34:05 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_execbuf.c,v 1.3 2021/12/18 23:45:45 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_execbuf.c,v 1.4 2022/10/25 23:34:05 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -27,7 +27,7 @@
  *
  **/
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_execbuf.c,v 1.3 2021/12/18 23:45:45 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_execbuf.c,v 1.4 

CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:34:06 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_drv.c vmwgfx_drv.h
vmwgfx_execbuf.c vmwgfx_fence.c vmwgfx_fifo.c vmwgfx_irq.c

Log Message:
vmwgfx(4): Convert fence_queue and fifo_queue to drm_waitqueue_t.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.h
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_execbuf.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_fence.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_fifo.c \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_irq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:33:44 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_cmdbuf.c

Log Message:
vmwgfx(4): Convert cmdbuf to drm_waitqueue_t.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.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/vmwgfx/vmwgfx_cmdbuf.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.5 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.5	Tue Oct 25 23:32:04 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c	Tue Oct 25 23:33:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_cmdbuf.c,v 1.5 2022/10/25 23:32:04 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_cmdbuf.c,v 1.6 2022/10/25 23:33:44 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -28,7 +28,7 @@
  **/
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_cmdbuf.c,v 1.5 2022/10/25 23:32:04 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_cmdbuf.c,v 1.6 2022/10/25 23:33:44 riastradh Exp $");
 
 #include 
 #include 
@@ -132,8 +132,8 @@ struct vmw_cmdbuf_man {
 	spinlock_t lock;
 	struct dma_pool *headers;
 	struct dma_pool *dheaders;
-	wait_queue_head_t alloc_queue;
-	wait_queue_head_t idle_queue;
+	drm_waitqueue_t alloc_queue;
+	drm_waitqueue_t idle_queue;
 	bool irq_on;
 	bool using_mob;
 	bool has_pool;
@@ -276,7 +276,7 @@ static void __vmw_cmdbuf_header_free(str
 	}
 
 	drm_mm_remove_node(>node);
-	wake_up_all(>alloc_queue);
+	DRM_SPIN_WAKEUP_ALL(>alloc_queue, >lock); /* XXX */
 	if (header->cb_header)
 		dma_pool_free(man->headers, header->cb_header,
 			  header->handle);
@@ -391,6 +391,8 @@ static void vmw_cmdbuf_ctx_process(struc
 {
 	struct vmw_cmdbuf_header *entry, *next;
 
+	assert_spin_locked(>lock);
+
 	vmw_cmdbuf_ctx_submit(man, ctx);
 
 	list_for_each_entry_safe(entry, next, >hw_submitted, list) {
@@ -400,7 +402,7 @@ static void vmw_cmdbuf_ctx_process(struc
 			break;
 
 		list_del(>list);
-		wake_up_all(>idle_queue);
+		DRM_SPIN_WAKEUP_ONE(>idle_queue, >lock);
 		ctx->num_hw_submitted--;
 		switch (status) {
 		case SVGA_CB_STATUS_COMPLETED:
@@ -448,6 +450,8 @@ static void vmw_cmdbuf_man_process(struc
 	struct vmw_cmdbuf_context *ctx;
 	int i;
 
+	assert_spin_locked(>lock);
+
 retry:
 	notempty = 0;
 	for_each_cmdbuf_ctx(man, i, ctx)
@@ -622,7 +626,9 @@ static void vmw_cmdbuf_work_func(struct 
 	/* Send a new fence in case one was removed */
 	if (send_fence) {
 		vmw_fifo_send_fence(man->dev_priv, );
-		wake_up_all(>idle_queue);
+		spin_lock(>lock);
+		DRM_SPIN_WAKEUP_ALL(>idle_queue, >lock);
+		spin_unlock(>lock);
 	}
 
 	mutex_unlock(>error_mutex);
@@ -642,20 +648,19 @@ static bool vmw_cmdbuf_man_idle(struct v
 	bool idle = false;
 	int i;
 
-	spin_lock(>lock);
+	assert_spin_locked(>lock);
+
 	vmw_cmdbuf_man_process(man);
 	for_each_cmdbuf_ctx(man, i, ctx) {
 		if (!list_empty(>submitted) ||
 		!list_empty(>hw_submitted) ||
 		(check_preempted && !list_empty(>preempted)))
-			goto out_unlock;
+			goto out;
 	}
 
 	idle = list_empty(>error);
 
-out_unlock:
-	spin_unlock(>lock);
-
+out:
 	return idle;
 }
 
@@ -732,18 +737,17 @@ int vmw_cmdbuf_idle(struct vmw_cmdbuf_ma
 	int ret;
 
 	ret = vmw_cmdbuf_cur_flush(man, interruptible);
+	spin_lock(>lock);
 	vmw_generic_waiter_add(man->dev_priv,
 			   SVGA_IRQFLAG_COMMAND_BUFFER,
 			   >dev_priv->cmdbuf_waiters);
-
 	if (interruptible) {
-		ret = wait_event_interruptible_timeout
-			(man->idle_queue, vmw_cmdbuf_man_idle(man, true),
-			 timeout);
+		DRM_SPIN_TIMED_WAIT_UNTIL(ret, >idle_queue, >lock,
+		timeout, vmw_cmdbuf_man_idle(man, true));
 	} else {
-		ret = wait_event_timeout
-			(man->idle_queue, vmw_cmdbuf_man_idle(man, true),
-			 timeout);
+		DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, >idle_queue,
+		>lock,
+		timeout, vmw_cmdbuf_man_idle(man, true));
 	}
 	vmw_generic_waiter_remove(man->dev_priv,
   SVGA_IRQFLAG_COMMAND_BUFFER,
@@ -754,6 +758,7 @@ int vmw_cmdbuf_idle(struct vmw_cmdbuf_ma
 		else
 			ret = 0;
 	}
+	spin_unlock(>lock);
 	if (ret > 0)
 		ret = 0;
 
@@ -825,6 +830,7 @@ static int vmw_cmdbuf_alloc_space(struct
 	} else {
 		mutex_lock(>space_mutex);
 	}
+	spin_lock(>lock);
 
 	/* Try to allocate space without waiting. */
 	if (vmw_cmdbuf_try_alloc(man, ))
@@ -837,23 +843,29 @@ static int vmw_cmdbuf_alloc_space(struct
 	if (interruptible) {
 		int ret;
 
-		ret = wait_event_interruptible
-			(man->alloc_queue, vmw_cmdbuf_try_alloc(man, ));
+		DRM_SPIN_WAIT_UNTIL(ret, >alloc_queue, >lock,
+		vmw_cmdbuf_try_alloc(man, ));
 		if (ret) {
 			

CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:33:44 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_cmdbuf.c

Log Message:
vmwgfx(4): Convert cmdbuf to drm_waitqueue_t.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:32:04 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_cmdbuf.c

Log Message:
vmwgfx(4): dma_alloc/free_coherent -> bus_dma_*


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.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/vmwgfx/vmwgfx_cmdbuf.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.4 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c:1.4	Thu Feb 17 01:21:02 2022
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c	Tue Oct 25 23:32:04 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_cmdbuf.c,v 1.4 2022/02/17 01:21:02 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_cmdbuf.c,v 1.5 2022/10/25 23:32:04 riastradh Exp $	*/
 
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**
@@ -28,7 +28,7 @@
  **/
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_cmdbuf.c,v 1.4 2022/02/17 01:21:02 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_cmdbuf.c,v 1.5 2022/10/25 23:32:04 riastradh Exp $");
 
 #include 
 #include 
@@ -137,6 +137,10 @@ struct vmw_cmdbuf_man {
 	bool irq_on;
 	bool using_mob;
 	bool has_pool;
+#ifdef __NetBSD__
+	bus_dmamap_t dmamap;
+	bus_dma_segment_t dmaseg;
+#endif
 	dma_addr_t handle;
 	size_t size;
 	u32 num_contexts;
@@ -1237,8 +1241,46 @@ int vmw_cmdbuf_set_pool_size(struct vmw_
 
 	/* First, try to allocate a huge chunk of DMA memory */
 	size = PAGE_ALIGN(size);
+#ifdef __NetBSD__
+	int error, nseg, alloced = 0,  mapped = 0, loaded = 0;
+
+	do {
+		error = bus_dmamap_create(dev_priv->dev->dmat, size, 1, size,
+		0, BUS_DMA_ALLOCNOW|BUS_DMA_WAITOK, >dmamap);
+		if (error)
+			break;
+		error = bus_dmamem_alloc(dev_priv->dev->dmat, size, 1, 0,
+		>dmaseg, 1, , BUS_DMA_WAITOK);
+		if (error)
+			break;
+		KASSERT(nseg == 1);
+		alloced = 1;
+		error = bus_dmamem_map(dev_priv->dev->dmat, >dmaseg, 1,
+		size, (void *)>map, BUS_DMA_COHERENT|BUS_DMA_WAITOK);
+		if (error)
+			break;
+		mapped = 1;
+		error = bus_dmamap_load(dev_priv->dev->dmat, man->dmamap,
+		man->map, size, NULL, BUS_DMA_WAITOK);
+		if (error)
+			break;
+		loaded = 1;
+	} while (0);
+	if (error) {
+		if (loaded)
+			bus_dmamap_unload(dev_priv->dev->dmat, man->dmamap);
+		if (mapped)
+			bus_dmamem_unmap(dev_priv->dev->dmat, man->map, size);
+		if (alloced)
+			bus_dmamem_free(dev_priv->dev->dmat, >dmaseg, 1);
+		if (man->dmamap)
+			bus_dmamap_destroy(dev_priv->dev->dmat, man->dmamap);
+		man->map = NULL;
+	}
+#else
 	man->map = dma_alloc_coherent(_priv->dev->pdev->dev, size,
   >handle, GFP_KERNEL);
+#endif
 	if (man->map) {
 		man->using_mob = false;
 	} else {
@@ -1393,8 +1435,16 @@ void vmw_cmdbuf_remove_pool(struct vmw_c
 		ttm_bo_put(man->cmd_space);
 		man->cmd_space = NULL;
 	} else {
+#ifdef __NetBSD__
+		const bus_dma_tag_t dmat = man->dev_priv->dev->dmat;
+		bus_dmamap_unload(dmat, man->dmamap);
+		bus_dmamem_unmap(dmat, man->map, man->size);
+		bus_dmamem_free(dmat, >dmaseg, 1);
+		bus_dmamap_destroy(dmat, man->dmamap);
+#else
 		dma_free_coherent(>dev_priv->dev->pdev->dev,
   man->size, man->map, man->handle);
+#endif
 	}
 }
 



CVS commit: src/sys/external/bsd/drm2/dist/drm/vmwgfx

2022-10-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Oct 25 23:32:04 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_cmdbuf.c

Log Message:
vmwgfx(4): dma_alloc/free_coherent -> bus_dma_*


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_cmdbuf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-10-08 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Oct  8 19:06:30 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu.h amdgpu_sa.c

Log Message:
amdgpu: Remove an #ifdef __NetBSD__ around drm_waitqueue_t.

No functional change intended.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu.h
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_sa.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-10-08 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Oct  8 19:06:30 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu.h amdgpu_sa.c

Log Message:
amdgpu: Remove an #ifdef __NetBSD__ around drm_waitqueue_t.

No functional change intended.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu.h
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_sa.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.h
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu.h:1.7 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu.h:1.8
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu.h:1.7	Sun Dec 19 12:02:39 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu.h	Sat Oct  8 19:06:30 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu.h,v 1.7 2021/12/19 12:02:39 riastradh Exp $	*/
+/*	$NetBSD: amdgpu.h,v 1.8 2022/10/08 19:06:30 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -372,12 +372,8 @@ struct amdgpu_clock {
 #define AMDGPU_SA_NUM_FENCE_LISTS	32
 
 struct amdgpu_sa_manager {
-#ifdef __NetBSD__
 	spinlock_t		wq_lock;
 	drm_waitqueue_t		wq;
-#else
-	wait_queue_head_t	wq;
-#endif
 	struct amdgpu_bo	*bo;
 	struct list_head	*hole;
 	struct list_head	flist[AMDGPU_SA_NUM_FENCE_LISTS];

Index: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_sa.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_sa.c:1.4 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_sa.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_sa.c:1.4	Sat Dec 18 23:44:58 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_sa.c	Sat Oct  8 19:06:30 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_sa.c,v 1.4 2021/12/18 23:44:58 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_sa.c,v 1.5 2022/10/08 19:06:30 riastradh Exp $	*/
 
 /*
  * Copyright 2011 Red Hat Inc.
@@ -45,7 +45,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_sa.c,v 1.4 2021/12/18 23:44:58 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_sa.c,v 1.5 2022/10/08 19:06:30 riastradh Exp $");
 
 #include "amdgpu.h"
 
@@ -58,12 +58,8 @@ int amdgpu_sa_bo_manager_init(struct amd
 {
 	int i, r;
 
-#ifdef __NetBSD__
 	spin_lock_init(_manager->wq_lock);
 	DRM_INIT_WAITQUEUE(_manager->wq, "amdsabom");
-#else
-	init_waitqueue_head(_manager->wq);
-#endif
 	sa_manager->bo = NULL;
 	sa_manager->size = size;
 	sa_manager->domain = domain;
@@ -107,10 +103,8 @@ void amdgpu_sa_bo_manager_fini(struct am
 
 	amdgpu_bo_free_kernel(_manager->bo, _manager->gpu_addr, _manager->cpu_ptr);
 	sa_manager->size = 0;
-#ifdef __NetBSD__
 	DRM_DESTROY_WAITQUEUE(_manager->wq);
 	spin_lock_destroy(_manager->wq_lock);
-#endif
 }
 
 static void amdgpu_sa_bo_remove_locked(struct amdgpu_sa_bo *sa_bo)
@@ -310,11 +304,7 @@ int amdgpu_sa_bo_new(struct amdgpu_sa_ma
 	INIT_LIST_HEAD(&(*sa_bo)->olist);
 	INIT_LIST_HEAD(&(*sa_bo)->flist);
 
-#ifdef __NetBSD__
 	spin_lock(_manager->wq_lock);
-#else
-	spin_lock(_manager->wq.lock);
-#endif
 	do {
 		for (i = 0; i < AMDGPU_SA_NUM_FENCE_LISTS; ++i)
 			tries[i] = 0;
@@ -324,11 +314,7 @@ int amdgpu_sa_bo_new(struct amdgpu_sa_ma
 
 			if (amdgpu_sa_bo_try_alloc(sa_manager, *sa_bo,
 		   size, align)) {
-#ifdef __NetBSD__
 spin_unlock(_manager->wq_lock);
-#else
-spin_unlock(_manager->wq.lock);
-#endif
 return 0;
 			}
 
@@ -340,11 +326,7 @@ int amdgpu_sa_bo_new(struct amdgpu_sa_ma
 fences[count++] = dma_fence_get(fences[i]);
 
 		if (count) {
-#ifdef __NetBSD__
 			spin_unlock(_manager->wq_lock);
-#else
-			spin_unlock(_manager->wq.lock);
-#endif
 			t = dma_fence_wait_any_timeout(fences, count, false,
 		   MAX_SCHEDULE_TIMEOUT,
 		   NULL);
@@ -352,32 +334,17 @@ int amdgpu_sa_bo_new(struct amdgpu_sa_ma
 dma_fence_put(fences[i]);
 
 			r = (t > 0) ? 0 : t;
-#ifdef __NetBSD__
 			spin_lock(_manager->wq_lock);
-#else
-			spin_lock(_manager->wq.lock);
-#endif
 		} else {
 			/* if we have nothing to wait for block */
-#ifdef __NetBSD__
 			DRM_SPIN_WAIT_UNTIL(r, _manager->wq,
 			_manager->wq_lock,
 			amdgpu_sa_event(sa_manager, size, align));
-#else
-			r = wait_event_interruptible_locked(
-sa_manager->wq,
-amdgpu_sa_event(sa_manager, size, align)
-			);
-#endif
 		}
 
 	} while (!r);
 
-#ifdef __NetBSD__
 	spin_unlock(_manager->wq_lock);
-#else
-	spin_unlock(_manager->wq.lock);
-#endif
 	kfree(*sa_bo);
 	*sa_bo = NULL;
 	return r;
@@ -393,11 +360,7 @@ void amdgpu_sa_bo_free(struct amdgpu_dev
 	}
 
 	sa_manager = (*sa_bo)->manager;
-#ifdef __NetBSD__
 	spin_lock(_manager->wq_lock);
-#else
-	spin_lock(_manager->wq.lock);
-#endif
 	if (fence && !dma_fence_is_signaled(fence)) {
 		uint32_t idx;
 
@@ -407,13 +370,8 @@ void amdgpu_sa_bo_free(struct amdgpu_dev
 	} else {
 		

CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2022-09-13 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Sep 13 10:14:43 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_execbuffer.c

Log Message:
i915: Fix error branches of execbuffer vma pinning.

PR kern/56591


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_execbuffer.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/i915/gem/i915_gem_execbuffer.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_execbuffer.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_execbuffer.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_execbuffer.c:1.4	Sun Dec 19 11:33:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_execbuffer.c	Tue Sep 13 10:14:43 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_execbuffer.c,v 1.4 2021/12/19 11:33:30 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_execbuffer.c,v 1.5 2022/09/13 10:14:43 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_execbuffer.c,v 1.4 2021/12/19 11:33:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_execbuffer.c,v 1.5 2022/09/13 10:14:43 riastradh Exp $");
 
 #include 
 #include 
@@ -546,8 +546,12 @@ eb_add_vma(struct i915_execbuffer *eb,
 		list_add_tail(>exec_link, >unbound);
 		if (drm_mm_node_allocated(>node))
 			err = i915_vma_unbind(vma);
-		if (unlikely(err))
+		if (unlikely(err)) {
 			vma->exec_flags = NULL;
+			if (i == batch_idx)
+eb->batch = NULL;
+			eb->vma[i] = NULL;
+		}
 	}
 	return err;
 }
@@ -1906,6 +1910,8 @@ static int eb_move_to_gpu(struct i915_ex
 
 		__eb_unreserve_vma(vma, flags);
 		vma->exec_flags = NULL;
+		if (err)
+			eb->vma[i] = NULL;
 
 		if (unlikely(flags & __EXEC_OBJECT_HAS_REF))
 			i915_vma_put(vma);



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2022-09-13 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Sep 13 10:14:43 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_execbuffer.c

Log Message:
i915: Fix error branches of execbuffer vma pinning.

PR kern/56591


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_execbuffer.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm

2022-09-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Sep  1 11:48:59 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_mm.c

Log Message:
drm_mm: Give up on trying to phrase find_hole with public rbtree API.

Firefox works with WebGL on Mesa iris_dri.so now.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/external/bsd/drm2/dist/drm/drm_mm.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/drm_mm.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_mm.c:1.19 src/sys/external/bsd/drm2/dist/drm/drm_mm.c:1.20
--- src/sys/external/bsd/drm2/dist/drm/drm_mm.c:1.19	Thu Sep  1 01:54:28 2022
+++ src/sys/external/bsd/drm2/dist/drm/drm_mm.c	Thu Sep  1 11:48:59 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_mm.c,v 1.19 2022/09/01 01:54:28 riastradh Exp $	*/
+/*	$NetBSD: drm_mm.c,v 1.20 2022/09/01 11:48:59 riastradh Exp $	*/
 
 /**
  *
@@ -45,7 +45,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_mm.c,v 1.19 2022/09/01 01:54:28 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_mm.c,v 1.20 2022/09/01 11:48:59 riastradh Exp $");
 
 #include 
 #include 
@@ -437,16 +437,10 @@ static struct drm_mm_node *best_hole(str
 static struct drm_mm_node *find_hole(struct drm_mm *mm, u64 addr)
 {
 #ifdef __NetBSD__
-	struct drm_mm_node *node;
-
-	node = rb_tree_find_node(>holes_addr.rbr_tree, );
-	KASSERT(node == NULL || __drm_mm_hole_node_start(node) <= addr);
-	KASSERT(node == NULL || addr <
-	__drm_mm_hole_node_start(node) + node->hole_size);
-
-	return node;
+	struct rb_node *rb = mm->holes_addr.rbr_tree.rbt_root;
 #else
 	struct rb_node *rb = mm->holes_addr.rb_node;
+#endif
 	struct drm_mm_node *node = NULL;
 
 	while (rb) {
@@ -464,7 +458,6 @@ static struct drm_mm_node *find_hole(str
 	}
 
 	return node;
-#endif
 }
 
 static struct drm_mm_node *
@@ -478,18 +471,10 @@ first_hole(struct drm_mm *mm,
 		return best_hole(mm, size);
 
 	case DRM_MM_INSERT_LOW:
-#ifdef __NetBSD__
-		return rb_tree_find_node_geq(>holes_addr.rbr_tree, );
-#else
 		return find_hole(mm, start);
-#endif
 
 	case DRM_MM_INSERT_HIGH:
-#ifdef __NetBSD__
-		return rb_tree_find_node_leq(>holes_addr.rbr_tree, );
-#else
 		return find_hole(mm, end);
-#endif
 
 	case DRM_MM_INSERT_EVICT:
 		return list_first_entry_or_null(>hole_stack,



CVS commit: src/sys/external/bsd/drm2/dist/drm

2022-09-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Sep  1 11:48:59 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_mm.c

Log Message:
drm_mm: Give up on trying to phrase find_hole with public rbtree API.

Firefox works with WebGL on Mesa iris_dri.so now.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/external/bsd/drm2/dist/drm/drm_mm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2022-09-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Sep  1 11:49:23 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_context.c

Log Message:
i915: Stop pretending the GTT size is zero as workaround.

Whatever bug this was I don't know how to reproduce any more.
Convinces Mesa iris_dri.so to work on this kernel.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_context.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/i915/gem/i915_gem_context.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_context.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_context.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_context.c:1.6	Sun Dec 19 12:43:14 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_context.c	Thu Sep  1 11:49:23 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_context.c,v 1.6 2021/12/19 12:43:14 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_context.c,v 1.7 2022/09/01 11:49:23 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -67,7 +67,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_context.c,v 1.6 2021/12/19 12:43:14 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_context.c,v 1.7 2022/09/01 11:49:23 riastradh Exp $");
 
 #include 
 #include 
@@ -2380,10 +2380,6 @@ int i915_gem_context_getparam_ioctl(stru
 		else
 			args->value = to_i915(dev)->ggtt.vm.total;
 		rcu_read_unlock();
-#ifdef __NetBSD__		/* XXX */
-		/* XXX Something is broken with EXEC_OBJECT_PINNED.  */
-		args->value = 0;
-#endif
 		break;
 
 	case I915_CONTEXT_PARAM_NO_ERROR_CAPTURE:



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915/gem

2022-09-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Sep  1 11:49:23 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_context.c

Log Message:
i915: Stop pretending the GTT size is zero as workaround.

Whatever bug this was I don't know how to reproduce any more.
Convinces Mesa iris_dri.so to work on this kernel.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_context.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm

2022-08-31 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Sep  1 01:54:28 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_mm.c

Log Message:
drm_mm: Match __drm_mm_interval_first semantics.

- Use the right search criterion.
- Return >head_node, not NULL, if not found.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/drm2/dist/drm/drm_mm.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/drm_mm.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_mm.c:1.18 src/sys/external/bsd/drm2/dist/drm/drm_mm.c:1.19
--- src/sys/external/bsd/drm2/dist/drm/drm_mm.c:1.18	Mon Feb 14 13:22:30 2022
+++ src/sys/external/bsd/drm2/dist/drm/drm_mm.c	Thu Sep  1 01:54:28 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_mm.c,v 1.18 2022/02/14 13:22:30 riastradh Exp $	*/
+/*	$NetBSD: drm_mm.c,v 1.19 2022/09/01 01:54:28 riastradh Exp $	*/
 
 /**
  *
@@ -45,7 +45,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_mm.c,v 1.18 2022/02/14 13:22:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_mm.c,v 1.19 2022/09/01 01:54:28 riastradh Exp $");
 
 #include 
 #include 
@@ -170,10 +170,10 @@ __drm_mm_interval_first(const struct drm
 #ifdef __NetBSD__
 	struct drm_mm_node *node;
 	list_for_each_entry(node, >head_node.node_list, node_list) {
-		if (node->start <= start)
+		if (start <= LAST(node) && START(node) <= last)
 			return node;
 	}
-	return NULL;
+	return >head_node;
 #else
 	return drm_mm_interval_tree_iter_first((struct rb_root_cached *)>interval_tree,
 	   start, last) ?: (struct drm_mm_node *)>head_node;



CVS commit: src/sys/external/bsd/drm2/dist/drm

2022-08-31 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Sep  1 01:54:28 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_mm.c

Log Message:
drm_mm: Match __drm_mm_interval_first semantics.

- Use the right search criterion.
- Return >head_node, not NULL, if not found.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/drm2/dist/drm/drm_mm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm

2022-08-27 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Aug 27 21:24:15 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_ioctl.c

Log Message:
drm: Make sure ioctl buffer is aligned on stack.


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/sys/external/bsd/drm2/dist/drm/drm_ioctl.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/drm_ioctl.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c:1.22 src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c:1.23
--- src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c:1.22	Sun Dec 19 12:40:43 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c	Sat Aug 27 21:24:15 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_ioctl.c,v 1.22 2021/12/19 12:40:43 riastradh Exp $	*/
+/*	$NetBSD: drm_ioctl.c,v 1.23 2022/08/27 21:24:15 riastradh Exp $	*/
 
 /*
  * Created: Fri Jan  8 09:01:26 1999 by fa...@valinux.com
@@ -31,7 +31,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_ioctl.c,v 1.22 2021/12/19 12:40:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_ioctl.c,v 1.23 2022/08/27 21:24:15 riastradh Exp $");
 
 #include 
 #include 
@@ -836,7 +836,7 @@ EXPORT_SYMBOL(drm_ioctl_kernel);
 int
 drm_ioctl(struct file *fp, unsigned long cmd, void *data)
 {
-	char stackbuf[128];
+	char stackbuf[128] __aligned(ALIGNBYTES + 1);
 	char *buf = stackbuf;
 	void *data0 = data;
 	struct drm_file *const file = fp->f_data;



CVS commit: src/sys/external/bsd/drm2/dist/drm

2022-08-27 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Aug 27 21:24:15 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_ioctl.c

Log Message:
drm: Make sure ioctl buffer is aligned on stack.


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm

2022-08-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Aug 22 18:30:50 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_dp_mst_topology.c

Log Message:
drm_dp_mst_topology: Fix wakeups: must hold lock for DRM_WAKEUP_ALL.

While here, omit NetBSD conditionals; write waits and wakeups in
terms of drm_waitqueue.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
src/sys/external/bsd/drm2/dist/drm/drm_dp_mst_topology.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/drm_dp_mst_topology.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_dp_mst_topology.c:1.11 src/sys/external/bsd/drm2/dist/drm/drm_dp_mst_topology.c:1.12
--- src/sys/external/bsd/drm2/dist/drm/drm_dp_mst_topology.c:1.11	Sun Dec 19 09:45:10 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_dp_mst_topology.c	Mon Aug 22 18:30:50 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_dp_mst_topology.c,v 1.11 2021/12/19 09:45:10 riastradh Exp $	*/
+/*	$NetBSD: drm_dp_mst_topology.c,v 1.12 2022/08/22 18:30:50 riastradh Exp $	*/
 
 /*
  * Copyright © 2014 Red Hat
@@ -23,7 +23,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_dp_mst_topology.c,v 1.11 2021/12/19 09:45:10 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_dp_mst_topology.c,v 1.12 2022/08/22 18:30:50 riastradh Exp $");
 
 #include 
 #include 
@@ -1193,16 +1193,9 @@ static int drm_dp_mst_wait_tx_reply(stru
 	struct drm_dp_mst_topology_mgr *mgr = mstb->mgr;
 	int ret;
 
-#ifdef __NetBSD__
 	mutex_lock(>mgr->qlock);
 	DRM_TIMED_WAIT_UNTIL(ret, >tx_waitq, >mgr->qlock, 4*HZ,
 	check_txmsg_state(mgr, txmsg));
-#else
-	ret = wait_event_timeout(mgr->tx_waitq,
- check_txmsg_state(mgr, txmsg),
- (4 * HZ));
-	mutex_lock(>mgr->qlock);
-#endif
 	if (ret > 0) {
 		if (txmsg->state == DRM_DP_SIDEBAND_TX_TIMEOUT) {
 			ret = -EIO;
@@ -2827,11 +2820,7 @@ static void process_single_down_tx_qlock
 		if (txmsg->seqno != -1)
 			txmsg->dst->tx_slots[txmsg->seqno] = NULL;
 		txmsg->state = DRM_DP_SIDEBAND_TX_TIMEOUT;
-#ifdef __NetBSD__
 		DRM_WAKEUP_ALL(>tx_waitq, >qlock);
-#else
-		wake_up_all(>tx_waitq);
-#endif
 	}
 }
 
@@ -3823,13 +3812,8 @@ static int drm_dp_mst_handle_down_rep(st
 	txmsg->state = DRM_DP_SIDEBAND_TX_RX;
 	mstb->tx_slots[slot] = NULL;
 	mgr->is_waiting_for_dwn_reply = false;
-	mutex_unlock(>qlock);
-
-#ifdef __NetBSD__
 	DRM_WAKEUP_ALL(>tx_waitq, >qlock);
-#else
-	wake_up_all(>tx_waitq);
-#endif
+	mutex_unlock(>qlock);
 
 	return 0;
 
@@ -4717,16 +4701,9 @@ drm_dp_delayed_destroy_mstb(struct drm_d
 		mstb->tx_slots[1] = NULL;
 		wake_tx = true;
 	}
-	mutex_unlock(>mgr->qlock);
-
 	if (wake_tx)
-	{
-#ifdef __NetBSD__
 		DRM_WAKEUP_ALL(>mgr->tx_waitq, >mgr->qlock);
-#else
-		wake_up_all(>mgr->tx_waitq);
-#endif
-	}
+	mutex_unlock(>mgr->qlock);
 
 	drm_dp_mst_put_mstb_malloc(mstb);
 }
@@ -5164,11 +5141,7 @@ int drm_dp_mst_topology_mgr_init(struct 
 	INIT_WORK(>tx_work, drm_dp_tx_work);
 	INIT_WORK(>delayed_destroy_work, drm_dp_delayed_destroy_work);
 	INIT_WORK(>up_req_work, drm_dp_mst_up_req_work);
-#ifdef __NetBSD__
 	DRM_INIT_WAITQUEUE(>tx_waitq, "dpmstwait");
-#else
-	init_waitqueue_head(>tx_waitq);
-#endif
 	mgr->dev = dev;
 	mgr->aux = aux;
 	mgr->max_dpcd_transaction_bytes = max_dpcd_transaction_bytes;
@@ -5220,9 +5193,7 @@ void drm_dp_mst_topology_mgr_destroy(str
 	drm_atomic_private_obj_fini(>base);
 	mgr->funcs = NULL;
 
-#ifdef __NetBSD__
 	DRM_DESTROY_WAITQUEUE(>tx_waitq);
-#endif
 	mutex_destroy(>delayed_destroy_lock);
 	mutex_destroy(>payload_lock);
 	mutex_destroy(>qlock);



CVS commit: src/sys/external/bsd/drm2/dist/drm

2022-08-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Aug 22 18:30:50 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_dp_mst_topology.c

Log Message:
drm_dp_mst_topology: Fix wakeups: must hold lock for DRM_WAKEUP_ALL.

While here, omit NetBSD conditionals; write waits and wakeups in
terms of drm_waitqueue.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
src/sys/external/bsd/drm2/dist/drm/drm_dp_mst_topology.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-07-30 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Jul 30 17:12:39 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_gart.c

Log Message:
amdgpu: Make sure to bus_dmamap_sync before using zero'd dummy page.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-07-30 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Jul 30 17:12:39 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_gart.c

Log Message:
amdgpu: Make sure to bus_dmamap_sync before using zero'd dummy page.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_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_gart.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.9 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.10
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.9	Sat Jul 30 16:55:00 2022
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c	Sat Jul 30 17:12:39 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_gart.c,v 1.9 2022/07/30 16:55:00 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_gart.c,v 1.10 2022/07/30 17:12:39 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -29,7 +29,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_gart.c,v 1.9 2022/07/30 16:55:00 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_gart.c,v 1.10 2022/07/30 17:12:39 riastradh Exp $");
 
 #include 
 #include 
@@ -105,6 +105,9 @@ static int amdgpu_gart_dummy_page_init(s
 	if (error)
 		goto fail2;
 
+	bus_dmamap_sync(adev->ddev->dmat, adev->dummy_page_map, 0, PAGE_SIZE,
+	BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
+
 	/* Success!  */
 	adev->dummy_page_addr = adev->dummy_page_map->dm_segs[0].ds_addr;
 	return 0;



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-07-30 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Jul 30 16:55:00 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_gart.c

Log Message:
amdgpu: Make sure dummy page is zero-filled.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_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_gart.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.8 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.9
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c:1.8	Fri Dec 24 11:19:55 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c	Sat Jul 30 16:55:00 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_gart.c,v 1.8 2021/12/24 11:19:55 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_gart.c,v 1.9 2022/07/30 16:55:00 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -29,7 +29,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_gart.c,v 1.8 2021/12/24 11:19:55 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_gart.c,v 1.9 2022/07/30 16:55:00 riastradh Exp $");
 
 #include 
 #include 
@@ -78,6 +78,7 @@ static int amdgpu_gart_dummy_page_init(s
 {
 #ifdef __NetBSD__
 	int rsegs;
+	void *p;
 	int error;
 
 	/* XXX Can this be called more than once??  */
@@ -89,6 +90,12 @@ static int amdgpu_gart_dummy_page_init(s
 	if (error)
 		goto fail0;
 	KASSERT(rsegs == 1);
+	error = bus_dmamem_map(adev->ddev->dmat, >dummy_page_seg, 1,
+	PAGE_SIZE, , BUS_DMA_WAITOK);
+	if (error)
+		goto fail1;
+	memset(p, 0, PAGE_SIZE);
+	bus_dmamem_unmap(adev->ddev->dmat, p, PAGE_SIZE);
 	error = bus_dmamap_create(adev->ddev->dmat, PAGE_SIZE, 1, PAGE_SIZE, 0,
 	BUS_DMA_WAITOK, >dummy_page_map);
 	if (error)



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-07-30 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Jul 30 16:55:00 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_gart.c

Log Message:
amdgpu: Make sure dummy page is zero-filled.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_gart.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-07-29 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jul 29 12:43:15 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_ttm.c

Log Message:
amdgpu: Make amdgpu_ttm_io_mem_pfn return pfn, not paddr.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.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_ttm.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c:1.11 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c:1.12
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c:1.11	Wed Jul 20 01:11:54 2022
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c	Fri Jul 29 12:43:15 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_ttm.c,v 1.11 2022/07/20 01:11:54 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_ttm.c,v 1.12 2022/07/29 12:43:15 riastradh Exp $	*/
 
 /*
  * Copyright 2009 Jerome Glisse.
@@ -33,7 +33,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_ttm.c,v 1.11 2022/07/20 01:11:54 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_ttm.c,v 1.12 2022/07/29 12:43:15 riastradh Exp $");
 
 #include 
 #include 
@@ -777,7 +777,7 @@ static unsigned long amdgpu_ttm_io_mem_p
 	 */
 	const paddr_t cookie = bus_space_mmap(bo->bdev->memt, bo->mem.bus.base,
 	(mm->start + page_offset) << PAGE_SHIFT, /*vm_prot*/0, /*flags*/0);
-	return pmap_phys_address(cookie);
+	return pmap_phys_address(cookie) >> PAGE_SHIFT;
 #else
 	return (bo->mem.bus.base >> PAGE_SHIFT) + mm->start +
 		(offset >> PAGE_SHIFT);



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-07-29 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Jul 29 12:43:15 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_ttm.c

Log Message:
amdgpu: Make amdgpu_ttm_io_mem_pfn return pfn, not paddr.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/scheduler

2022-07-28 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Jul 28 10:44:46 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/scheduler: sched_fence.c

Log Message:
drmkms_sched: Fix typo in module definition.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/scheduler/sched_fence.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/scheduler/sched_fence.c
diff -u src/sys/external/bsd/drm2/dist/drm/scheduler/sched_fence.c:1.6 src/sys/external/bsd/drm2/dist/drm/scheduler/sched_fence.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/scheduler/sched_fence.c:1.6	Thu Jul 28 10:42:45 2022
+++ src/sys/external/bsd/drm2/dist/drm/scheduler/sched_fence.c	Thu Jul 28 10:44:46 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: sched_fence.c,v 1.6 2022/07/28 10:42:45 riastradh Exp $	*/
+/*	$NetBSD: sched_fence.c,v 1.7 2022/07/28 10:44:46 riastradh Exp $	*/
 
 /*
  * Copyright 2015 Advanced Micro Devices, Inc.
@@ -24,7 +24,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: sched_fence.c,v 1.6 2022/07/28 10:42:45 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sched_fence.c,v 1.7 2022/07/28 10:44:46 riastradh Exp $");
 
 #include 
 #include 
@@ -197,7 +197,7 @@ MODULE_LICENSE("GPL and additional right
 MODULE(MODULE_CLASS_MISC, drmkms_sched, "drmkms,drmkms_linux");
 
 static int
-drmsched_modcmd(modcmd_t cmd, void *arg)
+drmkms_sched_modcmd(modcmd_t cmd, void *arg)
 {
 
 	switch (cmd) {



CVS commit: src/sys/external/bsd/drm2/dist/drm/scheduler

2022-07-28 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Thu Jul 28 10:44:46 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/scheduler: sched_fence.c

Log Message:
drmkms_sched: Fix typo in module definition.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/scheduler/sched_fence.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/display/dc

2022-07-24 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jul 24 20:05:08 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/display/dc: os_types.h

Log Message:
amdgpu: Define DC_FPU_START/END on Arm.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/os_types.h

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/display/dc/os_types.h
diff -u src/sys/external/bsd/drm2/dist/drm/amd/display/dc/os_types.h:1.3 src/sys/external/bsd/drm2/dist/drm/amd/display/dc/os_types.h:1.4
--- src/sys/external/bsd/drm2/dist/drm/amd/display/dc/os_types.h:1.3	Sun Dec 19 11:35:07 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/display/dc/os_types.h	Sun Jul 24 20:05:08 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: os_types.h,v 1.3 2021/12/19 11:35:07 riastradh Exp $	*/
+/*	$NetBSD: os_types.h,v 1.4 2022/07/24 20:05:08 riastradh Exp $	*/
 
 /*
  * Copyright 2012-16 Advanced Micro Devices, Inc.
@@ -53,16 +53,21 @@
 #define dm_error(fmt, ...) DRM_ERROR(fmt, ##__VA_ARGS__)
 
 #if defined(CONFIG_DRM_AMD_DC_DCN)
-#if defined(CONFIG_X86)
 #ifdef __NetBSD__
+#if defined(__i386__) || defined(__x86_64__)
 #include 
 #define	DC_FP_START()	fpu_kern_enter()
 #define	DC_FP_END()	fpu_kern_leave()
-#else
+#elif defined(__arm__) || defined(__aarch64__)
+#include 
+#define	DC_FP_START()	fpu_kern_enter()
+#define	DC_FP_END()	fpu_kern_leave()
+#endif
+#else	/* !__NetBSD__ */
+#if defined(CONFIG_X86)
 #include 
 #define DC_FP_START() kernel_fpu_begin()
 #define DC_FP_END() kernel_fpu_end()
-#endif
 #elif defined(CONFIG_PPC64)
 #include 
 #include 
@@ -92,6 +97,7 @@
 }
 #endif
 #endif
+#endif
 
 /*
  *



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/display/dc

2022-07-24 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jul 24 20:05:08 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/display/dc: os_types.h

Log Message:
amdgpu: Define DC_FPU_START/END on Arm.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/amd/display/dc/os_types.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2022-07-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Jul 20 01:22:38 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_ttm.c

Log Message:
drm: Ifdef out alpha-specific logic in radeon.

Guessing this is handled transparently by bus_space(9) when we ask
for prefetchable linear mappings.  Need an alpha wizard to review!


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ttm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2022-07-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Jul 20 01:22:38 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_ttm.c

Log Message:
drm: Ifdef out alpha-specific logic in radeon.

Guessing this is handled transparently by bus_space(9) when we ask
for prefetchable linear mappings.  Need an alpha wizard to review!


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ttm.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/radeon/radeon_ttm.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ttm.c:1.25 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ttm.c:1.26
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ttm.c:1.25	Sat May 21 17:50:21 2022
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ttm.c	Wed Jul 20 01:22:38 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_ttm.c,v 1.25 2022/05/21 17:50:21 riastradh Exp $	*/
+/*	$NetBSD: radeon_ttm.c,v 1.26 2022/07/20 01:22:38 riastradh Exp $	*/
 
 /*
  * Copyright 2009 Jerome Glisse.
@@ -33,7 +33,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: radeon_ttm.c,v 1.25 2022/05/21 17:50:21 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_ttm.c,v 1.26 2022/07/20 01:22:38 riastradh Exp $");
 
 #include 
 #include 
@@ -453,6 +453,7 @@ static int radeon_ttm_io_mem_reserve(str
 			return -EINVAL;
 		mem->bus.base = rdev->mc.aper_base;
 		mem->bus.is_iomem = true;
+#ifndef __NetBSD__		/* alpha hose handled through bus_space(9) */
 #ifdef __alpha__
 		/*
 		 * Alpha: use bus.addr to hold the ioremap() return,
@@ -478,6 +479,7 @@ static int radeon_ttm_io_mem_reserve(str
 		mem->bus.base = (mem->bus.base & 0x0UL) +
 			rdev->ddev->hose->dense_mem_base;
 #endif
+#endif
 		KASSERTMSG((mem->bus.base & (PAGE_SIZE - 1)) == 0,
 		"mc aperture is not page-aligned: %" PRIx64 "",
 		(uint64_t)mem->bus.base);



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-07-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Jul 20 01:11:54 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_ttm.c

Log Message:
amdgpu: Write amdgpu_ttm_io_mem_pfn in terms of bus_space_mmap.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.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_ttm.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c:1.10 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c:1.11
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c:1.10	Sun Dec 19 12:31:45 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c	Wed Jul 20 01:11:54 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_ttm.c,v 1.10 2021/12/19 12:31:45 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_ttm.c,v 1.11 2022/07/20 01:11:54 riastradh Exp $	*/
 
 /*
  * Copyright 2009 Jerome Glisse.
@@ -33,7 +33,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_ttm.c,v 1.10 2021/12/19 12:31:45 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_ttm.c,v 1.11 2022/07/20 01:11:54 riastradh Exp $");
 
 #include 
 #include 
@@ -764,8 +764,24 @@ static unsigned long amdgpu_ttm_io_mem_p
 	unsigned long offset = (page_offset << PAGE_SHIFT);
 
 	mm = amdgpu_find_mm_node(>mem, );
+#ifdef __NetBSD__
+	/*
+	 * vm_prot and flags are encoded in the pmap cookie, but we
+	 * then discard them; the caller will reapply them as
+	 * appropriate before it gets to pmap_enter.
+	 *
+	 * XXX What if the flags determine not just extra bits in the
+	 * cookie, but the address itself, in case different mapping
+	 * types (like prefetchable) are exposed through different
+	 * ranges instead of different page table entry bit?
+	 */
+	const paddr_t cookie = bus_space_mmap(bo->bdev->memt, bo->mem.bus.base,
+	(mm->start + page_offset) << PAGE_SHIFT, /*vm_prot*/0, /*flags*/0);
+	return pmap_phys_address(cookie);
+#else
 	return (bo->mem.bus.base >> PAGE_SHIFT) + mm->start +
 		(offset >> PAGE_SHIFT);
+#endif
 }
 
 /*



CVS commit: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu

2022-07-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed Jul 20 01:11:54 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_ttm.c

Log Message:
amdgpu: Write amdgpu_ttm_io_mem_pfn in terms of bus_space_mmap.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_ttm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2022-07-15 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Fri Jul 15 06:42:08 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_btc_dpm.c
radeon_cypress_dpm.c

Log Message:
include the return value of rv770_restrict_performance_levels_before_switch()
in error messages.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_btc_dpm.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cypress_dpm.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/radeon/radeon_btc_dpm.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_btc_dpm.c:1.2 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_btc_dpm.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_btc_dpm.c:1.2	Sat Dec 18 23:45:43 2021
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_btc_dpm.c	Fri Jul 15 06:42:08 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_btc_dpm.c,v 1.2 2021/12/18 23:45:43 riastradh Exp $	*/
+/*	$NetBSD: radeon_btc_dpm.c,v 1.3 2022/07/15 06:42:08 mrg Exp $	*/
 
 /*
  * Copyright 2011 Advanced Micro Devices, Inc.
@@ -25,7 +25,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: radeon_btc_dpm.c,v 1.2 2021/12/18 23:45:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_btc_dpm.c,v 1.3 2022/07/15 06:42:08 mrg Exp $");
 
 #include 
 #include 
@@ -2316,7 +2316,7 @@ int btc_dpm_set_power_state(struct radeo
 	btc_set_boot_state_timing(rdev);
 	ret = rv770_restrict_performance_levels_before_switch(rdev);
 	if (ret) {
-		DRM_ERROR("rv770_restrict_performance_levels_before_switch failed\n");
+		DRM_ERROR("rv770_restrict_performance_levels_before_switch failed: %d\n", ret);
 		return ret;
 	}
 	if (eg_pi->pcie_performance_request)
Index: src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cypress_dpm.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cypress_dpm.c:1.2 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cypress_dpm.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cypress_dpm.c:1.2	Sat Dec 18 23:45:43 2021
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cypress_dpm.c	Fri Jul 15 06:42:08 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_cypress_dpm.c,v 1.2 2021/12/18 23:45:43 riastradh Exp $	*/
+/*	$NetBSD: radeon_cypress_dpm.c,v 1.3 2022/07/15 06:42:08 mrg Exp $	*/
 
 /*
  * Copyright 2011 Advanced Micro Devices, Inc.
@@ -25,7 +25,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: radeon_cypress_dpm.c,v 1.2 2021/12/18 23:45:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_cypress_dpm.c,v 1.3 2022/07/15 06:42:08 mrg Exp $");
 
 #include 
 
@@ -1966,7 +1966,7 @@ int cypress_dpm_set_power_state(struct r
 
 	ret = rv770_restrict_performance_levels_before_switch(rdev);
 	if (ret) {
-		DRM_ERROR("rv770_restrict_performance_levels_before_switch failed\n");
+		DRM_ERROR("rv770_restrict_performance_levels_before_switch failed: %d\n", ret);
 		return ret;
 	}
 	if (eg_pi->pcie_performance_request)



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2022-07-15 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Fri Jul 15 06:42:08 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_btc_dpm.c
radeon_cypress_dpm.c

Log Message:
include the return value of rv770_restrict_performance_levels_before_switch()
in error messages.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_btc_dpm.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cypress_dpm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915

2022-07-11 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jul 11 18:56:00 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: i915_request.c

Log Message:
i915: Defer destroying waitqueue until after callback is removed.

Candidate fix for PR kern/56561.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_request.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/i915

2022-07-11 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jul 11 18:56:00 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: i915_request.c

Log Message:
i915: Defer destroying waitqueue until after callback is removed.

Candidate fix for PR kern/56561.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_request.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/i915/i915_request.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_request.c:1.16 src/sys/external/bsd/drm2/dist/drm/i915/i915_request.c:1.17
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_request.c:1.16	Mon Dec 27 13:29:15 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_request.c	Mon Jul 11 18:56:00 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_request.c,v 1.16 2021/12/27 13:29:15 riastradh Exp $	*/
+/*	$NetBSD: i915_request.c,v 1.17 2022/07/11 18:56:00 riastradh Exp $	*/
 
 /*
  * Copyright © 2008-2015 Intel Corporation
@@ -25,7 +25,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_request.c,v 1.16 2021/12/27 13:29:15 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_request.c,v 1.17 2022/07/11 18:56:00 riastradh Exp $");
 
 #include 
 #include 
@@ -1630,7 +1630,6 @@ long i915_request_wait(struct i915_reque
 		timeout = -ETIME;
 	}
 	spin_unlock(rq->fence.lock);
-	DRM_DESTROY_WAITQUEUE();
 #else
 	for (;;) {
 		set_current_state(state);
@@ -1657,6 +1656,9 @@ long i915_request_wait(struct i915_reque
 #endif
 
 	dma_fence_remove_callback(>fence, );
+#ifdef __NetBSD__
+	DRM_DESTROY_WAITQUEUE();
+#endif
 
 out:
 	mutex_release(>engine->gt->reset.mutex.dep_map, _THIS_IP_);



CVS commit: src/sys/external/bsd/drm2/dist/drm/ttm

2022-06-26 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 26 17:53:06 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/ttm: ttm_tt.c

Log Message:
drm/ttm: Fix potential leak in error branch.

Not likely but let's not leave a rake to trip on.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.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/ttm/ttm_tt.c
diff -u src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c:1.18 src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c:1.19
--- src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c:1.18	Sun Dec 19 12:29:16 2021
+++ src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c	Sun Jun 26 17:53:06 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ttm_tt.c,v 1.18 2021/12/19 12:29:16 riastradh Exp $	*/
+/*	$NetBSD: ttm_tt.c,v 1.19 2022/06/26 17:53:06 riastradh Exp $	*/
 
 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /**
@@ -32,7 +32,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ttm_tt.c,v 1.18 2021/12/19 12:29:16 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ttm_tt.c,v 1.19 2022/06/26 17:53:06 riastradh Exp $");
 
 #define pr_fmt(fmt) "[TTM] " fmt
 
@@ -112,8 +112,11 @@ static int ttm_dma_tt_alloc_page_directo
 
 	/* Create bus DMA map at ttm->dma_address.  */
 	r = ttm_sg_tt_alloc_page_directory(ttm);
-	if (r)
+	if (r) {
+		kvfree(ttm->ttm.pages);
+		ttm->ttm.pages = NULL;
 		return r;
+	}
 
 	/* Success!  */
 	return 0;



CVS commit: src/sys/external/bsd/drm2/dist/drm/ttm

2022-06-26 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 26 17:53:06 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/ttm: ttm_tt.c

Log Message:
drm/ttm: Fix potential leak in error branch.

Not likely but let's not leave a rake to trip on.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2022-06-02 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Thu Jun  2 06:51:48 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_r600_dma.c

Log Message:
add timeout period to timeout message.

seen on radeon 5450 on an asrock m/b with ryzen 5600g cpu.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600_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/external/bsd/drm2/dist/drm/radeon/radeon_r600_dma.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600_dma.c:1.2 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600_dma.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600_dma.c:1.2	Sat Dec 18 23:45:43 2021
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600_dma.c	Thu Jun  2 06:51:48 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_r600_dma.c,v 1.2 2021/12/18 23:45:43 riastradh Exp $	*/
+/*	$NetBSD: radeon_r600_dma.c,v 1.3 2022/06/02 06:51:48 mrg Exp $	*/
 
 /*
  * Copyright 2013 Advanced Micro Devices, Inc.
@@ -25,7 +25,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: radeon_r600_dma.c,v 1.2 2021/12/18 23:45:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_r600_dma.c,v 1.3 2022/06/02 06:51:48 mrg Exp $");
 
 #include "radeon.h"
 #include "radeon_asic.h"
@@ -271,8 +271,8 @@ int r600_dma_ring_test(struct radeon_dev
 	if (i < rdev->usec_timeout) {
 		DRM_INFO("ring test on %d succeeded in %d usecs\n", ring->idx, i);
 	} else {
-		DRM_ERROR("radeon: ring %d test failed (0x%08X)\n",
-			  ring->idx, tmp);
+		DRM_ERROR("radeon: ring %d test failed (0x%08X) after %u usecs\n",
+			  ring->idx, tmp, rdev->usec_timeout);
 		r = -EINVAL;
 	}
 	return r;



CVS commit: src/sys/external/bsd/drm2/dist/drm/radeon

2022-06-02 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Thu Jun  2 06:51:48 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_r600_dma.c

Log Message:
add timeout period to timeout message.

seen on radeon 5450 on an asrock m/b with ryzen 5600g cpu.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600_dma.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu

2022-05-31 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue May 31 20:53:35 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu:
nouveau_nvkm_subdev_mmu_mem.c

Log Message:
reorganise most of the NetBSD portion of nvkm_mem_dtor().

when nvkm_mem_new_host() is called via the in-kernel ioctl method,
we copy the supplied dmamap, use it's dm_nsegs value for allocation
of "mem->dma", and assume it remains valid until we're done.

when this path is taken "mem->mem" remains NULL so all the code in
nvkm_mem_dtor() is ignored, and the "mem->dma" is leaked.  this is
one leak seen in PR#56826.  as "dmamap->dm_nsegs" can become invalid
before the dtor call, store the value in "mem->nseg" for use in the
dtor, and convert the dtor to free "mem->dma" if "mem->dma" is set.
additionally, "mem->pages" should end up being the same value as
"nseg" here, ASSERT() this.

while here properly mark NetBSD specific code in nvkm_mem_new_host().

additionally, destroy the dmamap created in the non-ioctl path of
nvkm_mem_new_host().  this is another leak seen in PR#56826.

with both of these fixes my "kmem-04096" pool does not grow rapidly
while using "mpv -vo gpu".  infact, once i loaded the relevant file
into memory, this pool remains stable after at least one minute of
video playback.

ok riastradh@


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_mem.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/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_mem.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_mem.c:1.7 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_mem.c:1.8
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_mem.c:1.7	Sun Dec 19 11:06:44 2021
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_mem.c	Tue May 31 20:53:35 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_mmu_mem.c,v 1.7 2021/12/19 11:06:44 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_mmu_mem.c,v 1.8 2022/05/31 20:53:35 mrg Exp $	*/
 
 /*
  * Copyright 2017 Red Hat Inc.
@@ -22,7 +22,7 @@
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mmu_mem.c,v 1.7 2021/12/19 11:06:44 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_mmu_mem.c,v 1.8 2022/05/31 20:53:35 mrg Exp $");
 
 #define nvkm_mem(p) container_of((p), struct nvkm_mem, memory)
 #include "mem.h"
@@ -97,16 +97,21 @@ static void *
 nvkm_mem_dtor(struct nvkm_memory *memory)
 {
 	struct nvkm_mem *mem = nvkm_mem(memory);
-	if (mem->mem) {
 #ifdef __NetBSD__
+	if (mem->dma) {
+		kmem_free(mem->dma, mem->nseg * sizeof(mem->dma[0]));
+	}
+	if (mem->mem) {
 		struct nvkm_device *device = mem->mmu->subdev.device;
 		bus_dma_tag_t dmat = device->func->dma_tag(device);
-		kmem_free(mem->dma,
-		mem->dmamap->dm_nsegs * sizeof(mem->dma[0]));
+
 		bus_dmamap_unload(dmat, mem->dmamap);
 		bus_dmamem_free(dmat, mem->mem, mem->nseg);
+		bus_dmamap_destroy(dmat, mem->dmamap);
 		kmem_free(mem->mem, mem->pages * sizeof(mem->mem[0]));
+	}
 #else
+	if (mem->mem) {
 		while (mem->pages--) {
 			dma_unmap_page(mem->mmu->subdev.device->dev,
    mem->dma[mem->pages], PAGE_SIZE,
@@ -115,8 +120,8 @@ nvkm_mem_dtor(struct nvkm_memory *memory
 		}
 		kvfree(mem->dma);
 		kvfree(mem->mem);
-#endif
 	}
+#endif
 	return mem;
 }
 
@@ -218,7 +223,11 @@ nvkm_mem_new_host(struct nvkm_mmu *mmu, 
 	if (!(ret = nvif_unpack(ret, , , args->v0, 0, 0, false))) {
 		if (args->v0.dma) {
 			nvkm_memory_ctor(_mem_dma, >memory);
+#ifndef __NetBSD__
+			mem->dma = args->v0.dma;
+#else
 			mem->dmamap = args->v0.dma;
+			mem->nseg = mem->dmamap->dm_nsegs;
 			mem->dma = kmem_zalloc(mem->dmamap->dm_nsegs *
 			sizeof(mem->dma[0]), KM_SLEEP);
 			for (unsigned i = 0; i < mem->dmamap->dm_nsegs; i++) {
@@ -226,6 +235,7 @@ nvkm_mem_new_host(struct nvkm_mmu *mmu, 
 PAGE_SIZE);
 mem->dma[i] = mem->dmamap->dm_segs[i].ds_addr;
 			}
+#endif
 		} else {
 #ifdef __NetBSD__
 			return -ENODEV;
@@ -238,6 +248,9 @@ nvkm_mem_new_host(struct nvkm_mmu *mmu, 
 		if (!IS_ALIGNED(size, PAGE_SIZE))
 			return -EINVAL;
 		mem->pages = size >> PAGE_SHIFT;
+#ifdef __NetBSD__
+		KASSERT(mem->pages == mem->nseg);
+#endif
 		return 0;
 	} else
 	if ( (ret = nvif_unvers(ret, , , args->vn))) {
@@ -283,6 +296,7 @@ fail2: __unused
 		mem->dma[i] = mem->dmamap->dm_segs[i].ds_addr;
 	}
 	mem->pages = size;
+	KASSERT(mem->pages == mem->nseg);
 #else
 	if (!(mem->mem = kvmalloc_array(size, sizeof(*mem->mem), GFP_KERNEL)))
 		return -ENOMEM;



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu

2022-05-31 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue May 31 20:53:35 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu:
nouveau_nvkm_subdev_mmu_mem.c

Log Message:
reorganise most of the NetBSD portion of nvkm_mem_dtor().

when nvkm_mem_new_host() is called via the in-kernel ioctl method,
we copy the supplied dmamap, use it's dm_nsegs value for allocation
of "mem->dma", and assume it remains valid until we're done.

when this path is taken "mem->mem" remains NULL so all the code in
nvkm_mem_dtor() is ignored, and the "mem->dma" is leaked.  this is
one leak seen in PR#56826.  as "dmamap->dm_nsegs" can become invalid
before the dtor call, store the value in "mem->nseg" for use in the
dtor, and convert the dtor to free "mem->dma" if "mem->dma" is set.
additionally, "mem->pages" should end up being the same value as
"nseg" here, ASSERT() this.

while here properly mark NetBSD specific code in nvkm_mem_new_host().

additionally, destroy the dmamap created in the non-ioctl path of
nvkm_mem_new_host().  this is another leak seen in PR#56826.

with both of these fixes my "kmem-04096" pool does not grow rapidly
while using "mpv -vo gpu".  infact, once i loaded the relevant file
into memory, this pool remains stable after at least one minute of
video playback.

ok riastradh@


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/mmu/nouveau_nvkm_subdev_mmu_mem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau

2022-05-30 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue May 31 00:17:10 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau: nouveau_gem.c

Log Message:
nouveau(4): Fix error branches in nouveau_gem_new.

PR kern/56804


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_gem.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/nouveau/nouveau_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_gem.c:1.13 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_gem.c:1.14
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_gem.c:1.13	Sun Dec 19 10:50:13 2021
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_gem.c	Tue May 31 00:17:10 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_gem.c,v 1.13 2021/12/19 10:50:13 riastradh Exp $	*/
+/*	$NetBSD: nouveau_gem.c,v 1.14 2022/05/31 00:17:10 riastradh Exp $	*/
 
 /*
  * Copyright (C) 2008 Ben Skeggs.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_gem.c,v 1.13 2021/12/19 10:50:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_gem.c,v 1.14 2022/05/31 00:17:10 riastradh Exp $");
 
 #include 
 
@@ -202,13 +202,13 @@ nouveau_gem_new(struct nouveau_cli *cli,
 	 * to the caller, instead of a normal nouveau_bo ttm reference. */
 	ret = drm_gem_object_init(drm->dev, >bo.base, size);
 	if (ret) {
-		nouveau_bo_ref(NULL, );
+		kfree(nvbo);
 		return ret;
 	}
 
 	ret = nouveau_bo_init(nvbo, size, align, flags, NULL, NULL);
 	if (ret) {
-		nouveau_bo_ref(NULL, );
+		/* XXX note: if this fails it kfrees nvbo */
 		return ret;
 	}
 



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau

2022-05-30 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue May 31 00:17:10 UTC 2022

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau: nouveau_gem.c

Log Message:
nouveau(4): Fix error branches in nouveau_gem_new.

PR kern/56804


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_gem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.



  1   2   3   4   5   6   7   8   9   10   >