Re: CVS commit: src/sys/external/bsd/drm2/amdgpu

2024-07-02 Thread Ryo ONODERA
On July 3, 2024 5:08:51 AM GMT+09:00, Taylor R Campbell  
wrote:
>Module Name:   src
>Committed By:  riastradh
>Date:  Tue Jul  2 20:08:51 UTC 2024
>
>Modified Files:
>   src/sys/external/bsd/drm2/amdgpu: amdgpu2netbsd
>
>Log Message:
>amdgpu: Update amdgpu2netbsd to prepare for new import.
>
>
>To generate a diff of this commit:
>cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/amdgpu/amdgpu2netbsd
>
>Please note that diffs are not public domain; they are subject to the
>copyright notices on the relevant files.
>

Hi,

I am happy to see the drmkms support from Linux 6.6 in the near future.
Almost all my faster laptops require newer drmkms support.

Thank you.
-- 
Ryo ONODERA // r...@tetera.org
PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB  FD1B F404 27FA C7D1 15F3


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

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:09:30 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/drm: drm2netbsd

Log Message:
drm: Update drm2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/drm/drm2netbsd

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/drm/drm2netbsd
diff -u src/sys/external/bsd/drm2/drm/drm2netbsd:1.5 src/sys/external/bsd/drm2/drm/drm2netbsd:1.6
--- src/sys/external/bsd/drm2/drm/drm2netbsd:1.5	Sun Dec 19 10:46:17 2021
+++ src/sys/external/bsd/drm2/drm/drm2netbsd	Tue Jul  2 20:09:30 2024
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-#	$NetBSD: drm2netbsd,v 1.5 2021/12/19 10:46:17 riastradh Exp $
+#	$NetBSD: drm2netbsd,v 1.6 2024/07/02 20:09:30 riastradh Exp $
 #
 # $ /path/to/drm2netbsd > /path/to/files.drm.new
 #
@@ -14,12 +14,27 @@ drmkms_top=external/bsd/drm2/dist/drm
 # config(5) flag for the DRMKMS driver.
 drmkms_flag=drmkms
 
-env CONFIG_PCI=y \
-env CONFIG_AGP=y \
+env CONFIG_COMPAT=y \
+env CONFIG_DRM=y \
+env CONFIG_DRM_BUDDY=y \
+env CONFIG_DRM_EXEC=y \
 env CONFIG_DRM_FBDEV_EMULATION=y \
 env CONFIG_DRM_GEM_CMA_HELPER=y \
+env CONFIG_DRM_GEM_DMA_HELPER=y \
+env CONFIG_DRM_GEM_SHMEM_HELPER=y \
+env CONFIG_DRM_KMS_HELPER=y \
+env CONFIG_DRM_LEGACY=y \
+env CONFIG_DRM_MIPI_DBI=y \
+env CONFIG_DRM_MIPI_DSI=y \
 env CONFIG_DRM_PANEL=y \
+env CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y \
+env CONFIG_DRM_PRIVACY_SCREEN=y \
+env CONFIG_DRM_SCHED=y \
+env CONFIG_DRM_SUBALLOC_HELPER=y \
 env CONFIG_DRM_VM=y \
+env CONFIG_DRM_VRAM_HELPER=y \
+env CONFIG_OF=y \
+env CONFIG_PCI=y \
 make -f Makefile -V '$(drm-y)' -V '$(drm_kms_helper-y)' \
 | tr ' ' '\n' \
 | grep -v '^$' \



CVS commit: src/sys/external/bsd/drm2/i915drm

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:09:21 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/i915drm: i915drmkms2netbsd

Log Message:
i915: Update i915drmkms2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/i915drm/i915drmkms2netbsd

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/i915drm/i915drmkms2netbsd
diff -u src/sys/external/bsd/drm2/i915drm/i915drmkms2netbsd:1.3 src/sys/external/bsd/drm2/i915drm/i915drmkms2netbsd:1.4
--- src/sys/external/bsd/drm2/i915drm/i915drmkms2netbsd:1.3	Sun Dec 19 00:25:19 2021
+++ src/sys/external/bsd/drm2/i915drm/i915drmkms2netbsd	Tue Jul  2 20:09:21 2024
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-#	$NetBSD: i915drmkms2netbsd,v 1.3 2021/12/19 00:25:19 riastradh Exp $
+#	$NetBSD: i915drmkms2netbsd,v 1.4 2024/07/02 20:09:21 riastradh Exp $
 #
 # $ /path/to/i915drmkms2netbsd > /path/to/files.i915drmkms.new
 #
@@ -22,6 +22,13 @@ i915drmkms_flag=i915drmkms
 	printf 'include Makefile\n'
 } | env \
 	env CONFIG_ACPI=y \
+	env CONFIG_COMPAT=y \
+	env CONFIG_PERF_EVENTS=y \
+	env CONFIG_X86=y \
+	env CONFIG_HWMON=y \
+	env CONFIG_DRM_I915_PXP=y \
+	env CONFIG_DRM_I915_CAPTURE_ERROR=y \
+	env CONFIG_DRM_I915=y \
 	env CONFIG_DRM_FBDEV_EMULATION=y \
 	env src=. \
 	${GMAKE} -f - -s show-i915-y \



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

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:09:30 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/drm: drm2netbsd

Log Message:
drm: Update drm2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/drm/drm2netbsd

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/i915drm

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:09:21 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/i915drm: i915drmkms2netbsd

Log Message:
i915: Update i915drmkms2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/i915drm/i915drmkms2netbsd

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/radeon

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:09:13 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/radeon: radeon2netbsd

Log Message:
radeon: Update radeon2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/radeon/radeon2netbsd

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/radeon/radeon2netbsd
diff -u src/sys/external/bsd/drm2/radeon/radeon2netbsd:1.3 src/sys/external/bsd/drm2/radeon/radeon2netbsd:1.4
--- src/sys/external/bsd/drm2/radeon/radeon2netbsd:1.3	Sun Dec 19 00:25:26 2021
+++ src/sys/external/bsd/drm2/radeon/radeon2netbsd	Tue Jul  2 20:09:13 2024
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-#	$NetBSD: radeon2netbsd,v 1.3 2021/12/19 00:25:26 riastradh Exp $
+#	$NetBSD: radeon2netbsd,v 1.4 2024/07/02 20:09:13 riastradh Exp $
 #
 # $ /path/to/radeon2netbsd > /path/to/files.radeon.new
 #
@@ -17,6 +17,10 @@ radeon_top=external/bsd/drm2/dist/drm/ra
 radeon_flag=radeon
 
 env CONFIG_ACPI=y \
+env CONFIG_DRM_FBDEV_EMULATION=y \
+env CONFIG_DRM_RADEON=y \
+env CONFIG_MMU_NOTIFIER=y \
+env CONFIG_VGA_SWITCHEROO=y \
 env src=. \
 make -f Makefile -V '$(radeon-y)' \
 | tr ' ' '\n' \



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

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:09:13 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/radeon: radeon2netbsd

Log Message:
radeon: Update radeon2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/radeon/radeon2netbsd

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/nouveau

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:09:01 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/nouveau: nouveau2netbsd

Log Message:
nouveau: Update nouveau2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/nouveau/nouveau2netbsd

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/nouveau/nouveau2netbsd
diff -u src/sys/external/bsd/drm2/nouveau/nouveau2netbsd:1.6 src/sys/external/bsd/drm2/nouveau/nouveau2netbsd:1.7
--- src/sys/external/bsd/drm2/nouveau/nouveau2netbsd:1.6	Tue Apr 16 14:26:53 2024
+++ src/sys/external/bsd/drm2/nouveau/nouveau2netbsd	Tue Jul  2 20:09:01 2024
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-#	$NetBSD: nouveau2netbsd,v 1.6 2024/04/16 14:26:53 riastradh Exp $
+#	$NetBSD: nouveau2netbsd,v 1.7 2024/07/02 20:09:01 riastradh Exp $
 #
 # $ /path/to/nouveau2netbsd > /path/to/files.nouveau.new
 #
@@ -36,6 +36,11 @@ cat Kbuild\
 | sed -e 's,^endif$,.endif,'		\
 | env	\
 	env CONFIG_ACPI=y		\
+	env CONFIG_COMPAT=y		\
+	env CONFIG_DRM_NOUVEAU_SVM=y	\
+	env CONFIG_LEDS_CLASS=y		\
+	env CONFIG_NOUVEAU=y		\
+	env CONFIG_NOUVEAU_BACKLIGHT=y	\
 	env CONFIG_X86=y		\
 	env src=.			\
 	make -f /dev/stdin -V '$(nouveau-y)'\
@@ -83,7 +88,9 @@ cat Kbuild\
 ' >> "$filemap"
 
 while read from to; do
-	if [ "x$from" != "x$to" ]; then
+	# If the move already happened, that's fine: the makefile
+	# detects duplicates.
+	if [ "x$from" != "x$to" -a \! -f "$to" ]; then
 		${MV} -f -- "$from" "$to"
 	fi
 	printf 'file\t%s\t%s\n' "$nouveau_top/$to" "$nouveau_flag"



CVS commit: src/sys/external/bsd/drm2/amdgpu

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:08:51 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/amdgpu: amdgpu2netbsd

Log Message:
amdgpu: Update amdgpu2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/amdgpu/amdgpu2netbsd

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/nouveau

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:09:01 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/nouveau: nouveau2netbsd

Log Message:
nouveau: Update nouveau2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/nouveau/nouveau2netbsd

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/amdgpu

2024-07-02 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jul  2 20:08:51 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/amdgpu: amdgpu2netbsd

Log Message:
amdgpu: Update amdgpu2netbsd to prepare for new import.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/amdgpu/amdgpu2netbsd

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/amdgpu/amdgpu2netbsd
diff -u src/sys/external/bsd/drm2/amdgpu/amdgpu2netbsd:1.4 src/sys/external/bsd/drm2/amdgpu/amdgpu2netbsd:1.5
--- src/sys/external/bsd/drm2/amdgpu/amdgpu2netbsd:1.4	Sun Dec 19 10:20:31 2021
+++ src/sys/external/bsd/drm2/amdgpu/amdgpu2netbsd	Tue Jul  2 20:08:51 2024
@@ -1,10 +1,10 @@
 #!/bin/sh
 
-#	$NetBSD: amdgpu2netbsd,v 1.4 2021/12/19 10:20:31 riastradh Exp $
+#	$NetBSD: amdgpu2netbsd,v 1.5 2024/07/02 20:08:51 riastradh Exp $
 #
 # $ /path/to/amdgpu2netbsd > /path/to/files.amdgpu.new
 #
-# Run from the top-level dist/amd/amdgpu source directory, ideally
+# Run from the top-level dist/drm/amd/amdgpu source directory, ideally
 # before import.
 
 set -Ceu
@@ -24,13 +24,20 @@ amdgpu_flag=amdgpu
 	printf 'include Makefile\n'
 } | env \
 	env CONFIG_ACPI=y \
+	env CONFIG_COMPAT=y \
 	env CONFIG_DRM_AMDGPU=y \
 	env CONFIG_DRM_AMDGPU_CIK=y \
 	env CONFIG_DRM_AMDGPU_SI=y \
 	env CONFIG_DRM_AMD_ACP=y \
 	env CONFIG_DRM_AMD_DC=y \
-	env CONFIG_DRM_AMD_DC_DCN=y \
+	env CONFIG_DRM_AMD_DC_FP=y \
 	env CONFIG_DRM_AMD_DC_HDCP=y \
+	env CONFIG_DRM_AMD_DC_SI=y \
+	env CONFIG_HMM_MIRROR=y \
+	env CONFIG_HSA_AMD=y \
+	env CONFIG_HSA_AMD_SVM=y \
+	env CONFIG_PERF_EVENTS=y \
+	env CONFIG_VGA_SWITCHEROO=y \
 	env srctree="`pwd`" \
 	env src=. \
 	${GMAKE} -f - -s show-amdgpu-y \



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

2024-07-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jul  1 13:27:55 UTC 2024

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

Log Message:
amdgpu: Map consecutive pages, not the same one over and over again.

PR kern/58385


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



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

2024-07-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jul  1 13:27:55 UTC 2024

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

Log Message:
amdgpu: Map consecutive pages, not the same one over and over again.

PR kern/58385


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
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

2024-07-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jul  1 12:09:52 UTC 2024

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

Log Message:
amdgpu: Map BAR 2, not BAR 5, on pre-bonaire chips.

PR kern/58384


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 \
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

2024-07-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jul  1 12:09:52 UTC 2024

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

Log Message:
amdgpu: Map BAR 2, not BAR 5, on pre-bonaire chips.

PR kern/58384


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 \
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.20 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c:1.21
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c:1.20	Sat Sep 30 10:46:45 2023
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c	Mon Jul  1 12:09:52 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_device.c,v 1.20 2023/09/30 10:46:45 mrg Exp $	*/
+/*	$NetBSD: amdgpu_device.c,v 1.21 2024/07/01 12:09:52 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -28,7 +28,7 @@
  *  Jerome Glisse
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_device.c,v 1.20 2023/09/30 10:46:45 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_device.c,v 1.21 2024/07/01 12:09:52 riastradh Exp $");
 
 #include 
 #include 
@@ -3047,9 +3047,10 @@ int amdgpu_device_init(struct amdgpu_dev
 	}
 
 #ifdef __NetBSD__
-	if (pci_mapreg_map(>pdev->pd_pa, PCI_BAR(5),
+	const int bar = (adev->asic_type >= CHIP_BONAIRE ? 5 : 2);
+	if (pci_mapreg_map(>pdev->pd_pa, PCI_BAR(bar),
 		pci_mapreg_type(adev->pdev->pd_pa.pa_pc,
-		adev->pdev->pd_pa.pa_tag, PCI_BAR(5)),
+		adev->pdev->pd_pa.pa_tag, PCI_BAR(bar)),
 		0,
 		>rmmiot, >rmmioh,
 		>rmmio_base, >rmmio_size))



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

2024-06-27 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu Jun 27 12:21:20 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp:
nouveau_nvkm_engine_disp_sorgm200.c

Log Message:
With GCC12 kernel ALL/amd64 triggers "'sor' may be used uninitialized".
If "sublinks & 3" is zero GCC is right and sor[1] may be returned unitialized.

Fix by initializing "sor" to zero to return -1 instead of uninitialized value.

Ok: Taylor R Campbell 


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

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_sorgm200.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/engine/disp/nouveau_nvkm_engine_disp_sorgm200.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_sorgm200.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_sorgm200.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_sorgm200.c:1.2	Sat Dec 18 23:45:35 2021
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_sorgm200.c	Thu Jun 27 12:21:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_engine_disp_sorgm200.c,v 1.2 2021/12/18 23:45:35 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_engine_disp_sorgm200.c,v 1.3 2024/06/27 12:21:20 hannken Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_sorgm200.c,v 1.2 2021/12/18 23:45:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_engine_disp_sorgm200.c,v 1.3 2024/06/27 12:21:20 hannken Exp $");
 
 #include "ior.h"
 
@@ -74,6 +74,7 @@ gm200_sor_route_get(struct nvkm_outp *ou
 	const int sublinks = outp->info.sorconf.link;
 	int lnk[2], sor[2], m, s;
 
+	sor[0] = sor[1] = 0;	/* GCC 12.3 maybe-uninitialized */
 	for (*link = 0, m = __ffs(outp->info.or) * 2, s = 0; s < 2; m++, s++) {
 		if (sublinks & BIT(s)) {
 			u32 data = nvkm_rd32(device, 0x612308 + (m * 0x80));



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

2024-06-27 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Thu Jun 27 12:21:20 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp:
nouveau_nvkm_engine_disp_sorgm200.c

Log Message:
With GCC12 kernel ALL/amd64 triggers "'sor' may be used uninitialized".
If "sublinks & 3" is zero GCC is right and sor[1] may be returned unitialized.

Fix by initializing "sor" to zero to return -1 instead of uninitialized value.

Ok: Taylor R Campbell 


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

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/engine/disp/nouveau_nvkm_engine_disp_sorgm200.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/linux

2024-06-24 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jun 24 21:23:53 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
linux_pci: Fix shifto in pci_get_class.

It looks like Linux's pci_get_class also matches the interface part
of the PCI class register (but not the revision part), and I hadn't
noticed that in the previous shim structured differently.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/external/bsd/drm2/linux/linux_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/linux/linux_pci.c
diff -u src/sys/external/bsd/drm2/linux/linux_pci.c:1.29 src/sys/external/bsd/drm2/linux/linux_pci.c:1.30
--- src/sys/external/bsd/drm2/linux/linux_pci.c:1.29	Sun Jun 23 00:53:48 2024
+++ src/sys/external/bsd/drm2/linux/linux_pci.c	Mon Jun 24 21:23:53 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_pci.c,v 1.29 2024/06/23 00:53:48 riastradh Exp $	*/
+/*	$NetBSD: linux_pci.c,v 1.30 2024/06/24 21:23:53 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #endif
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.29 2024/06/23 00:53:48 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.30 2024/06/24 21:23:53 riastradh Exp $");
 
 #if NACPICA > 0
 #include 
@@ -621,7 +621,7 @@ pci_dev_put(struct pci_dev *pdev)
 }
 
 struct pci_get_class_state {
-	uint32_t		class_subclass_shifted;
+	uint32_t		class_subclass_interface;
 	const struct pci_dev	*from;
 };
 
@@ -639,17 +639,19 @@ pci_get_class_match(void *cookie, const 
 			C->from = NULL;
 		return 0;
 	}
-	if (C->class_subclass_shifted !=
-	(PCI_CLASS(pa->pa_class) << 8 | PCI_SUBCLASS(pa->pa_class)))
+	if (C->class_subclass_interface !=
+	(PCI_CLASS(pa->pa_class) << 16 |
+		PCI_SUBCLASS(pa->pa_class) << 8 |
+		PCI_INTERFACE(pa->pa_class)))
 		return 0;
 
 	return 1;
 }
 
 struct pci_dev *
-pci_get_class(uint32_t class_subclass_shifted, struct pci_dev *from)
+pci_get_class(uint32_t class_subclass_interface, struct pci_dev *from)
 {
-	struct pci_get_class_state context = {class_subclass_shifted, from},
+	struct pci_get_class_state context = {class_subclass_interface, from},
 	*C = 
 	struct pci_attach_args pa;
 	struct pci_dev *pdev = NULL;



CVS commit: src/sys/external/bsd/drm2/linux

2024-06-24 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jun 24 21:23:53 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
linux_pci: Fix shifto in pci_get_class.

It looks like Linux's pci_get_class also matches the interface part
of the PCI class register (but not the revision part), and I hadn't
noticed that in the previous shim structured differently.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/external/bsd/drm2/linux/linux_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/i915/gem

2024-06-23 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 19:37:11 UTC 2024

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

Log Message:
i915: Match Linux fault routine return code actions.

Omit needless EINTR interception -- this is now handled by
i915_error_to_vmf_fault.

Earlier revert was over a false alarm -- bisection shows the new
warnings arose from linux_pci.c 1.29 here:

https://mail-index.netbsd.org/source-changes/2024/06/23/msg151929.html


To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 \
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.26 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.27
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.26	Sun Jun 23 14:37:41 2024
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c	Sun Jun 23 19:37:11 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_mman.c,v 1.26 2024/06/23 14:37:41 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_mman.c,v 1.27 2024/06/23 19:37:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.26 2024/06/23 14:37:41 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.27 2024/06/23 19:37:11 riastradh Exp $");
 
 #include 
 #include 
@@ -252,14 +252,14 @@ compute_partial_view(const struct drm_i9
  */
 int	pmap_enter_default(pmap_t, vaddr_t, paddr_t, vm_prot_t, unsigned);
 #define	pmap_enter	pmap_enter_default
+#endif
 
+#ifdef __NetBSD__
 static int
 i915_error_to_vmf_fault(int err)
-{
-	return err;
-}
 #else
 static vm_fault_t i915_error_to_vmf_fault(int err)
+#endif
 {
 	switch (err) {
 	default:
@@ -269,11 +269,19 @@ static vm_fault_t i915_error_to_vmf_faul
 	case -EFAULT: /* purged object */
 	case -ENODEV: /* bad object, how did you get here! */
 	case -ENXIO: /* unable to access backing store (on device) */
+#ifdef __NetBSD__
+		return EINVAL;	/* SIGBUS */
+#else
 		return VM_FAULT_SIGBUS;
+#endif
 
 	case -ENOSPC: /* shmemfs allocation failure */
 	case -ENOMEM: /* our allocation failure */
+#ifdef __NetBSD__
+		return ENOMEM;
+#else
 		return VM_FAULT_OOM;
+#endif
 
 	case 0:
 	case -EAGAIN:
@@ -284,10 +292,13 @@ static vm_fault_t i915_error_to_vmf_faul
 		 * EBUSY is ok: this just means that another thread
 		 * already did the job.
 		 */
+#ifdef __NetBSD__
+		return 0;	/* retry access in userland */
+#else
 		return VM_FAULT_NOPAGE;
+#endif
 	}
 }
-#endif
 
 #ifdef __NetBSD__
 static int
@@ -313,7 +324,7 @@ static vm_fault_t vm_fault_cpu(struct vm
 	/* Sanity check that we allow writing into this object */
 	if (unlikely(i915_gem_object_is_readonly(obj) && write))
 #ifdef __NetBSD__
-		return -EFAULT;
+		return EINVAL;	/* SIGBUS */
 #else
 		return VM_FAULT_SIGBUS;
 #endif
@@ -420,7 +431,7 @@ static vm_fault_t vm_fault_gtt(struct vm
 	/* Sanity check that we allow writing into this object */
 	if (i915_gem_object_is_readonly(obj) && write)
 #ifdef __NetBSD__
-		return -EFAULT;
+		return EINVAL;	/* SIGBUS */
 #else
 		return VM_FAULT_SIGBUS;
 #endif
@@ -588,12 +599,11 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 	case I915_MMAP_TYPE_WC:
 	case I915_MMAP_TYPE_WB:
 	case I915_MMAP_TYPE_UC:
-		/* XXX errno Linux->NetBSD */
-		error = -vm_fault_cpu(ufi, mmo, vaddr, pps, npages, centeridx,
+		error = vm_fault_cpu(ufi, mmo, vaddr, pps, npages, centeridx,
 		flags);
 		break;
 	case I915_MMAP_TYPE_GTT:
-		error = -vm_fault_gtt(ufi, mmo, vaddr, pps, npages, centeridx,
+		error = vm_fault_gtt(ufi, mmo, vaddr, pps, npages, centeridx,
 		flags);
 		break;
 	default:
@@ -602,16 +612,8 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 	}
 
 	uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, NULL);
-
-	/*
-	 * Remap EINTR to success, so that we return to userland.
-	 * On the way out, we'll deliver the signal, and if the signal
-	 * is not fatal then the user code which faulted will most likely
-	 * fault again, and we'll come back here for another try.
-	 */
-	if (error == EINTR)
-		error = 0;
-
+	KASSERT(error != EINTR);
+	KASSERT(error != ERESTART);
 	return error;
 }
 



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

2024-06-23 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 19:37:11 UTC 2024

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

Log Message:
i915: Match Linux fault routine return code actions.

Omit needless EINTR interception -- this is now handled by
i915_error_to_vmf_fault.

Earlier revert was over a false alarm -- bisection shows the new
warnings arose from linux_pci.c 1.29 here:

https://mail-index.netbsd.org/source-changes/2024/06/23/msg151929.html


To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 \
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-06-23 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 14:37:41 UTC 2024

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

Log Message:
i915: Omit needless i915_gem_object_pin/unpin_pages cycle in fault.

vm_fault_cpu and vm_fault_gtt, called by i915_gem_fault, already do
the pinning and unpinning internally, so there is no need for
i915_gem_fault to do it.

No functional change intended, except that the transient pin count
will be one lower than before during the fault routine (but it will
still be positive).


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 \
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.25 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.26
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.25	Sun Jun 23 13:01:44 2024
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c	Sun Jun 23 14:37:41 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_mman.c,v 1.25 2024/06/23 13:01:44 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_mman.c,v 1.26 2024/06/23 14:37:41 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.25 2024/06/23 13:01:44 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.26 2024/06/23 14:37:41 riastradh Exp $");
 
 #include 
 #include 
@@ -565,7 +565,6 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 	struct i915_mmap_offset *mmo =
 	container_of(uobj, struct i915_mmap_offset, uobj);
 	struct drm_i915_gem_object *obj = mmo->obj;
-	bool pinned = false;
 	int error;
 
 	KASSERT(rw_lock_held(obj->base.filp->vmobjlock));
@@ -585,12 +584,6 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 	 */
 	rw_exit(obj->base.filp->vmobjlock);
 
-	/* XXX errno Linux->NetBSD */
-	error = -i915_gem_object_pin_pages(obj);
-	if (error)
-		goto out;
-	pinned = true;
-
 	switch (mmo->mmap_type) {
 	case I915_MMAP_TYPE_WC:
 	case I915_MMAP_TYPE_WB:
@@ -608,8 +601,6 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 		mmo->mmap_type);
 	}
 
-out:	if (pinned)
-		i915_gem_object_unpin_pages(obj);
 	uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, NULL);
 
 	/*



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

2024-06-23 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 14:37:41 UTC 2024

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

Log Message:
i915: Omit needless i915_gem_object_pin/unpin_pages cycle in fault.

vm_fault_cpu and vm_fault_gtt, called by i915_gem_fault, already do
the pinning and unpinning internally, so there is no need for
i915_gem_fault to do it.

No functional change intended, except that the transient pin count
will be one lower than before during the fault routine (but it will
still be positive).


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 \
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-06-23 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 13:01:44 UTC 2024

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

Log Message:
Revert "i915: Reduce diff in fault routine."

Evidently this had more side effects than I thought:

warning: ../../../../external/bsd/drm2/dist/drm/i915/intel_uncore.c:1197: 
Unclaimed read from register 0x61204
...
{drm:netbsd:wait_panel_status+0x74} *ERROR* PPS state mismatch
...
warning: ../../../../external/bsd/drm2/dist/drm/i915/display/intel_dp.c:1175: 
eDP powered off while attempting aux channel communication.
...
warning: ../../../../external/bsd/drm2/dist/drm/i915/display/intel_dp.c:5616: 
Missing case (((&(dev_priv)->__info)->gen) == 9)

So let's roll it back until I have a better understanding of what
changed.

Between making the change and writing the commit message, I forgot
that the change affected the errno values returned by the fault
routine, which may affect how uvm handles the fault failure --
whether to retry, wait for memory and retry, or fail, or what.
Perhaps that explains the issue.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 \
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.24 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.25
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.24	Sun Jun 23 00:53:16 2024
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c	Sun Jun 23 13:01:44 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_mman.c,v 1.24 2024/06/23 00:53:16 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_mman.c,v 1.25 2024/06/23 13:01:44 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.24 2024/06/23 00:53:16 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.25 2024/06/23 13:01:44 riastradh Exp $");
 
 #include 
 #include 
@@ -252,14 +252,14 @@ compute_partial_view(const struct drm_i9
  */
 int	pmap_enter_default(pmap_t, vaddr_t, paddr_t, vm_prot_t, unsigned);
 #define	pmap_enter	pmap_enter_default
-#endif
 
-#ifdef __NetBSD__
 static int
 i915_error_to_vmf_fault(int err)
+{
+	return err;
+}
 #else
 static vm_fault_t i915_error_to_vmf_fault(int err)
-#endif
 {
 	switch (err) {
 	default:
@@ -269,19 +269,11 @@ static vm_fault_t i915_error_to_vmf_faul
 	case -EFAULT: /* purged object */
 	case -ENODEV: /* bad object, how did you get here! */
 	case -ENXIO: /* unable to access backing store (on device) */
-#ifdef __NetBSD__
-		return EINVAL;	/* SIGBUS */
-#else
 		return VM_FAULT_SIGBUS;
-#endif
 
 	case -ENOSPC: /* shmemfs allocation failure */
 	case -ENOMEM: /* our allocation failure */
-#ifdef __NetBSD__
-		return ENOMEM;
-#else
 		return VM_FAULT_OOM;
-#endif
 
 	case 0:
 	case -EAGAIN:
@@ -292,13 +284,10 @@ static vm_fault_t i915_error_to_vmf_faul
 		 * EBUSY is ok: this just means that another thread
 		 * already did the job.
 		 */
-#ifdef __NetBSD__
-		return 0;	/* retry access in userland */
-#else
 		return VM_FAULT_NOPAGE;
-#endif
 	}
 }
+#endif
 
 #ifdef __NetBSD__
 static int
@@ -324,7 +313,7 @@ static vm_fault_t vm_fault_cpu(struct vm
 	/* Sanity check that we allow writing into this object */
 	if (unlikely(i915_gem_object_is_readonly(obj) && write))
 #ifdef __NetBSD__
-		return EINVAL;	/* SIGBUS */
+		return -EFAULT;
 #else
 		return VM_FAULT_SIGBUS;
 #endif
@@ -431,7 +420,7 @@ static vm_fault_t vm_fault_gtt(struct vm
 	/* Sanity check that we allow writing into this object */
 	if (i915_gem_object_is_readonly(obj) && write)
 #ifdef __NetBSD__
-		return EINVAL;	/* SIGBUS */
+		return -EFAULT;
 #else
 		return VM_FAULT_SIGBUS;
 #endif
@@ -576,6 +565,7 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 	struct i915_mmap_offset *mmo =
 	container_of(uobj, struct i915_mmap_offset, uobj);
 	struct drm_i915_gem_object *obj = mmo->obj;
+	bool pinned = false;
 	int error;
 
 	KASSERT(rw_lock_held(obj->base.filp->vmobjlock));
@@ -595,15 +585,22 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 	 */
 	rw_exit(obj->base.filp->vmobjlock);
 
+	/* XXX errno Linux->NetBSD */
+	error = -i915_gem_object_pin_pages(obj);
+	if (error)
+		goto out;
+	pinned = true;
+
 	switch (mmo->mmap_type) {
 	case I915_MMAP_TYPE_WC:
 	case I915_MMAP_TYPE_WB:
 	case I915_MMAP_TYPE_UC:
-		error = vm_fault_cpu(ufi, mmo, vaddr, pps, npages, centeridx,
+		/* XXX errno Linux->NetBSD */
+		error = -vm_fault_cpu(ufi, mmo, vaddr, pps, npages, centeridx,
 		flags);
 		break;
 	case I915_MMAP_TYPE_GTT:
-		error = vm_fault_gtt(ufi, mmo, vaddr, pps, npages, centeridx,
+		error = -vm_fault_gtt(ufi, mmo, vaddr, pps, npages, centeridx,
 		flags);
 		break;
 	default:
@@ -611,7 +608,19 @@ 

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

2024-06-23 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 13:01:44 UTC 2024

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

Log Message:
Revert "i915: Reduce diff in fault routine."

Evidently this had more side effects than I thought:

warning: ../../../../external/bsd/drm2/dist/drm/i915/intel_uncore.c:1197: 
Unclaimed read from register 0x61204
...
{drm:netbsd:wait_panel_status+0x74} *ERROR* PPS state mismatch
...
warning: ../../../../external/bsd/drm2/dist/drm/i915/display/intel_dp.c:1175: 
eDP powered off while attempting aux channel communication.
...
warning: ../../../../external/bsd/drm2/dist/drm/i915/display/intel_dp.c:5616: 
Missing case (((&(dev_priv)->__info)->gen) == 9)

So let's roll it back until I have a better understanding of what
changed.

Between making the change and writing the commit message, I forgot
that the change affected the errno values returned by the fault
routine, which may affect how uvm handles the fault failure --
whether to retry, wait for memory and retry, or fail, or what.
Perhaps that explains the issue.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 \
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/linux

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:53:48 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
linux_pci: Nix pci enumeration kludges.

Now that we can pass a cookie through, this stuff will be a little
less fragile.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/external/bsd/drm2/linux/linux_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/linux/linux_pci.c
diff -u src/sys/external/bsd/drm2/linux/linux_pci.c:1.28 src/sys/external/bsd/drm2/linux/linux_pci.c:1.29
--- src/sys/external/bsd/drm2/linux/linux_pci.c:1.28	Sun May 19 17:36:08 2024
+++ src/sys/external/bsd/drm2/linux/linux_pci.c	Sun Jun 23 00:53:48 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_pci.c,v 1.28 2024/05/19 17:36:08 riastradh Exp $	*/
+/*	$NetBSD: linux_pci.c,v 1.29 2024/06/23 00:53:48 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #endif
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.28 2024/05/19 17:36:08 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.29 2024/06/23 00:53:48 riastradh Exp $");
 
 #if NACPICA > 0
 #include 
@@ -573,24 +573,20 @@ pci_bus_alloc_resource(struct pci_bus *b
 	return 0;
 }
 
-/*
- * XXX Mega-kludgerific!  pci_get_bus_and_slot and pci_get_class are
- * defined only for their single purposes in i915drm, in
- * i915_get_bridge_dev and intel_detect_pch.  We can't define them more
- * generally without adapting pci_find_device (and pci_enumerate_bus
- * internally) to pass a cookie through.
- */
+struct pci_domain_bus_and_slot {
+	int domain, bus, slot;
+};
 
 static int
-pci_kludgey_match_bus0_dev0_func0(const struct pci_attach_args *pa)
+pci_match_domain_bus_and_slot(void *cookie, const struct pci_attach_args *pa)
 {
+	const struct pci_domain_bus_and_slot *C = cookie;
 
-	/* XXX domain */
-	if (pa->pa_bus != 0)
+	if (pci_get_segment(pa->pa_pc) != C->domain)
 		return 0;
-	if (pa->pa_device != 0)
+	if (pa->pa_bus != C->bus)
 		return 0;
-	if (pa->pa_function != 0)
+	if (PCI_DEVFN(pa->pa_device, pa->pa_function) != C->slot)
 		return 0;
 
 	return 1;
@@ -600,12 +596,10 @@ struct pci_dev *
 pci_get_domain_bus_and_slot(int domain, int bus, int slot)
 {
 	struct pci_attach_args pa;
+	struct pci_domain_bus_and_slot context = {domain, bus, slot},
+	*C = 
 
-	KASSERT(domain == 0);
-	KASSERT(bus == 0);
-	KASSERT(slot == PCI_DEVFN(0, 0));
-
-	if (!pci_find_device(, _kludgey_match_bus0_dev0_func0))
+	if (!pci_find_device1(, _match_domain_bus_and_slot, C))
 		return NULL;
 
 	struct pci_dev *const pdev = kmem_zalloc(sizeof(*pdev), KM_SLEEP);
@@ -614,101 +608,59 @@ pci_get_domain_bus_and_slot(int domain, 
 	return pdev;
 }
 
-static int
-pci_kludgey_match_isa_bridge(const struct pci_attach_args *pa)
-{
-
-	if (PCI_CLASS(pa->pa_class) != PCI_CLASS_BRIDGE)
-		return 0;
-	if (PCI_SUBCLASS(pa->pa_class) != PCI_SUBCLASS_BRIDGE_ISA)
-		return 0;
-
-	return 1;
-}
-
-static int
-pci_kludgey_match_other_display(const struct pci_attach_args *pa)
+void
+pci_dev_put(struct pci_dev *pdev)
 {
 
-	if (PCI_CLASS(pa->pa_class) != PCI_CLASS_DISPLAY)
-		return 0;
-	if (PCI_SUBCLASS(pa->pa_class) != PCI_SUBCLASS_DISPLAY_MISC)
-		return 0;
+	if (pdev == NULL)
+		return;
 
-	return 1;
+	KASSERT(ISSET(pdev->pd_kludges, NBPCI_KLUDGE_GET_MUMBLE));
+	kmem_free(pdev->bus, sizeof(*pdev->bus));
+	kmem_free(pdev, sizeof(*pdev));
 }
 
-static int
-pci_kludgey_match_vga_display(const struct pci_attach_args *pa)
-{
-
-	if (PCI_CLASS(pa->pa_class) != PCI_CLASS_DISPLAY)
-		return 0;
-	if (PCI_SUBCLASS(pa->pa_class) != PCI_SUBCLASS_DISPLAY_VGA)
-		return 0;
-
-	return 1;
-}
+struct pci_get_class_state {
+	uint32_t		class_subclass_shifted;
+	const struct pci_dev	*from;
+};
 
 static int
-pci_kludgey_match_3d_display(const struct pci_attach_args *pa)
+pci_get_class_match(void *cookie, const struct pci_attach_args *pa)
 {
+	struct pci_get_class_state *C = cookie;
 
-	if (PCI_CLASS(pa->pa_class) != PCI_CLASS_DISPLAY)
+	if (C->from) {
+		if ((pci_get_segment(C->from->pd_pa.pa_pc) ==
+			pci_get_segment(pa->pa_pc)) &&
+		C->from->pd_pa.pa_bus == pa->pa_bus &&
+		C->from->pd_pa.pa_device == pa->pa_device &&
+		C->from->pd_pa.pa_function == pa->pa_function)
+			C->from = NULL;
 		return 0;
-	if (PCI_SUBCLASS(pa->pa_class) != PCI_SUBCLASS_DISPLAY_3D)
+	}
+	if (C->class_subclass_shifted !=
+	(PCI_CLASS(pa->pa_class) << 8 | PCI_SUBCLASS(pa->pa_class)))
 		return 0;
 
 	return 1;
 }
 
-void
-pci_dev_put(struct pci_dev *pdev)
-{
-
-	if (pdev == NULL)
-		return;
-
-	KASSERT(ISSET(pdev->pd_kludges, NBPCI_KLUDGE_GET_MUMBLE));
-	kmem_free(pdev->bus, sizeof(*pdev->bus));
-	kmem_free(pdev, sizeof(*pdev));
-}
-
-struct pci_dev *		/* XXX i915/amdgpu kludge */
+struct pci_dev *
 pci_get_class(uint32_t class_subclass_shifted, struct pci_dev *from)
 {
+	struct 

CVS commit: src/sys/external/bsd/drm2/linux

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:53:48 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
linux_pci: Nix pci enumeration kludges.

Now that we can pass a cookie through, this stuff will be a little
less fragile.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/external/bsd/drm2/linux/linux_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/i915/gem

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:53:16 UTC 2024

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

Log Message:
i915: Reduce diff in fault routine.

- Omit needless i915_gem_object_pin/unpin_pages cycle in
  i915_gem_fault.  This is already done by vm_fault_cpu and
  vm_fault_gtt.

- Omit needless EINTR interception.  This is now already handled by
  i915_error_to_vmf_fault.

No functional change intended, except that the transient pin count
will be one lower than before during the fault routine.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 \
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-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:53:16 UTC 2024

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

Log Message:
i915: Reduce diff in fault routine.

- Omit needless i915_gem_object_pin/unpin_pages cycle in
  i915_gem_fault.  This is already done by vm_fault_cpu and
  vm_fault_gtt.

- Omit needless EINTR interception.  This is now already handled by
  i915_error_to_vmf_fault.

No functional change intended, except that the transient pin count
will be one lower than before during the fault routine.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 \
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.23 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.24
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.23	Tue Jun  4 21:42:40 2024
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c	Sun Jun 23 00:53:16 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_mman.c,v 1.23 2024/06/04 21:42:40 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_mman.c,v 1.24 2024/06/23 00:53:16 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.23 2024/06/04 21:42:40 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.24 2024/06/23 00:53:16 riastradh Exp $");
 
 #include 
 #include 
@@ -252,14 +252,14 @@ compute_partial_view(const struct drm_i9
  */
 int	pmap_enter_default(pmap_t, vaddr_t, paddr_t, vm_prot_t, unsigned);
 #define	pmap_enter	pmap_enter_default
+#endif
 
+#ifdef __NetBSD__
 static int
 i915_error_to_vmf_fault(int err)
-{
-	return err;
-}
 #else
 static vm_fault_t i915_error_to_vmf_fault(int err)
+#endif
 {
 	switch (err) {
 	default:
@@ -269,11 +269,19 @@ static vm_fault_t i915_error_to_vmf_faul
 	case -EFAULT: /* purged object */
 	case -ENODEV: /* bad object, how did you get here! */
 	case -ENXIO: /* unable to access backing store (on device) */
+#ifdef __NetBSD__
+		return EINVAL;	/* SIGBUS */
+#else
 		return VM_FAULT_SIGBUS;
+#endif
 
 	case -ENOSPC: /* shmemfs allocation failure */
 	case -ENOMEM: /* our allocation failure */
+#ifdef __NetBSD__
+		return ENOMEM;
+#else
 		return VM_FAULT_OOM;
+#endif
 
 	case 0:
 	case -EAGAIN:
@@ -284,10 +292,13 @@ static vm_fault_t i915_error_to_vmf_faul
 		 * EBUSY is ok: this just means that another thread
 		 * already did the job.
 		 */
+#ifdef __NetBSD__
+		return 0;	/* retry access in userland */
+#else
 		return VM_FAULT_NOPAGE;
+#endif
 	}
 }
-#endif
 
 #ifdef __NetBSD__
 static int
@@ -313,7 +324,7 @@ static vm_fault_t vm_fault_cpu(struct vm
 	/* Sanity check that we allow writing into this object */
 	if (unlikely(i915_gem_object_is_readonly(obj) && write))
 #ifdef __NetBSD__
-		return -EFAULT;
+		return EINVAL;	/* SIGBUS */
 #else
 		return VM_FAULT_SIGBUS;
 #endif
@@ -420,7 +431,7 @@ static vm_fault_t vm_fault_gtt(struct vm
 	/* Sanity check that we allow writing into this object */
 	if (i915_gem_object_is_readonly(obj) && write)
 #ifdef __NetBSD__
-		return -EFAULT;
+		return EINVAL;	/* SIGBUS */
 #else
 		return VM_FAULT_SIGBUS;
 #endif
@@ -565,7 +576,6 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 	struct i915_mmap_offset *mmo =
 	container_of(uobj, struct i915_mmap_offset, uobj);
 	struct drm_i915_gem_object *obj = mmo->obj;
-	bool pinned = false;
 	int error;
 
 	KASSERT(rw_lock_held(obj->base.filp->vmobjlock));
@@ -585,22 +595,15 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 	 */
 	rw_exit(obj->base.filp->vmobjlock);
 
-	/* XXX errno Linux->NetBSD */
-	error = -i915_gem_object_pin_pages(obj);
-	if (error)
-		goto out;
-	pinned = true;
-
 	switch (mmo->mmap_type) {
 	case I915_MMAP_TYPE_WC:
 	case I915_MMAP_TYPE_WB:
 	case I915_MMAP_TYPE_UC:
-		/* XXX errno Linux->NetBSD */
-		error = -vm_fault_cpu(ufi, mmo, vaddr, pps, npages, centeridx,
+		error = vm_fault_cpu(ufi, mmo, vaddr, pps, npages, centeridx,
 		flags);
 		break;
 	case I915_MMAP_TYPE_GTT:
-		error = -vm_fault_gtt(ufi, mmo, vaddr, pps, npages, centeridx,
+		error = vm_fault_gtt(ufi, mmo, vaddr, pps, npages, centeridx,
 		flags);
 		break;
 	default:
@@ -608,19 +611,7 @@ i915_gem_fault(struct uvm_faultinfo *ufi
 		mmo->mmap_type);
 	}
 
-out:	if (pinned)
-		i915_gem_object_unpin_pages(obj);
 	uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, NULL);
-
-	/*
-	 * Remap EINTR to success, so that we return to userland.
-	 * On the way out, we'll deliver the signal, and if the signal
-	 * is not fatal then the user code which faulted will most likely
-	 * fault again, and we'll come back here for another try.
-	 */
-	if (error == EINTR)
-		error = 0;
-
 	return error;
 }
 



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

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:49:31 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Add XXX about readahead fault failures.


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm/ttm_bo_vm.c
diff -u src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.27 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.28
--- src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.27	Sun Jun 23 00:49:20 2024
+++ src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c	Sun Jun 23 00:49:31 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ttm_bo_vm.c,v 1.27 2024/06/23 00:49:20 riastradh Exp $	*/
+/*	$NetBSD: ttm_bo_vm.c,v 1.28 2024/06/23 00:49:31 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.27 2024/06/23 00:49:20 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.28 2024/06/23 00:49:31 riastradh Exp $");
 
 #include 
 
@@ -290,6 +290,11 @@ ttm_bo_uvm_fault_reserved(struct uvm_fau
 		ret = pmap_enter(vmf->orig_map->pmap, vaddr + i*PAGE_SIZE,
 		paddr, vm_prot, PMAP_CANFAIL | prot);
 		if (ret) {
+			/*
+			 * XXX Continue with ret=0 if i != centeridx,
+			 * so we don't fail if only readahead pages
+			 * fail?
+			 */
 			KASSERT(ret != ERESTART);
 			break;
 		}



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

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:49:31 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Add XXX about readahead fault failures.


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:49:20 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Sync cacheability flag logic with Linux.


To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm/ttm_bo_vm.c
diff -u src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.26 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.27
--- src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.26	Sun Jun 23 00:49:06 2024
+++ src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c	Sun Jun 23 00:49:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ttm_bo_vm.c,v 1.26 2024/06/23 00:49:06 riastradh Exp $	*/
+/*	$NetBSD: ttm_bo_vm.c,v 1.27 2024/06/23 00:49:20 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.26 2024/06/23 00:49:06 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.27 2024/06/23 00:49:20 riastradh Exp $");
 
 #include 
 
@@ -183,8 +183,8 @@ ttm_bo_uvm_fault_reserved(struct uvm_fau
 	voff_t uoffset;		/* offset in bytes into bo */
 	unsigned startpage;	/* offset in pages into bo */
 	unsigned i;
-	vm_prot_t vm_prot;	/* VM_PROT_* */
-	pgprot_t pgprot;	/* VM_PROT_* | PMAP_* cacheability flags */
+	vm_prot_t vm_prot = vmf->entry->protection; /* VM_PROT_* */
+	pgprot_t prot = vm_prot; /* VM_PROT_* | PMAP_* cacheability flags */
 	int err, ret;
 
 	/*
@@ -233,20 +233,17 @@ ttm_bo_uvm_fault_reserved(struct uvm_fau
 		goto out_io_unlock;
 	}
 
-	vm_prot = vmf->entry->protection;
+	prot = ttm_io_prot(bo->mem.placement, prot);
 	if (!bo->mem.bus.is_iomem) {
 		struct ttm_operation_ctx ctx = {
 			.interruptible = false,
 			.no_wait_gpu = false,
 			.flags = TTM_OPT_FLAG_FORCE_ALLOC
+
 		};
 
 		u.ttm = bo->ttm;
 		size = (size_t)bo->ttm->num_pages << PAGE_SHIFT;
-		if (ISSET(bo->mem.placement, TTM_PL_FLAG_CACHED))
-			pgprot = vm_prot;
-		else
-			pgprot = ttm_io_prot(bo->mem.placement, vm_prot);
 		if (ttm_tt_populate(bo->ttm, )) {
 			ret = ENOMEM;
 			goto out_io_unlock;
@@ -254,7 +251,6 @@ ttm_bo_uvm_fault_reserved(struct uvm_fau
 	} else {
 		u.base = (bo->mem.bus.base + bo->mem.bus.offset);
 		size = bo->mem.bus.size;
-		pgprot = ttm_io_prot(bo->mem.placement, vm_prot);
 	}
 
 	KASSERT(vmf->entry->start <= vaddr);
@@ -287,9 +283,12 @@ ttm_bo_uvm_fault_reserved(struct uvm_fau
 			vm_prot, 0);
 
 			paddr = pmap_phys_address(cookie);
+#if 0/* XXX Why no PMAP_* flags added here? */
+			mmapflags = pmap_mmap_flags(cookie);
+#endif
 		}
 		ret = pmap_enter(vmf->orig_map->pmap, vaddr + i*PAGE_SIZE,
-		paddr, vm_prot, (PMAP_CANFAIL | pgprot));
+		paddr, vm_prot, PMAP_CANFAIL | prot);
 		if (ret) {
 			KASSERT(ret != ERESTART);
 			break;



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

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:49:20 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Sync cacheability flag logic with Linux.


To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:49:06 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Respect PGO_ALLPAGES.

Not sure this is useful but it reduces XXX's and makes this match
udv_fault better so it's easier to understand.


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm/ttm_bo_vm.c
diff -u src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.25 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.26
--- src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.25	Sun Jun 23 00:48:56 2024
+++ src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c	Sun Jun 23 00:49:06 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ttm_bo_vm.c,v 1.25 2024/06/23 00:48:56 riastradh Exp $	*/
+/*	$NetBSD: ttm_bo_vm.c,v 1.26 2024/06/23 00:49:06 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.25 2024/06/23 00:48:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.26 2024/06/23 00:49:06 riastradh Exp $");
 
 #include 
 
@@ -272,7 +272,8 @@ ttm_bo_uvm_fault_reserved(struct uvm_fau
 	for (i = 0; i < npages; i++) {
 		paddr_t paddr;
 
-		/* XXX PGO_ALLPAGES?  */
+		if ((flags & PGO_ALLPAGES) == 0 && i != centeridx)
+			continue;
 		if (pps[i] == PGO_DONTCARE)
 			continue;
 		if (!bo->mem.bus.is_iomem) {



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

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:49:06 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Respect PGO_ALLPAGES.

Not sure this is useful but it reduces XXX's and makes this match
udv_fault better so it's easier to understand.


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:48:56 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Sync more with Linux.

Add the original copyright and attribution since this is now,
intentionally, a modified copy of the original and not just roughly
the same algorithm.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm/ttm_bo_vm.c
diff -u src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.24 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.25
--- src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.24	Sun May 19 13:50:04 2024
+++ src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c	Sun Jun 23 00:48:56 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ttm_bo_vm.c,v 1.24 2024/05/19 13:50:04 riastradh Exp $	*/
+/*	$NetBSD: ttm_bo_vm.c,v 1.25 2024/06/23 00:48:56 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -29,8 +29,38 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+/**
+ *
+ * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **/
+/*
+ * Authors: Thomas Hellstrom 
+ */
+
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.24 2024/05/19 13:50:04 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.25 2024/06/23 00:48:56 riastradh Exp $");
 
 #include 
 
@@ -44,8 +74,6 @@ __KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,
 
 #include 
 
-static int	ttm_bo_uvm_fault_idle(struct ttm_buffer_object *,
-		struct uvm_faultinfo *);
 static int	ttm_bo_uvm_lookup(struct ttm_bo_device *, unsigned long,
 		unsigned long, struct ttm_buffer_object **);
 
@@ -67,12 +95,81 @@ ttm_bo_uvm_detach(struct uvm_object *uob
 	ttm_bo_put(bo);
 }
 
-int
-ttm_bo_uvm_fault(struct uvm_faultinfo *ufi, vaddr_t vaddr,
+static int
+ttm_bo_vm_fault_idle(struct ttm_buffer_object *bo, struct uvm_faultinfo *vmf)
+{
+	int err, ret = 0;
+
+	if (__predict_true(!bo->moving))
+		goto out_unlock;
+
+	/*
+	 * Quick non-stalling check for idle.
+	 */
+	if (dma_fence_is_signaled(bo->moving))
+		goto out_clear;
+
+	/*
+	 * If possible, avoid waiting for GPU with mmap_sem
+	 * held.
+	 */
+	if (1) {		/* always retriable in NetBSD */
+		ret = ERESTART;
+
+		ttm_bo_get(bo);
+		uvmfault_unlockall(vmf, vmf->entry->aref.ar_amap, NULL);
+		(void) dma_fence_wait(bo->moving, true);
+		dma_resv_unlock(bo->base.resv);
+		ttm_bo_put(bo);
+		goto out_unlock;
+	}
+
+	/*
+	 * Ordinary wait.
+	 */
+	err = dma_fence_wait(bo->moving, true);
+	if (__predict_false(err != 0)) {
+		ret = (err != -ERESTARTSYS) ? EINVAL/*SIGBUS*/ :
+		0/*retry access in userland*/;
+		goto out_unlock;
+	}
+
+out_clear:
+	dma_fence_put(bo->moving);
+	bo->moving = NULL;
+
+out_unlock:
+	return ret;
+}
+
+static int
+ttm_bo_vm_reserve(struct ttm_buffer_object *bo, struct uvm_faultinfo *vmf)
+{
+
+	/*
+	 * Work around locking order reversal in fault / nopfn
+	 * between mmap_sem and bo_reserve: Perform a trylock operation
+	 * for reserve, and if it fails, retry the fault after waiting
+	 * for the buffer to become unreserved.
+	 */
+	if (__predict_false(!dma_resv_trylock(bo->base.resv))) {
+		ttm_bo_get(bo);
+		uvmfault_unlockall(vmf, vmf->entry->aref.ar_amap, NULL);
+		if (!dma_resv_lock_interruptible(bo->base.resv, NULL))
+			dma_resv_unlock(bo->base.resv);
+		ttm_bo_put(bo);
+		return ERESTART;
+	}
+
+	return 0;
+}
+
+static int
+ttm_bo_uvm_fault_reserved(struct uvm_faultinfo *vmf, vaddr_t vaddr,
 struct vm_page **pps, int npages, int centeridx, vm_prot_t access_type,
 int flags)
 

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

2024-06-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Jun 23 00:48:56 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Sync more with Linux.

Add the original copyright and attribution since this is now,
intentionally, a modified copy of the original and not just roughly
the same algorithm.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/instmem

2024-06-04 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jun  4 21:43:39 UTC 2024

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

Log Message:
nouveau_nvkm_subdev_instmem_gk20a.c: Use BUS_DMA_PREFETCHABLE.

Matches Linux's pgprot_writecombine.

Unclear where the appropriate bus_dmamap_sync happens, or is supposed
to happen -- not using it would be wrong, but asking for a
prefetchable mapping may paper over symptoms, at least!


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.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/instmem/nouveau_nvkm_subdev_instmem_gk20a.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.9 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.10
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c:1.9	Sun Dec 19 12:29:47 2021
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.c	Tue Jun  4 21:43:39 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.9 2021/12/19 12:29:47 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.10 2024/06/04 21:43:39 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved.
@@ -44,7 +44,7 @@
  * goes beyond a certain threshold. At the moment this limit is 1MB.
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.9 2021/12/19 12:29:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_instmem_gk20a.c,v 1.10 2024/06/04 21:43:39 riastradh Exp $");
 
 #include "priv.h"
 
@@ -241,7 +241,7 @@ gk20a_instobj_acquire_iommu(struct nvkm_
 #ifdef __NetBSD__
 	void *kva;
 	if (bus_dmamem_map(imem->dmat, node->segs, node->nsegs, size,
-		, BUS_DMA_WAITOK))
+		, BUS_DMA_WAITOK|BUS_DMA_PREFETCHABLE))
 		node->base.vaddr = NULL;
 	else
 		node->base.vaddr = kva;



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

2024-06-04 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jun  4 21:43:39 UTC 2024

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

Log Message:
nouveau_nvkm_subdev_instmem_gk20a.c: Use BUS_DMA_PREFETCHABLE.

Matches Linux's pgprot_writecombine.

Unclear where the appropriate bus_dmamap_sync happens, or is supposed
to happen -- not using it would be wrong, but asking for a
prefetchable mapping may paper over symptoms, at least!


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/instmem/nouveau_nvkm_subdev_instmem_gk20a.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-06-04 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jun  4 21:42:40 UTC 2024

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

Log Message:
i915_gem_mman.c: Apply mmap types via pmap flags.

This way, userland gets buffers mapped write-combining or uncached as
needed.

PR xsrc/58307


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 \
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.22 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.23
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.22	Fri Jan 19 22:22:40 2024
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c	Tue Jun  4 21:42:40 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_mman.c,v 1.22 2024/01/19 22:22:40 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_mman.c,v 1.23 2024/06/04 21:42:40 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.22 2024/01/19 22:22:40 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.23 2024/06/04 21:42:40 riastradh Exp $");
 
 #include 
 #include 
@@ -334,6 +334,23 @@ static vm_fault_t vm_fault_cpu(struct vm
 	KASSERT(i915_gem_object_type_has(obj,
 		I915_GEM_OBJECT_HAS_STRUCT_PAGE));
 
+	int pmapflags;
+	switch (mmo->mmap_type) {
+	case I915_MMAP_TYPE_WC:
+		pmapflags = PMAP_WRITE_COMBINE;
+		break;
+	case I915_MMAP_TYPE_WB:
+		pmapflags = 0;	/* default */
+		break;
+	case I915_MMAP_TYPE_UC:
+		pmapflags = PMAP_NOCACHE;
+		break;
+	case I915_MMAP_TYPE_GTT: /* handled by vm_fault_gtt */
+	default:
+		panic("invalid i915 gem mmap offset type: %d",
+		mmo->mmap_type);
+	}
+
 	struct scatterlist *sg = obj->mm.pages->sgl;
 	unsigned startpage = (ufi->entry->offset + (vaddr - ufi->entry->start))
 	>> PAGE_SHIFT;
@@ -349,7 +366,7 @@ static vm_fault_t vm_fault_cpu(struct vm
 		/* XXX errno NetBSD->Linux */
 		err = -pmap_enter(ufi->orig_map->pmap,
 		vaddr + i*PAGE_SIZE, paddr, ufi->entry->protection,
-		PMAP_CANFAIL | ufi->entry->protection);
+		PMAP_CANFAIL | ufi->entry->protection | pmapflags);
 		if (err)
 			break;
 	}
@@ -489,7 +506,7 @@ static vm_fault_t vm_fault_gtt(struct vm
 		/* XXX errno NetBSD->Linux */
 		ret = -pmap_enter(ufi->orig_map->pmap,
 		vaddr + i*PAGE_SIZE, paddr, ufi->entry->protection,
-		PMAP_CANFAIL | ufi->entry->protection);
+		PMAP_CANFAIL|PMAP_WRITE_COMBINE | ufi->entry->protection);
 		if (ret)
 			break;
 	}



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

2024-06-04 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Jun  4 21:42:40 UTC 2024

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

Log Message:
i915_gem_mman.c: Apply mmap types via pmap flags.

This way, userland gets buffers mapped write-combining or uncached as
needed.

PR xsrc/58307


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 \
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/linux

2024-05-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed May 22 15:59:25 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_xa.c

Log Message:
linux_xa: Delete and replace collision in xa_store as intended.

Don't free the colliding node that's still in the tree.

Noted by rjs@.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/linux/linux_xa.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/linux/linux_xa.c
diff -u src/sys/external/bsd/drm2/linux/linux_xa.c:1.3 src/sys/external/bsd/drm2/linux/linux_xa.c:1.4
--- src/sys/external/bsd/drm2/linux/linux_xa.c:1.3	Sun Dec 19 12:05:25 2021
+++ src/sys/external/bsd/drm2/linux/linux_xa.c	Wed May 22 15:59:25 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_xa.c,v 1.3 2021/12/19 12:05:25 riastradh Exp $	*/
+/*	$NetBSD: linux_xa.c,v 1.4 2024/05/22 15:59:25 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: linux_xa.c,v 1.3 2021/12/19 12:05:25 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_xa.c,v 1.4 2024/05/22 15:59:25 riastradh Exp $");
 
 /*
  * This is a lame-o implementation of the Linux xarray data type, which
@@ -124,7 +124,7 @@ xa_load(struct xarray *xa, unsigned long
 void *
 xa_store(struct xarray *xa, unsigned long key, void *datum, gfp_t gfp)
 {
-	struct node *n, *collision;
+	struct node *n, *collision, *recollision;
 
 	KASSERT(datum != NULL);
 	KASSERT(((uintptr_t)datum & 0x3) == 0);
@@ -137,6 +137,11 @@ xa_store(struct xarray *xa, unsigned lon
 
 	mutex_enter(>xa_lock);
 	collision = rb_tree_insert_node(>xa_tree, n);
+	if (collision != n) {
+		rb_tree_remove_node(>xa_tree, n);
+		recollision = rb_tree_insert_node(>xa_tree, n);
+		KASSERT(recollision == n);
+	}
 	mutex_exit(>xa_lock);
 
 	if (collision != n) {



CVS commit: src/sys/external/bsd/drm2/linux

2024-05-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed May 22 15:59:25 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_xa.c

Log Message:
linux_xa: Delete and replace collision in xa_store as intended.

Don't free the colliding node that's still in the tree.

Noted by rjs@.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/linux/linux_xa.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

2024-05-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed May 22 15:59:12 UTC 2024

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

Log Message:
drm_gem.c: Enable drm_gem_fence_array_add now that we emulate xa.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/external/bsd/drm2/dist/drm/drm_gem.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

2024-05-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed May 22 15:59:12 UTC 2024

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

Log Message:
drm_gem.c: Enable drm_gem_fence_array_add now that we emulate xa.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/external/bsd/drm2/dist/drm/drm_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/drm_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_gem.c:1.24 src/sys/external/bsd/drm2/dist/drm/drm_gem.c:1.25
--- src/sys/external/bsd/drm2/dist/drm/drm_gem.c:1.24	Wed May 22 15:47:18 2024
+++ src/sys/external/bsd/drm2/dist/drm/drm_gem.c	Wed May 22 15:59:12 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_gem.c,v 1.24 2024/05/22 15:47:18 riastradh Exp $	*/
+/*	$NetBSD: drm_gem.c,v 1.25 2024/05/22 15:59:12 riastradh Exp $	*/
 
 /*
  * Copyright © 2008 Intel Corporation
@@ -28,7 +28,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_gem.c,v 1.24 2024/05/22 15:47:18 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_gem.c,v 1.25 2024/05/22 15:59:12 riastradh Exp $");
 
 #include 
 #include 
@@ -1477,8 +1477,6 @@ drm_gem_unlock_reservations(struct drm_g
 }
 EXPORT_SYMBOL(drm_gem_unlock_reservations);
 
-#ifndef __NetBSD__		/* XXX xarray */
-
 /**
  * drm_gem_fence_array_add - Adds the fence to an array of fences to be
  * waited on, deduplicating fences from the same context.
@@ -1571,5 +1569,3 @@ int drm_gem_fence_array_add_implicit(str
 	return ret;
 }
 EXPORT_SYMBOL(drm_gem_fence_array_add_implicit);
-
-#endif



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

2024-05-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed May 22 15:47:18 UTC 2024

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

Log Message:
drm_gem.c: Fix sense of assertion.

This is the opposite of WARN_ON.

Noted by rjs@.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/external/bsd/drm2/dist/drm/drm_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/drm_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_gem.c:1.23 src/sys/external/bsd/drm2/dist/drm/drm_gem.c:1.24
--- src/sys/external/bsd/drm2/dist/drm/drm_gem.c:1.23	Sun Dec 19 11:58:49 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_gem.c	Wed May 22 15:47:18 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_gem.c,v 1.23 2021/12/19 11:58:49 riastradh Exp $	*/
+/*	$NetBSD: drm_gem.c,v 1.24 2024/05/22 15:47:18 riastradh Exp $	*/
 
 /*
  * Copyright © 2008 Intel Corporation
@@ -28,7 +28,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_gem.c,v 1.23 2021/12/19 11:58:49 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_gem.c,v 1.24 2024/05/22 15:47:18 riastradh Exp $");
 
 #include 
 #include 
@@ -605,7 +605,7 @@ drm_gem_get_pages(struct drm_gem_object 
 	unsigned i, npages;
 	int ret;
 
-	KASSERT((obj->size & (PAGE_SIZE - 1)) != 0);
+	KASSERT((obj->size & (PAGE_SIZE - 1)) == 0);
 
 	npages = obj->size >> PAGE_SHIFT;
 	pages = kvmalloc_array(npages, sizeof(*pages), GFP_KERNEL);



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

2024-05-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Wed May 22 15:47:18 UTC 2024

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

Log Message:
drm_gem.c: Fix sense of assertion.

This is the opposite of WARN_ON.

Noted by rjs@.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/external/bsd/drm2/dist/drm/drm_gem.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/linux

2024-05-20 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon May 20 11:35:11 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_dma_buf.c

Log Message:
drm: Fix missing bounds checks in dma buf mmap.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/drm2/linux/linux_dma_buf.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/linux/linux_dma_buf.c
diff -u src/sys/external/bsd/drm2/linux/linux_dma_buf.c:1.16 src/sys/external/bsd/drm2/linux/linux_dma_buf.c:1.17
--- src/sys/external/bsd/drm2/linux/linux_dma_buf.c:1.16	Tue Feb 21 11:40:13 2023
+++ src/sys/external/bsd/drm2/linux/linux_dma_buf.c	Mon May 20 11:35:10 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_dma_buf.c,v 1.16 2023/02/21 11:40:13 riastradh Exp $	*/
+/*	$NetBSD: linux_dma_buf.c,v 1.17 2024/05/20 11:35:10 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: linux_dma_buf.c,v 1.16 2023/02/21 11:40:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_dma_buf.c,v 1.17 2024/05/20 11:35:10 riastradh Exp $");
 
 #include 
 #include 
@@ -285,7 +285,7 @@ dmabuf_fop_mmap(struct file *file, off_t
 {
 	struct dma_buf *dmabuf = file->f_data;
 
-	if (size > dmabuf->size)
+	if (size > dmabuf->size || *offp < 0 || *offp > dmabuf->size - size)
 		return EINVAL;
 
 	return dmabuf->ops->mmap(dmabuf, offp, size, prot, flagsp, advicep,



CVS commit: src/sys/external/bsd/drm2/linux

2024-05-20 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon May 20 11:35:11 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_dma_buf.c

Log Message:
drm: Fix missing bounds checks in dma buf mmap.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/drm2/linux/linux_dma_buf.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-05-20 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon May 20 11:34:45 UTC 2024

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

Log Message:
i915: Fix dmabuf mmap object.


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_dmabuf.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_dmabuf.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_dmabuf.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_dmabuf.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_dmabuf.c:1.6	Sun Dec 19 11:33:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_dmabuf.c	Mon May 20 11:34:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_dmabuf.c,v 1.6 2021/12/19 11:33:30 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_dmabuf.c,v 1.7 2024/05/20 11:34:45 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_dmabuf.c,v 1.6 2021/12/19 11:33:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_dmabuf.c,v 1.7 2024/05/20 11:34:45 riastradh Exp $");
 
 #include 
 #include 
@@ -126,10 +126,9 @@ static int i915_gem_dmabuf_mmap(struct d
 		return -EINVAL;
 	if (!obj->base.filp)
 		return -ENODEV;
-	/* XXX review mmap refcount */
-	drm_gem_object_get(>base);
+	uao_reference(obj->base.filp);
 	*advicep = UVM_ADV_RANDOM;
-	*uobjp = >base.gemo_uvmobj;
+	*uobjp = obj->base.filp;
 	*maxprotp = prot;
 #else
 	if (obj->base.size < vma->vm_end - vma->vm_start)



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

2024-05-20 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon May 20 11:34:45 UTC 2024

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

Log Message:
i915: Fix dmabuf mmap object.


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_dmabuf.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

2024-05-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun May 19 17:36:08 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/include/linux: pci.h
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
linux: Add a few more cases to pci_get_class.

Should fix crash on boot with amdgpu now that the ACPI business is
enabled.


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/external/bsd/drm2/include/linux/pci.h
cvs rdiff -u -r1.27 -r1.28 src/sys/external/bsd/drm2/linux/linux_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/include/linux/pci.h
diff -u src/sys/external/bsd/drm2/include/linux/pci.h:1.57 src/sys/external/bsd/drm2/include/linux/pci.h:1.58
--- src/sys/external/bsd/drm2/include/linux/pci.h:1.57	Sat Sep 30 10:46:46 2023
+++ src/sys/external/bsd/drm2/include/linux/pci.h	Sun May 19 17:36:08 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: pci.h,v 1.57 2023/09/30 10:46:46 mrg Exp $	*/
+/*	$NetBSD: pci.h,v 1.58 2024/05/19 17:36:08 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -90,6 +90,10 @@ CTASSERT(PCI_CLASS_DISPLAY_VGA == 0x0300
 	((PCI_CLASS_DISPLAY << 8) | PCI_SUBCLASS_DISPLAY_MISC)
 CTASSERT(PCI_CLASS_DISPLAY_OTHER == 0x0380);
 
+#define	PCI_CLASS_DISPLAY_3D		\
+	((PCI_CLASS_DISPLAY << 8) | PCI_SUBCLASS_DISPLAY_3D)
+CTASSERT(PCI_CLASS_DISPLAY_3D == 0x0302);
+
 #define	PCI_CLASS_BRIDGE_ISA		\
 	((PCI_CLASS_BRIDGE << 8) | PCI_SUBCLASS_BRIDGE_ISA)
 CTASSERT(PCI_CLASS_BRIDGE_ISA == 0x0601);

Index: src/sys/external/bsd/drm2/linux/linux_pci.c
diff -u src/sys/external/bsd/drm2/linux/linux_pci.c:1.27 src/sys/external/bsd/drm2/linux/linux_pci.c:1.28
--- src/sys/external/bsd/drm2/linux/linux_pci.c:1.27	Sat Sep 30 10:46:46 2023
+++ src/sys/external/bsd/drm2/linux/linux_pci.c	Sun May 19 17:36:08 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_pci.c,v 1.27 2023/09/30 10:46:46 mrg Exp $	*/
+/*	$NetBSD: linux_pci.c,v 1.28 2024/05/19 17:36:08 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #endif
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.27 2023/09/30 10:46:46 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.28 2024/05/19 17:36:08 riastradh Exp $");
 
 #if NACPICA > 0
 #include 
@@ -626,6 +626,42 @@ pci_kludgey_match_isa_bridge(const struc
 	return 1;
 }
 
+static int
+pci_kludgey_match_other_display(const struct pci_attach_args *pa)
+{
+
+	if (PCI_CLASS(pa->pa_class) != PCI_CLASS_DISPLAY)
+		return 0;
+	if (PCI_SUBCLASS(pa->pa_class) != PCI_SUBCLASS_DISPLAY_MISC)
+		return 0;
+
+	return 1;
+}
+
+static int
+pci_kludgey_match_vga_display(const struct pci_attach_args *pa)
+{
+
+	if (PCI_CLASS(pa->pa_class) != PCI_CLASS_DISPLAY)
+		return 0;
+	if (PCI_SUBCLASS(pa->pa_class) != PCI_SUBCLASS_DISPLAY_VGA)
+		return 0;
+
+	return 1;
+}
+
+static int
+pci_kludgey_match_3d_display(const struct pci_attach_args *pa)
+{
+
+	if (PCI_CLASS(pa->pa_class) != PCI_CLASS_DISPLAY)
+		return 0;
+	if (PCI_SUBCLASS(pa->pa_class) != PCI_SUBCLASS_DISPLAY_3D)
+		return 0;
+
+	return 1;
+}
+
 void
 pci_dev_put(struct pci_dev *pdev)
 {
@@ -638,20 +674,37 @@ pci_dev_put(struct pci_dev *pdev)
 	kmem_free(pdev, sizeof(*pdev));
 }
 
-struct pci_dev *		/* XXX i915 kludge */
-pci_get_class(uint32_t class_subclass_shifted __unused, struct pci_dev *from)
+struct pci_dev *		/* XXX i915/amdgpu kludge */
+pci_get_class(uint32_t class_subclass_shifted, struct pci_dev *from)
 {
 	struct pci_attach_args pa;
 
-	KASSERT(class_subclass_shifted == (PCI_CLASS_BRIDGE_ISA << 8));
-
 	if (from != NULL) {
 		pci_dev_put(from);
 		return NULL;
 	}
 
-	if (!pci_find_device(, _kludgey_match_isa_bridge))
-		return NULL;
+	switch (class_subclass_shifted) {
+	case PCI_CLASS_BRIDGE_ISA << 8:
+		if (!pci_find_device(, _kludgey_match_isa_bridge))
+			return NULL;
+		break;
+	case PCI_CLASS_DISPLAY_OTHER << 8:
+		if (!pci_find_device(, _kludgey_match_other_display))
+			return NULL;
+		break;
+	case PCI_CLASS_DISPLAY_VGA << 8:
+		if (!pci_find_device(, _kludgey_match_vga_display))
+			return NULL;
+		break;
+	case PCI_CLASS_DISPLAY_3D << 8:
+		if (!pci_find_device(, _kludgey_match_3d_display))
+			return NULL;
+		break;
+	default:
+		panic("unknown pci_get_class: %"PRIx32,
+		class_subclass_shifted);
+	}
 
 	struct pci_dev *const pdev = kmem_zalloc(sizeof(*pdev), KM_SLEEP);
 	linux_pci_dev_init(pdev, NULL, NULL, , NBPCI_KLUDGE_GET_MUMBLE);



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

2024-05-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun May 19 17:36:08 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/include/linux: pci.h
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
linux: Add a few more cases to pci_get_class.

Should fix crash on boot with amdgpu now that the ACPI business is
enabled.


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/external/bsd/drm2/include/linux/pci.h
cvs rdiff -u -r1.27 -r1.28 src/sys/external/bsd/drm2/linux/linux_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/ttm

2024-05-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun May 19 13:50:05 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Undo mistake in previous.

PR xsrc/58133


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm

2024-05-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun May 19 13:50:05 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Undo mistake in previous.

PR xsrc/58133


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm/ttm_bo_vm.c
diff -u src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.23 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.24
--- src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.23	Sun May 19 13:28:28 2024
+++ src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c	Sun May 19 13:50:04 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ttm_bo_vm.c,v 1.23 2024/05/19 13:28:28 riastradh Exp $	*/
+/*	$NetBSD: ttm_bo_vm.c,v 1.24 2024/05/19 13:50:04 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.23 2024/05/19 13:28:28 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.24 2024/05/19 13:50:04 riastradh Exp $");
 
 #include 
 
@@ -44,6 +44,8 @@ __KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,
 
 #include 
 
+static int	ttm_bo_uvm_fault_idle(struct ttm_buffer_object *,
+		struct uvm_faultinfo *);
 static int	ttm_bo_uvm_lookup(struct ttm_bo_device *, unsigned long,
 		unsigned long, struct ttm_buffer_object **);
 



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

2024-05-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun May 19 13:28:28 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Sync ttm_bo_uvm_fault_idle better with Linux.

PR xsrc/58133


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/ttm/ttm_bo_vm.c
diff -u src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.22 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.23
--- src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c:1.22	Thu Jul 21 08:07:56 2022
+++ src/sys/external/bsd/drm2/ttm/ttm_bo_vm.c	Sun May 19 13:28:28 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ttm_bo_vm.c,v 1.22 2022/07/21 08:07:56 riastradh Exp $	*/
+/*	$NetBSD: ttm_bo_vm.c,v 1.23 2024/05/19 13:28:28 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.22 2022/07/21 08:07:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,v 1.23 2024/05/19 13:28:28 riastradh Exp $");
 
 #include 
 
@@ -44,8 +44,6 @@ __KERNEL_RCSID(0, "$NetBSD: ttm_bo_vm.c,
 
 #include 
 
-static int	ttm_bo_uvm_fault_idle(struct ttm_buffer_object *,
-		struct uvm_faultinfo *);
 static int	ttm_bo_uvm_lookup(struct ttm_bo_device *, unsigned long,
 		unsigned long, struct ttm_buffer_object **);
 
@@ -134,10 +132,7 @@ ttm_bo_uvm_fault(struct uvm_faultinfo *u
 	ret = ttm_bo_uvm_fault_idle(bo, ufi);
 	if (ret) {
 		KASSERT(ret == -ERESTART || ret == -EFAULT);
-		/* ttm_bo_uvm_fault_idle calls uvmfault_unlockall for us.  */
-		ttm_bo_unreserve(bo);
-		/* XXX errno Linux->NetBSD */
-		return -ret;
+		goto out1;
 	}
 
 	ret = ttm_mem_io_lock(man, true);
@@ -221,24 +216,49 @@ out0:	uvmfault_unlockall(ufi, ufi->entry
 static int
 ttm_bo_uvm_fault_idle(struct ttm_buffer_object *bo, struct uvm_faultinfo *ufi)
 {
-	int ret = 0;
+	int err, ret = 0;
 
 	if (__predict_true(!bo->moving))
-		goto out0;
+		goto out_unlock;
 
+	/*
+	 * Quick non-stalling check for idle.
+	 */
 	if (dma_fence_is_signaled(bo->moving))
-		goto out1;
+		goto out_clear;
 
-	if (dma_fence_wait(bo->moving, true) != 0) {
-		ret = -EFAULT;
-		goto out2;
+	/*
+	 * If possible, avoid waiting for GPU with mmap_sem
+	 * held.
+	 * XXX Need to integrate this properly into caller's
+	 * error branches so it doesn't uvmfault_unlockall twice.
+	 */
+	if (0) {
+		ret = -ERESTART;
+
+		ttm_bo_get(bo);
+		uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, NULL);
+		(void) dma_fence_wait(bo->moving, true);
+		dma_resv_unlock(bo->base.resv);
+		ttm_bo_put(bo);
+		goto out_unlock;
+	}
+
+	/*
+	 * Ordinary wait.
+	 */
+	err = dma_fence_wait(bo->moving, true);
+	if (__predict_false(ret != 0)) {
+		ret = (err != -ERESTARTSYS) ? -EFAULT : -ERESTART;
+		goto out_unlock;
 	}
 
-	ret = -ERESTART;
-out2:	uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, NULL);
-out1:	dma_fence_put(bo->moving);
+out_clear:
+	dma_fence_put(bo->moving);
 	bo->moving = NULL;
-out0:	return ret;
+
+out_unlock:
+	return ret;
 }
 
 int



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

2024-05-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun May 19 13:28:28 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/ttm: ttm_bo_vm.c

Log Message:
ttm: Sync ttm_bo_uvm_fault_idle better with Linux.

PR xsrc/58133


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/sys/external/bsd/drm2/ttm/ttm_bo_vm.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/linux

2024-04-28 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Apr 28 15:35:39 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_sync_file.c

Log Message:
linux_sync_file: Fix missing init/fini steps.

Noted by rjs@.

PR kern/58210


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/linux/linux_sync_file.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/linux

2024-04-28 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Apr 28 15:35:39 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/linux: linux_sync_file.c

Log Message:
linux_sync_file: Fix missing init/fini steps.

Noted by rjs@.

PR kern/58210


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/linux/linux_sync_file.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/linux/linux_sync_file.c
diff -u src/sys/external/bsd/drm2/linux/linux_sync_file.c:1.2 src/sys/external/bsd/drm2/linux/linux_sync_file.c:1.3
--- src/sys/external/bsd/drm2/linux/linux_sync_file.c:1.2	Sat Feb 12 15:51:29 2022
+++ src/sys/external/bsd/drm2/linux/linux_sync_file.c	Sun Apr 28 15:35:39 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_sync_file.c,v 1.2 2022/02/12 15:51:29 thorpej Exp $	*/
+/*	$NetBSD: linux_sync_file.c,v 1.3 2024/04/28 15:35:39 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: linux_sync_file.c,v 1.2 2022/02/12 15:51:29 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_sync_file.c,v 1.3 2024/04/28 15:35:39 riastradh Exp $");
 
 #include 
 #include 
@@ -51,15 +51,17 @@ sync_file_create(struct dma_fence *fence
 
 	sf = kmem_zalloc(sizeof(*sf), KM_SLEEP);
 	sf->file = fp;
-	sf->sf_fence = dma_fence_get(fence);
+
 	mutex_init(>sf_lock, MUTEX_DEFAULT, IPL_VM);
 	selinit(>sf_selq);
 	sf->sf_polling = false;
 	sf->sf_signalled = false;
+	sf->sf_fence = dma_fence_get(fence);
 
 	fp->f_type = DTYPE_MISC;
 	fp->f_flag = FREAD | FWRITE;
 	fp->f_ops = _file_ops;
+	fp->f_data = sf;
 
 	return sf;
 }
@@ -73,6 +75,8 @@ sync_file_close(struct file *fp)
 		dma_fence_remove_callback(sf->sf_fence, >sf_fcb);
 	dma_fence_put(sf->sf_fence);
 	sf->sf_fence = NULL;
+	seldestroy(>sf_selq);
+	mutex_destroy(>sf_lock);
 
 	kmem_free(sf, sizeof(*sf));
 



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/drm

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

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

Log Message:
drm(4): Fix st_rdev in stat.

dminor->index already has the 64*type adjustment, as allocated in
drm_minor_alloc.

PR kern/58180


To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 src/sys/external/bsd/drm2/drm/drm_cdevsw.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/drm/drm_cdevsw.c
diff -u src/sys/external/bsd/drm2/drm/drm_cdevsw.c:1.30 src/sys/external/bsd/drm2/drm/drm_cdevsw.c:1.31
--- src/sys/external/bsd/drm2/drm/drm_cdevsw.c:1.30	Wed Jul  6 01:12:45 2022
+++ src/sys/external/bsd/drm2/drm/drm_cdevsw.c	Sun Apr 21 03:02:39 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_cdevsw.c,v 1.30 2022/07/06 01:12:45 riastradh Exp $	*/
+/*	$NetBSD: drm_cdevsw.c,v 1.31 2024/04/21 03:02:39 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_cdevsw.c,v 1.30 2022/07/06 01:12:45 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_cdevsw.c,v 1.31 2024/04/21 03:02:39 riastradh Exp $");
 
 #include 
 #include 
@@ -496,7 +496,7 @@ drm_stat(struct file *fp, struct stat *s
 	struct drm_file *const file = fp->f_data;
 	struct drm_minor *const dminor = file->minor;
 	const dev_t devno = makedev(cdevsw_lookup_major(_cdevsw),
-	64*dminor->type + dminor->index);
+	dminor->index);
 
 	(void)memset(st, 0, sizeof(*st));
 



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

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

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

Log Message:
drm(4): Fix st_rdev in stat.

dminor->index already has the 64*type adjustment, as allocated in
drm_minor_alloc.

PR kern/58180


To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 src/sys/external/bsd/drm2/drm/drm_cdevsw.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/nouveau

2024-04-16 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Apr 16 14:26:53 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/nouveau: nouveau2netbsd

Log Message:
nouveau: Rework nouveau2netbsd hack to get ACPI stuff.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/nouveau/nouveau2netbsd

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/nouveau/nouveau2netbsd
diff -u src/sys/external/bsd/drm2/nouveau/nouveau2netbsd:1.5 src/sys/external/bsd/drm2/nouveau/nouveau2netbsd:1.6
--- src/sys/external/bsd/drm2/nouveau/nouveau2netbsd:1.5	Mon Aug 27 00:46:21 2018
+++ src/sys/external/bsd/drm2/nouveau/nouveau2netbsd	Tue Apr 16 14:26:53 2024
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-#	$NetBSD: nouveau2netbsd,v 1.5 2018/08/27 00:46:21 riastradh Exp $
+#	$NetBSD: nouveau2netbsd,v 1.6 2024/04/16 14:26:53 riastradh Exp $
 #
 # $ /path/to/nouveau2netbsd > /path/to/files.nouveau.new
 #
@@ -32,9 +32,13 @@ filemap="$(mktemp -t ${0##*/})"
 
 cat Kbuild\
 | sed -e 's,^include \(.*\)$,.include "\1",'\
-| sed -e 's,^ifdef \(.*\)$,.if !empty(\1:M[yY][eE][sS]),'		\
+| sed -e 's,^ifdef \(.*\)$,.if !empty(\1:M[yY]),'			\
 | sed -e 's,^endif$,.endif,'		\
-| make -f /dev/stdin -V '$(nouveau-y)' src=.\
+| env	\
+	env CONFIG_ACPI=y		\
+	env CONFIG_X86=y		\
+	env src=.			\
+	make -f /dev/stdin -V '$(nouveau-y)'\
 | tr ' ' '\n'\
 | sed -e 's,^$,,'			\
 | sort -u\



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

2024-04-16 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Apr 16 14:26:53 UTC 2024

Modified Files:
src/sys/external/bsd/drm2/nouveau: nouveau2netbsd

Log Message:
nouveau: Rework nouveau2netbsd hack to get ACPI stuff.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/nouveau/nouveau2netbsd

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/include/linux

2023-12-29 Thread Chuck Silvers
Module Name:src
Committed By:   chs
Date:   Fri Dec 29 22:58:24 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/include/linux: smp.h

Log Message:
drm: put_cpu() should enable preemption, not disable it again


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/include/linux/smp.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/include/linux

2023-12-29 Thread Chuck Silvers
Module Name:src
Committed By:   chs
Date:   Fri Dec 29 22:58:24 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/include/linux: smp.h

Log Message:
drm: put_cpu() should enable preemption, not disable it again


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/include/linux/smp.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/include/linux/smp.h
diff -u src/sys/external/bsd/drm2/include/linux/smp.h:1.4 src/sys/external/bsd/drm2/include/linux/smp.h:1.5
--- src/sys/external/bsd/drm2/include/linux/smp.h:1.4	Sun Dec 19 11:49:12 2021
+++ src/sys/external/bsd/drm2/include/linux/smp.h	Fri Dec 29 22:58:23 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: smp.h,v 1.4 2021/12/19 11:49:12 riastradh Exp $	*/
+/*	$NetBSD: smp.h,v 1.5 2023/12/29 22:58:23 chs Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -50,7 +50,7 @@ static inline void
 put_cpu(void)
 {
 
-	kpreempt_disable();
+	kpreempt_enable();
 }
 
 static inline void



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

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

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_cik.c
amdgpu_device.c amdgpu_si.c amdgpu_vi.c
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_pcie.c
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_ci_dpm.c radeon_cik.c
radeon_evergreen.c radeon_r600.c radeon_rv770.c radeon_si.c
radeon_si_dpm.c
src/sys/external/bsd/drm2/include/linux: pci.h
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
drm: enable almost all PCIe functionality

linux_pci.c revisions 1.24 and 1.25 implemented most of the remaining
missing PCIe backends, but only enabled them for some amdgpu portions.

this enables all code marked with "XXX amdgpu pcie", "XXX radeon pcie",
and "XXX pcie speed".  for most of it, simply removing #ifndefs __NetBSD__
to enable compliation was required, once the new "bus->max_bus_speed"
member was added to struct pci_bus.  add an "always fails" backend for
pci_enable_atomic_ops_to_root() which seems to only be necessary
for virtual GPU functionality (and could be implemented if needed.)

tested on radeon 5450, 7750, R7 240 [radeon], and RX 550 [amdgpu], and
nvidia 750 and 1030 [nouveau].

this still does not quite work on nvidia cards.  there are two problems
that remain:

- the call to set the link speed is skipped because the speed is set
  to the default value of "-1".  nvkm_pcie_set_link() will actually
  determine the right value for this and for some cards, calling this
  function if the current speed is -1 helps set the link speed.  it
  may be that on linux other paths we don't have enabled properly
  would set this (there's one via debugfs, and a jetson specific one,
  though perhaps setting either AC or DC speed values as boot options
  (after hooking up these for netbsd) would currently work.

- worse, cards newer than kepler - geforce 900, 1000, and newer, are
  all lacking the backing support to set pcie link speed.  the GT 1030
  card i have been testing with remains at pcie 1.0.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_cik.c
cvs rdiff -u -r1.19 -r1.20 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_si.c
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_vi.c
cvs rdiff -u -r1.4 -r1.5 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.c
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ci_dpm.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600.c
cvs rdiff -u -r1.7 -r1.8 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cik.c
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_evergreen.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_si.c
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_rv770.c
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_si_dpm.c
cvs rdiff -u -r1.56 -r1.57 src/sys/external/bsd/drm2/include/linux/pci.h
cvs rdiff -u -r1.26 -r1.27 src/sys/external/bsd/drm2/linux/linux_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

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

Modified Files:
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_cik.c
amdgpu_device.c amdgpu_si.c amdgpu_vi.c
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_pcie.c
src/sys/external/bsd/drm2/dist/drm/radeon: radeon_ci_dpm.c radeon_cik.c
radeon_evergreen.c radeon_r600.c radeon_rv770.c radeon_si.c
radeon_si_dpm.c
src/sys/external/bsd/drm2/include/linux: pci.h
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
drm: enable almost all PCIe functionality

linux_pci.c revisions 1.24 and 1.25 implemented most of the remaining
missing PCIe backends, but only enabled them for some amdgpu portions.

this enables all code marked with "XXX amdgpu pcie", "XXX radeon pcie",
and "XXX pcie speed".  for most of it, simply removing #ifndefs __NetBSD__
to enable compliation was required, once the new "bus->max_bus_speed"
member was added to struct pci_bus.  add an "always fails" backend for
pci_enable_atomic_ops_to_root() which seems to only be necessary
for virtual GPU functionality (and could be implemented if needed.)

tested on radeon 5450, 7750, R7 240 [radeon], and RX 550 [amdgpu], and
nvidia 750 and 1030 [nouveau].

this still does not quite work on nvidia cards.  there are two problems
that remain:

- the call to set the link speed is skipped because the speed is set
  to the default value of "-1".  nvkm_pcie_set_link() will actually
  determine the right value for this and for some cards, calling this
  function if the current speed is -1 helps set the link speed.  it
  may be that on linux other paths we don't have enabled properly
  would set this (there's one via debugfs, and a jetson specific one,
  though perhaps setting either AC or DC speed values as boot options
  (after hooking up these for netbsd) would currently work.

- worse, cards newer than kepler - geforce 900, 1000, and newer, are
  all lacking the backing support to set pcie link speed.  the GT 1030
  card i have been testing with remains at pcie 1.0.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_cik.c
cvs rdiff -u -r1.19 -r1.20 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c
cvs rdiff -u -r1.4 -r1.5 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_si.c
cvs rdiff -u -r1.3 -r1.4 \
src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_vi.c
cvs rdiff -u -r1.4 -r1.5 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_pcie.c
cvs rdiff -u -r1.6 -r1.7 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ci_dpm.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600.c
cvs rdiff -u -r1.7 -r1.8 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_cik.c
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_evergreen.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_si.c
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_rv770.c
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_si_dpm.c
cvs rdiff -u -r1.56 -r1.57 src/sys/external/bsd/drm2/include/linux/pci.h
cvs rdiff -u -r1.26 -r1.27 src/sys/external/bsd/drm2/linux/linux_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/amd/amdgpu/amdgpu_cik.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_cik.c:1.6 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_cik.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_cik.c:1.6	Mon Oct 17 03:05:32 2022
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_cik.c	Sat Sep 30 10:46:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_cik.c,v 1.6 2022/10/17 03:05:32 mrg Exp $	*/
+/*	$NetBSD: amdgpu_cik.c,v 1.7 2023/09/30 10:46:45 mrg Exp $	*/
 
 /*
  * Copyright 2012 Advanced Micro Devices, Inc.
@@ -24,7 +24,7 @@
  * Authors: Alex Deucher
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_cik.c,v 1.6 2022/10/17 03:05:32 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_cik.c,v 1.7 2023/09/30 10:46:45 mrg Exp $");
 
 #include 
 #include 
@@ -1733,9 +1733,6 @@ static void cik_program_aspm(struct amdg
 WREG32_PCIE(ixPCIE_LC_LINK_WIDTH_CNTL, data);
 
 			if (!disable_clkreq) {
-#ifdef __NetBSD__		/* XXX amdgpu pcie */
-clk_req_support = false;
-#else
 struct pci_dev *root = adev->pdev->bus->self;
 u32 lnkcap;
 
@@ -1743,7 +1740,6 @@ static void cik_program_aspm(struct amdg
 pcie_capability_read_dword(root, PCI_EXP_LNKCAP, );
 if (lnkcap & PCI_EXP_LNKCAP_CLKPM)
 	clk_req_support = true;
-#endif
 			} else {
 clk_req_support = false;
 			}

Index: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_device.c
diff -u 

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

2023-09-05 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Sep  5 20:15:10 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/drm: drm_module.c
src/sys/external/bsd/drm2/pci: files.drmkms_pci

Log Message:
drm: Fix conditionals around drmkms_pci and agp.

Kernel should build now with all pci drm drivers stripped out but
DRM_LEGACY still enabled.  (Might not be very useful, but it'll
build.  Maybe we should also have DRM_LEGACY_PCI so those drivers can
be modloaded later.)


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/sys/external/bsd/drm2/drm/drm_module.c
cvs rdiff -u -r1.17 -r1.18 src/sys/external/bsd/drm2/pci/files.drmkms_pci

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

2023-09-05 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Sep  5 20:15:10 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/drm: drm_module.c
src/sys/external/bsd/drm2/pci: files.drmkms_pci

Log Message:
drm: Fix conditionals around drmkms_pci and agp.

Kernel should build now with all pci drm drivers stripped out but
DRM_LEGACY still enabled.  (Might not be very useful, but it'll
build.  Maybe we should also have DRM_LEGACY_PCI so those drivers can
be modloaded later.)


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/sys/external/bsd/drm2/drm/drm_module.c
cvs rdiff -u -r1.17 -r1.18 src/sys/external/bsd/drm2/pci/files.drmkms_pci

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/drm/drm_module.c
diff -u src/sys/external/bsd/drm2/drm/drm_module.c:1.31 src/sys/external/bsd/drm2/drm/drm_module.c:1.32
--- src/sys/external/bsd/drm2/drm/drm_module.c:1.31	Tue Jul 19 22:24:47 2022
+++ src/sys/external/bsd/drm2/drm/drm_module.c	Tue Sep  5 20:15:10 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_module.c,v 1.31 2022/07/19 22:24:47 riastradh Exp $	*/
+/*	$NetBSD: drm_module.c,v 1.32 2023/09/05 20:15:10 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_module.c,v 1.31 2022/07/19 22:24:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_module.c,v 1.32 2023/09/05 20:15:10 riastradh Exp $");
 
 #include 
 #include 
@@ -89,6 +89,7 @@ __KERNEL_RCSID(0, "$NetBSD: drm_module.c
  */
 #if defined(__powerpc__) || defined(__i386__) || defined(__x86_64__)
 #include "agp.h"
+#include "drmkms_pci.h"
 #endif
 
 /*
@@ -114,7 +115,7 @@ drm_init(void)
 	drm_core_init_complete = true;
 
 	drm_agp_hooks_init();
-#if NAGP > 0
+#if NDRMKMS_PCI > 0 && NAGP > 0
 	extern int drmkms_agp_guarantee_initialized(void);
 	error = drmkms_agp_guarantee_initialized();
 	if (error) {

Index: src/sys/external/bsd/drm2/pci/files.drmkms_pci
diff -u src/sys/external/bsd/drm2/pci/files.drmkms_pci:1.17 src/sys/external/bsd/drm2/pci/files.drmkms_pci:1.18
--- src/sys/external/bsd/drm2/pci/files.drmkms_pci:1.17	Tue Jul 19 23:19:07 2022
+++ src/sys/external/bsd/drm2/pci/files.drmkms_pci	Tue Sep  5 20:15:10 2023
@@ -1,11 +1,11 @@
-#	$NetBSD: files.drmkms_pci,v 1.17 2022/07/19 23:19:07 riastradh Exp $
+#	$NetBSD: files.drmkms_pci,v 1.18 2023/09/05 20:15:10 riastradh Exp $
 
 define	drmkms_pci: drmkms
 
 makeoptions	drmkms_pci	"CPPFLAGS.drmkms_pci"+="${CPPFLAGS.drmkms}"
 
 #file	external/bsd/drm2/dist/drm/ati_pcigart.c	drmkms_pci
-file	external/bsd/drm2/dist/drm/drm_agpsupport.c	drmkms_pci & agp
+file	external/bsd/drm2/dist/drm/drm_agpsupport.c	drmkms_pci & agp	needs-flag
 file	external/bsd/drm2/pci/drm_pci.c			drmkms_pci
 file	external/bsd/drm2/pci/drm_pci_module.c		drmkms_pci
 



CVS commit: src/sys/external/bsd/drm2/i915drm

2023-09-05 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Sep  5 06:08:02 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/i915drm: files.i915drmkms

Log Message:
match warnings with the module build, fixes i386 with GCC 12.


To generate a diff of this commit:
cvs rdiff -u -r1.90 -r1.91 src/sys/external/bsd/drm2/i915drm/files.i915drmkms

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/i915drm

2023-09-05 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Sep  5 06:08:02 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/i915drm: files.i915drmkms

Log Message:
match warnings with the module build, fixes i386 with GCC 12.


To generate a diff of this commit:
cvs rdiff -u -r1.90 -r1.91 src/sys/external/bsd/drm2/i915drm/files.i915drmkms

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/i915drm/files.i915drmkms
diff -u src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.90 src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.91
--- src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.90	Sat Jun  3 21:31:46 2023
+++ src/sys/external/bsd/drm2/i915drm/files.i915drmkms	Tue Sep  5 06:08:02 2023
@@ -1,4 +1,4 @@
-#	$NetBSD: files.i915drmkms,v 1.90 2023/06/03 21:31:46 lukem Exp $
+#	$NetBSD: files.i915drmkms,v 1.91 2023/09/05 06:08:02 mrg Exp $
 
 version	20180827
 
@@ -44,17 +44,19 @@ makeoptions	i915drmkms	"CWARNFLAGS.i915d
 makeoptions	i915drmkms	"CWARNFLAGS.i915drmkms"+="-Wno-pointer-arith"
 makeoptions	i915drmkms	"CWARNFLAGS.i915drmkms"+="-Wno-shadow"
 
+makeoptions 	i915drmkms 	"CWARNFLAGS.i915_irq.c"+="${CC_WNO_MAYBE_UNINITIALIZED}"
 makeoptions 	i915drmkms 	"CWARNFLAGS.i915_pci.c"+="${${ACTIVE_CC} == gcc:? -Wno-override-init :}"
 makeoptions 	i915drmkms 	"CWARNFLAGS.i915_pci.c"+="${${ACTIVE_CC} == clang:? -Wno-initializer-overrides :}"
 makeoptions	i915drmkms	"CWARNFLAGS.i915_sw_fence.c"+="${${ACTIVE_CC} == clang :? -Wno-unused-function :}"
 
-makeoptions 	i915drmkms 	"CWARNFLAGS.intel_sprite.c"+="${CC_WNO_MAYBE_UNINITIALIZED}"
-
-makeoptions 	i915drmkms 	"CWARNFLAGS.intel_ddi.c"+="${CC_WNO_MAYBE_UNINITIALIZED} ${CC_WNO_IMPLICIT_FALLTHROUGH}"
-makeoptions 	i915drmkms 	"CWARNFLAGS.intel_display.c"+="${CC_WNO_IMPLICIT_FALLTHROUGH}"
 makeoptions	i915drmkms	"CWARNFLAGS.intel_guc_submission.c"+="${${ACTIVE_CC} == clang :? -Wno-unused-function :}"
 makeoptions	i915drmkms	"CWARNFLAGS.intel_hdmi.c"+="${${ACTIVE_CC} == clang :? -Wno-unused-function :}"
+makeoptions 	i915drmkms 	"CWARNFLAGS.intel_ddi.c"+="${CC_WNO_MAYBE_UNINITIALIZED} ${CC_WNO_IMPLICIT_FALLTHROUGH}"
+makeoptions 	i915drmkms 	"CWARNFLAGS.intel_display.c"+="${CC_WNO_IMPLICIT_FALLTHROUGH}"
+makeoptions 	i915drmkms 	"CWARNFLAGS.intel_dp.c"+="${CC_WNO_STRINGOP_OVERREAD}"
+makeoptions 	i915drmkms 	"CWARNFLAGS.intel_pm.c"+="${CC_WNO_STRINGOP_OVERREAD} ${CC_WNO_STRINGOP_OVERFLOW}"
 makeoptions 	i915drmkms 	"CWARNFLAGS.intel_sdvo.c"+="${CC_WNO_IMPLICIT_FALLTHROUGH}"
+makeoptions 	i915drmkms 	"CWARNFLAGS.intel_sprite.c"+="${CC_WNO_MAYBE_UNINITIALIZED}"
 
 makeoptions	intelfb		"CPPFLAGS.intelfb"+="${CPPFLAGS.i915drmkms}"
 makeoptions	intelfb		"CWARNFLAGS.intelfb"+="${CWARNFLAGS.i915drmkms}"



CVS commit: src/sys/external/bsd/drm2/linux

2023-09-04 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Mon Sep  4 21:31:58 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
convert a KASSERT() into an if () panic() sequence to appease GCC 12.

OK riastradh@.


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/external/bsd/drm2/linux/linux_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/linux

2023-09-04 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Mon Sep  4 21:31:58 UTC 2023

Modified Files:
src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
convert a KASSERT() into an if () panic() sequence to appease GCC 12.

OK riastradh@.


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/external/bsd/drm2/linux/linux_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/linux/linux_pci.c
diff -u src/sys/external/bsd/drm2/linux/linux_pci.c:1.25 src/sys/external/bsd/drm2/linux/linux_pci.c:1.26
--- src/sys/external/bsd/drm2/linux/linux_pci.c:1.25	Mon Oct 17 03:05:32 2022
+++ src/sys/external/bsd/drm2/linux/linux_pci.c	Mon Sep  4 21:31:58 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_pci.c,v 1.25 2022/10/17 03:05:32 mrg Exp $	*/
+/*	$NetBSD: linux_pci.c,v 1.26 2023/09/04 21:31:58 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #endif
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.25 2022/10/17 03:05:32 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.26 2023/09/04 21:31:58 mrg Exp $");
 
 #if NACPICA > 0
 #include 
@@ -790,7 +790,8 @@ bus_addr_t
 pci_resource_start(struct pci_dev *pdev, unsigned i)
 {
 
-	KASSERT(i < PCI_NUM_RESOURCES);
+	if (i >= PCI_NUM_RESOURCES)
+		panic("resource %d >= max %d", i, PCI_NUM_RESOURCES);
 	return pdev->pd_resources[i].addr;
 }
 
@@ -798,7 +799,8 @@ bus_size_t
 pci_resource_len(struct pci_dev *pdev, unsigned i)
 {
 
-	KASSERT(i < PCI_NUM_RESOURCES);
+	if (i >= PCI_NUM_RESOURCES)
+		panic("resource %d >= max %d", i, PCI_NUM_RESOURCES);
 	return pdev->pd_resources[i].size;
 }
 
@@ -813,7 +815,8 @@ int
 pci_resource_flags(struct pci_dev *pdev, unsigned i)
 {
 
-	KASSERT(i < PCI_NUM_RESOURCES);
+	if (i >= PCI_NUM_RESOURCES)
+		panic("resource %d >= max %d", i, PCI_NUM_RESOURCES);
 	return pdev->pd_resources[i].flags;
 }
 



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/drm

2023-08-14 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Tue Aug 15 04:57:36 UTC 2023

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

Log Message:
avoid uninitialised variable usage in drm_gem_cma_create_internal().

in the case nothing has returned 'error', 'nsegs' and the dma info
are (potentially) uninitialised, so consider this an error.

found by GCC 12.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c

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

Modified files:

Index: src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c
diff -u src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c:1.14 src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c:1.15
--- src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c:1.14	Sat Jul  2 00:26:07 2022
+++ src/sys/external/bsd/drm2/drm/drm_gem_cma_helper.c	Tue Aug 15 04:57:36 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_gem_cma_helper.c,v 1.14 2022/07/02 00:26:07 riastradh Exp $ */
+/* $NetBSD: drm_gem_cma_helper.c,v 1.15 2023/08/15 04:57:36 mrg Exp $ */
 
 /*-
  * Copyright (c) 2015-2017 Jared McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: drm_gem_cma_helper.c,v 1.14 2022/07/02 00:26:07 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_gem_cma_helper.c,v 1.15 2023/08/15 04:57:36 mrg Exp $");
 
 #include 
 
@@ -44,7 +44,7 @@ drm_gem_cma_create_internal(struct drm_d
 struct sg_table *sgt)
 {
 	struct drm_gem_cma_object *obj;
-	int error, nsegs;
+	int error = EINVAL, nsegs;
 
 	obj = kmem_zalloc(sizeof(*obj), KM_SLEEP);
 	obj->dmat = ddev->dmat;



  1   2   3   4   5   6   7   8   9   10   >