aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVince <git@darkain.com>2026-04-02 01:28:50 +0000
committerWarner Losh <imp@FreeBSD.org>2026-04-24 21:44:33 +0000
commit861deac98c4cd403b39c0d978bf2d39115c9caee (patch)
treeb0d151a271f4ef7911544b112fbc49ad980a4a28
parenta783b0bca2ca79e9f881538314347c5304edd11f (diff)
Fix xhci detection on Raspberry Pi 400
If you use the FreeBSD pre-build Raspberry Pi image, it does not include the specific .dtb file for the Raspberry Pi 400. On this hardware, it will fall back to attempting to load the Raspberry Pi 4 .dtb file instead. The Pi 4 .dtb file reports the board compatible name as "raspberrypi,4-model-b" The Pi 400 .dtb file reports the board compatible name as "raspberrypi,400" However, it's even better to use the generic name. When using the official Pi 400 .dtb file from the Raspberry Pi Firmware collection, the FreeBSD xhci driver currently fails to recognize this, and thus fails to initialize the xhci device. This means no external USB, or internal USB (which feeds the build-in keyboard) The official Raspberry Pi FreeBSD image has been working on the Pi 400 "on accident" simply because it didn't include the Pi 400 .dtb file prior to this. But the Stratipi Builder uses the full Raspberry Pi firmware suite and hit this bug. As a note: this is probably also a bug on the Compute Module 4 (CM4), but I don't own one of these devices in order to test/validate it. MFC After: 5 days Reviewed by: imp, Ali Mashtizadeh Pull Request: https://github.com/freebsd/freebsd-src/pull/2115 (cherry picked from commit 7634043970078f63eea03bb8975bd3fe1e883130)
-rw-r--r--sys/arm/broadcom/bcm2835/bcm2838_xhci.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/arm/broadcom/bcm2835/bcm2838_xhci.c b/sys/arm/broadcom/bcm2835/bcm2838_xhci.c
index 25579d7227a5..b1461d17d391 100644
--- a/sys/arm/broadcom/bcm2835/bcm2838_xhci.c
+++ b/sys/arm/broadcom/bcm2835/bcm2838_xhci.c
@@ -89,7 +89,7 @@ bcm_xhci_probe(device_t dev)
root = OF_finddevice("/");
if (root == -1)
return (ENXIO);
- if (!ofw_bus_node_is_compatible(root, "raspberrypi,4-model-b"))
+ if (!ofw_bus_node_is_compatible(root, "brcm,bcm2711"))
return (ENXIO);
/*
@@ -105,7 +105,7 @@ bcm_xhci_probe(device_t dev)
return (ENXIO);
device_set_desc(dev,
- "VL805 USB 3.0 controller (on the Raspberry Pi 4b)");
+ "VL805 USB 3.0 controller (on the Raspberry Pi 4 series)");
return (BUS_PROBE_SPECIFIC);
}