Module Name: src Committed By: riastradh Date: Sun Dec 19 11:49:12 UTC 2021
Modified Files: src/sys/external/bsd/common/include/linux: rcupdate.h srcu.h tasklet.h src/sys/external/bsd/common/linux: linux_rcu.c linux_srcu.c linux_tasklet.c src/sys/external/bsd/drm2/dist/drm/i915: i915_globals.c i915_perf.c i915_utils.h intel_runtime_pm.c intel_uncore.c intel_uncore.h intel_wakeref.c intel_wakeref.h intel_wopcm.c src/sys/external/bsd/drm2/dist/drm/i915/display: intel_hdcp.c intel_opregion.c intel_opregion.h intel_psr.c intel_sdvo.c intel_sprite.c intel_tc.c intel_tv.c intel_vga.c src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_lrc.c intel_ppgtt.c intel_rc6.c intel_reset.c intel_reset_types.h intel_ring_submission.c intel_rps.c intel_sseu.c intel_timeline.c intel_workarounds.c src/sys/external/bsd/drm2/dist/drm/i915/gt/uc: intel_uc_fw.c src/sys/external/bsd/drm2/drm: drm_module.c src/sys/external/bsd/drm2/i915drm: files.i915drmkms i915_module.c intelfb.c src/sys/external/bsd/drm2/include: i915_trace.h src/sys/external/bsd/drm2/include/asm: iosf_mbi.h src/sys/external/bsd/drm2/include/drm: drm_mipi_dsi.h i915_mei_hdcp_interface.h src/sys/external/bsd/drm2/include/linux: device.h i2c.h init.h lockdep.h perf_event.h pm_runtime.h random.h rculist.h sched.h sizes.h smp.h timer.h src/sys/external/bsd/drm2/include/linux/sched: signal.h src/sys/external/bsd/drm2/linux: linux_i2c.c Added Files: src/sys/external/bsd/drm2/i915drm: intel_dsi_dcs_backlight.c intel_guc_log.c intel_lpe_audio.c intel_region_lmem.c Log Message: Make intel_psr.c build netbsd-ify Stub out intel_lpe_audio.c (for now?). Hammer intel_opregion.c into shape. Hack up intel_lrc.c Adapt intel_reset.c Stub out intel_region_lmem.c Adapt intel_ring_submission.c Adapt intel_rps.c Adapt intel_sdvo.c Adapt intel_runtime_pm.c Adapt intel_sideband.c Adapt intel_sprite.c Adapt intel_tv.c Adapt intel_tc.c Adapt intel_sseu.c Adapt intel_timeline.c Adapt intel_uc_fw.c and fix typo Fix up intel_uncore.c intel_vga.c intel_wakeref.c intel_vdsc.c intel_wopcm.c intel_workarounds.c i915_globals.c Fix up intelfb.c Stub out intel_guc_log.c Stub out intel_dsi_dcs_backlight.c i915_perf.c intel_hdmi.c intel_hdcp.c Author: Maya Rashish <m...@netbsd.org> Committer: Taylor R Campbell <riastr...@netbsd.org> To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/common/include/linux/rcupdate.h cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/common/include/linux/srcu.h cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/common/include/linux/tasklet.h cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/common/linux/linux_rcu.c \ src/sys/external/bsd/common/linux/linux_srcu.c cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/common/linux/linux_tasklet.c cvs rdiff -u -r1.2 -r1.3 \ src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c \ src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c \ src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h \ src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h cvs rdiff -u -r1.10 -r1.11 \ src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c cvs rdiff -u -r1.16 -r1.17 \ src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c cvs rdiff -u -r1.7 -r1.8 \ src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h cvs rdiff -u -r1.4 -r1.5 \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c cvs rdiff -u -r1.2 -r1.3 \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c cvs rdiff -u -r1.6 -r1.7 \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c cvs rdiff -u -r1.2 -r1.3 \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset_types.h \ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rps.c cvs rdiff -u -r1.2 -r1.3 \ src/sys/external/bsd/drm2/dist/drm/i915/gt/uc/intel_uc_fw.c cvs rdiff -u -r1.26 -r1.27 src/sys/external/bsd/drm2/drm/drm_module.c cvs rdiff -u -r1.78 -r1.79 src/sys/external/bsd/drm2/i915drm/files.i915drmkms cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/drm2/i915drm/i915_module.c cvs rdiff -u -r0 -r1.1 \ src/sys/external/bsd/drm2/i915drm/intel_dsi_dcs_backlight.c \ src/sys/external/bsd/drm2/i915drm/intel_guc_log.c \ src/sys/external/bsd/drm2/i915drm/intel_lpe_audio.c \ src/sys/external/bsd/drm2/i915drm/intel_region_lmem.c cvs rdiff -u -r1.21 -r1.22 src/sys/external/bsd/drm2/i915drm/intelfb.c cvs rdiff -u -r1.21 -r1.22 src/sys/external/bsd/drm2/include/i915_trace.h cvs rdiff -u -r1.1 -r1.2 src/sys/external/bsd/drm2/include/asm/iosf_mbi.h cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/include/drm/drm_mipi_dsi.h cvs rdiff -u -r1.1 -r1.2 \ src/sys/external/bsd/drm2/include/drm/i915_mei_hdcp_interface.h cvs rdiff -u -r1.13 -r1.14 src/sys/external/bsd/drm2/include/linux/device.h \ src/sys/external/bsd/drm2/include/linux/i2c.h cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/include/linux/init.h \ src/sys/external/bsd/drm2/include/linux/random.h \ src/sys/external/bsd/drm2/include/linux/sizes.h \ src/sys/external/bsd/drm2/include/linux/smp.h cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/include/linux/lockdep.h cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/include/linux/perf_event.h cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/include/linux/pm_runtime.h cvs rdiff -u -r1.1 -r1.2 src/sys/external/bsd/drm2/include/linux/rculist.h cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/drm2/include/linux/sched.h cvs rdiff -u -r1.12 -r1.13 src/sys/external/bsd/drm2/include/linux/timer.h cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/include/linux/sched/signal.h cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/linux/linux_i2c.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/common/include/linux/rcupdate.h diff -u src/sys/external/bsd/common/include/linux/rcupdate.h:1.7 src/sys/external/bsd/common/include/linux/rcupdate.h:1.8 --- src/sys/external/bsd/common/include/linux/rcupdate.h:1.7 Sun Dec 19 11:35:17 2021 +++ src/sys/external/bsd/common/include/linux/rcupdate.h Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: rcupdate.h,v 1.7 2021/12/19 11:35:17 riastradh Exp $ */ +/* $NetBSD: rcupdate.h,v 1.8 2021/12/19 11:49:11 riastradh Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -81,6 +81,7 @@ struct rcu_head { #define get_state_synchronize_rcu linux_get_state_synchronize_rcu #define rcu_barrier linux_rcu_barrier #define synchronize_rcu linux_synchronize_rcu +#define synchronize_rcu_expedited linux_synchronize_rcu_expedited int linux_rcu_gc_init(void); void linux_rcu_gc_fini(void); @@ -91,6 +92,7 @@ void destroy_rcu_head(struct rcu_head *) void call_rcu(struct rcu_head *, void (*)(struct rcu_head *)); void rcu_barrier(void); void synchronize_rcu(void); +void synchronize_rcu_expedited(void); unsigned long get_state_synchronize_rcu(void); void cond_synchronize_rcu(unsigned long); Index: src/sys/external/bsd/common/include/linux/srcu.h diff -u src/sys/external/bsd/common/include/linux/srcu.h:1.3 src/sys/external/bsd/common/include/linux/srcu.h:1.4 --- src/sys/external/bsd/common/include/linux/srcu.h:1.3 Sun Dec 19 11:10:09 2021 +++ src/sys/external/bsd/common/include/linux/srcu.h Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: srcu.h,v 1.3 2021/12/19 11:10:09 riastradh Exp $ */ +/* $NetBSD: srcu.h,v 1.4 2021/12/19 11:49:11 riastradh Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -37,11 +37,12 @@ #include <sys/mutex.h> /* namespace */ -#define srcu_fini linux_srcu_fini -#define srcu_init linux_srcu_init +#define _init_srcu_struct linux__init_init_srcu_struct +#define cleanup_srcu_struct linux_cleanup_srcu_struct #define srcu_read_lock linux_srcu_read_lock #define srcu_read_unlock linux_srcu_read_unlock #define synchronize_srcu linux_synchronize_srcu +#define synchronize_srcu_expedited linux_synchronize_srcu_expedited struct lwp; struct percpu; @@ -55,12 +56,15 @@ struct srcu_struct { volatile unsigned srcu_gen; }; -void srcu_init(struct srcu_struct *, const char *); -void srcu_fini(struct srcu_struct *); +#define init_srcu_struct(S) _init_srcu_struct(S, #S) + +void _init_srcu_struct(struct srcu_struct *, const char *); +void cleanup_srcu_struct(struct srcu_struct *); int srcu_read_lock(struct srcu_struct *); void srcu_read_unlock(struct srcu_struct *, int); void synchronize_srcu(struct srcu_struct *); +void synchronize_srcu_expedited(struct srcu_struct *); #endif /* _LINUX_SRCU_H_ */ Index: src/sys/external/bsd/common/include/linux/tasklet.h diff -u src/sys/external/bsd/common/include/linux/tasklet.h:1.5 src/sys/external/bsd/common/include/linux/tasklet.h:1.6 --- src/sys/external/bsd/common/include/linux/tasklet.h:1.5 Sun Dec 19 11:03:17 2021 +++ src/sys/external/bsd/common/include/linux/tasklet.h Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: tasklet.h,v 1.5 2021/12/19 11:03:17 riastradh Exp $ */ +/* $NetBSD: tasklet.h,v 1.6 2021/12/19 11:49:11 riastradh Exp $ */ /*- * Copyright (c) 2018, 2020 The NetBSD Foundation, Inc. @@ -81,6 +81,7 @@ void linux_tasklets_fini(void); void tasklet_init(struct tasklet_struct *, void (*)(unsigned long), unsigned long); +void tasklet_disable_nosync(struct tasklet_struct *); void tasklet_disable(struct tasklet_struct *); void tasklet_enable(struct tasklet_struct *); void tasklet_schedule(struct tasklet_struct *); Index: src/sys/external/bsd/common/linux/linux_rcu.c diff -u src/sys/external/bsd/common/linux/linux_rcu.c:1.3 src/sys/external/bsd/common/linux/linux_rcu.c:1.4 --- src/sys/external/bsd/common/linux/linux_rcu.c:1.3 Sun Dec 19 11:35:17 2021 +++ src/sys/external/bsd/common/linux/linux_rcu.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_rcu.c,v 1.3 2021/12/19 11:35:17 riastradh Exp $ */ +/* $NetBSD: linux_rcu.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_rcu.c,v 1.3 2021/12/19 11:35:17 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_rcu.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -85,6 +85,8 @@ synchronize_rcu_xc(void *a, void *b) * Wait for any pending RCU read section on every CPU to complete * by triggering on every CPU activity that is blocked by an RCU * read section. + * + * May sleep. (Practically guaranteed to sleep!) */ void synchronize_rcu(void) @@ -96,6 +98,24 @@ synchronize_rcu(void) } /* + * synchronize_rcu_expedited() + * + * Wait for any pending RCU read section on every CPU to complete + * by triggering on every CPU activity that is blocked by an RCU + * read section. Try to get an answer faster than + * synchronize_rcu, at the cost of more activity triggered on + * other CPUs. + * + * May sleep. (Practically guaranteed to sleep!) + */ +void +synchronize_rcu_expedited(void) +{ + + synchronize_rcu(); +} + +/* * cookie = get_state_synchronize_rcu(), cond_synchronize_rcu(cookie) * * Optimization for synchronize_rcu -- skip if it has already Index: src/sys/external/bsd/common/linux/linux_srcu.c diff -u src/sys/external/bsd/common/linux/linux_srcu.c:1.3 src/sys/external/bsd/common/linux/linux_srcu.c:1.4 --- src/sys/external/bsd/common/linux/linux_srcu.c:1.3 Sun Dec 19 11:20:33 2021 +++ src/sys/external/bsd/common/linux/linux_srcu.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_srcu.c,v 1.3 2021/12/19 11:20:33 riastradh Exp $ */ +/* $NetBSD: linux_srcu.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_srcu.c,v 1.3 2021/12/19 11:20:33 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_srcu.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $"); /* * SRCU: Sleepable RCU @@ -73,7 +73,7 @@ struct srcu_cpu { }; /* - * srcu_init(srcu, name) + * _init_srcu_struct(srcu, name) * * Initialize the srcu state with the specified name. Caller must * call srcu_fini when done. @@ -84,7 +84,7 @@ struct srcu_cpu { * May sleep. */ void -srcu_init(struct srcu_struct *srcu, const char *name) +_init_srcu_struct(struct srcu_struct *srcu, const char *name) { ASSERT_SLEEPABLE(); @@ -98,7 +98,7 @@ srcu_init(struct srcu_struct *srcu, cons } /* - * srcu_fini(srcu) + * cleanup_srcu_struct(srcu) * * Finalize an srcu state, which must not be in use right now. If * any srcu read sections might be active, caller must wait for @@ -107,14 +107,14 @@ srcu_init(struct srcu_struct *srcu, cons * May sleep. */ void -srcu_fini(struct srcu_struct *srcu) +cleanup_srcu_struct(struct srcu_struct *srcu) { ASSERT_SLEEPABLE(); KASSERTMSG((srcu->srcu_sync == NULL), - "srcu_fini in lwp %p while synchronize_srcu running in lwp %p", - curlwp, srcu->srcu_sync); + "%s in lwp %p while synchronize_srcu running in lwp %p", + __func__, curlwp, srcu->srcu_sync); cv_destroy(&srcu->srcu_cv); mutex_destroy(&srcu->srcu_lock); percpu_free(srcu->srcu_percpu, sizeof(struct srcu_cpu)); @@ -298,3 +298,20 @@ synchronize_srcu(struct srcu_struct *src cv_broadcast(&srcu->srcu_cv); mutex_spin_exit(&srcu->srcu_lock); } + +/* + * synchronize_srcu_expedited(srcu) + * + * Wait for all srcu readers on all CPUs that may have begun + * before sychronize_srcu to complete. Try to get an answer + * faster than synchronize_srcu, at the cost of more activity + * triggered on other CPUs. + * + * May sleep. (Practically guaranteed to sleep!) + */ +void +synchronize_srcu_expedited(struct srcu_struct *srcu) +{ + + synchronize_srcu(srcu); +} Index: src/sys/external/bsd/common/linux/linux_tasklet.c diff -u src/sys/external/bsd/common/linux/linux_tasklet.c:1.6 src/sys/external/bsd/common/linux/linux_tasklet.c:1.7 --- src/sys/external/bsd/common/linux/linux_tasklet.c:1.6 Sun Dec 19 11:04:58 2021 +++ src/sys/external/bsd/common/linux/linux_tasklet.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_tasklet.c,v 1.6 2021/12/19 11:04:58 riastradh Exp $ */ +/* $NetBSD: linux_tasklet.c,v 1.7 2021/12/19 11:49:11 riastradh Exp $ */ /*- * Copyright (c) 2018, 2020 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_tasklet.c,v 1.6 2021/12/19 11:04:58 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_tasklet.c,v 1.7 2021/12/19 11:49:11 riastradh Exp $"); #include <sys/types.h> #include <sys/atomic.h> @@ -347,24 +347,20 @@ tasklet_hi_schedule(struct tasklet_struc } /* - * tasklet_disable(tasklet) + * tasklet_disable_nosync(tasklet) * - * Increment the disable count of tasklet, and if it was already - * running, busy-wait for it to complete. + * Increment the disable count of tasklet, but don't wait for it + * to complete -- it may remain running after this returns. * * As long as the disable count is nonzero, the tasklet's function * will not run, but if already scheduled, the tasklet will remain * so and the softint will repeatedly trigger itself in a sort of * busy-wait, so this should be used only for short durations. * - * If tasklet is guaranteed not to be scheduled, e.g. if you have - * just invoked tasklet_kill, then tasklet_disable serves to wait - * for it to complete in case it might already be running. - * * Load-acquire semantics. */ void -tasklet_disable(struct tasklet_struct *tasklet) +tasklet_disable_nosync(struct tasklet_struct *tasklet) { unsigned int disablecount __diagused; @@ -377,6 +373,31 @@ tasklet_disable(struct tasklet_struct *t #ifndef __HAVE_ATOMIC_AS_MEMBAR membar_enter(); #endif +} + +/* + * tasklet_disable(tasklet) + * + * Increment the disable count of tasklet, and if it was already + * running, busy-wait for it to complete. + * + * As long as the disable count is nonzero, the tasklet's function + * will not run, but if already scheduled, the tasklet will remain + * so and the softint will repeatedly trigger itself in a sort of + * busy-wait, so this should be used only for short durations. + * + * If tasklet is guaranteed not to be scheduled, e.g. if you have + * just invoked tasklet_kill, then tasklet_disable serves to wait + * for it to complete in case it might already be running. + * + * Load-acquire semantics. + */ +void +tasklet_disable(struct tasklet_struct *tasklet) +{ + + /* Increment the disable count. */ + tasklet_disable_nosync(tasklet); /* Wait for it to finish running, if it was running. */ tasklet_unlock_wait(tasklet); Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c:1.2 Sat Dec 18 23:45:28 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/i915_globals.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: i915_globals.c,v 1.2 2021/12/18 23:45:28 riastradh Exp $ */ +/* $NetBSD: i915_globals.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * SPDX-License-Identifier: MIT @@ -7,7 +7,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i915_globals.c,v 1.2 2021/12/18 23:45:28 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i915_globals.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/slab.h> #include <linux/workqueue.h> @@ -20,6 +20,8 @@ __KERNEL_RCSID(0, "$NetBSD: i915_globals #include "i915_scheduler.h" #include "i915_vma.h" +#include <linux/nbsd-namespace.h> + static LIST_HEAD(globals); static atomic_t active; Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c:1.2 Sat Dec 18 23:45:29 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_wakeref.c,v 1.2 2021/12/18 23:45:29 riastradh Exp $ */ +/* $NetBSD: intel_wakeref.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * SPDX-License-Identifier: MIT @@ -7,7 +7,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_wakeref.c,v 1.2 2021/12/18 23:45:29 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_wakeref.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/wait_bit.h> @@ -25,6 +25,8 @@ static void rpm_put(struct intel_wakeref intel_runtime_pm_put(wf->rpm, wakeref); INTEL_WAKEREF_BUG_ON(!wakeref); + + DRM_WAKEUP_ALL(&wf->wq, &wf->mutex); } int __intel_wakeref_get_first(struct intel_wakeref *wf) @@ -66,7 +68,6 @@ static void ____intel_wakeref_put_last(s /* ops->put() must reschedule its own release on error/deferral */ if (likely(!wf->ops->put(wf))) { rpm_put(wf); - wake_up_var(&wf->wakeref); } unlock: @@ -108,6 +109,7 @@ void __intel_wakeref_init(struct intel_w __mutex_init(&wf->mutex, "wakeref.mutex", &key->mutex); atomic_set(&wf->count, 0); wf->wakeref = 0; + DRM_INIT_WAITQUEUE(&wf->wq, "i915wake"); INIT_WORK(&wf->work, __intel_wakeref_put_work); lockdep_init_map(&wf->work.lockdep_map, "wakeref.work", &key->work, 0); @@ -119,8 +121,9 @@ int intel_wakeref_wait_for_idle(struct i might_sleep(); - err = wait_var_event_killable(&wf->wakeref, - !intel_wakeref_is_active(wf)); + mutex_lock(&wf->mutex); + DRM_WAIT_UNTIL(err, &wf->wq, &wf->mutex, !intel_wakeref_is_active(wf)); + mutex_unlock(&wf->mutex); if (err) return err; Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h:1.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h:1.2 Sat Dec 18 23:45:29 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/intel_wakeref.h Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_wakeref.h,v 1.2 2021/12/18 23:45:29 riastradh Exp $ */ +/* $NetBSD: intel_wakeref.h,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * SPDX-License-Identifier: MIT @@ -18,6 +18,8 @@ #include <linux/timer.h> #include <linux/workqueue.h> +#include <drm/drm_wait_netbsd.h> /* XXX */ + #if IS_ENABLED(CONFIG_DRM_I915_DEBUG) #define INTEL_WAKEREF_BUG_ON(expr) BUG_ON(expr) #else @@ -39,6 +41,7 @@ struct intel_wakeref { struct mutex mutex; intel_wakeref_t wakeref; + drm_waitqueue_t wq; struct intel_runtime_pm *rpm; const struct intel_wakeref_ops *ops; Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c:1.2 Sat Dec 18 23:45:29 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/intel_wopcm.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_wopcm.c,v 1.2 2021/12/18 23:45:29 riastradh Exp $ */ +/* $NetBSD: intel_wopcm.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ // SPDX-License-Identifier: MIT /* @@ -6,11 +6,13 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_wopcm.c,v 1.2 2021/12/18 23:45:29 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_wopcm.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include "intel_wopcm.h" #include "i915_drv.h" +#include <linux/nbsd-namespace.h> + /** * DOC: WOPCM Layout * Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.6 --- src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.5 Sun Dec 19 11:36:56 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: i915_perf.c,v 1.5 2021/12/19 11:36:56 riastradh Exp $ */ +/* $NetBSD: i915_perf.c,v 1.6 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2015-2016 Intel Corporation @@ -194,7 +194,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i915_perf.c,v 1.5 2021/12/19 11:36:56 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i915_perf.c,v 1.6 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/anon_inodes.h> #include <linux/sizes.h> @@ -3917,10 +3917,9 @@ int i915_perf_open_ioctl(struct drm_devi */ void i915_perf_register(struct drm_i915_private *i915) { - struct i915_perf *perf = &i915->perf; #ifndef __NetBSD__ + struct i915_perf *perf = &i915->perf; int ret; -#endif if (!perf->i915) return; @@ -3979,7 +3978,9 @@ void i915_perf_register(struct drm_i915_ if (perf->test_config.id == 0) goto sysfs_error; -#ifndef __NetBSD__ /* XXX i915 sysfs */ +#ifdef __NetBSD__ /* XXX i915 sysfs */ + __USE(ret); +#else ret = sysfs_create_group(perf->metrics_kobj, &perf->test_config.sysfs_metric); if (ret) @@ -3999,6 +4000,7 @@ sysfs_error: exit: mutex_unlock(&perf->lock); +#endif } /** Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h:1.4 src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h:1.5 --- src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h:1.4 Sun Dec 19 11:02:22 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: i915_utils.h,v 1.4 2021/12/19 11:02:22 riastradh Exp $ */ +/* $NetBSD: i915_utils.h,v 1.5 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2016 Intel Corporation @@ -30,6 +30,7 @@ #include <linux/list.h> #include <linux/overflow.h> #include <linux/sched.h> +#include <linux/sched/clock.h> #include <linux/types.h> #include <linux/workqueue.h> @@ -299,38 +300,46 @@ wait_remaining_ms_from_jiffies(unsigned * check the condition before the timeout. */ #ifdef __NetBSD__ -#define __wait_for(OP, COND, MS, Wmin, Wmax) ({ \ +#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \ int ret__ = 0; \ if (cold) { \ - int ms = (MS); \ - while (!(COND)) { \ + int ms__ = ((US) + 999)/1000; \ + for (;;) { \ + const bool expired__ = ms__-- == 0; \ OP; \ - /* Guarantee COND check prior to timeout */ \ barrier(); \ - if (--ms < 0) { \ - DELAY(1000); \ - if (!(COND)) \ - ret__ = -ETIMEDOUT; \ + if (COND) { \ + ret__ = 0; \ + break; \ + } \ + if (expired__) { \ + ret__ = -ETIMEDOUT; \ break; \ } \ DELAY(1000); \ } \ } else { \ - unsigned long timeout__ = jiffies + msecs_to_jiffies(MS); \ - while (!(COND)) { \ + const ktime_t end__ = \ + ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \ + long wait__ = (Wmin); \ + might_sleep(); \ + for (;;) { \ + const bool expired__ = \ + ktime_after(ktime_get_raw(), end__); \ OP; \ /* Guarantee COND check prior to timeout */ \ barrier(); \ - if (time_after(jiffies, timeout__)) { \ - if (!(COND)) \ - ret__ = -ETIMEDOUT; \ + if (COND) { \ + ret__ = 0; \ break; \ } \ - if ((Wmin) && drm_can_sleep()) { \ - msleep(Wmin); /* XXX respect Wmax */ \ - } else { \ - DELAY(1000); \ + if (expired__) { \ + ret__ = -ETIMEDOUT; \ + break; \ } \ + usleep_range(wait__, wait__ * 2); \ + if (wait__ < (Wmax)) \ + wait__ <<= 1; \ } \ } \ ret__; \ @@ -466,15 +475,16 @@ static inline void add_taint_for_CI(unsi void cancel_timer(struct timer_list *t); void set_timer_ms(struct timer_list *t, unsigned long timeout); -#ifdef __linux__ -static inline bool timer_expired(const struct timer_list *t) +#ifdef __NetBSD__ +static inline bool +timer_expired(const struct timer_list *t) { - return READ_ONCE(t->expires) && !timer_pending(t); + return callout_expired(__UNCONST(&t->tl_callout)); } #else -static inline bool timer_expired(struct timer_list *t) +static inline bool timer_expired(const struct timer_list *t) { - return callout_expired(&t->tl_callout); + return READ_ONCE(t->expires) && !timer_pending(t); } #endif Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c:1.10 src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c:1.11 --- src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c:1.10 Sat Dec 18 23:45:29 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/intel_runtime_pm.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_runtime_pm.c,v 1.10 2021/12/18 23:45:29 riastradh Exp $ */ +/* $NetBSD: intel_runtime_pm.c,v 1.11 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2012-2014 Intel Corporation @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_runtime_pm.c,v 1.10 2021/12/18 23:45:29 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_runtime_pm.c,v 1.11 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/pm_runtime.h> @@ -616,7 +616,7 @@ void intel_runtime_pm_init_early(struct struct drm_i915_private *i915 = container_of(rpm, struct drm_i915_private, runtime_pm); struct pci_dev *pdev = i915->drm.pdev; - struct device *kdev = &pdev->dev; + struct device *kdev = pci_dev_dev(pdev); rpm->kdev = kdev; rpm->available = HAS_RUNTIME_PM(i915); Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.16 src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.17 --- src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.16 Sun Dec 19 11:12:59 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_uncore.c,v 1.16 2021/12/19 11:12:59 riastradh Exp $ */ +/* $NetBSD: intel_uncore.c,v 1.17 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2013 Intel Corporation @@ -24,11 +24,15 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_uncore.c,v 1.16 2021/12/19 11:12:59 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_uncore.c,v 1.17 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/pm_runtime.h> #include <asm/iosf_mbi.h> +#ifdef __NetBSD__ +#include <dev/pci/agp_i810var.h> +#endif + #include "i915_drv.h" #include "i915_trace.h" #include "i915_vgpu.h" @@ -92,19 +96,19 @@ intel_uncore_forcewake_domain_to_str(con #ifdef __NetBSD__ static inline u32 -fw_ack(struct intel_uncore_forcewake_domain *d) +fw_ack(const struct intel_uncore_forcewake_domain *d) { return bus_space_read_4(d->uncore->regs_bst, d->uncore->regs_bsh, d->reg_ack); } static inline void -fw_set(struct intel_uncore_forcewake_domain *d, u32 val) +fw_set(const struct intel_uncore_forcewake_domain *d, u32 val) { bus_space_write_4(d->uncore->regs_bst, d->uncore->regs_bsh, d->reg_set, _MASKED_BIT_ENABLE(val)); } static inline void -fw_clear(struct intel_uncore_forcewake_domain *d, u32 val) +fw_clear(const struct intel_uncore_forcewake_domain *d, u32 val) { bus_space_write_4(d->uncore->regs_bst, d->uncore->regs_bsh, d->reg_set, _MASKED_BIT_DISABLE(val)); @@ -1656,7 +1660,7 @@ out: #define ASSIGN_FW_DOMAINS_TABLE(uncore, d) \ { \ (uncore)->fw_domains_table = \ - (struct intel_forcewake_range *)(d); \ + (const struct intel_forcewake_range *)(d); \ (uncore)->fw_domains_table_entries = ARRAY_SIZE((d)); \ } @@ -1715,20 +1719,23 @@ static int uncore_mmio_setup(struct inte mmio_size = 2 * 1024 * 1024; uncore->regs = pci_iomap(pdev, mmio_bar, mmio_size); #ifdef __NetBSD__ - if (!dev_priv->regs) - dev_priv->regs = drm_agp_borrow(&i915->drm, mmio_bar, - mmio_size); + if (uncore->regs) { + KASSERT(pdev->pd_resources[mmio_bar].mapped); + uncore->regs_bst = pdev->pd_resources[mmio_bar].bst; + uncore->regs_bsh = pdev->pd_resources[mmio_bar].bsh; + } else if (agp_i810_borrow(pdev->pd_resources[mmio_bar].addr, + mmio_size, &uncore->regs_bsh)) { + KASSERT(!pdev->pd_resources[mmio_bar].mapped); + uncore->regs_bst = pdev->pd_pa.pa_memt; + uncore->regs = bus_space_vaddr(pdev->pd_pa.pa_memt, + uncore->regs_bsh); + } #endif if (uncore->regs == NULL) { drm_err(&i915->drm, "failed to map registers\n"); return -EIO; } -#ifdef __NetBSD__ - i915->regs_bst = i915->drm.pdev->pd_resources[mmio_bar].bst; - i915->regs_bsh = i915->drm.pdev->pd_resources[mmio_bar].bsh; -#endif - return 0; } Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h:1.7 src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h:1.8 --- src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h:1.7 Sun Dec 19 11:33:49 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.h Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_uncore.h,v 1.7 2021/12/19 11:33:49 riastradh Exp $ */ +/* $NetBSD: intel_uncore.h,v 1.8 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2017 Intel Corporation @@ -108,10 +108,17 @@ struct intel_forcewake_range { enum forcewake_domains domains; }; + struct intel_uncore { -#ifdef __linux__ +#ifdef __NetBSD__ +# define __iomem /* XXX */ +#endif void __iomem *regs; -#else +#ifdef __NetBSD__ +# undef __iomem +#endif + +#ifdef __NetBSD__ bus_space_tag_t regs_bst; bus_space_handle_t regs_bsh; #endif Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c:1.5 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c:1.4 Sun Dec 19 11:45:50 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_hdcp.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_hdcp.c,v 1.4 2021/12/19 11:45:50 riastradh Exp $ */ +/* $NetBSD: intel_hdcp.c,v 1.5 2021/12/19 11:49:11 riastradh Exp $ */ /* SPDX-License-Identifier: MIT */ /* @@ -11,7 +11,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_hdcp.c,v 1.4 2021/12/19 11:45:50 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_hdcp.c,v 1.5 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/component.h> #include <linux/i2c.h> @@ -27,6 +27,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_hdcp.c #include "intel_sideband.h" #include "intel_connector.h" +#include <linux/nbsd-namespace.h> + #define KEY_LOAD_TRIES 5 #define ENCRYPT_STATUS_CHANGE_TIMEOUT_MS 50 #define HDCP2_LC_RETRY_CNT 3 @@ -2039,7 +2041,9 @@ void intel_hdcp_component_fini(struct dr dev_priv->hdcp_comp_added = false; mutex_unlock(&dev_priv->hdcp_comp_mutex); +#ifndef __NetBSD__ /* XXX i915 hdmi audio */ component_del(dev_priv->drm.dev, &i915_hdcp_component_ops); +#endif } void intel_hdcp_cleanup(struct intel_connector *connector) Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c:1.3 Sun Dec 19 11:47:25 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_opregion.c,v 1.3 2021/12/19 11:47:25 riastradh Exp $ */ +/* $NetBSD: intel_opregion.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright 2008 Intel Corporation <hong....@intel.com> @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_opregion.c,v 1.3 2021/12/19 11:47:25 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_opregion.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/acpi.h> #include <linux/dmi.h> @@ -622,9 +622,9 @@ void intel_opregion_asle_intr(struct drm #define ACPI_EV_LID (1<<1) #define ACPI_EV_DOCK (1<<2) +#ifdef __NetBSD__ static struct intel_opregion *system_opregion; -#ifdef __NetBSD__ static void intel_opregion_video_event(ACPI_HANDLE hdl, uint32_t notify, void *opaque) { @@ -898,7 +898,7 @@ static int intel_load_vbt_firmware(struc if (!name || !*name) return -ENOENT; - ret = request_firmware(&fw, name, &dev_priv->drm.pdev->dev); + ret = request_firmware(&fw, name, pci_dev_dev(dev_priv->drm.pdev)); if (ret) { DRM_ERROR("Requesting VBT firmware \"%s\" failed (%d)\n", name, ret); @@ -952,14 +952,15 @@ int intel_opregion_setup(struct drm_i915 INIT_WORK(&opregion->asle_work, asle_work); #ifdef __NetBSD__ - opregion->bst = dev->pdev->pd_pa.pa_memt; + opregion->bst = pdev->pd_pa.pa_memt; err = -bus_space_map(opregion->bst, asls, OPREGION_SIZE, - BUS_SPACE_MAP_LINEAR|BUS_SPACE_MAP_CACHEABLE, &opregion->bsh); + BUS_SPACE_MAP_LINEAR|BUS_SPACE_MAP_CACHEABLE, + &opregion->asls_bsh); if (err) { DRM_DEBUG_DRIVER("Failed to map opregion: %d\n", err); return err; } - base = bus_space_vaddr(opregion->bst, opregion->bsh); + base = bus_space_vaddr(opregion->bst, opregion->asls_bsh); #else base = memremap(asls, OPREGION_SIZE, MEMREMAP_WB); #endif @@ -1033,8 +1034,19 @@ int intel_opregion_setup(struct drm_i915 rvda += asls; } +#ifdef __NetBSD__ + if (bus_space_map(opregion->bst, rvda, + opregion->asle->rvds, + BUS_SPACE_MAP_LINEAR|BUS_SPACE_MAP_CACHEABLE, + &opregion->rvda_bsh)) + opregion->rvda = NULL; + else + opregion->rvda = bus_space_vaddr(opregion->bst, + opregion->rvda_bsh); +#else opregion->rvda = memremap(rvda, opregion->asle->rvds, MEMREMAP_WB); +#endif vbt = opregion->rvda; vbt_size = opregion->asle->rvds; @@ -1045,7 +1057,15 @@ int intel_opregion_setup(struct drm_i915 goto out; } else { DRM_DEBUG_KMS("Invalid VBT in ACPI OpRegion (RVDA)\n"); +#ifdef __NetBSD__ + if (opregion->rvda) { + bus_space_unmap(opregion->bst, + opregion->rvda_bsh, + opregion->asle->rvds); + } +#else memunmap(opregion->rvda); +#endif opregion->rvda = NULL; } } @@ -1074,7 +1094,7 @@ out: err_out: #ifdef __NetBSD__ - bus_space_unmap(opregion->bst, opregion->bsh, OPREGION_SIZE); + bus_space_unmap(opregion->bst, opregion->asls_bsh, OPREGION_SIZE); #else memunmap(base); #endif @@ -1144,9 +1164,14 @@ void intel_opregion_register(struct drm_ return; if (opregion->acpi) { -#ifdef __NetBSD__ /* XXX post-merge audit */ - if (dev->pdev->pd_ad != NULL) - acpi_deregister_notify(dev->pdev->pd_ad); +#ifdef __NetBSD__ + if (i915->drm.pdev->pd_ad != NULL) { + /* XXX gross but expedient */ + KASSERT(system_opregion == NULL); + system_opregion = opregion; + acpi_register_notify(i915->drm.pdev->pd_ad, + intel_opregion_video_event); + } #else opregion->acpi_notifier.notifier_call = intel_opregion_video_event; @@ -1212,20 +1237,31 @@ void intel_opregion_unregister(struct dr if (!opregion->header) return; - if (opregion->acpi_notifier.notifier_call) { #ifdef __NetBSD__ - if (dev->pdev->pd_ad != NULL) - acpi_deregister_notify(dev->pdev->pd_ad); + if (opregion->acpi) { + if (i915->drm.pdev->pd_ad != NULL) + acpi_deregister_notify(i915->drm.pdev->pd_ad); + } #else + if (opregion->acpi_notifier.notifier_call) { unregister_acpi_notifier(&opregion->acpi_notifier); opregion->acpi_notifier.notifier_call = NULL; -#endif } +#endif /* just clear all opregion memory pointers now */ +#ifdef __NetBSD__ + bus_space_unmap(opregion->bst, opregion->asls_bsh, OPREGION_SIZE); +#else memunmap(opregion->header); +#endif if (opregion->rvda) { +#ifdef __NetBSD__ + bus_space_unmap(opregion->bst, opregion->rvda_bsh, + opregion->asle->rvds); +#else memunmap(opregion->rvda); +#endif opregion->rvda = NULL; } if (opregion->vbt_firmware) { Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c:1.3 Sun Dec 19 10:25:07 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_vga.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_vga.c,v 1.3 2021/12/19 10:25:07 riastradh Exp $ */ +/* $NetBSD: intel_vga.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $ */ // SPDX-License-Identifier: MIT /* @@ -6,7 +6,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_vga.c,v 1.3 2021/12/19 10:25:07 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_vga.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/pci.h> #include <linux/vgaarb.h> @@ -45,8 +45,8 @@ void intel_vga_disable(struct drm_i915_p aprint_error_dev(pdev->pd_dev, "unable to map VGA registers: %d\n", error); } else { - DRMCTASSERT(vgabase <= VGA_SR_INDEX); - DRMCTASSERT(vgabase <= VGA_SR_DATA); + BUILD_BUG_ON(!(vgabase <= VGA_SR_INDEX)); + BUILD_BUG_ON(!(vgabase <= VGA_SR_DATA)); bus_space_write_1(iot, ioh, VGA_SR_INDEX - vgabase, SR01); sr1 = bus_space_read_1(iot, ioh, VGA_SR_DATA - vgabase); bus_space_write_1(iot, ioh, VGA_SR_DATA - vgabase, @@ -114,11 +114,33 @@ void intel_vga_reset_io_mem(struct drm_i * sure vgacon can keep working normally without triggering interrupts * and error messages. */ +#ifdef __NetBSD__ + { + const bus_addr_t vgabase = 0x3c0; + const bus_space_tag_t iot = pdev->pd_pa.pa_iot; + bus_space_handle_t ioh; + int error; + + error = bus_space_map(iot, vgabase, 0x10, 0, &ioh); + if (error) { + aprint_error_dev(pdev->pd_dev, + "unable to map VGA registers: %d\n", error); + } else { + BUILD_BUG_ON(!(vgabase <= VGA_MSR_READ)); + BUILD_BUG_ON(!(vgabase <= VGA_MSR_WRITE)); + bus_space_write_1(iot, ioh, VGA_MSR_WRITE, + bus_space_read_1(iot, ioh, VGA_MSR_READ)); + bus_space_unmap(iot, ioh, 0x10); + } + } +#else vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO); outb(inb(VGA_MSR_READ), VGA_MSR_WRITE); vga_put(pdev, VGA_RSRC_LEGACY_IO); +#endif } +#ifndef __NetBSD__ static int intel_vga_set_state(struct drm_i915_private *i915, bool enable_decode) { @@ -146,7 +168,6 @@ intel_vga_set_state(struct drm_i915_priv return 0; } -#ifndef __NetBSD__ static unsigned int intel_vga_set_decode(void *cookie, bool enable_decode) { Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_opregion.h Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_opregion.h,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_opregion.h,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2008-2017 Intel Corporation @@ -46,7 +46,8 @@ struct opregion_asle; struct intel_opregion { #ifdef __NetBSD__ bus_space_tag_t bst; - bus_space_handle_t bsh; + bus_space_handle_t asls_bsh; + bus_space_handle_t rvda_bsh; #endif struct opregion_header *header; struct opregion_acpi *acpi; Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_psr.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_psr.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_psr.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2014 Intel Corporation @@ -24,7 +24,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_psr.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_psr.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <drm/drm_atomic_helper.h> @@ -36,6 +36,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_psr.c, #include "intel_psr.h" #include "intel_sprite.h" +#include <linux/nbsd-namespace.h> + /** * DOC: Panel Self Refresh (PSR/SRD) * @@ -1168,7 +1170,7 @@ int intel_psr_debug_set(struct drm_i915_ if (val & ~(I915_PSR_DEBUG_IRQ | I915_PSR_DEBUG_MODE_MASK) || mode > I915_PSR_DEBUG_FORCE_PSR1) { - DRM_DEBUG_KMS("Invalid debug mask %llx\n", val); + DRM_DEBUG_KMS("Invalid debug mask %"PRIx64"\n", val); return -EINVAL; } Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sdvo.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_sdvo.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_sdvo.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright 2006 Dave Airlie <airl...@linux.ie> @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_sdvo.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_sdvo.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/delay.h> #include <linux/export.h> @@ -1437,9 +1437,9 @@ static void intel_sdvo_pre_enable(struct struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; const struct intel_sdvo_connector_state *sdvo_state = - to_intel_sdvo_connector_state(conn_state); + const_container_of(conn_state, struct intel_sdvo_connector_state, base.base); const struct intel_sdvo_connector *intel_sdvo_connector = - to_intel_sdvo_connector(conn_state->connector); + const_container_of(conn_state->connector, struct intel_sdvo_connector, base.base); const struct drm_display_mode *mode = &crtc_state->hw.mode; struct intel_sdvo *intel_sdvo = to_sdvo(intel_encoder); u32 sdvox; @@ -2271,7 +2271,8 @@ intel_sdvo_connector_atomic_get_property u64 *val) { struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector); - const struct intel_sdvo_connector_state *sdvo_state = to_intel_sdvo_connector_state((void *)state); + const struct intel_sdvo_connector_state *sdvo_state = + const_container_of(state, struct intel_sdvo_connector_state, base.base); if (property == intel_sdvo_connector->tv_format) { int i; @@ -2391,7 +2392,8 @@ intel_sdvo_connector_register(struct drm if (ret) return ret; -#ifdef __NetBSD__ /* XXX post-merge audit */ +#ifdef __NetBSD__ + __USE(sdvo); return 0; #else return sysfs_create_link(&connector->kdev->kobj, @@ -2405,8 +2407,12 @@ intel_sdvo_connector_unregister(struct d { struct intel_sdvo *sdvo = intel_attached_sdvo(to_intel_connector(connector)); +#ifdef __NetBSD__ + __USE(sdvo); +#else sysfs_remove_link(&connector->kdev->kobj, sdvo->ddc.dev.kobj.name); +#endif intel_connector_unregister(connector); } @@ -3226,7 +3232,7 @@ intel_sdvo_init_ddc_proxy(struct intel_s sdvo->ddc.owner = THIS_MODULE; sdvo->ddc.class = I2C_CLASS_DDC; snprintf(sdvo->ddc.name, I2C_NAME_SIZE, "SDVO DDC proxy"); - sdvo->ddc.dev.parent = dev->dev; + sdvo->ddc.dev.parent = pci_dev_dev(pdev); sdvo->ddc.algo_data = sdvo; sdvo->ddc.algo = &intel_sdvo_ddc_proxy; sdvo->ddc.lock_ops = &proxy_lock_ops; Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_sprite.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_sprite.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_sprite.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2011 Intel Corporation @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_sprite.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_sprite.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <drm/drm_atomic.h> #include <drm/drm_atomic_helper.h> @@ -91,15 +91,10 @@ void intel_pipe_update_start(const struc const struct drm_display_mode *adjusted_mode = &new_crtc_state->hw.adjusted_mode; long timeout = msecs_to_jiffies_timeout(1); int scanline, min, max, vblank_start; -#ifdef __NetBSD__ drm_waitqueue_t *wq = drm_crtc_vblank_waitqueue(&crtc->base); int ret; -#else - wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base); bool need_vlv_dsi_wa = (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) && intel_crtc_has_type(new_crtc_state, INTEL_OUTPUT_DSI); - DEFINE_WAIT(wait); -#endif u32 psr_status; vblank_start = adjusted_mode->crtc_vblank_start; @@ -126,54 +121,20 @@ void intel_pipe_update_start(const struc DRM_ERROR("PSR idle timed out 0x%x, atomic update may fail\n", psr_status); -#ifdef __NetBSD__ - spin_lock(&dev->vbl_lock); -#else - local_irq_disable(); -#endif + spin_lock(&dev_priv->drm.vbl_lock); crtc->debug.min_vbl = min; crtc->debug.max_vbl = max; trace_intel_pipe_update_start(crtc); -#ifdef __NetBSD__ - DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, wq, &dev->vbl_lock, timeout, + DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret, wq, &dev_priv->drm.vbl_lock, + timeout, (scanline = intel_get_crtc_scanline(crtc), scanline < min || scanline > max)); if (ret <= 0) DRM_ERROR("Potential atomic update failure on pipe %c: %d\n", pipe_name(crtc->pipe), ret ? ret : -EWOULDBLOCK); drm_crtc_vblank_put_locked(&crtc->base); -#else - for (;;) { - /* - * prepare_to_wait() has a memory barrier, which guarantees - * other CPUs can see the task state update by the time we - * read the scanline. - */ - prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE); - - scanline = intel_get_crtc_scanline(crtc); - if (scanline < min || scanline > max) - break; - - if (!timeout) { - DRM_ERROR("Potential atomic update failure on pipe %c\n", - pipe_name(crtc->pipe)); - break; - } - - local_irq_enable(); - - timeout = schedule_timeout(timeout); - - local_irq_disable(); - } - - finish_wait(wq, &wait); - - drm_crtc_vblank_put(&crtc->base); -#endif /* * On VLV/CHV DSI the scanline counter would appear to @@ -201,7 +162,7 @@ void intel_pipe_update_start(const struc return; irq_disable: - local_irq_disable(); + spin_lock(&dev_priv->drm.vbl_lock); } /** @@ -238,11 +199,7 @@ void intel_pipe_update_end(struct intel_ new_crtc_state->uapi.event = NULL; } -#ifdef __NetBSD__ - spin_unlock(&dev->vbl_lock); -#else - local_irq_enable(); -#endif + spin_unlock(&dev_priv->drm.vbl_lock); if (intel_vgpu_active(dev_priv)) return; Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tc.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_tc.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_tc.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ // SPDX-License-Identifier: MIT /* @@ -6,7 +6,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_tc.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_tc.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include "i915_drv.h" #include "intel_display.h" @@ -14,6 +14,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_tc.c,v #include "intel_dp_mst.h" #include "intel_tc.h" +#include <linux/nbsd-namespace.h> + static const char *tc_port_mode_name(enum tc_port_mode mode) { static const char * const names[] = { Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_tv.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_tv.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_tv.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2006-2008 Intel Corporation @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_tv.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_tv.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <drm/drm_atomic_helper.h> #include <drm/drm_crtc.h> @@ -1425,7 +1425,7 @@ static void intel_tv_pre_enable(struct i struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->uapi.crtc); struct intel_tv *intel_tv = enc_to_tv(encoder); const struct intel_tv_connector_state *tv_conn_state = - to_intel_tv_connector_state(conn_state); + const_container_of(conn_state, struct intel_tv_connector_state, base); const struct tv_mode *tv_mode = intel_tv_mode_find(conn_state); u32 tv_ctl, tv_filter_ctl; u32 scctl1, scctl2, scctl3; Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c:1.7 --- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c:1.6 Sun Dec 19 11:47:40 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_lrc.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_lrc.c,v 1.6 2021/12/19 11:47:40 riastradh Exp $ */ +/* $NetBSD: intel_lrc.c,v 1.7 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2014 Intel Corporation @@ -134,7 +134,7 @@ * */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_lrc.c,v 1.6 2021/12/19 11:47:40 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_lrc.c,v 1.7 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/interrupt.h> @@ -209,7 +209,10 @@ struct virtual_engine { struct ve_node { struct rb_node rb; int prio; + uint64_t order; + bool inserted; } nodes[I915_NUM_ENGINES]; + uint64_t order; /* * Keep track of bonded pairs -- restrictions upon on our selection @@ -228,6 +231,44 @@ struct virtual_engine { struct intel_engine_cs *siblings[0]; }; +#ifdef __NetBSD__ +static int +compare_ve_nodes(void *cookie, const void *va, const void *vb) +{ + const struct ve_node *na = va; + const struct ve_node *nb = vb; + + if (na->prio < nb->prio) + return -1; + if (na->prio > nb->prio) + return +1; + if (na->order < nb->order) + return -1; + if (na->order > nb->order) + return +1; + return 0; +} + +static int +compare_ve_node_key(void *cookie, const void *vn, const void *vk) +{ + const struct ve_node *n = vn; + const int *k = vk; + + if (n->prio < *k) + return -1; + if (n->prio > *k) + return +1; + return 0; +} + +static const rb_tree_ops_t ve_tree_ops = { + .rbto_compare_nodes = compare_ve_nodes, + .rbto_compare_key = compare_ve_node_key, + .rbto_node_offset = offsetof(struct ve_node, rb), +}; +#endif + static struct virtual_engine *to_virtual_engine(struct intel_engine_cs *engine) { GEM_BUG_ON(!intel_engine_is_virtual(engine)); @@ -1818,13 +1859,14 @@ static void execlists_dequeue(struct int if (!rq) { /* lazily cleanup after another engine handled rq */ rb_erase_cached(rb, &execlists->virtual); - RB_CLEAR_NODE(rb); + container_of(rb, struct ve_node, rb)->inserted = + false; rb = rb_first_cached(&execlists->virtual); continue; } if (!virtual_matches(ve, rq, engine)) { - rb = rb_next(rb); + rb = rb_next2(&execlists->virtual.rb_root, rb); continue; } @@ -1909,7 +1951,7 @@ static void execlists_dequeue(struct int * Even if ELSP[1] is occupied and not worthy * of timeslices, our queue might be. */ - if (!execlists->timer.expires && + if (!timer_pending(&execlists->timer) && need_timeslice(engine, last)) set_timer_ms(&execlists->timer, timeslice(engine)); @@ -1930,7 +1972,8 @@ static void execlists_dequeue(struct int if (unlikely(!rq)) { /* lost the race to a sibling */ spin_unlock(&ve->base.active.lock); rb_erase_cached(rb, &execlists->virtual); - RB_CLEAR_NODE(rb); + container_of(rb, struct ve_node, rb)->inserted = + false; rb = rb_first_cached(&execlists->virtual); continue; } @@ -1942,7 +1985,8 @@ static void execlists_dequeue(struct int if (rq_prio(rq) >= queue_prio(execlists)) { if (!virtual_matches(ve, rq, engine)) { spin_unlock(&ve->base.active.lock); - rb = rb_next(rb); + rb = rb_next2(&execlists->virtual.rb_root, + rb); continue; } @@ -1963,7 +2007,8 @@ static void execlists_dequeue(struct int ve->request = NULL; ve->base.execlists.queue_priority_hint = INT_MIN; rb_erase_cached(rb, &execlists->virtual); - RB_CLEAR_NODE(rb); + container_of(rb, struct ve_node, rb)->inserted = + false; GEM_BUG_ON(!(rq->execution_mask & engine->mask)); rq->engine = engine; @@ -2162,8 +2207,8 @@ cancel_port_requests(struct intel_engine static inline void invalidate_csb_entries(const u32 *first, const u32 *last) { - clflush((void *)first); - clflush((void *)last); + clflush(__UNCONST(first)); + clflush(__UNCONST(last)); } static inline bool @@ -3684,7 +3729,7 @@ static void execlists_reset_cancel(struc rb_entry(rb, typeof(*ve), nodes[engine->id].rb); rb_erase_cached(rb, &execlists->virtual); - RB_CLEAR_NODE(rb); + container_of(rb, struct ve_node, rb)->inserted = false; spin_lock(&ve->base.active.lock); rq = fetch_and_zero(&ve->request); @@ -3703,7 +3748,12 @@ static void execlists_reset_cancel(struc /* Remaining _unready_ requests will be nop'ed when submitted */ execlists->queue_priority_hint = INT_MIN; +#ifdef __NetBSD__ + i915_sched_init(execlists); + rb_tree_init(&execlists->virtual.rb_root.rbr_tree, &ve_tree_ops); +#else execlists->queue = RB_ROOT_CACHED; +#endif GEM_BUG_ON(__tasklet_is_enabled(&execlists->tasklet)); execlists->tasklet.func = nop_submission_tasklet; @@ -4664,14 +4714,16 @@ static void virtual_context_destroy(stru struct rb_node *node = &ve->nodes[sibling->id].rb; unsigned long flags; - if (RB_EMPTY_NODE(node)) + if (!ve->nodes[sibling->id].inserted) continue; spin_lock_irqsave(&sibling->active.lock, flags); /* Detachment is lazily performed in the execlists tasklet */ - if (!RB_EMPTY_NODE(node)) + if (ve->nodes[sibling->id].inserted) { rb_erase_cached(node, &sibling->execlists.virtual); + ve->nodes[sibling->id].inserted = false; + } spin_unlock_irqrestore(&sibling->active.lock, flags); } @@ -4804,7 +4856,11 @@ static void virtual_submission_tasklet(u if (unlikely(!mask)) return; +#ifdef __NetBSD__ + int s = splsoftserial(); /* block tasklets=softints */ +#else local_irq_disable(); +#endif for (n = 0; READ_ONCE(ve->request) && n < ve->num_siblings; n++) { struct intel_engine_cs *sibling = ve->siblings[n]; struct ve_node * const node = &ve->nodes[sibling->id]; @@ -4812,11 +4868,11 @@ static void virtual_submission_tasklet(u bool first; if (unlikely(!(mask & sibling->mask))) { - if (!RB_EMPTY_NODE(&node->rb)) { + if (node->inserted) { spin_lock(&sibling->active.lock); rb_erase_cached(&node->rb, &sibling->execlists.virtual); - RB_CLEAR_NODE(&node->rb); + node->inserted = false; spin_unlock(&sibling->active.lock); } continue; @@ -4824,7 +4880,7 @@ static void virtual_submission_tasklet(u spin_lock(&sibling->active.lock); - if (!RB_EMPTY_NODE(&node->rb)) { + if (node->inserted) { /* * Cheat and avoid rebalancing the tree if we can * reuse this node in situ. @@ -4835,8 +4891,24 @@ static void virtual_submission_tasklet(u goto submit_engine; rb_erase_cached(&node->rb, &sibling->execlists.virtual); + node->inserted = false; } +#ifdef __NetBSD__ + __USE(parent); + __USE(rb); + struct ve_node *collision __diagused; + /* XXX kludge to get insertion order */ + node->order = ve->order++; + collision = rb_tree_insert_node( + &sibling->execlists.virtual.rb_root.rbr_tree, + node); + KASSERT(collision == node); + node->inserted = true; + first = rb_tree_find_node_geq( + &sibling->execlists.virtual.rb_root.rbr_tree, + &node->prio) == node; +#else rb = NULL; first = true; parent = &sibling->execlists.virtual.rb_root.rb_node; @@ -4857,9 +4929,10 @@ static void virtual_submission_tasklet(u rb_insert_color_cached(&node->rb, &sibling->execlists.virtual, first); +#endif submit_engine: - GEM_BUG_ON(RB_EMPTY_NODE(&node->rb)); + GEM_BUG_ON(!node->inserted); node->prio = prio; if (first && prio > sibling->execlists.queue_priority_hint) { sibling->execlists.queue_priority_hint = prio; @@ -4868,7 +4941,11 @@ submit_engine: spin_unlock(&sibling->active.lock); } +#ifdef __NetBSD__ + splx(s); +#else local_irq_enable(); +#endif } static void virtual_submit_request(struct i915_request *rq) @@ -5034,8 +5111,8 @@ intel_execlists_create_virtual(struct in goto err_put; } - GEM_BUG_ON(RB_EMPTY_NODE(&ve->nodes[sibling->id].rb)); - RB_CLEAR_NODE(&ve->nodes[sibling->id].rb); + GEM_BUG_ON(!ve->nodes[sibling->id].inserted); + ve->nodes[sibling->id].inserted = false; ve->siblings[ve->num_siblings++] = sibling; ve->base.mask |= sibling->mask; @@ -5195,7 +5272,9 @@ void intel_execlists_show_requests(struc if (execlists->queue_priority_hint != INT_MIN) drm_printf(m, "\t\tQueue priority hint: %d\n", execlists->queue_priority_hint); - for (rb = rb_first_cached(&execlists->queue); rb; rb = rb_next(rb)) { + for (rb = rb_first_cached(&execlists->queue); + rb; + rb = rb_next2(&execlists->queue.rb_root, rb)) { struct i915_priolist *p = rb_entry(rb, typeof(*p), node); int i; @@ -5217,7 +5296,9 @@ void intel_execlists_show_requests(struc last = NULL; count = 0; - for (rb = rb_first_cached(&execlists->virtual); rb; rb = rb_next(rb)) { + for (rb = rb_first_cached(&execlists->virtual); + rb; + rb = rb_next2(&execlists->virtual.rb_root, rb)) { struct virtual_engine *ve = rb_entry(rb, typeof(*ve), nodes[engine->id].rb); struct i915_request *rq = READ_ONCE(ve->request); Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ppgtt.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_ppgtt.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_ppgtt.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ // SPDX-License-Identifier: MIT /* @@ -6,7 +6,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_ppgtt.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_ppgtt.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/slab.h> @@ -88,7 +88,11 @@ __set_pd_entry(struct i915_page_director atomic_inc(px_used(pd)); pd->entry[idx] = to; +#ifdef __NetBSD__ + write_dma_entry(px_base(pd), idx, encode(to->map->dm_segs[0].ds_addr, I915_CACHE_LLC)); +#else write_dma_entry(px_base(pd), idx, encode(to->daddr, I915_CACHE_LLC)); +#endif } void @@ -211,7 +215,11 @@ void ppgtt_init(struct i915_ppgtt *ppgtt ppgtt->vm.gt = gt; ppgtt->vm.i915 = i915; +#ifdef __NetBSD__ + ppgtt->vm.dmat = i915->drm.dmat; +#else ppgtt->vm.dma = &i915->drm.pdev->dev; +#endif ppgtt->vm.total = BIT_ULL(INTEL_INFO(i915)->ppgtt_size); i915_address_space_init(&ppgtt->vm, VM_CLASS_PPGTT); Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_rc6.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_rc6.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_rc6.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * SPDX-License-Identifier: MIT @@ -7,7 +7,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_rc6.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_rc6.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/pm_runtime.h> @@ -482,14 +482,14 @@ static bool rc6_supported(struct intel_r static void rpm_get(struct intel_rc6 *rc6) { GEM_BUG_ON(rc6->wakeref); - pm_runtime_get_sync(&rc6_to_i915(rc6)->drm.pdev->dev); + pm_runtime_get_sync(pci_dev_dev(rc6_to_i915(rc6)->drm.pdev)); rc6->wakeref = true; } static void rpm_put(struct intel_rc6 *rc6) { GEM_BUG_ON(!rc6->wakeref); - pm_runtime_put(&rc6_to_i915(rc6)->drm.pdev->dev); + pm_runtime_put(pci_dev_dev(rc6_to_i915(rc6)->drm.pdev)); rc6->wakeref = false; } Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ring_submission.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_ring_submission.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_ring_submission.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * Copyright © 2008-2010 Intel Corporation @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_ring_submission.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_ring_submission.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/log2.h> @@ -511,6 +511,19 @@ static void set_hws_pga(struct intel_eng intel_uncore_write(engine->uncore, HWS_PGA, addr); } +#ifdef __NetBSD__ +static void +ring_setup_phys_status_page(struct intel_engine_cs *engine) +{ + struct drm_i915_gem_object *obj = engine->status_page.vma->obj; + bus_addr_t addr; + + GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj)); + addr = obj->mm.pages->sgl[0].sg_dmamap->dm_segs[0].ds_addr; + set_hws_pga(engine, addr); + set_hwstam(engine, ~0u); +} +#else static struct page *status_page(struct intel_engine_cs *engine) { struct drm_i915_gem_object *obj = engine->status_page.vma->obj; @@ -524,6 +537,7 @@ static void ring_setup_phys_status_page( set_hws_pga(engine, PFN_PHYS(page_to_pfn(status_page(engine)))); set_hwstam(engine, ~0u); } +#endif static void set_hwsp(struct intel_engine_cs *engine, u32 offset) { Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_sseu.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_sseu.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_sseu.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * SPDX-License-Identifier: MIT @@ -7,7 +7,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_sseu.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_sseu.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include "i915_drv.h" #include "intel_lrc_reg.h" @@ -101,7 +101,7 @@ u32 intel_sseu_make_rpcs(struct drm_i915 * amount of half of all available subslices per slice. */ ctx_sseu.subslice_mask = - ~(~0 << (hweight8(ctx_sseu.subslice_mask) / 2)); + ~(~0u << (hweight8(ctx_sseu.subslice_mask) / 2)); ctx_sseu.slice_mask = 0x1; } } Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_timeline.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_timeline.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_timeline.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * SPDX-License-Identifier: MIT @@ -7,7 +7,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_timeline.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_timeline.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include "i915_drv.h" @@ -17,6 +17,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_timeli #include "intel_ring.h" #include "intel_timeline.h" +#include <linux/nbsd-namespace.h> + #define ptr_set_bit(ptr, bit) ((typeof(ptr))((unsigned long)(ptr) | BIT(bit))) #define ptr_test_bit(ptr, bit) ((unsigned long)(ptr) & BIT(bit)) Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c:1.2 Sat Dec 18 23:45:30 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_workarounds.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_workarounds.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $ */ +/* $NetBSD: intel_workarounds.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $ */ /* * SPDX-License-Identifier: MIT @@ -7,7 +7,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_workarounds.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_workarounds.c,v 1.3 2021/12/19 11:49:11 riastradh Exp $"); #include "i915_drv.h" #include "intel_context.h" @@ -16,6 +16,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_workar #include "intel_ring.h" #include "intel_workarounds.h" +#include <linux/nbsd-namespace.h> + /** * DOC: Hardware workarounds * Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c:1.3 Sun Dec 19 01:43:50 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_reset.c Sun Dec 19 11:49:11 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_reset.c,v 1.3 2021/12/19 01:43:50 riastradh Exp $ */ +/* $NetBSD: intel_reset.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $ */ /* * SPDX-License-Identifier: MIT @@ -7,7 +7,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_reset.c,v 1.3 2021/12/19 01:43:50 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_reset.c,v 1.4 2021/12/19 11:49:11 riastradh Exp $"); #include <linux/sched/mm.h> #include <linux/stop_machine.h> @@ -28,6 +28,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_reset. #include "uc/intel_guc.h" #include "uc/intel_guc_submission.h" +#include <linux/nbsd-namespace.h> + #define RESET_MAX_RETRIES 3 /* XXX How to handle concurrent GGTT updates using tiling registers? */ @@ -708,10 +710,16 @@ static void revoke_mmaps(struct intel_gt node = &vma->mmo->vma_node; vma_offset = vma->ggtt_view.partial.offset << PAGE_SHIFT; +#ifdef __NetBSD__ + __USE(node); + __USE(vma_offset); + panic("NYI"); +#else unmap_mapping_range(gt->i915->drm.anon_inode->i_mapping, drm_vma_node_offset_addr(node) + vma_offset, vma->size, 1); +#endif } } @@ -1162,8 +1170,8 @@ static void intel_gt_reset_global(struct u32 engine_mask, const char *reason) { - struct kobject *kobj = >->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); +}