After <@UUU10M8F6> some days ago with supporting r...
# aros
j
After @bsek some days ago with supporting raspbi 3, I'm very happy to announce that I just opened the PRs to add support for raspbi 4. On real hardware. AROS on the Raspberry Pi 4: USB is alive, and the first patches are upstream 🎉 The Pi 4's four USB ports now work under native AArch64 AROS — mouse moves the Wanderer pointer, keyboard enumerates, both through the internal hub. Four PRs went upstream today and were all merged: #887, #888, #889, #890. Getting there meant writing a BCM2711 PCIe host bridge driver from scratch (the Pi 4 hangs its USB controller off PCIe, so no bridge means no USB at all) and then chasing a long chain of bugs. A few of the better ones: The controller that refused to start. Everything looked perfect — link trained, firmware loaded, interrupts routed — but the xHCI engine never ticked. It turned out the BCM2711 and the VL805 can't carry a 64-bit MMIO register write whole. AROS was writing the ring pointers as single 8-byte stores, the controller latched half a pointer, and then sat there. Splitting every 64-bit register into two 32-bit writes, low half first, brought it to life instantly. Linux has always done this; it's just never written down anywhere obvious. The no-op on a cache-coherent assumption.
CachePostDMA()
on aarch64 was inheriting the generic version, which is deliberately empty because x86 snoops the bus and doesn't need it. On a non-coherent ARM machine that means the CPU cheerfully reads stale cache instead of what the device just wrote. The symptom was beautifully misleading: a USB config descriptor reporting a total length of zero, so enumeration just stopped, with no error anywhere. The pointer translated twice. The Pi's firmware maps RAM at bus address 0x4_00000000, not identity. Two layers were each helpfully applying that offset, producing addresses in the 0x8_… range that belong to nobody. Every command came back "Parameter Error" until we found it — and while preparing the patch it turned out upstream was already correct and the double translation was mine. The mouse default that overwrote itself. Unrelated to the Pi: intuition sets the pointer speed divisor and then copies the defaults table over the top two lines later, so the assignment never survived. Every AROS system without saved input prefs has been running with no pointer scaling at all. Fine with a 400 dpi mouse, unusable with a modern one. Next up: WiFi, audio, and getting the remaining Pi 4 platform work into shape for upstream.
❤️ 4
🎉 2
b
congrats @John Knipper, great work!