From 2551c6fcf88497aabfe2d729392eff62e443f32a Mon Sep 17 00:00:00 2001 From: Padreug Date: Wed, 13 May 2026 17:58:22 +0200 Subject: [PATCH] fix(nixos/upboard): release ttyS4 from kernel console for F56 dispenser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Fujitsu F56 bill dispenser on Sintra is wired to the SoC's MMIO UART at 0xa171b000, which the kernel enumerates as ttyS4 (the only real on-board UART besides the legacy ttyS0 at I/O 0x3f8). The existing kernelParams routed the kernel console through ttyS4, so userspace could never open it: HAL crashed at startup with "Input/output error setting custom baud rate of 9600" when trying to initialise the dispenser, which in turn aborted the entire ATM init chain in production mode (HAL failure → initError set → kiosk shows "ATM unavailable" → Lightning client never gets to even try talking to LNbits). Two coordinated changes: 1. Drop `console=ttyS4,115200n8` from kernelParams. Keep `console=tty0` so kernel messages still land on the framebuffer console during boot. Anyone who wants a serial debug console can point it at ttyS0 (the legacy 8250 at I/O 0x3f8) — that port stays free. 2. Extend the dispenser-tag udev rules: add `KERNEL=="ttyS4" SYMLINK+="ttyJ7"` alongside the existing ttyS1 / ttyS5 entries. Different UP Board variants enumerate the dispenser-side UART under different kernel-allocated indices; whichever real device shows up at boot gets the ttyJ7 alias HAL is wired to expect. Diagnostic before/after on Sintra (`stty -F /dev/ttyJ7 9600`): before: Input/output error after: OK Once this rolls out the renderer should progress past HAL init, proceed to initializeLightningServices(), and start connecting to LNbits over the nostr transport. Co-Authored-By: Claude Opus 4.7 (1M context) --- deploy/nixos/hardware/upboard.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/deploy/nixos/hardware/upboard.nix b/deploy/nixos/hardware/upboard.nix index 26e2842..f96050a 100644 --- a/deploy/nixos/hardware/upboard.nix +++ b/deploy/nixos/hardware/upboard.nix @@ -49,7 +49,13 @@ kernelParams = [ "i915.enable_psr=0" - "console=ttyS4,115200n8" + # NOTE: do NOT route the kernel console through ttyS4 on Sintra. + # ttyS4 is the SoC's MMIO 16550A (the only real UART besides the + # legacy ttyS0 at I/O 0x3f8) and is wired to the Fujitsu F56 + # dispenser's RS-232 header on Sintra. Holding it as console + # prevents userspace from opening it at 9600 baud and HAL fails + # with "Input/output error setting custom baud rate of 9600". + # If you want serial debug, point console at ttyS0 instead. "console=tty0" "quiet" "splash" @@ -118,8 +124,14 @@ KERNELS=="1-7.3:1.0", SYMLINK+="ttyJ5" KERNEL=="ttyUSB1", SYMLINK+="ttyJ5" - # Dispenser (ttyJ7) + # Dispenser (ttyJ7). + # ttyS1 / ttyS5 cover earlier UP Board variants where the dispenser + # lands on those kernel-enumerated serial nodes; ttyS4 covers the + # Sintra (UP Board Atom/Apollo Lake) where the dispenser is wired + # to the SoC's MMIO UART. Whichever device actually exists at + # runtime gets the ttyJ7 symlink. KERNEL=="ttyS1", SYMLINK+="ttyJ7" + KERNEL=="ttyS4", SYMLINK+="ttyJ7" KERNEL=="ttyS5", SYMLINK+="ttyJ7" # Legacy ttyAMA0 alias