Files
infix/board
Joachim Wiberg 799fd93cac board/common: fix authorization cascade for internal USB hubs
Two related problems prevented devices behind an intermediate hub (e.g.
the VIA Labs hub on the RPi 400's VL805 xHCI) from being authorized
when confd unlocks a USB bus:

1. Cascade ordering: usb_authorize() ran nftw() with FTW_DEPTH, which
   visits children before the root-hub entry.  The hub was authorized
   while authorized_default was still 2, so when the kernel probed the
   hub's children it immediately denied them.  Fix: write
   authorized_default=1 on the bus before entering nftw.

2. Slow/async probe: hub port enumeration is asynchronous — devices
   behind a hub may appear in sysfs after nftw has already finished.
   Fix: add a udev rule that catches usb_device add events on buses
   where authorized_default=1 is already set on any ancestor root hub
   and authorizes them immediately.

The ATTRS{} matcher in udev walks the full sysfs parent chain, so
authorized_default=1 on the root hub is visible even for devices several
hubs deep.  Buses still locked at authorized_default=0 are left alone.

Also expand the docstring in generic_usb_ports() to document the
design: each root hub gets its own uniquely-named entry (USB, or USB1/
USB2/... when multiple) so buses can be individually controlled, and
boards needing finer control should use DT usb-ports annotations.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2026-03-10 12:11:08 +01:00
..

Board Support

The board support for an architecture always starts with Qemu support, this is what each linux_defconfig at the very least sets up. Then each $BR2_ARCH has additional BSPs, e.g., Banana Pi BPI-R3.

The board/ directory is matched with the configs/*_defconfigs and the only execption is board/common/, which holds all shared files for Infix builds.

Each board/$BR2_ARCH/ can then have vendor/product sub-directories for the BSPs which may contain "fixups" to the base kernel config and any additional device tree files that should be included as well.

To rebuild a board-specific package, e.g. NanoPi R2S:

make friendlyarm-nanopi-r2s-rebuild all