Module Name: src
Committed By: jmcneill
Date: Sat Mar 8 14:30:05 UTC 2025
Modified Files:
src/sys/arch/evbarm/fdt: fdt_machdep.c
Log Message:
arm64: Add a gross hack to allow handoff from genfb to PCI DRM drivers.
Similar to how this is handled on x86.
To generate a diff of this commit:
cvs rdiff -u -r1.108 -r1.109 src/sys/arch/evbarm/fdt/fdt_machdep.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/arch/evbarm/fdt/fdt_machdep.c
diff -u src/sys/arch/evbarm/fdt/fdt_machdep.c:1.108 src/sys/arch/evbarm/fdt/fdt_machdep.c:1.109
--- src/sys/arch/evbarm/fdt/fdt_machdep.c:1.108 Sun Jun 30 17:55:28 2024
+++ src/sys/arch/evbarm/fdt/fdt_machdep.c Sat Mar 8 14:30:05 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: fdt_machdep.c,v 1.108 2024/06/30 17:55:28 jmcneill Exp $ */
+/* $NetBSD: fdt_machdep.c,v 1.109 2025/03/08 14:30:05 jmcneill Exp $ */
/*-
* Copyright (c) 2015-2017 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_machdep.c,v 1.108 2024/06/30 17:55:28 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_machdep.c,v 1.109 2025/03/08 14:30:05 jmcneill Exp $");
#include "opt_arm_debug.h"
#include "opt_bootconfig.h"
@@ -38,6 +38,7 @@ __KERNEL_RCSID(0, "$NetBSD: fdt_machdep.
#include "opt_multiprocessor.h"
#include "genfb.h"
+#include "pci.h"
#include "ukbd.h"
#include "wsdisplay.h"
@@ -110,6 +111,11 @@ __KERNEL_RCSID(0, "$NetBSD: fdt_machdep.
#include <dev/wscons/wsdisplayvar.h>
#endif
+#if NPCI > 0
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
+#endif
+
BootConfig bootconfig;
char *boot_args = NULL;
@@ -488,6 +494,27 @@ fdt_device_register(device_t self, void
prop_dictionary_set_uint64(dict,
"simplefb-physaddr", arm_simplefb_physaddr());
}
+
+#if NPCI > 0
+ /*
+ * Gross hack to allow handoff of console from genfb to a PCI DRM
+ * display driver. Will match the first device that attaches, which
+ * is not ideal, but better than nothing for now. Similar to how
+ * this is handled on x86.
+ */
+ if (device_parent(self) != NULL &&
+ device_is_a(device_parent(self), "pci")) {
+ static bool found_pci_console = false;
+ struct pci_attach_args *pa = aux;
+
+ if (PCI_CLASS(pa->pa_class) == PCI_CLASS_DISPLAY &&
+ !found_pci_console) {
+ prop_dictionary_t dict = device_properties(self);
+ prop_dictionary_set_bool(dict, "is_console", true);
+ found_pci_console = true;
+ }
+ }
+#endif
#endif
if (plat && plat->fp_device_register)