Fix serial console for RPi5/CM5 debug UART (ttyAMA10)

The overlay was using console=ttyAMA0 (GPIO 14/15) but the RPi5 debug
UART is ttyAMA10 (JST connector between HDMI ports on Pi5, test pads
TP35/TP36 on CM5). Also adds earlycon for early boot output and disables
GPIO UART on Pi5 in config.txt to avoid U-Boot compatibility issues.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Mathias Beaulieu-Duncan 2026-02-13 19:47:18 -05:00
parent 689b9402a8
commit 970d9685f1
3 changed files with 70 additions and 5 deletions

View File

@ -120,10 +120,11 @@ patches-overlay:
GO_MINOR=$$(echo "$$GO_VER" | cut -d. -f1,2) && \
if [ "$$GO_MINOR" = "1.24" ]; then \
echo "Overlay Go $$GO_VER — applying Go toolchain patch (CVE fix)"; \
git am "$(PATCHES_DIRECTORY)/talos-rpi5/sbc-raspberrypi5/"*.patch; \
git am "$(PATCHES_DIRECTORY)/talos-rpi5/sbc-raspberrypi5/0001-"*.patch; \
else \
echo "Overlay Go $$GO_VER — skipping Go toolchain patch (CVEs fixed upstream)"; \
fi
fi && \
git am "$(PATCHES_DIRECTORY)/talos-rpi5/sbc-raspberrypi5/0002-"*.patch
patches: patches-pkgs patches-talos patches-overlay

View File

@ -67,9 +67,9 @@ zstd -d metal-arm64.raw.zst -o metal-arm64.raw
## Known issues
### No serial console output after boot
### ~~No serial console output after boot~~ (Fixed)
Serial output goes silent after the EFI stub decompresses the kernel and exits boot services. This affects headless debugging on CM5 boards where serial is the primary console.
The overlay was using `console=ttyAMA0` (GPIO 14/15 UART) but the RPi5/CM5 debug UART is `ttyAMA10`. Fixed by switching to `console=ttyAMA10,115200` and adding `earlycon=pl011,0x107d001000,115200n8` for early boot output. Also added `[pi5] enable_uart=0` to `config.txt` to match upstream and avoid U-Boot compatibility issues.
*Upstream: <a href="https://github.com/talos-rpi5/talos-builder/issues/4" target="_blank">talos-builder#4</a>*
@ -87,7 +87,7 @@ This project targets production-ready Talos clusters on RPi5/CM5 hardware.
|--------|-----------|-------------|
| Untested | **4K page size** | Aligned with upstream Talos kernel config. Reduces memory overhead and improves workload compatibility (Longhorn, jemalloc, F2FS, etc.). |
| Untested | **Reliable in-place upgrades** | Force GRUB bootloader with `--no-nvram` on arm64 to work around the `SetVariableRT` firmware limitation (<a href="https://github.com/talos-rpi5/talos-builder/issues/21" target="_blank">talos-builder#21</a>). |
| Pending | **Serial console fix** | Debug U-Boot/kernel handoff to restore serial output after EFI stub exit. |
| Untested | **Serial console fix** | Use correct debug UART (`ttyAMA10`) with `earlycon` for early boot output. |
| Pending | **NVMe boot support** | Produce images that target NVMe directly, or document a supported NVMe boot flow. |
## Building

View File

@ -0,0 +1,64 @@
From 7c1f75d724e54df5382d7900a0fdfac50f870043 Mon Sep 17 00:00:00 2001
From: Mathias Beaulieu-Duncan <mathias@svrnty.io>
Date: Fri, 13 Feb 2026 19:43:02 -0500
Subject: [PATCH] Fix serial console for RPi5/CM5 debug UART
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The overlay was using console=ttyAMA0 (GPIO 14/15 UART) but the RPi5
debug UART — the JST connector between HDMI ports on Pi5, or test pads
TP35/TP36 on CM5 — is ttyAMA10.
Changes:
- main.go: Use console=ttyAMA10,115200 (Pi5 debug UART, not GPIO UART0)
- main.go: Add earlycon=pl011,0x107d001000,115200n8 for early boot output
before the full PL011 driver initializes
- config.txt: Add [pi5] enable_uart=0 to match upstream and avoid U-Boot
compatibility issues (the debug UART is always active regardless)
The earlycon parameter uses the BCM2712 debug UART MMIO base address
(0x107d001000) to provide kernel output immediately after ExitBootServices,
bridging the gap between U-Boot handoff and full driver init.
---
installers/rpi5/src/config.txt | 7 ++++++-
installers/rpi5/src/main.go | 3 ++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/installers/rpi5/src/config.txt b/installers/rpi5/src/config.txt
index 1445d0e..7af461e 100644
--- a/installers/rpi5/src/config.txt
+++ b/installers/rpi5/src/config.txt
@@ -11,8 +11,13 @@ kernel=u-boot.bin
arm_64bit=1
# Run as fast as firmware / board allows.
arm_boost=1
-# Enable the primary/console UART.
+# Enable the primary/console UART (globally).
enable_uart=1
+# Disable UART on Pi5 to avoid U-Boot compatibility issue.
+# The debug UART (ttyAMA10) is always active regardless of this setting.
+[pi5]
+enable_uart=0
+[all]
# Disable Bluetooth.
dtoverlay=disable-bt
# Disable Wireless Lan.
diff --git a/installers/rpi5/src/main.go b/installers/rpi5/src/main.go
index 38cd824..fed3819 100644
--- a/installers/rpi5/src/main.go
+++ b/installers/rpi5/src/main.go
@@ -32,8 +32,9 @@ func (i *RpiInstaller) GetOptions(extra rpiOptions) (overlay.Options, error) {
return overlay.Options{
Name: "rpi5",
KernelArgs: []string{
+ "earlycon=pl011,0x107d001000,115200n8",
"console=tty0",
- "console=ttyAMA0,115200",
+ "console=ttyAMA10,115200",
"sysctl.kernel.kexec_load_disabled=1",
"talos.dashboard.disabled=1",
},
--
2.50.1 (Apple Git-155)