CVS commit: [netbsd-9] src/sys/external/bsd/drm2/dist/drm/i915

2021-06-21 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Mon Jun 21 16:41:02 UTC 2021

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-9]: i915_drv.h

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #1300):

sys/external/bsd/drm2/dist/drm/i915/i915_drv.h: revision 1.33 (patch)

i915drmkms: Fix LOCKDEBUG panic and potential deadlock.

This path is taken with a spin lock held, and possibly even in
interrupt context, where taking vmobjlock is not kosher, but we are
guaranteed to have the queue populated and unchanging.

XXX pullup-9


To generate a diff of this commit:
cvs rdiff -u -r1.29.2.1 -r1.29.2.2 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h

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

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.29.2.1 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.29.2.2
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.29.2.1	Thu Dec 12 21:00:32 2019
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h	Mon Jun 21 16:41:02 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_drv.h,v 1.29.2.1 2019/12/12 21:00:32 martin Exp $	*/
+/*	$NetBSD: i915_drv.h,v 1.29.2.2 2021/06/21 16:41:02 martin Exp $	*/
 
 /* i915_drv.h -- Private header for the I915 driver -*- linux-c -*-
  */
@@ -3021,9 +3021,10 @@ i915_gem_object_get_page(struct drm_i915
 		 * lock to prevent them from disappearing.
 		 */
 		KASSERT(obj->pages != NULL);
-		mutex_enter(obj->base.filp->vmobjlock);
-		page = uvm_pagelookup(obj->base.filp, ptoa(n));
-		mutex_exit(obj->base.filp->vmobjlock);
+		TAILQ_FOREACH(page, >pageq, pageq.queue) {
+			if (n-- == 0)
+break;
+		}
 	}
 	KASSERT(page != NULL);
 	return container_of(page, struct page, p_vmp);



CVS commit: [netbsd-9] src/sys/external/bsd/drm2/dist/drm/i915

2020-11-29 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Sun Nov 29 11:34:04 UTC 2020

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-9]: intel_sprite.c

Log Message:
Pull up following revision(s) (requested by maya in ticket #1136):

sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c: revision 1.11

Match linux here and wait without interrupts.

>From David H. Gutteridge in PR port-amd64/5
There's a second part to the patch, but "make our code behave the way
the upstream code does" is very welcome.

Also PR kern/54515 and possibly others.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.9.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.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/intel_sprite.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c:1.9 src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c:1.9.4.1
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c:1.9	Mon Aug 27 15:09:35 2018
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_sprite.c	Sun Nov 29 11:34:04 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_sprite.c,v 1.9 2018/08/27 15:09:35 riastradh Exp $	*/
+/*	$NetBSD: intel_sprite.c,v 1.9.4.1 2020/11/29 11:34:04 martin Exp $	*/
 
 /*
  * Copyright © 2011 Intel Corporation
@@ -32,7 +32,7 @@
  * support.
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: intel_sprite.c,v 1.9 2018/08/27 15:09:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_sprite.c,v 1.9.4.1 2020/11/29 11:34:04 martin Exp $");
 
 #include 
 #include 
@@ -124,7 +124,7 @@ void intel_pipe_update_start(struct inte
 	trace_i915_pipe_update_start(crtc);
 
 #ifdef __NetBSD__
-	DRM_SPIN_TIMED_WAIT_UNTIL(ret, wq, >vbl_lock, timeout,
+	DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, wq, >vbl_lock, timeout,
 	(scanline = intel_get_crtc_scanline(crtc),
 		scanline < min || scanline > max));
 	if (ret <= 0)



CVS commit: [netbsd-9] src/sys/external/bsd/drm2/dist/drm/radeon

2020-02-27 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Thu Feb 27 18:57:21 UTC 2020

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon [netbsd-9]: radeon_irq_kms.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #740):

sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c: revision 1.5

Take a mutex around mode config logic as the comment advises.
XXX pullup


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.4.4.1 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.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_irq_kms.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c:1.4 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c:1.4.4.1
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c:1.4	Mon Aug 27 07:03:26 2018
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c	Thu Feb 27 18:57:20 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_irq_kms.c,v 1.4 2018/08/27 07:03:26 riastradh Exp $	*/
+/*	$NetBSD: radeon_irq_kms.c,v 1.4.4.1 2020/02/27 18:57:20 martin Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -28,7 +28,7 @@
  *  Jerome Glisse
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: radeon_irq_kms.c,v 1.4 2018/08/27 07:03:26 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_irq_kms.c,v 1.4.4.1 2020/02/27 18:57:20 martin Exp $");
 
 #include 
 #include 
@@ -107,11 +107,12 @@ static void radeon_dp_work_func(struct w
 	struct drm_mode_config *mode_config = >mode_config;
 	struct drm_connector *connector;
 
-	/* this should take a mutex */
+	mutex_lock(_config->mutex);
 	if (mode_config->num_connector) {
 		list_for_each_entry(connector, _config->connector_list, head)
 			radeon_connector_hotplug(connector);
 	}
+	mutex_unlock(_config->mutex);
 }
 /**
  * radeon_driver_irq_preinstall_kms - drm irq preinstall callback



CVS commit: [netbsd-9] src/sys/external/bsd/drm2/dist/drm

2020-01-31 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Fri Jan 31 11:28:38 UTC 2020

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-9]: i915_gem_stolen.c
i915_reg.h
src/sys/external/bsd/drm2/dist/drm/radeon [netbsd-9]:
radeon_atombios_dp.c

Log Message:
Pull up following revision(s) (requested by msaitoh in ticket #678):

sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c: revision 1.12
sys/external/bsd/drm2/dist/drm/radeon/radeon_atombios_dp.c: revision 1.2
sys/external/bsd/drm2/dist/drm/i915/i915_reg.h: revision 1.9
sys/external/bsd/drm2/dist/drm/i915/i915_reg.h: revision 1.12

 Use unsigned to avoid undefined behavior in gen7_get_stolen_reserved().
Found by kUBSan.

 Use unsigned to avoid undefined behavior in g4x_update_wm().

 Avoid undefined behavior in g4x_get_stolen_reserved().

The change is the same as newer i915_gem_stolen.c.

 Don't call memcpy() when the length is 0 (and the source pointer is NULL)
in radeon_dp_aux_transfer_atom() to avoid undefined behavior. Found by kUBSan.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.11.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c
cvs rdiff -u -r1.7.2.2 -r1.7.2.3 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h
cvs rdiff -u -r1.1 -r1.1.8.1 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_atombios_dp.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_gem_stolen.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c:1.11 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c:1.11.4.1
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c:1.11	Thu Sep 13 08:25:55 2018
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c	Fri Jan 31 11:28:38 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_stolen.c,v 1.11 2018/09/13 08:25:55 mrg Exp $	*/
+/*	$NetBSD: i915_gem_stolen.c,v 1.11.4.1 2020/01/31 11:28:38 martin Exp $	*/
 
 /*
  * Copyright © 2008-2012 Intel Corporation
@@ -29,7 +29,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_stolen.c,v 1.11 2018/09/13 08:25:55 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_stolen.c,v 1.11.4.1 2020/01/31 11:28:38 martin Exp $");
 
 #include 
 #include 
@@ -308,18 +308,13 @@ static void g4x_get_stolen_reserved(stru
 	unsigned long stolen_top = dev_priv->mm.stolen_base +
 		dev_priv->gtt.stolen_size;
 
-	*base = (reg_val & G4X_STOLEN_RESERVED_ADDR2_MASK) << 16;
+	if (!(reg_val & G4X_STOLEN_RESERVED_ADDR2_MASK))
+		return;
 
+	*base = (reg_val & G4X_STOLEN_RESERVED_ADDR2_MASK) << 16;
 	WARN_ON((reg_val & G4X_STOLEN_RESERVED_ADDR1_MASK) < *base);
 
-	/* On these platforms, the register doesn't have a size field, so the
-	 * size is the distance between the base and the top of the stolen
-	 * memory. We also have the genuine case where base is zero and there's
-	 * nothing reserved. */
-	if (*base == 0)
-		*size = 0;
-	else
-		*size = stolen_top - *base;
+	*size = stolen_top - *base;
 }
 
 static void gen6_get_stolen_reserved(struct drm_i915_private *dev_priv,

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h:1.7.2.2 src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h:1.7.2.3
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h:1.7.2.2	Fri Jan 31 11:25:09 2020
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h	Fri Jan 31 11:28:38 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_reg.h,v 1.7.2.2 2020/01/31 11:25:09 martin Exp $	*/
+/*	$NetBSD: i915_reg.h,v 1.7.2.3 2020/01/31 11:28:38 martin Exp $	*/
 
 /* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
  * All Rights Reserved.
@@ -187,7 +187,7 @@
 
 #define GEN6_STOLEN_RESERVED		0x1082C0
 #define GEN6_STOLEN_RESERVED_ADDR_MASK	(0xFFFUL << 20)
-#define GEN7_STOLEN_RESERVED_ADDR_MASK	(0x3FFF << 18)
+#define GEN7_STOLEN_RESERVED_ADDR_MASK	(0x3FFFUL << 18)
 #define GEN6_STOLEN_RESERVED_SIZE_MASK	(3 << 4)
 #define GEN6_STOLEN_RESERVED_1M		(0 << 4)
 #define GEN6_STOLEN_RESERVED_512K	(1 << 4)
@@ -4616,7 +4616,7 @@ enum skl_disp_power_wells {
 #define   DSPFW_SPRITEA_MASK		(0x7f<<0) /* g4x */
 #define   DSPFW_SPRITEA_MASK_VLV	(0xff<<0) /* vlv/chv */
 #define DSPFW3			(dev_priv->info.display_mmio_offset + 0x7003c)
-#define   DSPFW_HPLL_SR_EN		(1<<31)
+#define   DSPFW_HPLL_SR_EN		(1U<<31)
 #define   PINEVIEW_SELF_REFRESH_EN	(1<<30)
 #define   DSPFW_CURSOR_SR_SHIFT		24
 #define   DSPFW_CURSOR_SR_MASK		(0x3f<<24)

Index: src/sys/external/bsd/drm2/dist/drm/radeon/radeon_atombios_dp.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_atombios_dp.c:1.1 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_atombios_dp.c:1.1.8.1
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_atombios_dp.c:1.1	Mon Aug 27 14:38:20 2018
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_atombios_dp.c	Fri Jan 31 11:28:38 

CVS commit: [netbsd-9] src/sys/external/bsd/drm2/dist

2020-01-31 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Fri Jan 31 11:25:09 UTC 2020

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-9]: i915_reg.h
intel_pm.c
src/sys/external/bsd/drm2/dist/drm/radeon [netbsd-9]: cikd.h
evergreend.h nid.h r600d.h radeon_mode.h radeon_r600.c radeon_reg.h
radeon_rv770_smc.c radeon_si_smc.c radeon_uvd_v1_0.c
radeon_uvd_v2_2.c radeon_uvd_v4_2.c rv730d.h rv770d.h sid.h sumod.h
src/sys/external/bsd/drm2/dist/include/drm [netbsd-9]: drm_fixed.h

Log Message:
Pull up following revision(s) (requested by msaitoh in ticket #677):

sys/external/bsd/drm2/dist/drm/radeon/radeon_uvd_v2_2.c: revision 1.2
sys/external/bsd/drm2/dist/drm/i915/intel_pm.c: revision 1.18
sys/external/bsd/drm2/dist/drm/radeon/nid.h: revision 1.3
sys/external/bsd/drm2/dist/drm/i915/intel_pm.c: revision 1.19
sys/external/bsd/drm2/dist/drm/radeon/rv770d.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/cikd.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/radeon_uvd_v4_2.c: revision 1.2
sys/external/bsd/drm2/dist/include/drm/drm_fixed.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/sumod.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/radeon_reg.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/radeon_mode.h: revision 1.5
sys/external/bsd/drm2/dist/drm/radeon/r600d.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/r600d.h: revision 1.4
sys/external/bsd/drm2/dist/drm/radeon/radeon_uvd_v1_0.c: revision 1.2
sys/external/bsd/drm2/dist/drm/radeon/radeon_uvd_v1_0.c: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/radeon_r600.c: revision 1.2
sys/external/bsd/drm2/dist/drm/radeon/evergreend.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/evergreend.h: revision 1.4
sys/external/bsd/drm2/dist/drm/i915/i915_reg.h: revision 1.10
sys/external/bsd/drm2/dist/drm/i915/i915_reg.h: revision 1.8
sys/external/bsd/drm2/dist/drm/i915/i915_reg.h: revision 1.11
sys/external/bsd/drm2/dist/drm/i915/i915_reg.h: revision 1.13
sys/external/bsd/drm2/dist/drm/radeon/rv730d.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/radeon_rv770_smc.c: revision 1.2
sys/external/bsd/drm2/dist/drm/radeon/sid.h: revision 1.3
sys/external/bsd/drm2/dist/drm/radeon/radeon_si_smc.c: revision 1.2
sys/external/bsd/drm2/dist/drm/radeon/sid.h: revision 1.4

Use unsigned to avoid undefined behavior. Found by kUBSan.


To generate a diff of this commit:
cvs rdiff -u -r1.7.2.1 -r1.7.2.2 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h
cvs rdiff -u -r1.17.2.1 -r1.17.2.2 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c
cvs rdiff -u -r1.2 -r1.2.4.1 src/sys/external/bsd/drm2/dist/drm/radeon/cikd.h \
src/sys/external/bsd/drm2/dist/drm/radeon/evergreend.h \
src/sys/external/bsd/drm2/dist/drm/radeon/nid.h \
src/sys/external/bsd/drm2/dist/drm/radeon/r600d.h \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_reg.h \
src/sys/external/bsd/drm2/dist/drm/radeon/rv730d.h \
src/sys/external/bsd/drm2/dist/drm/radeon/rv770d.h \
src/sys/external/bsd/drm2/dist/drm/radeon/sid.h \
src/sys/external/bsd/drm2/dist/drm/radeon/sumod.h
cvs rdiff -u -r1.4 -r1.4.4.1 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_mode.h
cvs rdiff -u -r1.1 -r1.1.8.1 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_r600.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_rv770_smc.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_si_smc.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_uvd_v1_0.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_uvd_v2_2.c \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_uvd_v4_2.c
cvs rdiff -u -r1.2 -r1.2.4.1 \
src/sys/external/bsd/drm2/dist/include/drm/drm_fixed.h

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

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h:1.7.2.1 src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h:1.7.2.2
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h:1.7.2.1	Thu Dec 12 21:00:32 2019
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_reg.h	Fri Jan 31 11:25:09 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_reg.h,v 1.7.2.1 2019/12/12 21:00:32 martin Exp $	*/
+/*	$NetBSD: i915_reg.h,v 1.7.2.2 2020/01/31 11:25:09 martin Exp $	*/
 
 /* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
  * All Rights Reserved.
@@ -1652,7 +1652,7 @@ enum skl_disp_power_wells {
 
 #define ERROR_GEN6	0x040a0
 #define GEN7_ERR_INT	0x44040
-#define   ERR_INT_POISON		(1<<31)
+#define   ERR_INT_POISON		(1U<<31)
 #define   ERR_INT_MMIO_UNCLAIMED	(1<<13)
 #define   ERR_INT_PIPE_CRC_DONE_C	(1<<8)
 

CVS commit: [netbsd-9] src/sys/external/bsd/drm2/dist/drm/radeon

2020-01-21 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Tue Jan 21 15:35:39 UTC 2020

Modified Files:
src/sys/external/bsd/drm2/dist/drm/radeon [netbsd-9]: radeon_vce.c

Log Message:
Pull up following revision(s) (requested by jmcneill in ticket #634):

sys/external/bsd/drm2/dist/drm/radeon/radeon_vce.c: revision 1.4

Fix loading TAHITI VCE firmware.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.3.4.1 \
src/sys/external/bsd/drm2/dist/drm/radeon/radeon_vce.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_vce.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_vce.c:1.3 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_vce.c:1.3.4.1
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_vce.c:1.3	Mon Aug 27 04:58:36 2018
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_vce.c	Tue Jan 21 15:35:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_vce.c,v 1.3 2018/08/27 04:58:36 riastradh Exp $	*/
+/*	$NetBSD: radeon_vce.c,v 1.3.4.1 2020/01/21 15:35:39 martin Exp $	*/
 
 /*
  * Copyright 2013 Advanced Micro Devices, Inc.
@@ -28,7 +28,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: radeon_vce.c,v 1.3 2018/08/27 04:58:36 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_vce.c,v 1.3.4.1 2020/01/21 15:35:39 martin Exp $");
 
 #include 
 #include 
@@ -53,34 +53,38 @@ static void radeon_vce_idle_work_handler
 
 #ifdef __NetBSD__		/* XXX Ugh!  */
 static bool
-scan_2dec_u8(const char **sp, char delim, uint8_t *u8p)
+scan_2dec_uint(const char **sp, char delim, unsigned int *uintp)
 {
-	char c0, c1;
+	u_int val = 0, n;
+	char c;
 
-	if (!isdigit((unsigned char)(c0 = *(*sp)++)))
-		return false;
-	if (!isdigit((unsigned char)(c1 = *(*sp)++)))
-		return false;
-	if (*(*sp)++ != delim)
+	for (n = 0; n < 2; n++) {
+		c = *(*sp)++;
+		if (!isdigit((unsigned char)c))
+			return false;
+		if (n != 0)
+			val *= 10;
+		val += (c - '0');
+		if (*(*sp) == delim)
+			break;
+	}
+	if (*(*sp) != delim)
 		return false;
 
-	*u8p = ((c0 - '0') * 10) + (c1 - '0');
+	(*sp)++;
+	*uintp = val;
 	return true;
 }
 
 static bool
-scan_2dec_uint(const char **sp, char delim, unsigned int *uintp)
+scan_2dec_u8(const char **sp, char delim, uint8_t *u8p)
 {
-	char c0, c1;
+	unsigned int val;
 
-	if (!isdigit((unsigned char)(c0 = *(*sp)++)))
-		return false;
-	if (!isdigit((unsigned char)(c1 = *(*sp)++)))
-		return false;
-	if (*(*sp)++ != delim)
+	if (!scan_2dec_uint(sp, delim, ))
 		return false;
 
-	*uintp = ((c0 - '0') * 10) + (c1 - '0');
+	*u8p = (uint8_t)val;
 	return true;
 }
 #endif