fix(nixos/upboard): release ttyS4 from kernel console for F56 dispenser

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) <noreply@anthropic.com>
This commit is contained in:
Padreug 2026-05-13 17:58:22 +02:00
commit 2551c6fcf8

View file

@ -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