Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 11:49:12 UTC 2021

Modified Files:
        src/sys/external/bsd/common/include/linux: rcupdate.h srcu.h tasklet.h
        src/sys/external/bsd/common/linux: linux_rcu.c linux_srcu.c
            linux_tasklet.c
        src/sys/external/bsd/drm2/dist/drm/i915: i915_globals.c i915_perf.c
            i915_utils.h intel_runtime_pm.c intel_uncore.c intel_uncore.h
            intel_wakeref.c intel_wakeref.h intel_wopcm.c
        src/sys/external/bsd/drm2/dist/drm/i915/display: intel_hdcp.c
            intel_opregion.c intel_opregion.h intel_psr.c intel_sdvo.c
            intel_sprite.c intel_tc.c intel_tv.c intel_vga.c
        src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_lrc.c intel_ppgtt.c
            intel_rc6.c intel_reset.c intel_reset_types.h
            intel_ring_submission.c intel_rps.c intel_sseu.c intel_timeline.c
            intel_workarounds.c
        src/sys/external/bsd/drm2/dist/drm/i915/gt/uc: intel_uc_fw.c
        src/sys/external/bsd/drm2/drm: drm_module.c
        src/sys/external/bsd/drm2/i915drm: files.i915drmkms i915_module.c
            intelfb.c
        src/sys/external/bsd/drm2/include: i915_trace.h
        src/sys/external/bsd/drm2/include/asm: iosf_mbi.h
        src/sys/external/bsd/drm2/include/drm: drm_mipi_dsi.h
            i915_mei_hdcp_interface.h
        src/sys/external/bsd/drm2/include/linux: device.h i2c.h init.h
            lockdep.h perf_event.h pm_runtime.h random.h rculist.h sched.h
            sizes.h smp.h timer.h
        src/sys/external/bsd/drm2/include/linux/sched: signal.h
        src/sys/external/bsd/drm2/linux: linux_i2c.c
Added Files:
        src/sys/external/bsd/drm2/i915drm: intel_dsi_dcs_backlight.c
            intel_guc_log.c intel_lpe_audio.c intel_region_lmem.c

Log Message:
Make intel_psr.c build
netbsd-ify
Stub out intel_lpe_audio.c (for now?).
Hammer intel_opregion.c into shape.
Hack up intel_lrc.c
Adapt intel_reset.c
Stub out intel_region_lmem.c
Adapt intel_ring_submission.c
Adapt intel_rps.c
Adapt intel_sdvo.c
Adapt intel_runtime_pm.c
Adapt intel_sideband.c
Adapt intel_sprite.c
Adapt intel_tv.c
Adapt intel_tc.c
Adapt intel_sseu.c
Adapt intel_timeline.c
Adapt intel_uc_fw.c and fix typo
Fix up intel_uncore.c
intel_vga.c
intel_wakeref.c
intel_vdsc.c
intel_wopcm.c
intel_workarounds.c
i915_globals.c
Fix up intelfb.c
Stub out intel_guc_log.c
Stub out intel_dsi_dcs_backlight.c
i915_perf.c
intel_hdmi.c
intel_hdcp.c

Author: Maya Rashish <m...@netbsd.org>
Committer: Taylor R Campbell <riastr...@netbsd.org>


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/common/include/linux/rcupdate.h
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/common/include/linux/srcu.h
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/common/include/linux/tasklet.h
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/common/linux/linux_rcu.c \
    src/sys/external/bsd/common/linux/linux_srcu.c
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/common/linux/linux_tasklet.c
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h
cvs rdiff -u -r1.10 -r1.11 \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c
cvs rdiff -u -r1.16 -r1.17 \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c
cvs rdiff -u -r1.7 -r1.8 \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h
cvs rdiff -u -r1.4 -r1.5 \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c \
    src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c
cvs rdiff -u -r1.6 -r1.7 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset_types.h \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rps.c
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/uc/intel_uc_fw.c
cvs rdiff -u -r1.26 -r1.27 src/sys/external/bsd/drm2/drm/drm_module.c
cvs rdiff -u -r1.78 -r1.79 src/sys/external/bsd/drm2/i915drm/files.i915drmkms
cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/drm2/i915drm/i915_module.c
cvs rdiff -u -r0 -r1.1 \
    src/sys/external/bsd/drm2/i915drm/intel_dsi_dcs_backlight.c \
    src/sys/external/bsd/drm2/i915drm/intel_guc_log.c \
    src/sys/external/bsd/drm2/i915drm/intel_lpe_audio.c \
    src/sys/external/bsd/drm2/i915drm/intel_region_lmem.c
cvs rdiff -u -r1.21 -r1.22 src/sys/external/bsd/drm2/i915drm/intelfb.c
cvs rdiff -u -r1.21 -r1.22 src/sys/external/bsd/drm2/include/i915_trace.h
cvs rdiff -u -r1.1 -r1.2 src/sys/external/bsd/drm2/include/asm/iosf_mbi.h
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/include/drm/drm_mipi_dsi.h
cvs rdiff -u -r1.1 -r1.2 \
    src/sys/external/bsd/drm2/include/drm/i915_mei_hdcp_interface.h
cvs rdiff -u -r1.13 -r1.14 src/sys/external/bsd/drm2/include/linux/device.h \
    src/sys/external/bsd/drm2/include/linux/i2c.h
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/include/linux/init.h \
    src/sys/external/bsd/drm2/include/linux/random.h \
    src/sys/external/bsd/drm2/include/linux/sizes.h \
    src/sys/external/bsd/drm2/include/linux/smp.h
cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/include/linux/lockdep.h
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/include/linux/perf_event.h
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/include/linux/pm_runtime.h
cvs rdiff -u -r1.1 -r1.2 src/sys/external/bsd/drm2/include/linux/rculist.h
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/drm2/include/linux/sched.h
cvs rdiff -u -r1.12 -r1.13 src/sys/external/bsd/drm2/include/linux/timer.h
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/include/linux/sched/signal.h
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/linux/linux_i2c.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/common/include/linux/rcupdate.h
diff -u src/sys/external/bsd/common/include/linux/rcupdate.h:1.7 src/sys/external/bsd/common/include/linux/rcupdate.h:1.8
--- src/sys/external/bsd/common/include/linux/rcupdate.h:1.7	Sun Dec 19 11:35:17 2021
+++ src/sys/external/bsd/common/include/linux/rcupdate.h	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: rcupdate.h,v 1.7 2021/12/19 11:35:17 riastradh Exp $	*/
+/*	$NetBSD: rcupdate.h,v 1.8 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -81,6 +81,7 @@ struct rcu_head {
 #define	get_state_synchronize_rcu linux_get_state_synchronize_rcu
 #define	rcu_barrier		linux_rcu_barrier
 #define	synchronize_rcu		linux_synchronize_rcu
+#define	synchronize_rcu_expedited linux_synchronize_rcu_expedited
 
 int	linux_rcu_gc_init(void);
 void	linux_rcu_gc_fini(void);
@@ -91,6 +92,7 @@ void	destroy_rcu_head(struct rcu_head *)
 void	call_rcu(struct rcu_head *, void (*)(struct rcu_head *));
 void	rcu_barrier(void);
 void	synchronize_rcu(void);
+void	synchronize_rcu_expedited(void);
 
 unsigned long get_state_synchronize_rcu(void);
 void	cond_synchronize_rcu(unsigned long);

Index: src/sys/external/bsd/common/include/linux/srcu.h
diff -u src/sys/external/bsd/common/include/linux/srcu.h:1.3 src/sys/external/bsd/common/include/linux/srcu.h:1.4
--- src/sys/external/bsd/common/include/linux/srcu.h:1.3	Sun Dec 19 11:10:09 2021
+++ src/sys/external/bsd/common/include/linux/srcu.h	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: srcu.h,v 1.3 2021/12/19 11:10:09 riastradh Exp $	*/
+/*	$NetBSD: srcu.h,v 1.4 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -37,11 +37,12 @@
 #include <sys/mutex.h>
 
 /* namespace */
-#define	srcu_fini		linux_srcu_fini
-#define	srcu_init		linux_srcu_init
+#define	_init_srcu_struct	linux__init_init_srcu_struct
+#define	cleanup_srcu_struct	linux_cleanup_srcu_struct
 #define	srcu_read_lock		linux_srcu_read_lock
 #define	srcu_read_unlock	linux_srcu_read_unlock
 #define	synchronize_srcu	linux_synchronize_srcu
+#define	synchronize_srcu_expedited linux_synchronize_srcu_expedited
 
 struct lwp;
 struct percpu;
@@ -55,12 +56,15 @@ struct srcu_struct {
 	volatile unsigned	srcu_gen;
 };
 
-void	srcu_init(struct srcu_struct *, const char *);
-void	srcu_fini(struct srcu_struct *);
+#define	init_srcu_struct(S)	_init_srcu_struct(S, #S)
+
+void	_init_srcu_struct(struct srcu_struct *, const char *);
+void	cleanup_srcu_struct(struct srcu_struct *);
 
 int	srcu_read_lock(struct srcu_struct *);
 void	srcu_read_unlock(struct srcu_struct *, int);
 
 void	synchronize_srcu(struct srcu_struct *);
+void	synchronize_srcu_expedited(struct srcu_struct *);
 
 #endif	/* _LINUX_SRCU_H_ */

Index: src/sys/external/bsd/common/include/linux/tasklet.h
diff -u src/sys/external/bsd/common/include/linux/tasklet.h:1.5 src/sys/external/bsd/common/include/linux/tasklet.h:1.6
--- src/sys/external/bsd/common/include/linux/tasklet.h:1.5	Sun Dec 19 11:03:17 2021
+++ src/sys/external/bsd/common/include/linux/tasklet.h	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: tasklet.h,v 1.5 2021/12/19 11:03:17 riastradh Exp $	*/
+/*	$NetBSD: tasklet.h,v 1.6 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018, 2020 The NetBSD Foundation, Inc.
@@ -81,6 +81,7 @@ void	linux_tasklets_fini(void);
 
 void	tasklet_init(struct tasklet_struct *, void (*)(unsigned long),
 	    unsigned long);
+void	tasklet_disable_nosync(struct tasklet_struct *);
 void	tasklet_disable(struct tasklet_struct *);
 void	tasklet_enable(struct tasklet_struct *);
 void	tasklet_schedule(struct tasklet_struct *);

Index: src/sys/external/bsd/common/linux/linux_rcu.c
diff -u src/sys/external/bsd/common/linux/linux_rcu.c:1.3 src/sys/external/bsd/common/linux/linux_rcu.c:1.4
--- src/sys/external/bsd/common/linux/linux_rcu.c:1.3	Sun Dec 19 11:35:17 2021
+++ src/sys/external/bsd/common/linux/linux_rcu.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_rcu.c,v 1.3 2021/12/19 11:35:17 riastradh Exp $	*/
+/*	$NetBSD: linux_rcu.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_rcu.c,v 1.3 2021/12/19 11:35:17 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_rcu.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -85,6 +85,8 @@ synchronize_rcu_xc(void *a, void *b)
  *	Wait for any pending RCU read section on every CPU to complete
  *	by triggering on every CPU activity that is blocked by an RCU
  *	read section.
+ *
+ *	May sleep.  (Practically guaranteed to sleep!)
  */
 void
 synchronize_rcu(void)
@@ -96,6 +98,24 @@ synchronize_rcu(void)
 }
 
 /*
+ * synchronize_rcu_expedited()
+ *
+ *	Wait for any pending RCU read section on every CPU to complete
+ *	by triggering on every CPU activity that is blocked by an RCU
+ *	read section.  Try to get an answer faster than
+ *	synchronize_rcu, at the cost of more activity triggered on
+ *	other CPUs.
+ *
+ *	May sleep.  (Practically guaranteed to sleep!)
+ */
+void
+synchronize_rcu_expedited(void)
+{
+
+	synchronize_rcu();
+}
+
+/*
  * cookie = get_state_synchronize_rcu(), cond_synchronize_rcu(cookie)
  *
  *	Optimization for synchronize_rcu -- skip if it has already
Index: src/sys/external/bsd/common/linux/linux_srcu.c
diff -u src/sys/external/bsd/common/linux/linux_srcu.c:1.3 src/sys/external/bsd/common/linux/linux_srcu.c:1.4
--- src/sys/external/bsd/common/linux/linux_srcu.c:1.3	Sun Dec 19 11:20:33 2021
+++ src/sys/external/bsd/common/linux/linux_srcu.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_srcu.c,v 1.3 2021/12/19 11:20:33 riastradh Exp $	*/
+/*	$NetBSD: linux_srcu.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_srcu.c,v 1.3 2021/12/19 11:20:33 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_srcu.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $");
 
 /*
  * SRCU: Sleepable RCU
@@ -73,7 +73,7 @@ struct srcu_cpu {
 };
 
 /*
- * srcu_init(srcu, name)
+ * _init_srcu_struct(srcu, name)
  *
  *	Initialize the srcu state with the specified name.  Caller must
  *	call srcu_fini when done.
@@ -84,7 +84,7 @@ struct srcu_cpu {
  *	May sleep.
  */
 void
-srcu_init(struct srcu_struct *srcu, const char *name)
+_init_srcu_struct(struct srcu_struct *srcu, const char *name)
 {
 
 	ASSERT_SLEEPABLE();
@@ -98,7 +98,7 @@ srcu_init(struct srcu_struct *srcu, cons
 }
 
 /*
- * srcu_fini(srcu)
+ * cleanup_srcu_struct(srcu)
  *
  *	Finalize an srcu state, which must not be in use right now.  If
  *	any srcu read sections might be active, caller must wait for
@@ -107,14 +107,14 @@ srcu_init(struct srcu_struct *srcu, cons
  *	May sleep.
  */
 void
-srcu_fini(struct srcu_struct *srcu)
+cleanup_srcu_struct(struct srcu_struct *srcu)
 {
 
 	ASSERT_SLEEPABLE();
 
 	KASSERTMSG((srcu->srcu_sync == NULL),
-	    "srcu_fini in lwp %p while synchronize_srcu running in lwp %p",
-	    curlwp, srcu->srcu_sync);
+	    "%s in lwp %p while synchronize_srcu running in lwp %p",
+	    __func__, curlwp, srcu->srcu_sync);
 	cv_destroy(&srcu->srcu_cv);
 	mutex_destroy(&srcu->srcu_lock);
 	percpu_free(srcu->srcu_percpu, sizeof(struct srcu_cpu));
@@ -298,3 +298,20 @@ synchronize_srcu(struct srcu_struct *src
 	cv_broadcast(&srcu->srcu_cv);
 	mutex_spin_exit(&srcu->srcu_lock);
 }
+
+/*
+ * synchronize_srcu_expedited(srcu)
+ *
+ *	Wait for all srcu readers on all CPUs that may have begun
+ *	before sychronize_srcu to complete.  Try to get an answer
+ *	faster than synchronize_srcu, at the cost of more activity
+ *	triggered on other CPUs.
+ *
+ *	May sleep.  (Practically guaranteed to sleep!)
+ */
+void
+synchronize_srcu_expedited(struct srcu_struct *srcu)
+{
+
+	synchronize_srcu(srcu);
+}

Index: src/sys/external/bsd/common/linux/linux_tasklet.c
diff -u src/sys/external/bsd/common/linux/linux_tasklet.c:1.6 src/sys/external/bsd/common/linux/linux_tasklet.c:1.7
--- src/sys/external/bsd/common/linux/linux_tasklet.c:1.6	Sun Dec 19 11:04:58 2021
+++ src/sys/external/bsd/common/linux/linux_tasklet.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_tasklet.c,v 1.6 2021/12/19 11:04:58 riastradh Exp $	*/
+/*	$NetBSD: linux_tasklet.c,v 1.7 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018, 2020 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_tasklet.c,v 1.6 2021/12/19 11:04:58 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_tasklet.c,v 1.7 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/atomic.h>
@@ -347,24 +347,20 @@ tasklet_hi_schedule(struct tasklet_struc
 }
 
 /*
- * tasklet_disable(tasklet)
+ * tasklet_disable_nosync(tasklet)
  *
- *	Increment the disable count of tasklet, and if it was already
- *	running, busy-wait for it to complete.
+ *	Increment the disable count of tasklet, but don't wait for it
+ *	to complete -- it may remain running after this returns.
  *
  *	As long as the disable count is nonzero, the tasklet's function
  *	will not run, but if already scheduled, the tasklet will remain
  *	so and the softint will repeatedly trigger itself in a sort of
  *	busy-wait, so this should be used only for short durations.
  *
- *	If tasklet is guaranteed not to be scheduled, e.g. if you have
- *	just invoked tasklet_kill, then tasklet_disable serves to wait
- *	for it to complete in case it might already be running.
- *
  *	Load-acquire semantics.
  */
 void
-tasklet_disable(struct tasklet_struct *tasklet)
+tasklet_disable_nosync(struct tasklet_struct *tasklet)
 {
 	unsigned int disablecount __diagused;
 
@@ -377,6 +373,31 @@ tasklet_disable(struct tasklet_struct *t
 #ifndef __HAVE_ATOMIC_AS_MEMBAR
 	membar_enter();
 #endif
+}
+
+/*
+ * tasklet_disable(tasklet)
+ *
+ *	Increment the disable count of tasklet, and if it was already
+ *	running, busy-wait for it to complete.
+ *
+ *	As long as the disable count is nonzero, the tasklet's function
+ *	will not run, but if already scheduled, the tasklet will remain
+ *	so and the softint will repeatedly trigger itself in a sort of
+ *	busy-wait, so this should be used only for short durations.
+ *
+ *	If tasklet is guaranteed not to be scheduled, e.g. if you have
+ *	just invoked tasklet_kill, then tasklet_disable serves to wait
+ *	for it to complete in case it might already be running.
+ *
+ *	Load-acquire semantics.
+ */
+void
+tasklet_disable(struct tasklet_struct *tasklet)
+{
+
+	/* Increment the disable count.  */
+	tasklet_disable_nosync(tasklet);
 
 	/* Wait for it to finish running, if it was running.  */
 	tasklet_unlock_wait(tasklet);

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c:1.2	Sat Dec 18 23:45:28 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_globals.c,v 1.2 2021/12/18 23:45:28 riastradh Exp $	*/
+/*	$NetBSD: i915_globals.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_globals.c,v 1.2 2021/12/18 23:45:28 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_globals.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/slab.h>
 #include <linux/workqueue.h>
@@ -20,6 +20,8 @@ __KERNEL_RCSID(0, "$NetBSD: i915_globals
 #include "i915_scheduler.h"
 #include "i915_vma.h"
 
+#include <linux/nbsd-namespace.h>
+
 static LIST_HEAD(globals);
 
 static atomic_t active;
Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c:1.2	Sat Dec 18 23:45:29 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_wakeref.c,v 1.2 2021/12/18 23:45:29 riastradh Exp $	*/
+/*	$NetBSD: intel_wakeref.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_wakeref.c,v 1.2 2021/12/18 23:45:29 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_wakeref.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/wait_bit.h>
 
@@ -25,6 +25,8 @@ static void rpm_put(struct intel_wakeref
 
 	intel_runtime_pm_put(wf->rpm, wakeref);
 	INTEL_WAKEREF_BUG_ON(!wakeref);
+
+	DRM_WAKEUP_ALL(&wf->wq, &wf->mutex);
 }
 
 int __intel_wakeref_get_first(struct intel_wakeref *wf)
@@ -66,7 +68,6 @@ static void ____intel_wakeref_put_last(s
 	/* ops->put() must reschedule its own release on error/deferral */
 	if (likely(!wf->ops->put(wf))) {
 		rpm_put(wf);
-		wake_up_var(&wf->wakeref);
 	}
 
 unlock:
@@ -108,6 +109,7 @@ void __intel_wakeref_init(struct intel_w
 	__mutex_init(&wf->mutex, "wakeref.mutex", &key->mutex);
 	atomic_set(&wf->count, 0);
 	wf->wakeref = 0;
+	DRM_INIT_WAITQUEUE(&wf->wq, "i915wake");
 
 	INIT_WORK(&wf->work, __intel_wakeref_put_work);
 	lockdep_init_map(&wf->work.lockdep_map, "wakeref.work", &key->work, 0);
@@ -119,8 +121,9 @@ int intel_wakeref_wait_for_idle(struct i
 
 	might_sleep();
 
-	err = wait_var_event_killable(&wf->wakeref,
-				      !intel_wakeref_is_active(wf));
+	mutex_lock(&wf->mutex);
+	DRM_WAIT_UNTIL(err, &wf->wq, &wf->mutex, !intel_wakeref_is_active(wf));
+	mutex_unlock(&wf->mutex);
 	if (err)
 		return err;
 
Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h:1.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h:1.2	Sat Dec 18 23:45:29 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_wakeref.h,v 1.2 2021/12/18 23:45:29 riastradh Exp $	*/
+/*	$NetBSD: intel_wakeref.h,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -18,6 +18,8 @@
 #include <linux/timer.h>
 #include <linux/workqueue.h>
 
+#include <drm/drm_wait_netbsd.h> /* XXX */
+
 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG)
 #define INTEL_WAKEREF_BUG_ON(expr) BUG_ON(expr)
 #else
@@ -39,6 +41,7 @@ struct intel_wakeref {
 	struct mutex mutex;
 
 	intel_wakeref_t wakeref;
+	drm_waitqueue_t wq;
 
 	struct intel_runtime_pm *rpm;
 	const struct intel_wakeref_ops *ops;
Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c:1.2	Sat Dec 18 23:45:29 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_wopcm.c,v 1.2 2021/12/18 23:45:29 riastradh Exp $	*/
+/*	$NetBSD: intel_wopcm.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,11 +6,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_wopcm.c,v 1.2 2021/12/18 23:45:29 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_wopcm.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include "intel_wopcm.h"
 #include "i915_drv.h"
 
+#include <linux/nbsd-namespace.h>
+
 /**
  * DOC: WOPCM Layout
  *

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.5	Sun Dec 19 11:36:56 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_perf.c,v 1.5 2021/12/19 11:36:56 riastradh Exp $	*/
+/*	$NetBSD: i915_perf.c,v 1.6 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2015-2016 Intel Corporation
@@ -194,7 +194,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_perf.c,v 1.5 2021/12/19 11:36:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_perf.c,v 1.6 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/anon_inodes.h>
 #include <linux/sizes.h>
@@ -3917,10 +3917,9 @@ int i915_perf_open_ioctl(struct drm_devi
  */
 void i915_perf_register(struct drm_i915_private *i915)
 {
-	struct i915_perf *perf = &i915->perf;
 #ifndef __NetBSD__
+	struct i915_perf *perf = &i915->perf;
 	int ret;
-#endif
 
 	if (!perf->i915)
 		return;
@@ -3979,7 +3978,9 @@ void i915_perf_register(struct drm_i915_
 	if (perf->test_config.id == 0)
 		goto sysfs_error;
 
-#ifndef __NetBSD__		/* XXX i915 sysfs */
+#ifdef __NetBSD__		/* XXX i915 sysfs */
+	__USE(ret);
+#else
 	ret = sysfs_create_group(perf->metrics_kobj,
 				 &perf->test_config.sysfs_metric);
 	if (ret)
@@ -3999,6 +4000,7 @@ sysfs_error:
 
 exit:
 	mutex_unlock(&perf->lock);
+#endif
 }
 
 /**

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h:1.4 src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h:1.4	Sun Dec 19 11:02:22 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_utils.h,v 1.4 2021/12/19 11:02:22 riastradh Exp $	*/
+/*	$NetBSD: i915_utils.h,v 1.5 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2016 Intel Corporation
@@ -30,6 +30,7 @@
 #include <linux/list.h>
 #include <linux/overflow.h>
 #include <linux/sched.h>
+#include <linux/sched/clock.h>
 #include <linux/types.h>
 #include <linux/workqueue.h>
 
@@ -299,38 +300,46 @@ wait_remaining_ms_from_jiffies(unsigned 
  * check the condition before the timeout.
  */
 #ifdef __NetBSD__
-#define __wait_for(OP, COND, MS, Wmin, Wmax) ({ \
+#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
 	int ret__ = 0;							\
 	if (cold) {							\
-		int ms = (MS);						\
-		while (!(COND)) {					\
+		int ms__ = ((US) + 999)/1000;				\
+		for (;;) {						\
+			const bool expired__ = ms__-- == 0;		\
 			OP;						\
-			/* Guarantee COND check prior to timeout */	\
 			barrier();					\
-			if (--ms < 0) {					\
-				DELAY(1000);				\
-				if (!(COND))				\
-					ret__ = -ETIMEDOUT;		\
+			if (COND) {					\
+				ret__ = 0;				\
+				break;					\
+			}						\
+			if (expired__) {				\
+				ret__ = -ETIMEDOUT;			\
 				break;					\
 			}						\
 			DELAY(1000);					\
 		}							\
 	} else {							\
-		unsigned long timeout__ = jiffies + msecs_to_jiffies(MS); \
-		while (!(COND)) {					\
+		const ktime_t end__ =					\
+		    ktime_add_ns(ktime_get_raw(), 1000ll * (US));	\
+		long wait__ = (Wmin);					\
+		might_sleep();						\
+		for (;;) {						\
+			const bool expired__ =				\
+			    ktime_after(ktime_get_raw(), end__);	\
 			OP;						\
 			/* Guarantee COND check prior to timeout */	\
 			barrier();					\
-			if (time_after(jiffies, timeout__)) {		\
-				if (!(COND))				\
-					ret__ = -ETIMEDOUT;		\
+			if (COND) {					\
+				ret__ = 0;				\
 				break;					\
 			}						\
-			if ((Wmin) && drm_can_sleep()) {		\
-				msleep(Wmin); /* XXX respect Wmax */	\
-			} else {					\
-				DELAY(1000);				\
+			if (expired__) {				\
+				ret__ = -ETIMEDOUT;			\
+				break;					\
 			}						\
+			usleep_range(wait__, wait__ * 2);		\
+			if (wait__ < (Wmax))				\
+				wait__ <<= 1;				\
 		}							\
 	}								\
 	ret__;								\
@@ -466,15 +475,16 @@ static inline void add_taint_for_CI(unsi
 void cancel_timer(struct timer_list *t);
 void set_timer_ms(struct timer_list *t, unsigned long timeout);
 
-#ifdef __linux__
-static inline bool timer_expired(const struct timer_list *t)
+#ifdef __NetBSD__
+static inline bool
+timer_expired(const struct timer_list *t)
 {
-	return READ_ONCE(t->expires) && !timer_pending(t);
+	return callout_expired(__UNCONST(&t->tl_callout));
 }
 #else
-static inline bool timer_expired(struct timer_list *t)
+static inline bool timer_expired(const struct timer_list *t)
 {
-	return callout_expired(&t->tl_callout);
+	return READ_ONCE(t->expires) && !timer_pending(t);
 }
 #endif
 

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c:1.10 src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c:1.11
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c:1.10	Sat Dec 18 23:45:29 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_runtime_pm.c,v 1.10 2021/12/18 23:45:29 riastradh Exp $	*/
+/*	$NetBSD: intel_runtime_pm.c,v 1.11 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2012-2014 Intel Corporation
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_runtime_pm.c,v 1.10 2021/12/18 23:45:29 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_runtime_pm.c,v 1.11 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/pm_runtime.h>
 
@@ -616,7 +616,7 @@ void intel_runtime_pm_init_early(struct 
 	struct drm_i915_private *i915 =
 			container_of(rpm, struct drm_i915_private, runtime_pm);
 	struct pci_dev *pdev = i915->drm.pdev;
-	struct device *kdev = &pdev->dev;
+	struct device *kdev = pci_dev_dev(pdev);
 
 	rpm->kdev = kdev;
 	rpm->available = HAS_RUNTIME_PM(i915);

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.16 src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.17
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.16	Sun Dec 19 11:12:59 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_uncore.c,v 1.16 2021/12/19 11:12:59 riastradh Exp $	*/
+/*	$NetBSD: intel_uncore.c,v 1.17 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2013 Intel Corporation
@@ -24,11 +24,15 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_uncore.c,v 1.16 2021/12/19 11:12:59 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_uncore.c,v 1.17 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/pm_runtime.h>
 #include <asm/iosf_mbi.h>
 
+#ifdef __NetBSD__
+#include <dev/pci/agp_i810var.h>
+#endif
+
 #include "i915_drv.h"
 #include "i915_trace.h"
 #include "i915_vgpu.h"
@@ -92,19 +96,19 @@ intel_uncore_forcewake_domain_to_str(con
 
 #ifdef __NetBSD__
 static inline u32
-fw_ack(struct intel_uncore_forcewake_domain *d)
+fw_ack(const struct intel_uncore_forcewake_domain *d)
 {
 	return bus_space_read_4(d->uncore->regs_bst, d->uncore->regs_bsh,
 	    d->reg_ack);
 }
 static inline void
-fw_set(struct intel_uncore_forcewake_domain *d, u32 val)
+fw_set(const struct intel_uncore_forcewake_domain *d, u32 val)
 {
 	bus_space_write_4(d->uncore->regs_bst, d->uncore->regs_bsh, d->reg_set,
 	    _MASKED_BIT_ENABLE(val));
 }
 static inline void
-fw_clear(struct intel_uncore_forcewake_domain *d, u32 val)
+fw_clear(const struct intel_uncore_forcewake_domain *d, u32 val)
 {
 	bus_space_write_4(d->uncore->regs_bst, d->uncore->regs_bsh, d->reg_set,
 	    _MASKED_BIT_DISABLE(val));
@@ -1656,7 +1660,7 @@ out:
 #define ASSIGN_FW_DOMAINS_TABLE(uncore, d) \
 { \
 	(uncore)->fw_domains_table = \
-			(struct intel_forcewake_range *)(d); \
+			(const struct intel_forcewake_range *)(d); \
 	(uncore)->fw_domains_table_entries = ARRAY_SIZE((d)); \
 }
 
@@ -1715,20 +1719,23 @@ static int uncore_mmio_setup(struct inte
 		mmio_size = 2 * 1024 * 1024;
 	uncore->regs = pci_iomap(pdev, mmio_bar, mmio_size);
 #ifdef __NetBSD__
-	if (!dev_priv->regs)
-		dev_priv->regs = drm_agp_borrow(&i915->drm, mmio_bar,
-		    mmio_size);
+	if (uncore->regs) {
+		KASSERT(pdev->pd_resources[mmio_bar].mapped);
+		uncore->regs_bst = pdev->pd_resources[mmio_bar].bst;
+		uncore->regs_bsh = pdev->pd_resources[mmio_bar].bsh;
+	} else if (agp_i810_borrow(pdev->pd_resources[mmio_bar].addr,
+		mmio_size, &uncore->regs_bsh)) {
+		KASSERT(!pdev->pd_resources[mmio_bar].mapped);
+		uncore->regs_bst = pdev->pd_pa.pa_memt;
+		uncore->regs = bus_space_vaddr(pdev->pd_pa.pa_memt,
+		    uncore->regs_bsh);
+	}
 #endif
 	if (uncore->regs == NULL) {
 		drm_err(&i915->drm, "failed to map registers\n");
 		return -EIO;
 	}
 
-#ifdef __NetBSD__
-	i915->regs_bst = i915->drm.pdev->pd_resources[mmio_bar].bst;
-	i915->regs_bsh = i915->drm.pdev->pd_resources[mmio_bar].bsh;
-#endif
-
 	return 0;
 }
 

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h:1.7 src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h:1.8
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h:1.7	Sun Dec 19 11:33:49 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_uncore.h,v 1.7 2021/12/19 11:33:49 riastradh Exp $	*/
+/*	$NetBSD: intel_uncore.h,v 1.8 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2017 Intel Corporation
@@ -108,10 +108,17 @@ struct intel_forcewake_range {
 	enum forcewake_domains domains;
 };
 
+
 struct intel_uncore {
-#ifdef __linux__
+#ifdef __NetBSD__
+#  define	__iomem	/* XXX */
+#endif
 	void __iomem *regs;
-#else
+#ifdef __NetBSD__
+#  undef	__iomem
+#endif
+
+#ifdef __NetBSD__
 	bus_space_tag_t regs_bst;
 	bus_space_handle_t regs_bsh;
 #endif

Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c:1.4	Sun Dec 19 11:45:50 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_hdcp.c,v 1.4 2021/12/19 11:45:50 riastradh Exp $	*/
+/*	$NetBSD: intel_hdcp.c,v 1.5 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /* SPDX-License-Identifier: MIT */
 /*
@@ -11,7 +11,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_hdcp.c,v 1.4 2021/12/19 11:45:50 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_hdcp.c,v 1.5 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/component.h>
 #include <linux/i2c.h>
@@ -27,6 +27,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_hdcp.c
 #include "intel_sideband.h"
 #include "intel_connector.h"
 
+#include <linux/nbsd-namespace.h>
+
 #define KEY_LOAD_TRIES	5
 #define ENCRYPT_STATUS_CHANGE_TIMEOUT_MS	50
 #define HDCP2_LC_RETRY_CNT			3
@@ -2039,7 +2041,9 @@ void intel_hdcp_component_fini(struct dr
 	dev_priv->hdcp_comp_added = false;
 	mutex_unlock(&dev_priv->hdcp_comp_mutex);
 
+#ifndef __NetBSD__		/* XXX i915 hdmi audio */
 	component_del(dev_priv->drm.dev, &i915_hdcp_component_ops);
+#endif
 }
 
 void intel_hdcp_cleanup(struct intel_connector *connector)

Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c:1.3	Sun Dec 19 11:47:25 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_opregion.c,v 1.3 2021/12/19 11:47:25 riastradh Exp $	*/
+/*	$NetBSD: intel_opregion.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Intel Corporation <hong....@intel.com>
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_opregion.c,v 1.3 2021/12/19 11:47:25 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_opregion.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/acpi.h>
 #include <linux/dmi.h>
@@ -622,9 +622,9 @@ void intel_opregion_asle_intr(struct drm
 #define ACPI_EV_LID            (1<<1)
 #define ACPI_EV_DOCK           (1<<2)
 
+#ifdef __NetBSD__
 static struct intel_opregion *system_opregion;
 
-#ifdef __NetBSD__
 static void
 intel_opregion_video_event(ACPI_HANDLE hdl, uint32_t notify, void *opaque)
 {
@@ -898,7 +898,7 @@ static int intel_load_vbt_firmware(struc
 	if (!name || !*name)
 		return -ENOENT;
 
-	ret = request_firmware(&fw, name, &dev_priv->drm.pdev->dev);
+	ret = request_firmware(&fw, name, pci_dev_dev(dev_priv->drm.pdev));
 	if (ret) {
 		DRM_ERROR("Requesting VBT firmware \"%s\" failed (%d)\n",
 			  name, ret);
@@ -952,14 +952,15 @@ int intel_opregion_setup(struct drm_i915
 	INIT_WORK(&opregion->asle_work, asle_work);
 
 #ifdef __NetBSD__
-	opregion->bst = dev->pdev->pd_pa.pa_memt;
+	opregion->bst = pdev->pd_pa.pa_memt;
 	err = -bus_space_map(opregion->bst, asls, OPREGION_SIZE,
-	    BUS_SPACE_MAP_LINEAR|BUS_SPACE_MAP_CACHEABLE, &opregion->bsh);
+	    BUS_SPACE_MAP_LINEAR|BUS_SPACE_MAP_CACHEABLE,
+	    &opregion->asls_bsh);
 	if (err) {
 		DRM_DEBUG_DRIVER("Failed to map opregion: %d\n", err);
 		return err;
 	}
-	base = bus_space_vaddr(opregion->bst, opregion->bsh);
+	base = bus_space_vaddr(opregion->bst, opregion->asls_bsh);
 #else
 	base = memremap(asls, OPREGION_SIZE, MEMREMAP_WB);
 #endif
@@ -1033,8 +1034,19 @@ int intel_opregion_setup(struct drm_i915
 			rvda += asls;
 		}
 
+#ifdef __NetBSD__
+		if (bus_space_map(opregion->bst, rvda,
+			opregion->asle->rvds,
+			BUS_SPACE_MAP_LINEAR|BUS_SPACE_MAP_CACHEABLE,
+			&opregion->rvda_bsh))
+			opregion->rvda = NULL;
+		else
+			opregion->rvda = bus_space_vaddr(opregion->bst,
+			    opregion->rvda_bsh);
+#else
 		opregion->rvda = memremap(rvda, opregion->asle->rvds,
 					  MEMREMAP_WB);
+#endif
 
 		vbt = opregion->rvda;
 		vbt_size = opregion->asle->rvds;
@@ -1045,7 +1057,15 @@ int intel_opregion_setup(struct drm_i915
 			goto out;
 		} else {
 			DRM_DEBUG_KMS("Invalid VBT in ACPI OpRegion (RVDA)\n");
+#ifdef __NetBSD__
+			if (opregion->rvda) {
+				bus_space_unmap(opregion->bst,
+				    opregion->rvda_bsh,
+				    opregion->asle->rvds);
+			}
+#else
 			memunmap(opregion->rvda);
+#endif
 			opregion->rvda = NULL;
 		}
 	}
@@ -1074,7 +1094,7 @@ out:
 
 err_out:
 #ifdef __NetBSD__
-	bus_space_unmap(opregion->bst, opregion->bsh, OPREGION_SIZE);
+	bus_space_unmap(opregion->bst, opregion->asls_bsh, OPREGION_SIZE);
 #else
 	memunmap(base);
 #endif
@@ -1144,9 +1164,14 @@ void intel_opregion_register(struct drm_
 		return;
 
 	if (opregion->acpi) {
-#ifdef __NetBSD__ /* XXX post-merge audit */
-		if (dev->pdev->pd_ad != NULL)
-			acpi_deregister_notify(dev->pdev->pd_ad);
+#ifdef __NetBSD__
+		if (i915->drm.pdev->pd_ad != NULL) {
+			/* XXX gross but expedient */
+			KASSERT(system_opregion == NULL);
+			system_opregion = opregion;
+			acpi_register_notify(i915->drm.pdev->pd_ad,
+			    intel_opregion_video_event);
+		}
 #else
 		opregion->acpi_notifier.notifier_call =
 			intel_opregion_video_event;
@@ -1212,20 +1237,31 @@ void intel_opregion_unregister(struct dr
 	if (!opregion->header)
 		return;
 
-	if (opregion->acpi_notifier.notifier_call) {
 #ifdef __NetBSD__
-		if (dev->pdev->pd_ad != NULL)
-			acpi_deregister_notify(dev->pdev->pd_ad);
+	if (opregion->acpi) {
+		if (i915->drm.pdev->pd_ad != NULL)
+			acpi_deregister_notify(i915->drm.pdev->pd_ad);
+	}
 #else
+	if (opregion->acpi_notifier.notifier_call) {
 		unregister_acpi_notifier(&opregion->acpi_notifier);
 		opregion->acpi_notifier.notifier_call = NULL;
-#endif
 	}
+#endif
 
 	/* just clear all opregion memory pointers now */
+#ifdef __NetBSD__
+	bus_space_unmap(opregion->bst, opregion->asls_bsh, OPREGION_SIZE);
+#else
 	memunmap(opregion->header);
+#endif
 	if (opregion->rvda) {
+#ifdef __NetBSD__
+		bus_space_unmap(opregion->bst, opregion->rvda_bsh,
+		    opregion->asle->rvds);
+#else
 		memunmap(opregion->rvda);
+#endif
 		opregion->rvda = NULL;
 	}
 	if (opregion->vbt_firmware) {
Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c:1.3	Sun Dec 19 10:25:07 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_vga.c,v 1.3 2021/12/19 10:25:07 riastradh Exp $	*/
+/*	$NetBSD: intel_vga.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_vga.c,v 1.3 2021/12/19 10:25:07 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_vga.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/pci.h>
 #include <linux/vgaarb.h>
@@ -45,8 +45,8 @@ void intel_vga_disable(struct drm_i915_p
 		aprint_error_dev(pdev->pd_dev,
 		    "unable to map VGA registers: %d\n", error);
 	} else {
-		DRMCTASSERT(vgabase <= VGA_SR_INDEX);
-		DRMCTASSERT(vgabase <= VGA_SR_DATA);
+		BUILD_BUG_ON(!(vgabase <= VGA_SR_INDEX));
+		BUILD_BUG_ON(!(vgabase <= VGA_SR_DATA));
 		bus_space_write_1(iot, ioh, VGA_SR_INDEX - vgabase, SR01);
 		sr1 = bus_space_read_1(iot, ioh, VGA_SR_DATA - vgabase);
 		bus_space_write_1(iot, ioh, VGA_SR_DATA - vgabase,
@@ -114,11 +114,33 @@ void intel_vga_reset_io_mem(struct drm_i
 	 * sure vgacon can keep working normally without triggering interrupts
 	 * and error messages.
 	 */
+#ifdef __NetBSD__
+    {
+	const bus_addr_t vgabase = 0x3c0;
+	const bus_space_tag_t iot = pdev->pd_pa.pa_iot;
+	bus_space_handle_t ioh;
+	int error;
+
+	error = bus_space_map(iot, vgabase, 0x10, 0, &ioh);
+	if (error) {
+		aprint_error_dev(pdev->pd_dev,
+		    "unable to map VGA registers: %d\n", error);
+	} else {
+		BUILD_BUG_ON(!(vgabase <= VGA_MSR_READ));
+		BUILD_BUG_ON(!(vgabase <= VGA_MSR_WRITE));
+		bus_space_write_1(iot, ioh, VGA_MSR_WRITE,
+		    bus_space_read_1(iot, ioh, VGA_MSR_READ));
+		bus_space_unmap(iot, ioh, 0x10);
+	}
+    }
+#else
 	vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO);
 	outb(inb(VGA_MSR_READ), VGA_MSR_WRITE);
 	vga_put(pdev, VGA_RSRC_LEGACY_IO);
+#endif
 }
 
+#ifndef __NetBSD__
 static int
 intel_vga_set_state(struct drm_i915_private *i915, bool enable_decode)
 {
@@ -146,7 +168,6 @@ intel_vga_set_state(struct drm_i915_priv
 	return 0;
 }
 
-#ifndef __NetBSD__
 static unsigned int
 intel_vga_set_decode(void *cookie, bool enable_decode)
 {

Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_opregion.h,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_opregion.h,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2008-2017 Intel Corporation
@@ -46,7 +46,8 @@ struct opregion_asle;
 struct intel_opregion {
 #ifdef __NetBSD__
 	bus_space_tag_t bst;
-	bus_space_handle_t bsh;
+	bus_space_handle_t asls_bsh;
+	bus_space_handle_t rvda_bsh;
 #endif
 	struct opregion_header *header;
 	struct opregion_acpi *acpi;
Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_psr.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_psr.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2014 Intel Corporation
@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_psr.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_psr.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <drm/drm_atomic_helper.h>
 
@@ -36,6 +36,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_psr.c,
 #include "intel_psr.h"
 #include "intel_sprite.h"
 
+#include <linux/nbsd-namespace.h>
+
 /**
  * DOC: Panel Self Refresh (PSR/SRD)
  *
@@ -1168,7 +1170,7 @@ int intel_psr_debug_set(struct drm_i915_
 
 	if (val & ~(I915_PSR_DEBUG_IRQ | I915_PSR_DEBUG_MODE_MASK) ||
 	    mode > I915_PSR_DEBUG_FORCE_PSR1) {
-		DRM_DEBUG_KMS("Invalid debug mask %llx\n", val);
+		DRM_DEBUG_KMS("Invalid debug mask %"PRIx64"\n", val);
 		return -EINVAL;
 	}
 
Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_sdvo.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_sdvo.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright 2006 Dave Airlie <airl...@linux.ie>
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_sdvo.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_sdvo.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/delay.h>
 #include <linux/export.h>
@@ -1437,9 +1437,9 @@ static void intel_sdvo_pre_enable(struct
 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
 	const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
 	const struct intel_sdvo_connector_state *sdvo_state =
-		to_intel_sdvo_connector_state(conn_state);
+		const_container_of(conn_state, struct intel_sdvo_connector_state, base.base);
 	const struct intel_sdvo_connector *intel_sdvo_connector =
-		to_intel_sdvo_connector(conn_state->connector);
+		const_container_of(conn_state->connector, struct intel_sdvo_connector, base.base);
 	const struct drm_display_mode *mode = &crtc_state->hw.mode;
 	struct intel_sdvo *intel_sdvo = to_sdvo(intel_encoder);
 	u32 sdvox;
@@ -2271,7 +2271,8 @@ intel_sdvo_connector_atomic_get_property
 					 u64 *val)
 {
 	struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
-	const struct intel_sdvo_connector_state *sdvo_state = to_intel_sdvo_connector_state((void *)state);
+	const struct intel_sdvo_connector_state *sdvo_state =
+	    const_container_of(state, struct intel_sdvo_connector_state, base.base);
 
 	if (property == intel_sdvo_connector->tv_format) {
 		int i;
@@ -2391,7 +2392,8 @@ intel_sdvo_connector_register(struct drm
 	if (ret)
 		return ret;
 
-#ifdef __NetBSD__ /* XXX post-merge audit */
+#ifdef __NetBSD__
+	__USE(sdvo);
 	return 0;
 #else
 	return sysfs_create_link(&connector->kdev->kobj,
@@ -2405,8 +2407,12 @@ intel_sdvo_connector_unregister(struct d
 {
 	struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector));
 
+#ifdef __NetBSD__
+	__USE(sdvo);
+#else
 	sysfs_remove_link(&connector->kdev->kobj,
 			  sdvo->ddc.dev.kobj.name);
+#endif
 	intel_connector_unregister(connector);
 }
 
@@ -3226,7 +3232,7 @@ intel_sdvo_init_ddc_proxy(struct intel_s
 	sdvo->ddc.owner = THIS_MODULE;
 	sdvo->ddc.class = I2C_CLASS_DDC;
 	snprintf(sdvo->ddc.name, I2C_NAME_SIZE, "SDVO DDC proxy");
-	sdvo->ddc.dev.parent = dev->dev;
+	sdvo->ddc.dev.parent = pci_dev_dev(pdev);
 	sdvo->ddc.algo_data = sdvo;
 	sdvo->ddc.algo = &intel_sdvo_ddc_proxy;
 	sdvo->ddc.lock_ops = &proxy_lock_ops;
Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_sprite.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_sprite.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2011 Intel Corporation
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_sprite.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_sprite.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
@@ -91,15 +91,10 @@ void intel_pipe_update_start(const struc
 	const struct drm_display_mode *adjusted_mode = &new_crtc_state->hw.adjusted_mode;
 	long timeout = msecs_to_jiffies_timeout(1);
 	int scanline, min, max, vblank_start;
-#ifdef __NetBSD__
 	drm_waitqueue_t *wq = drm_crtc_vblank_waitqueue(&crtc->base);
 	int ret;
-#else
-	wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base);
 	bool need_vlv_dsi_wa = (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
 		intel_crtc_has_type(new_crtc_state, INTEL_OUTPUT_DSI);
-	DEFINE_WAIT(wait);
-#endif
 	u32 psr_status;
 
 	vblank_start = adjusted_mode->crtc_vblank_start;
@@ -126,54 +121,20 @@ void intel_pipe_update_start(const struc
 		DRM_ERROR("PSR idle timed out 0x%x, atomic update may fail\n",
 			  psr_status);
 
-#ifdef __NetBSD__
-	spin_lock(&dev->vbl_lock);
-#else
-	local_irq_disable();
-#endif
+	spin_lock(&dev_priv->drm.vbl_lock);
 
 	crtc->debug.min_vbl = min;
 	crtc->debug.max_vbl = max;
 	trace_intel_pipe_update_start(crtc);
 
-#ifdef __NetBSD__
-	DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, wq, &dev->vbl_lock, timeout,
+	DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, wq, &dev_priv->drm.vbl_lock,
+	    timeout,
 	    (scanline = intel_get_crtc_scanline(crtc),
 		scanline < min || scanline > max));
 	if (ret <= 0)
 		DRM_ERROR("Potential atomic update failure on pipe %c: %d\n",
 		    pipe_name(crtc->pipe), ret ? ret : -EWOULDBLOCK);
 	drm_crtc_vblank_put_locked(&crtc->base);
-#else
-	for (;;) {
-		/*
-		 * prepare_to_wait() has a memory barrier, which guarantees
-		 * other CPUs can see the task state update by the time we
-		 * read the scanline.
-		 */
-		prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE);
-
-		scanline = intel_get_crtc_scanline(crtc);
-		if (scanline < min || scanline > max)
-			break;
-
-		if (!timeout) {
-			DRM_ERROR("Potential atomic update failure on pipe %c\n",
-				  pipe_name(crtc->pipe));
-			break;
-		}
-
-		local_irq_enable();
-
-		timeout = schedule_timeout(timeout);
-
-		local_irq_disable();
-	}
-
-	finish_wait(wq, &wait);
-
-	drm_crtc_vblank_put(&crtc->base);
-#endif
 
 	/*
 	 * On VLV/CHV DSI the scanline counter would appear to
@@ -201,7 +162,7 @@ void intel_pipe_update_start(const struc
 	return;
 
 irq_disable:
-	local_irq_disable();
+	spin_lock(&dev_priv->drm.vbl_lock);
 }
 
 /**
@@ -238,11 +199,7 @@ void intel_pipe_update_end(struct intel_
 		new_crtc_state->uapi.event = NULL;
 	}
 
-#ifdef __NetBSD__
-	spin_unlock(&dev->vbl_lock);
-#else
-	local_irq_enable();
-#endif
+	spin_unlock(&dev_priv->drm.vbl_lock);
 
 	if (intel_vgpu_active(dev_priv))
 		return;
Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_tc.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_tc.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_tc.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_tc.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include "i915_drv.h"
 #include "intel_display.h"
@@ -14,6 +14,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_tc.c,v
 #include "intel_dp_mst.h"
 #include "intel_tc.h"
 
+#include <linux/nbsd-namespace.h>
+
 static const char *tc_port_mode_name(enum tc_port_mode mode)
 {
 	static const char * const names[] = {
Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_tv.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_tv.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2006-2008 Intel Corporation
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_tv.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_tv.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
@@ -1425,7 +1425,7 @@ static void intel_tv_pre_enable(struct i
 	struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->uapi.crtc);
 	struct intel_tv *intel_tv = enc_to_tv(encoder);
 	const struct intel_tv_connector_state *tv_conn_state =
-		to_intel_tv_connector_state(conn_state);
+		const_container_of(conn_state, struct intel_tv_connector_state, base);
 	const struct tv_mode *tv_mode = intel_tv_mode_find(conn_state);
 	u32 tv_ctl, tv_filter_ctl;
 	u32 scctl1, scctl2, scctl3;

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c:1.6	Sun Dec 19 11:47:40 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_lrc.c,v 1.6 2021/12/19 11:47:40 riastradh Exp $	*/
+/*	$NetBSD: intel_lrc.c,v 1.7 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2014 Intel Corporation
@@ -134,7 +134,7 @@
  *
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_lrc.c,v 1.6 2021/12/19 11:47:40 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_lrc.c,v 1.7 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/interrupt.h>
 
@@ -209,7 +209,10 @@ struct virtual_engine {
 	struct ve_node {
 		struct rb_node rb;
 		int prio;
+		uint64_t order;
+		bool inserted;
 	} nodes[I915_NUM_ENGINES];
+	uint64_t order;
 
 	/*
 	 * Keep track of bonded pairs -- restrictions upon on our selection
@@ -228,6 +231,44 @@ struct virtual_engine {
 	struct intel_engine_cs *siblings[0];
 };
 
+#ifdef __NetBSD__
+static int
+compare_ve_nodes(void *cookie, const void *va, const void *vb)
+{
+	const struct ve_node *na = va;
+	const struct ve_node *nb = vb;
+
+	if (na->prio < nb->prio)
+		return -1;
+	if (na->prio > nb->prio)
+		return +1;
+	if (na->order < nb->order)
+		return -1;
+	if (na->order > nb->order)
+		return +1;
+	return 0;
+}
+
+static int
+compare_ve_node_key(void *cookie, const void *vn, const void *vk)
+{
+	const struct ve_node *n = vn;
+	const int *k = vk;
+
+	if (n->prio < *k)
+		return -1;
+	if (n->prio > *k)
+		return +1;
+	return 0;
+}
+
+static const rb_tree_ops_t ve_tree_ops = {
+	.rbto_compare_nodes = compare_ve_nodes,
+	.rbto_compare_key = compare_ve_node_key,
+	.rbto_node_offset = offsetof(struct ve_node, rb),
+};
+#endif
+
 static struct virtual_engine *to_virtual_engine(struct intel_engine_cs *engine)
 {
 	GEM_BUG_ON(!intel_engine_is_virtual(engine));
@@ -1818,13 +1859,14 @@ static void execlists_dequeue(struct int
 
 		if (!rq) { /* lazily cleanup after another engine handled rq */
 			rb_erase_cached(rb, &execlists->virtual);
-			RB_CLEAR_NODE(rb);
+			container_of(rb, struct ve_node, rb)->inserted =
+			    false;
 			rb = rb_first_cached(&execlists->virtual);
 			continue;
 		}
 
 		if (!virtual_matches(ve, rq, engine)) {
-			rb = rb_next(rb);
+			rb = rb_next2(&execlists->virtual.rb_root, rb);
 			continue;
 		}
 
@@ -1909,7 +1951,7 @@ static void execlists_dequeue(struct int
 				 * Even if ELSP[1] is occupied and not worthy
 				 * of timeslices, our queue might be.
 				 */
-				if (!execlists->timer.expires &&
+				if (!timer_pending(&execlists->timer) &&
 				    need_timeslice(engine, last))
 					set_timer_ms(&execlists->timer,
 						     timeslice(engine));
@@ -1930,7 +1972,8 @@ static void execlists_dequeue(struct int
 		if (unlikely(!rq)) { /* lost the race to a sibling */
 			spin_unlock(&ve->base.active.lock);
 			rb_erase_cached(rb, &execlists->virtual);
-			RB_CLEAR_NODE(rb);
+			container_of(rb, struct ve_node, rb)->inserted =
+			    false;
 			rb = rb_first_cached(&execlists->virtual);
 			continue;
 		}
@@ -1942,7 +1985,8 @@ static void execlists_dequeue(struct int
 		if (rq_prio(rq) >= queue_prio(execlists)) {
 			if (!virtual_matches(ve, rq, engine)) {
 				spin_unlock(&ve->base.active.lock);
-				rb = rb_next(rb);
+				rb = rb_next2(&execlists->virtual.rb_root,
+				    rb);
 				continue;
 			}
 
@@ -1963,7 +2007,8 @@ static void execlists_dequeue(struct int
 			ve->request = NULL;
 			ve->base.execlists.queue_priority_hint = INT_MIN;
 			rb_erase_cached(rb, &execlists->virtual);
-			RB_CLEAR_NODE(rb);
+			container_of(rb, struct ve_node, rb)->inserted =
+			    false;
 
 			GEM_BUG_ON(!(rq->execution_mask & engine->mask));
 			rq->engine = engine;
@@ -2162,8 +2207,8 @@ cancel_port_requests(struct intel_engine
 static inline void
 invalidate_csb_entries(const u32 *first, const u32 *last)
 {
-	clflush((void *)first);
-	clflush((void *)last);
+	clflush(__UNCONST(first));
+	clflush(__UNCONST(last));
 }
 
 static inline bool
@@ -3684,7 +3729,7 @@ static void execlists_reset_cancel(struc
 			rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
 
 		rb_erase_cached(rb, &execlists->virtual);
-		RB_CLEAR_NODE(rb);
+		container_of(rb, struct ve_node, rb)->inserted = false;
 
 		spin_lock(&ve->base.active.lock);
 		rq = fetch_and_zero(&ve->request);
@@ -3703,7 +3748,12 @@ static void execlists_reset_cancel(struc
 	/* Remaining _unready_ requests will be nop'ed when submitted */
 
 	execlists->queue_priority_hint = INT_MIN;
+#ifdef __NetBSD__
+	i915_sched_init(execlists);
+	rb_tree_init(&execlists->virtual.rb_root.rbr_tree, &ve_tree_ops);
+#else
 	execlists->queue = RB_ROOT_CACHED;
+#endif
 
 	GEM_BUG_ON(__tasklet_is_enabled(&execlists->tasklet));
 	execlists->tasklet.func = nop_submission_tasklet;
@@ -4664,14 +4714,16 @@ static void virtual_context_destroy(stru
 		struct rb_node *node = &ve->nodes[sibling->id].rb;
 		unsigned long flags;
 
-		if (RB_EMPTY_NODE(node))
+		if (!ve->nodes[sibling->id].inserted)
 			continue;
 
 		spin_lock_irqsave(&sibling->active.lock, flags);
 
 		/* Detachment is lazily performed in the execlists tasklet */
-		if (!RB_EMPTY_NODE(node))
+		if (ve->nodes[sibling->id].inserted) {
 			rb_erase_cached(node, &sibling->execlists.virtual);
+			ve->nodes[sibling->id].inserted = false;
+		}
 
 		spin_unlock_irqrestore(&sibling->active.lock, flags);
 	}
@@ -4804,7 +4856,11 @@ static void virtual_submission_tasklet(u
 	if (unlikely(!mask))
 		return;
 
+#ifdef __NetBSD__
+	int s = splsoftserial(); /* block tasklets=softints */
+#else
 	local_irq_disable();
+#endif
 	for (n = 0; READ_ONCE(ve->request) && n < ve->num_siblings; n++) {
 		struct intel_engine_cs *sibling = ve->siblings[n];
 		struct ve_node * const node = &ve->nodes[sibling->id];
@@ -4812,11 +4868,11 @@ static void virtual_submission_tasklet(u
 		bool first;
 
 		if (unlikely(!(mask & sibling->mask))) {
-			if (!RB_EMPTY_NODE(&node->rb)) {
+			if (node->inserted) {
 				spin_lock(&sibling->active.lock);
 				rb_erase_cached(&node->rb,
 						&sibling->execlists.virtual);
-				RB_CLEAR_NODE(&node->rb);
+				node->inserted = false;
 				spin_unlock(&sibling->active.lock);
 			}
 			continue;
@@ -4824,7 +4880,7 @@ static void virtual_submission_tasklet(u
 
 		spin_lock(&sibling->active.lock);
 
-		if (!RB_EMPTY_NODE(&node->rb)) {
+		if (node->inserted) {
 			/*
 			 * Cheat and avoid rebalancing the tree if we can
 			 * reuse this node in situ.
@@ -4835,8 +4891,24 @@ static void virtual_submission_tasklet(u
 				goto submit_engine;
 
 			rb_erase_cached(&node->rb, &sibling->execlists.virtual);
+			node->inserted = false;
 		}
 
+#ifdef __NetBSD__
+		__USE(parent);
+		__USE(rb);
+		struct ve_node *collision __diagused;
+		/* XXX kludge to get insertion order */
+		node->order = ve->order++;
+		collision = rb_tree_insert_node(
+			&sibling->execlists.virtual.rb_root.rbr_tree,
+			node);
+		KASSERT(collision == node);
+		node->inserted = true;
+		first = rb_tree_find_node_geq(
+			&sibling->execlists.virtual.rb_root.rbr_tree,
+			&node->prio) == node;
+#else
 		rb = NULL;
 		first = true;
 		parent = &sibling->execlists.virtual.rb_root.rb_node;
@@ -4857,9 +4929,10 @@ static void virtual_submission_tasklet(u
 		rb_insert_color_cached(&node->rb,
 				       &sibling->execlists.virtual,
 				       first);
+#endif
 
 submit_engine:
-		GEM_BUG_ON(RB_EMPTY_NODE(&node->rb));
+		GEM_BUG_ON(!node->inserted);
 		node->prio = prio;
 		if (first && prio > sibling->execlists.queue_priority_hint) {
 			sibling->execlists.queue_priority_hint = prio;
@@ -4868,7 +4941,11 @@ submit_engine:
 
 		spin_unlock(&sibling->active.lock);
 	}
+#ifdef __NetBSD__
+	splx(s);
+#else
 	local_irq_enable();
+#endif
 }
 
 static void virtual_submit_request(struct i915_request *rq)
@@ -5034,8 +5111,8 @@ intel_execlists_create_virtual(struct in
 			goto err_put;
 		}
 
-		GEM_BUG_ON(RB_EMPTY_NODE(&ve->nodes[sibling->id].rb));
-		RB_CLEAR_NODE(&ve->nodes[sibling->id].rb);
+		GEM_BUG_ON(!ve->nodes[sibling->id].inserted);
+		ve->nodes[sibling->id].inserted = false;
 
 		ve->siblings[ve->num_siblings++] = sibling;
 		ve->base.mask |= sibling->mask;
@@ -5195,7 +5272,9 @@ void intel_execlists_show_requests(struc
 	if (execlists->queue_priority_hint != INT_MIN)
 		drm_printf(m, "\t\tQueue priority hint: %d\n",
 			   execlists->queue_priority_hint);
-	for (rb = rb_first_cached(&execlists->queue); rb; rb = rb_next(rb)) {
+	for (rb = rb_first_cached(&execlists->queue);
+	     rb;
+	     rb = rb_next2(&execlists->queue.rb_root, rb)) {
 		struct i915_priolist *p = rb_entry(rb, typeof(*p), node);
 		int i;
 
@@ -5217,7 +5296,9 @@ void intel_execlists_show_requests(struc
 
 	last = NULL;
 	count = 0;
-	for (rb = rb_first_cached(&execlists->virtual); rb; rb = rb_next(rb)) {
+	for (rb = rb_first_cached(&execlists->virtual);
+	     rb;
+	     rb = rb_next2(&execlists->virtual.rb_root, rb)) {
 		struct virtual_engine *ve =
 			rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
 		struct i915_request *rq = READ_ONCE(ve->request);

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_ppgtt.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_ppgtt.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_ppgtt.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_ppgtt.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/slab.h>
 
@@ -88,7 +88,11 @@ __set_pd_entry(struct i915_page_director
 
 	atomic_inc(px_used(pd));
 	pd->entry[idx] = to;
+#ifdef __NetBSD__
+	write_dma_entry(px_base(pd), idx, encode(to->map->dm_segs[0].ds_addr, I915_CACHE_LLC));
+#else
 	write_dma_entry(px_base(pd), idx, encode(to->daddr, I915_CACHE_LLC));
+#endif
 }
 
 void
@@ -211,7 +215,11 @@ void ppgtt_init(struct i915_ppgtt *ppgtt
 
 	ppgtt->vm.gt = gt;
 	ppgtt->vm.i915 = i915;
+#ifdef __NetBSD__
+	ppgtt->vm.dmat = i915->drm.dmat;
+#else
 	ppgtt->vm.dma = &i915->drm.pdev->dev;
+#endif
 	ppgtt->vm.total = BIT_ULL(INTEL_INFO(i915)->ppgtt_size);
 
 	i915_address_space_init(&ppgtt->vm, VM_CLASS_PPGTT);
Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_rc6.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_rc6.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_rc6.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_rc6.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/pm_runtime.h>
 
@@ -482,14 +482,14 @@ static bool rc6_supported(struct intel_r
 static void rpm_get(struct intel_rc6 *rc6)
 {
 	GEM_BUG_ON(rc6->wakeref);
-	pm_runtime_get_sync(&rc6_to_i915(rc6)->drm.pdev->dev);
+	pm_runtime_get_sync(pci_dev_dev(rc6_to_i915(rc6)->drm.pdev));
 	rc6->wakeref = true;
 }
 
 static void rpm_put(struct intel_rc6 *rc6)
 {
 	GEM_BUG_ON(!rc6->wakeref);
-	pm_runtime_put(&rc6_to_i915(rc6)->drm.pdev->dev);
+	pm_runtime_put(pci_dev_dev(rc6_to_i915(rc6)->drm.pdev));
 	rc6->wakeref = false;
 }
 
Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_ring_submission.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_ring_submission.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * Copyright © 2008-2010 Intel Corporation
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_ring_submission.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_ring_submission.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/log2.h>
 
@@ -511,6 +511,19 @@ static void set_hws_pga(struct intel_eng
 	intel_uncore_write(engine->uncore, HWS_PGA, addr);
 }
 
+#ifdef __NetBSD__
+static void
+ring_setup_phys_status_page(struct intel_engine_cs *engine)
+{
+	struct drm_i915_gem_object *obj = engine->status_page.vma->obj;
+	bus_addr_t addr;
+
+	GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj));
+	addr = obj->mm.pages->sgl[0].sg_dmamap->dm_segs[0].ds_addr;
+	set_hws_pga(engine, addr);
+	set_hwstam(engine, ~0u);
+}
+#else
 static struct page *status_page(struct intel_engine_cs *engine)
 {
 	struct drm_i915_gem_object *obj = engine->status_page.vma->obj;
@@ -524,6 +537,7 @@ static void ring_setup_phys_status_page(
 	set_hws_pga(engine, PFN_PHYS(page_to_pfn(status_page(engine))));
 	set_hwstam(engine, ~0u);
 }
+#endif
 
 static void set_hwsp(struct intel_engine_cs *engine, u32 offset)
 {
Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_sseu.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_sseu.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_sseu.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_sseu.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include "i915_drv.h"
 #include "intel_lrc_reg.h"
@@ -101,7 +101,7 @@ u32 intel_sseu_make_rpcs(struct drm_i915
 			 * amount of half of all available subslices per slice.
 			 */
 			ctx_sseu.subslice_mask =
-				~(~0 << (hweight8(ctx_sseu.subslice_mask) / 2));
+				~(~0u << (hweight8(ctx_sseu.subslice_mask) / 2));
 			ctx_sseu.slice_mask = 0x1;
 		}
 	}
Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_timeline.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_timeline.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_timeline.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_timeline.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include "i915_drv.h"
 
@@ -17,6 +17,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_timeli
 #include "intel_ring.h"
 #include "intel_timeline.h"
 
+#include <linux/nbsd-namespace.h>
+
 #define ptr_set_bit(ptr, bit) ((typeof(ptr))((unsigned long)(ptr) | BIT(bit)))
 #define ptr_test_bit(ptr, bit) ((unsigned long)(ptr) & BIT(bit))
 
Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_workarounds.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_workarounds.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_workarounds.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_workarounds.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include "i915_drv.h"
 #include "intel_context.h"
@@ -16,6 +16,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_workar
 #include "intel_ring.h"
 #include "intel_workarounds.h"
 
+#include <linux/nbsd-namespace.h>
+
 /**
  * DOC: Hardware workarounds
  *

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c:1.3	Sun Dec 19 01:43:50 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_reset.c,v 1.3 2021/12/19 01:43:50 riastradh Exp $	*/
+/*	$NetBSD: intel_reset.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_reset.c,v 1.3 2021/12/19 01:43:50 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_reset.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/sched/mm.h>
 #include <linux/stop_machine.h>
@@ -28,6 +28,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_reset.
 #include "uc/intel_guc.h"
 #include "uc/intel_guc_submission.h"
 
+#include <linux/nbsd-namespace.h>
+
 #define RESET_MAX_RETRIES 3
 
 /* XXX How to handle concurrent GGTT updates using tiling registers? */
@@ -708,10 +710,16 @@ static void revoke_mmaps(struct intel_gt
 		node = &vma->mmo->vma_node;
 		vma_offset = vma->ggtt_view.partial.offset << PAGE_SHIFT;
 
+#ifdef __NetBSD__
+		__USE(node);
+		__USE(vma_offset);
+		panic("NYI");
+#else
 		unmap_mapping_range(gt->i915->drm.anon_inode->i_mapping,
 				    drm_vma_node_offset_addr(node) + vma_offset,
 				    vma->size,
 				    1);
+#endif
 	}
 }
 
@@ -1162,8 +1170,8 @@ static void intel_gt_reset_global(struct
 				  u32 engine_mask,
 				  const char *reason)
 {
-	struct kobject *kobj = &gt->i915->drm.primary->kdev->kobj;
 #ifndef __NetBSD__		/* XXX kobject uevent...?  */
+	struct kobject *kobj = &gt->i915->drm.primary->kdev->kobj;
 	char *error_event[] = { I915_ERROR_UEVENT "=1", NULL };
 	char *reset_event[] = { I915_RESET_UEVENT "=1", NULL };
 	char *reset_done_event[] = { I915_ERROR_UEVENT "=0", NULL };
@@ -1271,19 +1279,13 @@ void intel_gt_handle_error(struct intel_
 
 	/* Full reset needs the mutex, stop any other user trying to do so. */
 	if (test_and_set_bit(I915_RESET_BACKOFF, &gt->reset.flags)) {
-#ifdef __NetBSD__
 		int ret;
-		spin_lock(&dev_priv->gpu_error.reset_lock);
+		spin_lock(&gt->reset.lock);
 		DRM_SPIN_WAIT_NOINTR_UNTIL(ret,
-		    &dev_priv->gpu_error.reset_queue,
-		    &dev_priv->gpu_error.reset_lock,
-		    !test_bit(I915_RESET_BACKOFF,
-			&dev_priv->gpu_error.flags));
-		spin_unlock(&dev_priv->gpu_error.reset_lock);
-#else
-		wait_event(gt->reset.queue,
-			   !test_bit(I915_RESET_BACKOFF, &gt->reset.flags));
-#endif
+		    &gt->reset.queue,
+		    &gt->reset.lock,
+		    !test_bit(I915_RESET_BACKOFF, &gt->reset.flags));
+		spin_unlock(&gt->reset.lock);
 		goto out; /* piggy-back on the other reset */
 	}
 
@@ -1306,14 +1308,9 @@ void intel_gt_handle_error(struct intel_
 				 &gt->reset.flags);
 	clear_bit_unlock(I915_RESET_BACKOFF, &gt->reset.flags);
 	smp_mb__after_atomic();
-#ifdef __NetBSD__
-	spin_lock(&dev_priv->gpu_error.reset_lock);
-	DRM_SPIN_WAKEUP_ALL(&dev_priv->gpu_error.reset_queue,
-	    &dev_priv->gpu_error.reset_lock);
-	spin_unlock(&dev_priv->gpu_error.reset_lock);
-#else
-	wake_up_all(&gt->reset.queue);
-#endif
+	spin_lock(&gt->reset.lock);
+	DRM_SPIN_WAKEUP_ALL(&gt->reset.queue, &gt->reset.lock);
+	spin_unlock(&gt->reset.lock);
 
 out:
 	intel_runtime_pm_put(gt->uncore->rpm, wakeref);
@@ -1328,9 +1325,12 @@ int intel_gt_reset_trylock(struct intel_
 	while (test_bit(I915_RESET_BACKOFF, &gt->reset.flags)) {
 		rcu_read_unlock();
 
-		if (wait_event_interruptible(gt->reset.queue,
-					     !test_bit(I915_RESET_BACKOFF,
-						       &gt->reset.flags)))
+		int ret;
+		spin_lock(&gt->reset.lock);
+		DRM_SPIN_WAIT_UNTIL(ret, &gt->reset.queue, &gt->reset.lock,
+		    !test_bit(I915_RESET_BACKOFF, &gt->reset.flags));
+		spin_unlock(&gt->reset.lock);
+		if (ret)
 			return -EINTR;
 
 		rcu_read_lock();
@@ -1358,9 +1358,12 @@ int intel_gt_terminally_wedged(struct in
 		return -EIO;
 
 	/* Reset still in progress? Maybe we will recover? */
-	if (wait_event_interruptible(gt->reset.queue,
-				     !test_bit(I915_RESET_BACKOFF,
-					       &gt->reset.flags)))
+	int ret;
+	spin_lock(&gt->reset.lock);
+	DRM_SPIN_WAIT_UNTIL(ret, &gt->reset.queue, &gt->reset.lock,
+	    !test_bit(I915_RESET_BACKOFF, &gt->reset.flags));
+	spin_unlock(&gt->reset.lock);
+	if (ret)
 		return -EINTR;
 
 	return intel_gt_is_wedged(gt) ? -EIO : 0;
@@ -1376,7 +1379,8 @@ void intel_gt_set_wedged_on_init(struct 
 
 void intel_gt_init_reset(struct intel_gt *gt)
 {
-	init_waitqueue_head(&gt->reset.queue);
+	spin_lock_init(&gt->reset.lock);
+	DRM_INIT_WAITQUEUE(&gt->reset.queue, "i915rst");
 	mutex_init(&gt->reset.mutex);
 	init_srcu_struct(&gt->reset.backoff_srcu);
 
@@ -1387,6 +1391,8 @@ void intel_gt_init_reset(struct intel_gt
 void intel_gt_fini_reset(struct intel_gt *gt)
 {
 	cleanup_srcu_struct(&gt->reset.backoff_srcu);
+	DRM_DESTROY_WAITQUEUE(&gt->reset.queue);
+	spin_lock_destroy(&gt->reset.lock);
 }
 
 static void intel_wedge_me(struct work_struct *work)
Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset_types.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset_types.h:1.3 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset_types.h:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset_types.h:1.3	Sun Dec 19 11:12:51 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset_types.h	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_reset_types.h,v 1.3 2021/12/19 11:12:51 riastradh Exp $	*/
+/*	$NetBSD: intel_reset_types.h,v 1.4 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /* SPDX-License-Identifier: MIT */
 /*
@@ -51,11 +51,8 @@ struct intel_reset {
 	 * Waitqueue to signal when the reset has completed. Used by clients
 	 * that wait for dev_priv->mm.wedged to settle.
 	 */
-#ifdef __NetBSD__
+	spinlock_t lock;
 	drm_waitqueue_t queue;
-#else
-	wait_queue_head_t queue;
-#endif
 
 	struct srcu_struct backoff_srcu;
 };
Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rps.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rps.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rps.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rps.c:1.3	Sun Dec 19 01:53:50 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rps.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_rps.c,v 1.3 2021/12/19 01:53:50 riastradh Exp $	*/
+/*	$NetBSD: intel_rps.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_rps.c,v 1.3 2021/12/19 01:53:50 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_rps.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $");
 
 #include "i915_drv.h"
 #include "intel_gt.h"
@@ -17,6 +17,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_rps.c,
 #include "intel_sideband.h"
 /* #include "../../../platform/x86/intel_ips.h" */
 
+#include <linux/nbsd-namespace.h>
+
 /*
  * Lock protecting IPS related data structures
  */

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/uc/intel_uc_fw.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/uc/intel_uc_fw.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/uc/intel_uc_fw.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/uc/intel_uc_fw.c:1.2	Sat Dec 18 23:45:31 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/uc/intel_uc_fw.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_uc_fw.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $	*/
+/*	$NetBSD: intel_uc_fw.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_uc_fw.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_uc_fw.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <linux/bitfield.h>
 #include <linux/firmware.h>
@@ -600,7 +600,7 @@ size_t intel_uc_fw_copy_rsa(struct intel
 	uio.uio_rw = UIO_READ;
 	UIO_SETUP_SYSSPACE(&uio);
 	/* XXX errno NetBSD->Linux */
-	return -ubc_uiomove(uc_fw->obj.base.filp, &uio, size, UVM_ADV_NORMAL,
+	return -ubc_uiomove(uc_fw->obj->base.filp, &uio, size, UVM_ADV_NORMAL,
 	    UBC_READ);
 #else
 	return sg_pcopy_to_buffer(pages->sgl, pages->nents, dst, size, offset);

Index: src/sys/external/bsd/drm2/drm/drm_module.c
diff -u src/sys/external/bsd/drm2/drm/drm_module.c:1.26 src/sys/external/bsd/drm2/drm/drm_module.c:1.27
--- src/sys/external/bsd/drm2/drm/drm_module.c:1.26	Sun Dec 19 11:01:29 2021
+++ src/sys/external/bsd/drm2/drm/drm_module.c	Sun Dec 19 11:49:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_module.c,v 1.26 2021/12/19 11:01:29 riastradh Exp $	*/
+/*	$NetBSD: drm_module.c,v 1.27 2021/12/19 11:49:11 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_module.c,v 1.26 2021/12/19 11:01:29 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_module.c,v 1.27 2021/12/19 11:49:11 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/condvar.h>
@@ -128,7 +128,7 @@ drm_init(void)
 
 	spin_lock_init(&drm_minor_lock);
 	idr_init(&drm_minors_idr);
-	srcu_init(&drm_unplug_srcu, "drmunplg");
+	_init_srcu_struct(&drm_unplug_srcu, "drmunplg");
 	linux_mutex_init(&drm_global_mutex);
 	linux_mutex_init(&drm_kernel_fb_helper_lock);
 	drm_connector_ida_init();
@@ -163,7 +163,7 @@ drm_fini(void)
 	drm_connector_ida_destroy();
 	linux_mutex_destroy(&drm_kernel_fb_helper_lock);
 	linux_mutex_destroy(&drm_global_mutex);
-	srcu_fini(&drm_unplug_srcu);
+	cleanup_srcu_struct(&drm_unplug_srcu);
 	idr_destroy(&drm_minors_idr);
 	spin_lock_destroy(&drm_minor_lock);
 	drm_agp_hooks_fini();

Index: src/sys/external/bsd/drm2/i915drm/files.i915drmkms
diff -u src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.78 src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.79
--- src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.78	Sun Dec 19 11:45:01 2021
+++ src/sys/external/bsd/drm2/i915drm/files.i915drmkms	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-#	$NetBSD: files.i915drmkms,v 1.78 2021/12/19 11:45:01 riastradh Exp $
+#	$NetBSD: files.i915drmkms,v 1.79 2021/12/19 11:49:12 riastradh Exp $
 
 version	20180827
 
@@ -33,6 +33,10 @@ makeoptions	i915drmkms	"CPPFLAGS.i915drm
 makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500" # milliseconds
 makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_STOP_TIMEOUT=100" # milliseconds
 makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_PREEMPT_TIMEOUT=640" # milliseconds
+makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_CAPTURE_ERROR=1"
+makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_SELFTEST=0"
+makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_PM=1"
+makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_INTEL_MEI_HDCP=0"
 
 makeoptions	i915drmkms	"CWARNFLAGS.i915drmkms"+="-Wno-missing-field-initializers"
 makeoptions	i915drmkms	"CWARNFLAGS.i915drmkms"+="-Wno-pointer-arith"
@@ -50,16 +54,23 @@ makeoptions 	i915drmkms 	"CWARNFLAGS.int
 makeoptions	intelfb		"CPPFLAGS.intelfb"+="${CPPFLAGS.i915drmkms}"
 makeoptions	intelfb		"CWARNFLAGS.intelfb"+="${CWARNFLAGS.i915drmkms}"
 
-file	external/bsd/drm2/i915drm/i915_gem_userptr.c	i915drmkms
-file	external/bsd/drm2/i915drm/i915_gemfs.c	i915drmkms
+# Local additions
 file	external/bsd/drm2/i915drm/i915_module.c		i915drmkms
 file	external/bsd/drm2/i915drm/i915_pci_autoconf.c	i915drmkms
+file	external/bsd/drm2/i915drm/intelfb.c		intelfb
+
+# Local overrides
+file	external/bsd/drm2/i915drm/i915_gem_userptr.c	i915drmkms
+file	external/bsd/drm2/i915drm/i915_gemfs.c	i915drmkms
 file	external/bsd/drm2/i915drm/i915_perf.c	i915drmkms
-file	external/bsd/drm2/i915drm/i915_sysfs.c	i915drmkms
 file	external/bsd/drm2/i915drm/i915_switcheroo.c	i915drmkms
+file	external/bsd/drm2/i915drm/i915_sysfs.c	i915drmkms
 file	external/bsd/drm2/i915drm/icl_dsi.c		i915drmkms
+file	external/bsd/drm2/i915drm/intel_dsi_dcs_backlight.c	i915drmkms
 file	external/bsd/drm2/i915drm/intel_gtt_subr.c	i915drmkms
-file	external/bsd/drm2/i915drm/intelfb.c		intelfb
+file	external/bsd/drm2/i915drm/intel_guc_log.c	i915drmkms
+file	external/bsd/drm2/i915drm/intel_lpe_audio.c	i915drmkms
+file	external/bsd/drm2/i915drm/intel_region_lmem.c	i915drmkms
 file	external/bsd/drm2/i915drm/vlv_dsi.c	i915drmkms
 
 # Generated from i915drmkms2netbsd.
@@ -103,7 +114,7 @@ file	external/bsd/drm2/dist/drm/i915/dis
 file	external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_hdmi.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_hotplug.c	i915drmkms
-file	external/bsd/drm2/dist/drm/i915/display/intel_lpe_audio.c	i915drmkms
+#file	external/bsd/drm2/dist/drm/i915/display/intel_lpe_audio.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_lspcon.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_lvds.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_opregion.c	i915drmkms
@@ -199,7 +210,7 @@ file	external/bsd/drm2/dist/drm/i915/i91
 file	external/bsd/drm2/dist/drm/i915/i915_gem_fence_reg.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/i915_getparam.c	i915drmkms
-#file	external/bsd/drm2/dist/drm/i915/i915_globals.c	i915drmkms
+file	external/bsd/drm2/dist/drm/i915/i915_globals.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/i915_irq.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/i915_memcpy.c	i915drmkms
 #file	external/bsd/drm2/dist/drm/i915/i915_mm.c	i915drmkms
@@ -226,7 +237,7 @@ file	external/bsd/drm2/dist/drm/i915/int
 file	external/bsd/drm2/dist/drm/i915/intel_memory_region.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/intel_pch.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/intel_pm.c	i915drmkms
-file	external/bsd/drm2/dist/drm/i915/intel_region_lmem.c	i915drmkms
+#file	external/bsd/drm2/dist/drm/i915/intel_region_lmem.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/intel_sideband.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/intel_uncore.c	i915drmkms

Index: src/sys/external/bsd/drm2/i915drm/i915_module.c
diff -u src/sys/external/bsd/drm2/i915drm/i915_module.c:1.16 src/sys/external/bsd/drm2/i915drm/i915_module.c:1.17
--- src/sys/external/bsd/drm2/i915drm/i915_module.c:1.16	Sun Dec 19 11:37:06 2021
+++ src/sys/external/bsd/drm2/i915drm/i915_module.c	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_module.c,v 1.16 2021/12/19 11:37:06 riastradh Exp $	*/
+/*	$NetBSD: i915_module.c,v 1.17 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_module.c,v 1.16 2021/12/19 11:37:06 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_module.c,v 1.17 2021/12/19 11:49:12 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/module.h>
@@ -43,6 +43,7 @@ __KERNEL_RCSID(0, "$NetBSD: i915_module.
 #include <drm/drm_sysctl.h>
 
 #include "i915_drv.h"
+#include "i915_globals.h"
 #include "gt/intel_rps.h"
 
 MODULE(MODULE_CLASS_DRIVER, i915drmkms, "drmkms,drmkms_pci"); /* XXX drmkms_i2c */
@@ -68,7 +69,8 @@ i915drmkms_init(void)
 	if (error)
 		return error;
 
-	error = -i915_global_buddy_init();
+	/* XXX errno Linux->NetBSD */
+	error = -i915_globals_init();
 	if (error)
 		return error;
 
@@ -101,6 +103,8 @@ i915drmkms_fini(void)
 	spin_lock_destroy(&i915_sw_fence_lock);
 	spin_lock_destroy(&mchdev_lock);
 	drm_sysctl_fini(&i915_def);
+
+	i915_globals_exit();
 }
 
 static int

Index: src/sys/external/bsd/drm2/i915drm/intelfb.c
diff -u src/sys/external/bsd/drm2/i915drm/intelfb.c:1.21 src/sys/external/bsd/drm2/i915drm/intelfb.c:1.22
--- src/sys/external/bsd/drm2/i915drm/intelfb.c:1.21	Sun Dec 19 11:38:46 2021
+++ src/sys/external/bsd/drm2/i915drm/intelfb.c	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intelfb.c,v 1.21 2021/12/19 11:38:46 riastradh Exp $	*/
+/*	$NetBSD: intelfb.c,v 1.22 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intelfb.c,v 1.21 2021/12/19 11:38:46 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intelfb.c,v 1.22 2021/12/19 11:49:12 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/bus.h>
@@ -40,6 +40,8 @@ __KERNEL_RCSID(0, "$NetBSD: intelfb.c,v 
 #include <drm/drmfb.h>
 #include <drm/drmfb_pci.h>
 
+#include "display/intel_display_types.h"
+#include "display/intel_vga.h"
 #include "i915_drv.h"
 #include "i915_pci.h"
 #include "intelfb.h"
@@ -54,6 +56,8 @@ static bool	intelfb_shutdown(device_t, i
 
 static paddr_t	intelfb_drmfb_mmapfb(struct drmfb_softc *, off_t, int);
 
+static void	intelfb_disable_vga(struct drm_device *);
+
 struct intelfb_softc {
 	struct drmfb_softc		sc_drmfb; /* XXX Must be first.  */
 	device_t			sc_dev;
@@ -69,7 +73,7 @@ static const struct drmfb_params intelfb
 	.dp_mmap = drmfb_pci_mmap,
 	.dp_ioctl = drmfb_pci_ioctl,
 	.dp_is_vga_console = drmfb_pci_is_vga_console,
-	.dp_disable_vga = i915_disable_vga,
+	.dp_disable_vga = intelfb_disable_vga,
 };
 
 CFATTACH_DECL_NEW(intelfb, sizeof(struct intelfb_softc),
@@ -102,15 +106,13 @@ intelfb_attach(device_t parent, device_t
 	if (error) {
 		aprint_error_dev(self, "failed to schedule mode set: %d\n",
 		    error);
-		goto fail1;
+		return;
 	}
 	config_pending_incr(self);
 	sc->sc_scheduled = true;
 
 	/* Success!  */
 	return;
-
-fail0:	return;
 }
 
 static int
@@ -186,12 +188,23 @@ intelfb_drmfb_mmapfb(struct drmfb_softc 
 	struct intel_fbdev *const fbdev = container_of(helper,
 	    struct intel_fbdev, helper);
 	struct drm_device *const dev = helper->dev;
-	struct drm_i915_private *const dev_priv = dev->dev_private;
+	struct drm_i915_private *const i915 =
+	    container_of(dev, struct drm_i915_private, drm);
+	struct i915_ggtt *const ggtt = &i915->ggtt;
+	struct i915_vma *const vma = fbdev->vma;
 
 	KASSERT(0 <= offset);
-	KASSERT(offset < fbdev->fb->obj->base.size);
+	KASSERT(offset < vma->node.size);
 
-	return bus_space_mmap(dev->bst, dev_priv->gtt.mappable_base,
-	    i915_gem_obj_ggtt_offset(fbdev->fb->obj) + offset,
+	return bus_space_mmap(dev->bst, ggtt->gmadr.start, vma->node.start,
 	    prot, BUS_SPACE_MAP_PREFETCHABLE);
 }
+
+static void
+intelfb_disable_vga(struct drm_device *dev)
+{
+	struct drm_i915_private *i915 =
+	    container_of(dev, struct drm_i915_private, drm);
+
+	intel_vga_disable(i915);
+}

Index: src/sys/external/bsd/drm2/include/i915_trace.h
diff -u src/sys/external/bsd/drm2/include/i915_trace.h:1.21 src/sys/external/bsd/drm2/include/i915_trace.h:1.22
--- src/sys/external/bsd/drm2/include/i915_trace.h:1.21	Sun Dec 19 11:48:19 2021
+++ src/sys/external/bsd/drm2/include/i915_trace.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_trace.h,v 1.21 2021/12/19 11:48:19 riastradh Exp $	*/
+/*	$NetBSD: i915_trace.h,v 1.22 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013, 2018 The NetBSD Foundation, Inc.
@@ -435,7 +435,7 @@ DEFINE_TRACE5(i915,, pipe__update__start
     "uint32_t"/*min*/,
     "uint32_t"/*max*/);
 static inline void
-trace_i915_pipe_update_start(struct intel_crtc *crtc)
+trace_intel_pipe_update_start(struct intel_crtc *crtc)
 {
 	TRACE5(i915,, pipe__update__start,
 	    crtc->pipe,
@@ -453,7 +453,7 @@ DEFINE_TRACE5(i915,, pipe__update__vblan
     "uint32_t"/*min*/,
     "uint32_t"/*max*/);
 static inline void
-trace_i915_pipe_update_vblank_evaded(struct intel_crtc *crtc)
+trace_intel_pipe_update_vblank_evaded(struct intel_crtc *crtc)
 {
 	TRACE5(i915,, pipe__update__vblank__evaded,
 	    crtc->pipe,
@@ -468,7 +468,7 @@ DEFINE_TRACE3(i915,, pipe__update__end,
     "uint32_t"/*frame*/,
     "int"/*scanline*/);
 static inline void
-trace_i915_pipe_update_end(struct intel_crtc *crtc, uint32_t frame,
+trace_intel_pipe_update_end(struct intel_crtc *crtc, uint32_t frame,
     int scanline)
 {
 	TRACE3(i915,, pipe__update__end,  crtc->pipe, frame, scanline);
@@ -517,7 +517,8 @@ DEFINE_TRACE3(i915,, memory_cxsr,
     "bool"/*was_enabled*/,
     "bool"/*enable*/);
 static inline void
-trace_intel_memory_cxsr(struct drm_i915_private *dev_priv, bool was_enabled, bool enable)
+trace_intel_memory_cxsr(struct drm_i915_private *dev_priv, bool was_enabled,
+    bool enable)
 {
 	TRACE3(i915,, memory_cxsr,  dev_priv, was_enabled, enable);
 }
@@ -546,8 +547,11 @@ DEFINE_TRACE4(i915,, vlv_fifo_size,
     "int"/*sprite1_start*/,
     "int"/*fifo_size*/);
 static inline void
-trace_vlv_fifo_size(struct intel_crtc *crtc, int sprite0_start, int sprite1_start, int fifo_size)
+trace_vlv_fifo_size(struct intel_crtc *crtc, int sprite0_start,
+    int sprite1_start, int fifo_size)
 {
-	TRACE4(i915,, vlv_fifo_size,  crtc, sprite0_start, sprite1_start, fifo_size);
+	TRACE4(i915,, vlv_fifo_size,  crtc, sprite0_start, sprite1_start,
+	    fifo_size);
 }
+
 #endif  /* _I915_TRACE_H_ */

Index: src/sys/external/bsd/drm2/include/asm/iosf_mbi.h
diff -u src/sys/external/bsd/drm2/include/asm/iosf_mbi.h:1.1 src/sys/external/bsd/drm2/include/asm/iosf_mbi.h:1.2
--- src/sys/external/bsd/drm2/include/asm/iosf_mbi.h:1.1	Sun Dec 19 00:31:27 2021
+++ src/sys/external/bsd/drm2/include/asm/iosf_mbi.h	Sun Dec 19 11:49:12 2021
@@ -0,0 +1,65 @@
+/*	$NetBSD: iosf_mbi.h,v 1.2 2021/12/19 11:49:12 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_ASM_IOSF_MBI_H_
+#define _LINUX_ASM_IOSF_MBI_H_
+
+struct notifier_block;
+
+enum {
+	MBI_PMIC_BUS_ACCESS_BEGIN,
+	MBI_PMIC_BUS_ACCESS_END,
+};
+
+static inline void
+iosf_mbi_punit_acquire(void)
+{
+}
+
+static inline void
+iosf_mbi_punit_release(void)
+{
+}
+
+static inline void
+iosf_mbi_assert_punit_acquired(void)
+{
+}
+
+static inline void
+iosf_mbi_register_pmic_bus_access_notifier(struct notifier_block *notifier)
+{
+}
+
+static inline void
+iosf_mbi_unregister_pmic_bus_access_notifier_unlocked(
+    struct notifier_block *notifier)
+{
+}
+
+#endif  /* _LINUX_ASM_IOSF_MBI_H_ */

Index: src/sys/external/bsd/drm2/include/drm/drm_mipi_dsi.h
diff -u src/sys/external/bsd/drm2/include/drm/drm_mipi_dsi.h:1.2 src/sys/external/bsd/drm2/include/drm/drm_mipi_dsi.h:1.3
--- src/sys/external/bsd/drm2/include/drm/drm_mipi_dsi.h:1.2	Sun Dec 19 11:38:04 2021
+++ src/sys/external/bsd/drm2/include/drm/drm_mipi_dsi.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_mipi_dsi.h,v 1.2 2021/12/19 11:38:04 riastradh Exp $	*/
+/*	$NetBSD: drm_mipi_dsi.h,v 1.3 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -32,6 +32,8 @@
 #ifndef _DRM_MIPI_DSI_H_
 #define _DRM_MIPI_DSI_H_
 
+struct drm_dsc_picture_parameter_set;
+struct mipi_dsi_device;
 struct mipi_dsi_host_ops;
 
 enum mipi_dsi_pixel_format {
@@ -42,4 +44,15 @@ struct mipi_dsi_host {
 	char dummy;
 };
 
+static inline void
+mipi_dsi_picture_parameter_set(struct mipi_dsi_device *dsi,
+    struct drm_dsc_picture_parameter_set *pps)
+{
+}
+
+static inline void
+mipi_dsi_compression_mode(struct mipi_dsi_device *dsi, bool mode)
+{
+}
+
 #endif /*_DRM_MIPI_DSI_H_*/

Index: src/sys/external/bsd/drm2/include/drm/i915_mei_hdcp_interface.h
diff -u src/sys/external/bsd/drm2/include/drm/i915_mei_hdcp_interface.h:1.1 src/sys/external/bsd/drm2/include/drm/i915_mei_hdcp_interface.h:1.2
--- src/sys/external/bsd/drm2/include/drm/i915_mei_hdcp_interface.h:1.1	Sun Dec 19 11:02:05 2021
+++ src/sys/external/bsd/drm2/include/drm/i915_mei_hdcp_interface.h	Sun Dec 19 11:49:12 2021
@@ -11,9 +11,34 @@ enum hdcp_wired_protocol {
 	HDCP_PROTOCOL_DP
 };
 
+enum hdcp_port_type {
+	HDCP_PORT_TYPE_INVALID		= 0,
+	HDCP_PORT_TYPE_INTEGRATED	= 1,
+	HDCP_PORT_TYPE_LSPCON		= 2,
+	HDCP_PORT_TYPE_CPDP		= 3,
+};
+
+enum mei_fw_ddi {
+        MEI_DDI_INVALID_PORT		= 0,
+	MEI_DDI_B			= 1,
+	MEI_DDI_C			= 2,
+	MEI_DDI_E			= 3,
+	MEI_DDI_F			= 4,
+	MEI_DDI_A			= 7,
+};
+
+enum mei_fw_tc {
+	MEI_INVALID_TRANSCODER = 0,
+};
+
 struct hdcp_port_data {
 	struct hdcp2_streamid_type *streams;
 	uint32_t seq_num_m;
+	enum mei_fw_ddi fw_ddi;
+	enum mei_fw_tc fw_tc;
+	uint8_t port_type;
+	uint8_t protocol;
+	uint16_t k;
 };
 
 struct i915_hdcp_component_ops {

Index: src/sys/external/bsd/drm2/include/linux/device.h
diff -u src/sys/external/bsd/drm2/include/linux/device.h:1.13 src/sys/external/bsd/drm2/include/linux/device.h:1.14
--- src/sys/external/bsd/drm2/include/linux/device.h:1.13	Sun Dec 19 10:51:01 2021
+++ src/sys/external/bsd/drm2/include/linux/device.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: device.h,v 1.13 2021/12/19 10:51:01 riastradh Exp $	*/
+/*	$NetBSD: device.h,v 1.14 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -53,6 +53,8 @@
 		aprint_error("error: " FMT, ##__VA_ARGS__);		      \
 } while (0)
 
+#define	dev_err_once	dev_err	/* XXX rate-limit */
+
 #define	dev_warn(DEV, FMT, ...)	do {					      \
 	if (DEV)							      \
 		aprint_error_dev((DEV), "warn: " FMT, ##__VA_ARGS__);	      \
Index: src/sys/external/bsd/drm2/include/linux/i2c.h
diff -u src/sys/external/bsd/drm2/include/linux/i2c.h:1.13 src/sys/external/bsd/drm2/include/linux/i2c.h:1.14
--- src/sys/external/bsd/drm2/include/linux/i2c.h:1.13	Sun Dec 19 10:57:27 2021
+++ src/sys/external/bsd/drm2/include/linux/i2c.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i2c.h,v 1.13 2021/12/19 10:57:27 riastradh Exp $	*/
+/*	$NetBSD: i2c.h,v 1.14 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -199,6 +199,7 @@ i2c_set_adapdata(struct i2c_adapter *ada
 }
 
 /* XXX Make the nm output a little more greppable...  */
+#define	__i2c_transfer		linux___i2c_transfer
 #define	i2c_master_recv		linux_i2c_master_recv
 #define	i2c_master_send		linux_i2c_master_send
 #define	i2c_new_device		linux_i2c_new_device
@@ -209,6 +210,7 @@ int	i2c_master_send(const struct i2c_cli
 int	i2c_master_recv(const struct i2c_client *, char *, int);
 struct i2c_client *
 	i2c_new_device(struct i2c_adapter *, const struct i2c_board_info *);
+int	__i2c_transfer(struct i2c_adapter *, struct i2c_msg *, int);
 int	i2c_transfer(struct i2c_adapter *, struct i2c_msg *, int);
 void	i2c_unregister_device(struct i2c_client *);
 

Index: src/sys/external/bsd/drm2/include/linux/init.h
diff -u src/sys/external/bsd/drm2/include/linux/init.h:1.3 src/sys/external/bsd/drm2/include/linux/init.h:1.4
--- src/sys/external/bsd/drm2/include/linux/init.h:1.3	Fri Apr 25 23:54:59 2014
+++ src/sys/external/bsd/drm2/include/linux/init.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: init.h,v 1.3 2014/04/25 23:54:59 riastradh Exp $	*/
+/*	$NetBSD: init.h,v 1.4 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -32,6 +32,8 @@
 #ifndef _LINUX_INIT_H_
 #define _LINUX_INIT_H_
 
-#define __init
+#define	__exit			/* call at module unload time */
+#define	__initconst		/* ??? */
+#define	__init			/* call at module load time */
 
 #endif  /* _LINUX_INIT_H_ */
Index: src/sys/external/bsd/drm2/include/linux/random.h
diff -u src/sys/external/bsd/drm2/include/linux/random.h:1.3 src/sys/external/bsd/drm2/include/linux/random.h:1.4
--- src/sys/external/bsd/drm2/include/linux/random.h:1.3	Sun Dec 19 11:45:01 2021
+++ src/sys/external/bsd/drm2/include/linux/random.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: random.h,v 1.3 2021/12/19 11:45:01 riastradh Exp $	*/
+/*	$NetBSD: random.h,v 1.4 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -64,4 +64,17 @@ get_random_u32(void)
 	return v;
 }
 
+static inline uint32_t
+prandom_u32_max(uint32_t bound)
+{
+	uint32_t v, min;
+
+	min = (-bound) % bound;
+	do {
+		v = get_random_u32();
+	} while (v < min);
+
+	return v % bound;
+}
+
 #endif	/* _LINUX_RANDOM_H_ */
Index: src/sys/external/bsd/drm2/include/linux/sizes.h
diff -u src/sys/external/bsd/drm2/include/linux/sizes.h:1.3 src/sys/external/bsd/drm2/include/linux/sizes.h:1.4
--- src/sys/external/bsd/drm2/include/linux/sizes.h:1.3	Sun Dec 19 11:15:10 2021
+++ src/sys/external/bsd/drm2/include/linux/sizes.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: sizes.h,v 1.3 2021/12/19 11:15:10 riastradh Exp $	*/
+/*	$NetBSD: sizes.h,v 1.4 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -37,27 +37,27 @@
 #define	SZ_256		256u
 #define	SZ_512		512u
 #define	SZ_1K		1024u
-#define	SZ_2K		(2ul*SZ_1K)
-#define	SZ_4K		(4ul*SZ_1K)
-#define	SZ_8K		(8ul*SZ_1K)
-#define	SZ_16K		(16ul*SZ_1K)
-#define	SZ_32K		(32ul*SZ_1K)
-#define	SZ_64K		(64ul*SZ_1K)
-#define	SZ_128K		(128ul*SZ_1K)
-#define	SZ_256K		(256ul*SZ_1K)
-#define	SZ_512K		(512ul*SZ_1K)
-#define	SZ_1M		(1024ul*SZ_1K)
-#define	SZ_2M		(2ul*SZ_1M)
-#define	SZ_4M		(4ul*SZ_1M)
-#define	SZ_8M		(8ul*SZ_1M)
-#define	SZ_16M		(16ul*SZ_1M)
-#define	SZ_32M		(32ul*SZ_1M)
-#define	SZ_64M		(64ul*SZ_1M)
-#define	SZ_128M		(128ul*SZ_1M)
-#define	SZ_256M		(256ul*SZ_1M)
-#define	SZ_512M		(512ul*SZ_1M)
-#define	SZ_1G		(1024ul*SZ_1M)
-#define	SZ_2G		(2ul*SZ_1G)
+#define	SZ_2K		(2u*SZ_1K)
+#define	SZ_4K		(4u*SZ_1K)
+#define	SZ_8K		(8u*SZ_1K)
+#define	SZ_16K		(16u*SZ_1K)
+#define	SZ_32K		(32u*SZ_1K)
+#define	SZ_64K		(64u*SZ_1K)
+#define	SZ_128K		(128u*SZ_1K)
+#define	SZ_256K		(256u*SZ_1K)
+#define	SZ_512K		(512u*SZ_1K)
+#define	SZ_1M		(1024u*SZ_1K)
+#define	SZ_2M		(2u*SZ_1M)
+#define	SZ_4M		(4u*SZ_1M)
+#define	SZ_8M		(8u*SZ_1M)
+#define	SZ_16M		(16u*SZ_1M)
+#define	SZ_32M		(32u*SZ_1M)
+#define	SZ_64M		(64u*SZ_1M)
+#define	SZ_128M		(128u*SZ_1M)
+#define	SZ_256M		(256u*SZ_1M)
+#define	SZ_512M		(512u*SZ_1M)
+#define	SZ_1G		(1024u*SZ_1M)
+#define	SZ_2G		(2u*SZ_1G)
 #define	SZ_4G		(4ull*SZ_1G)
 #define	SZ_8G		(8ull*SZ_1G)
 
Index: src/sys/external/bsd/drm2/include/linux/smp.h
diff -u src/sys/external/bsd/drm2/include/linux/smp.h:1.3 src/sys/external/bsd/drm2/include/linux/smp.h:1.4
--- src/sys/external/bsd/drm2/include/linux/smp.h:1.3	Sun Dec 19 11:38:04 2021
+++ src/sys/external/bsd/drm2/include/linux/smp.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: smp.h,v 1.3 2021/12/19 11:38:04 riastradh Exp $	*/
+/*	$NetBSD: smp.h,v 1.4 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -32,8 +32,9 @@
 #ifndef	_LINUX_SMP_H_
 #define	_LINUX_SMP_H_
 
-#include <sys/systm.h>
 #include <sys/cpu.h>
+#include <sys/systm.h>
+#include <sys/xcall.h>
 
 #define	smp_processor_id()	cpu_number()
 
@@ -52,4 +53,23 @@ put_cpu(void)
 	kpreempt_disable();
 }
 
+static inline void
+on_each_cpu_xc(void *a, void *b)
+{
+	void (**fp)(void *) = a;
+	void *cookie = b;
+
+	(**fp)(cookie);
+}
+
+static inline void
+on_each_cpu(void (*f)(void *), void *cookie, int wait)
+{
+	uint64_t ticket;
+
+	ticket = xc_broadcast(0, &on_each_cpu_xc, &f, cookie);
+	if (wait)
+		xc_wait(ticket);
+}
+
 #endif	/* _LINUX_SMP_H_ */

Index: src/sys/external/bsd/drm2/include/linux/lockdep.h
diff -u src/sys/external/bsd/drm2/include/linux/lockdep.h:1.8 src/sys/external/bsd/drm2/include/linux/lockdep.h:1.9
--- src/sys/external/bsd/drm2/include/linux/lockdep.h:1.8	Sun Dec 19 11:38:37 2021
+++ src/sys/external/bsd/drm2/include/linux/lockdep.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lockdep.h,v 1.8 2021/12/19 11:38:37 riastradh Exp $	*/
+/*	$NetBSD: lockdep.h,v 1.9 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -48,6 +48,7 @@ struct spinlock;
 #define	mutex_release(m, ip)		__nothing
 
 #define	__lockdep_used			__unused
+#define	lockdep_init_map(a,b,c,d)	__nothing
 #define	lock_acquire_shared_recursive(l, s, t, n, i)	__nothing
 #define	lock_release(l, n)		__nothing
 #ifdef notyet

Index: src/sys/external/bsd/drm2/include/linux/perf_event.h
diff -u src/sys/external/bsd/drm2/include/linux/perf_event.h:1.2 src/sys/external/bsd/drm2/include/linux/perf_event.h:1.3
--- src/sys/external/bsd/drm2/include/linux/perf_event.h:1.2	Sun Dec 19 01:16:59 2021
+++ src/sys/external/bsd/drm2/include/linux/perf_event.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: perf_event.h,v 1.2 2021/12/19 01:16:59 riastradh Exp $	*/
+/*	$NetBSD: perf_event.h,v 1.3 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -32,6 +32,8 @@
 #ifndef _LINUX_PERF_EVENT_H_
 #define _LINUX_PERF_EVENT_H_
 
+#include <linux/rculist.h>
+
 struct pmu {
 };
 

Index: src/sys/external/bsd/drm2/include/linux/pm_runtime.h
diff -u src/sys/external/bsd/drm2/include/linux/pm_runtime.h:1.7 src/sys/external/bsd/drm2/include/linux/pm_runtime.h:1.8
--- src/sys/external/bsd/drm2/include/linux/pm_runtime.h:1.7	Sun Dec 19 10:47:54 2021
+++ src/sys/external/bsd/drm2/include/linux/pm_runtime.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: pm_runtime.h,v 1.7 2021/12/19 10:47:54 riastradh Exp $	*/
+/*	$NetBSD: pm_runtime.h,v 1.8 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -106,8 +106,19 @@ pm_runtime_use_autosuspend(struct device
 }
 
 static inline void
+pm_runtime_dont_use_autosuspend(struct device *dev __unused)
+{
+}
+
+static inline void
 pm_runtime_forbid(struct device *dev __unused)
 {
 }
 
+static inline int
+pm_runtime_get_if_in_use(struct device *dev __unused)
+{
+	return 0;
+}
+
 #endif  /* _LINUX_PM_RUNTIME_H_ */

Index: src/sys/external/bsd/drm2/include/linux/rculist.h
diff -u src/sys/external/bsd/drm2/include/linux/rculist.h:1.1 src/sys/external/bsd/drm2/include/linux/rculist.h:1.2
--- src/sys/external/bsd/drm2/include/linux/rculist.h:1.1	Sun Dec 19 01:53:29 2021
+++ src/sys/external/bsd/drm2/include/linux/rculist.h	Sun Dec 19 11:49:12 2021
@@ -0,0 +1,37 @@
+/*	$NetBSD: rculist.h,v 1.2 2021/12/19 11:49:12 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_RCULIST_H_
+#define _LINUX_RCULIST_H_
+
+#include <linux/list.h>
+
+/* Differs only by lockdep goo.  */
+#define	list_for_each_entry_lockless	list_for_each_entry
+
+#endif  /* _LINUX_RCULIST_H_ */

Index: src/sys/external/bsd/drm2/include/linux/sched.h
diff -u src/sys/external/bsd/drm2/include/linux/sched.h:1.18 src/sys/external/bsd/drm2/include/linux/sched.h:1.19
--- src/sys/external/bsd/drm2/include/linux/sched.h:1.18	Sun Dec 19 10:38:05 2021
+++ src/sys/external/bsd/drm2/include/linux/sched.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: sched.h,v 1.18 2021/12/19 10:38:05 riastradh Exp $	*/
+/*	$NetBSD: sched.h,v 1.19 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -33,13 +33,15 @@
 #define _LINUX_SCHED_H_
 
 #include <sys/param.h>
+
 #include <sys/cdefs.h>
 #include <sys/kernel.h>
 #include <sys/proc.h>
 
-#include <asm/param.h>
 #include <asm/barrier.h>
+#include <asm/param.h>
 #include <asm/processor.h>
+
 #include <linux/device.h>
 #include <linux/errno.h>
 

Index: src/sys/external/bsd/drm2/include/linux/timer.h
diff -u src/sys/external/bsd/drm2/include/linux/timer.h:1.12 src/sys/external/bsd/drm2/include/linux/timer.h:1.13
--- src/sys/external/bsd/drm2/include/linux/timer.h:1.12	Sun Dec 19 11:36:00 2021
+++ src/sys/external/bsd/drm2/include/linux/timer.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: timer.h,v 1.12 2021/12/19 11:36:00 riastradh Exp $	*/
+/*	$NetBSD: timer.h,v 1.13 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -71,12 +71,15 @@ teardown_timer(struct timer_list *timer)
 	callout_destroy(&timer->tl_callout);
 }
 
-static inline void
+static inline int
 mod_timer(struct timer_list *timer, unsigned long then)
 {
 	const unsigned long now = jiffies;
+	int pending;
 
+	pending = callout_pending(&timer->tl_callout);
 	callout_schedule(&timer->tl_callout, (now < then? (then - now) : 0));
+	return pending;
 }
 
 static inline void

Index: src/sys/external/bsd/drm2/include/linux/sched/signal.h
diff -u src/sys/external/bsd/drm2/include/linux/sched/signal.h:1.3 src/sys/external/bsd/drm2/include/linux/sched/signal.h:1.4
--- src/sys/external/bsd/drm2/include/linux/sched/signal.h:1.3	Sun Dec 19 11:45:01 2021
+++ src/sys/external/bsd/drm2/include/linux/sched/signal.h	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.3 2021/12/19 11:45:01 riastradh Exp $	*/
+/*	$NetBSD: signal.h,v 1.4 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -29,6 +29,7 @@
 #ifndef	_LINUX_SCHED_SIGNAL_H_
 #define	_LINUX_SCHED_SIGNAL_H_
 
+#include <linux/rculist.h>
 #include <linux/sched.h>
 
 static inline bool

Index: src/sys/external/bsd/drm2/linux/linux_i2c.c
diff -u src/sys/external/bsd/drm2/linux/linux_i2c.c:1.5 src/sys/external/bsd/drm2/linux/linux_i2c.c:1.6
--- src/sys/external/bsd/drm2/linux/linux_i2c.c:1.5	Sun Dec 19 09:43:56 2021
+++ src/sys/external/bsd/drm2/linux/linux_i2c.c	Sun Dec 19 11:49:12 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_i2c.c,v 1.5 2021/12/19 09:43:56 riastradh Exp $	*/
+/*	$NetBSD: linux_i2c.c,v 1.6 2021/12/19 11:49:12 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_i2c.c,v 1.5 2021/12/19 09:43:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_i2c.c,v 1.6 2021/12/19 11:49:12 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/errno.h>
@@ -125,13 +125,20 @@ i2c_master_recv(const struct i2c_client 
  */
 
 int
+__i2c_transfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int n)
+{
+
+	return (*adapter->algo->master_xfer)(adapter, msgs, n);
+}
+
+int
 i2c_transfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int n)
 {
 	int ret;
 
 	if (adapter->lock_ops)
 		(*adapter->lock_ops->lock_bus)(adapter, 0);
-	ret = (*adapter->algo->master_xfer)(adapter, msgs, n);
+	ret = __i2c_transfer(adapter, msgs, n);
 	if (adapter->lock_ops)
 		(*adapter->lock_ops->unlock_bus)(adapter, 0);
 

Added files:

Index: src/sys/external/bsd/drm2/i915drm/intel_dsi_dcs_backlight.c
diff -u /dev/null src/sys/external/bsd/drm2/i915drm/intel_dsi_dcs_backlight.c:1.1
--- /dev/null	Sun Dec 19 11:49:13 2021
+++ src/sys/external/bsd/drm2/i915drm/intel_dsi_dcs_backlight.c	Sun Dec 19 11:49:12 2021
@@ -0,0 +1,41 @@
+/*	$NetBSD: intel_dsi_dcs_backlight.c,v 1.1 2021/12/19 11:49:12 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: intel_dsi_dcs_backlight.c,v 1.1 2021/12/19 11:49:12 riastradh Exp $");
+
+#include <sys/errno.h>
+
+#include "display/intel_dsi_dcs_backlight.h"
+
+int
+intel_dsi_dcs_init_backlight_funcs(struct intel_connector *intel_connector)
+{
+
+	return -ENOSYS;
+}
Index: src/sys/external/bsd/drm2/i915drm/intel_guc_log.c
diff -u /dev/null src/sys/external/bsd/drm2/i915drm/intel_guc_log.c:1.1
--- /dev/null	Sun Dec 19 11:49:14 2021
+++ src/sys/external/bsd/drm2/i915drm/intel_guc_log.c	Sun Dec 19 11:49:12 2021
@@ -0,0 +1,92 @@
+/*	$NetBSD: intel_guc_log.c,v 1.1 2021/12/19 11:49:12 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: intel_guc_log.c,v 1.1 2021/12/19 11:49:12 riastradh Exp $");
+
+#include "gt/uc/intel_guc_log.h"
+
+void
+intel_guc_log_init_early(struct intel_guc_log *log)
+{
+}
+
+int
+intel_guc_log_create(struct intel_guc_log *log)
+{
+
+	return 0;
+}
+
+void
+intel_guc_log_destroy(struct intel_guc_log *log)
+{
+}
+
+int
+intel_guc_log_set_level(struct intel_guc_log *log, u32 level)
+{
+
+	return -ENOSYS;
+}
+
+bool
+intel_guc_log_relay_created(const struct intel_guc_log *log)
+{
+
+	return false;
+}
+
+int
+intel_guc_log_relay_open(struct intel_guc_log *log)
+{
+
+	return -ENOSYS;
+}
+
+int
+intel_guc_log_relay_start(struct intel_guc_log *log)
+{
+
+	return -ENOSYS;
+}
+
+void
+intel_guc_log_relay_flush(struct intel_guc_log *log)
+{
+}
+
+void
+intel_guc_log_relay_close(struct intel_guc_log *log)
+{
+}
+
+void
+intel_guc_log_handle_flush_event(struct intel_guc_log *log)
+{
+}
Index: src/sys/external/bsd/drm2/i915drm/intel_lpe_audio.c
diff -u /dev/null src/sys/external/bsd/drm2/i915drm/intel_lpe_audio.c:1.1
--- /dev/null	Sun Dec 19 11:49:14 2021
+++ src/sys/external/bsd/drm2/i915drm/intel_lpe_audio.c	Sun Dec 19 11:49:12 2021
@@ -0,0 +1,61 @@
+/*	$NetBSD: intel_lpe_audio.c,v 1.1 2021/12/19 11:49:12 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* intel_lpe_audio.c stubs */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: intel_lpe_audio.c,v 1.1 2021/12/19 11:49:12 riastradh Exp $");
+
+#include "i915_drv.h"
+
+#include "display/intel_lpe_audio.h"
+
+int
+intel_lpe_audio_init(struct drm_i915_private *dev_priv)
+{
+	return 0;
+}
+
+void
+intel_lpe_audio_teardown(struct drm_i915_private *dev_priv)
+{
+}
+
+void
+intel_lpe_audio_irq_handler(struct drm_i915_private *dev_priv)
+{
+}
+
+void
+intel_lpe_audio_notify(struct drm_i915_private *dev_priv, enum pipe pipe,
+    enum port port, const void *eld, int ls_clock, bool dp_output)
+{
+}
Index: src/sys/external/bsd/drm2/i915drm/intel_region_lmem.c
diff -u /dev/null src/sys/external/bsd/drm2/i915drm/intel_region_lmem.c:1.1
--- /dev/null	Sun Dec 19 11:49:14 2021
+++ src/sys/external/bsd/drm2/i915drm/intel_region_lmem.c	Sun Dec 19 11:49:12 2021
@@ -0,0 +1,45 @@
+/*	$NetBSD: intel_region_lmem.c,v 1.1 2021/12/19 11:49:12 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* intel_region_lmem.c stubs */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: intel_region_lmem.c,v 1.1 2021/12/19 11:49:12 riastradh Exp $");
+
+#include <linux/err.h>
+
+#include "intel_region_lmem.h"
+
+struct intel_memory_region *
+intel_setup_fake_lmem(struct drm_i915_private *i915)
+{
+	return ERR_PTR(-ENOSYS);
+}

Reply via email to