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 <[email protected]>
Committer: Taylor R Campbell <[email protected]>
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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 = >->i915->drm.primary->kdev->kobj;
#ifndef __NetBSD__ /* XXX kobject uevent...? */
+ struct kobject *kobj = >->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, >->reset.flags)) {
-#ifdef __NetBSD__
int ret;
- spin_lock(&dev_priv->gpu_error.reset_lock);
+ spin_lock(>->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, >->reset.flags));
-#endif
+ >->reset.queue,
+ >->reset.lock,
+ !test_bit(I915_RESET_BACKOFF, >->reset.flags));
+ spin_unlock(>->reset.lock);
goto out; /* piggy-back on the other reset */
}
@@ -1306,14 +1308,9 @@ void intel_gt_handle_error(struct intel_
>->reset.flags);
clear_bit_unlock(I915_RESET_BACKOFF, >->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(>->reset.queue);
-#endif
+ spin_lock(>->reset.lock);
+ DRM_SPIN_WAKEUP_ALL(>->reset.queue, >->reset.lock);
+ spin_unlock(>->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, >->reset.flags)) {
rcu_read_unlock();
- if (wait_event_interruptible(gt->reset.queue,
- !test_bit(I915_RESET_BACKOFF,
- >->reset.flags)))
+ int ret;
+ spin_lock(>->reset.lock);
+ DRM_SPIN_WAIT_UNTIL(ret, >->reset.queue, >->reset.lock,
+ !test_bit(I915_RESET_BACKOFF, >->reset.flags));
+ spin_unlock(>->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,
- >->reset.flags)))
+ int ret;
+ spin_lock(>->reset.lock);
+ DRM_SPIN_WAIT_UNTIL(ret, >->reset.queue, >->reset.lock,
+ !test_bit(I915_RESET_BACKOFF, >->reset.flags));
+ spin_unlock(>->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(>->reset.queue);
+ spin_lock_init(>->reset.lock);
+ DRM_INIT_WAITQUEUE(>->reset.queue, "i915rst");
mutex_init(>->reset.mutex);
init_srcu_struct(>->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(>->reset.backoff_srcu);
+ DRM_DESTROY_WAITQUEUE(>->reset.queue);
+ spin_lock_destroy(>->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);
+}