evidence · 4.6 KiB

sbi-boot-console-host-2026-10-03.md

Committed at docs/evidence/mainline-uart-observer-trial/sbi-boot-console-host-2026-10-03.md. This is what grounds the requirements that cite it.

Open raw source

Retained SBI boot console: same-image host preparation

Evidence class: host controller tests and actual immutable artifact inspection. Root worktree /home/jadams/tmp/k230-mainline-probe-integration, branch integrate/mainline-probe-path; this increment starts at e38c9040. Owned paths are the observer controller, its focused tests, this note and the mainline task checkpoint. No kernel rebuild, flash, persistent boot selector, helper change or board operation is established by these host checks.

The source plan qualifies earlycon=sbi keep_bootcon: both previous physical captures contain the kernel’s detected SBI DBCN extension banner, and the installed kernel enables the SBI early console. Retaining the boot console changes printk delivery and timing. It can duplicate output and can itself block; it does not guarantee return or identify a UART/clock/IRQ defect.

--sbi-boot-console requires --serial-console-only, rejects any original earlycon or keep_bootcon token (including alternate values), and appends exactly earlycon=sbi keep_bootcon to the existing qualified diagnostic arguments. Default and serial-only argument values remain unchanged. The original artifact, Image/hardware-DT/initrd/helper/source/closure checks, fresh protected normal preflight, load/CRC checks and exact printed arguments remain prerequisites. Nothing saves the volatile U-Boot environment.

The observer parser, reception gates and passive recovery deadlines are unchanged. Duplicate/interleaved records are still failures, never collapsed into acceptance. Duplicate readiness sends zero receipts. A protected normal return may separately qualify recovery while the diagnostic remains failed; better logging alone is not usable-root or receive-path proof.

Host proof

python3 -B -m unittest discover -s tests -p test_mainline_drm_uart_observer_trial.py
openspec validate the-board-runs-a-mainline-kernel --strict
git diff --check

All 38 focused tests passed (7.432 seconds). New checks cover the exact two-token addition, rejection before artifact access without serial-only mode, conflicting boot-console policy, retained source artifacts through actual newc/ELF/unit/DT fixture preparation, result selectors/fresh arguments, both comparison transports, no boot on printed-argument mismatch, and duplicate readiness yielding zero receipts. Existing malformed-frame, unknown-state, one-receipt and normal-return checks still pass.

Independent read-only controller review approved the increment without a blocking correction and repeated all 38 focused tests successfully (7.408 seconds). The reviewer performed no edits, build or board action.

Actual host prepare() against the selected 16cpjji… bundle passed with both flags, the private manifest/normal report and the successful blkid prerequisite below. It inspected the selected Zstandard archive, matching RISC-V helper/unit/drop-in/marker, unchanged Image and normalized hardware DT, closure and hashes. Outgoing command lengths were 28, 206, 413 bytes, all below the conservative 512-byte limit. No serial port was opened.

The exact operator invocation, using new private output paths:

python3 tools/mainline-drm-uart-observer-trial.py \
  --serial-console-only --sbi-boot-console \
  --bundle /nix/store/16cpjjiifxgwyb6bndhi39vfmlvcdw6h-k230-mainline-uart-observer-boot-files \
  --manifest "$HOME/tmp/k230-mainline-uart-observer-board/candidate-manifest.json" \
  --normal-report "$HOME/tmp/k230-mainline-uart-observer-board/normal-report.json" \
  --blkid-result "$HOME/tmp/k230-mainline-blkid-board/trial-result.json" \
  --log "$HOME/tmp/k230-mainline-uart-observer-board/sbi-boot-console-uart.log" \
  --result "$HOME/tmp/k230-mainline-uart-observer-board/sbi-boot-console-result.json"

Host Python 3.14 with compression.zstd, pyserial and DT tools is required. The controller acquires the exclusive board lock itself. Root is the sole operator after review/landing and a fresh protected normal preflight. Record actual early-console enable/retention, later init progress, observer frames and automatic return separately. Keep raw logs, boot identities and volatile nonces private; commit an explicitly sanitized physical packet.

If passive recovery is unknown, stop candidate input and request operator reset before any protected postflight. If the output still cannot identify the boundary, the separately reviewed opt-in kernel markers in the source plan remain the next diagnostic. Ordinary root/panel/glass task 5b.5 stays unchecked.