Skip to content

docs(uboot): fold in the ADR 0023 draft, re-pin at 2026.07, desk plan for both boards - #177

Merged
mcfbytes merged 3 commits into
masterfrom
docs/uboot-desk-plan
Sep 14, 2026
Merged

mcfbytes merged 3 commits into
masterfrom
docs/uboot-desk-plan

Conversation

@mcfbytes

Copy link
Copy Markdown
Owner

Docs only. Three things:

1. The orphan branch is folded in and deleted. docs/adr-0023-uboot-mainline-handoff (491c0d9, 2026-07-25) proposed an ADR whose number was later taken by the 7-Zip ADR. ADR 0024 absorbed its conclusion but not its evidence: the binary-level proof that the shipped SPL carries the fork's QTS handoff tables (found at fixed offsets in stock's SPL copy 0; mainline's tables absent) and the no-hardware handoff-equality gate that proof enables. Both are now docs/uboot-mainline-port.md §3.2a and §6. The branch is deleted with this PR.

2. Version drift fixed. Buildroot 2026.08 bundles U-Boot 2026.07, so ADR 0024's "LATEST resolves to 2026.04" was stale. Re-pinned at 2026.07 (the DE25's tarball) after re-checking deltas 1–4 in that tarball — all still present. ADR 0024's header carries the amendment; the body is untouched.

3. Owner decisions recorded and the desk plan written. Mirror stock: the warm-reboot bridge fix is carried as the fork's C change, the fork's QTS values are carried unmodified, and mt is carried so the environment is byte-identical (amends ADR 0024 §Decision 5). docs/uboot-tasks.md is rewritten as the plan for both boards — DE10 U-series (13-agent wave A, integrate, Fable review; U6 hardware deferred indefinitely) and DE25 DU-series — with five owner questions up front. Nothing is started.

Also: PLAN.md/TASKS.md "2026.04" pointers → 2026.07; docs/de25-nano-tasks.md points at the DU-series.

🤖 Generated with Claude Code

https://claude.ai/code/session_015UwVRTNY37gE8GQjEqvU5k

mcfbytes and others added 3 commits September 14, 2026 11:42
…, and lay out the desk plan for both boards

The never-merged branch docs/adr-0023-uboot-mainline-handoff (491c0d9,
2026-07-25) proposed an ADR whose number was later taken by the 7-Zip
ADR. ADR 0024 absorbed its conclusion (carry the fork's qts/*.h) but not
its evidence or its gate. Both land here, in docs/uboot-mainline-port.md:

  - section 3.2a: the binary-level proof that the shipped SPL carries the
    fork's handoff tables (sys_mgr_init_table @0x0AAC8, IOCSR chains 0-2
    @0x096B8/0x09718/0x097F0 found; mainline's absent), with the packing
    method so it stays reproducible, and what it does NOT prove;
  - section 6: a handoff-equality check that runs the same search against
    our built SPL -- no hardware, and it catches the one silent-brick delta
    a cold-boot test cannot.

Version drift: Buildroot 2026.08 bundles U-Boot 2026.07, so the plan's
"LATEST resolves to 2026.04" is stale. Re-pinned at 2026.07 (the DE25's
tarball) after re-checking deltas 1-4 in that tarball: the missing
raw-mode line, the dead TARGET_SOCFPGA_GEN5 guard (board.c:214-215), the
64-bit division in fs/exfat/time.c and FPGAPORTRST=0x1FF are all still
there. The pin now rides the Buildroot bump, guarded by the resolved
.config assertion plus the handoff check instead of a frozen version.

Owner decisions of 2026-09-14, one rule -- mirror stock: the warm-reboot
bridge behaviour is carried as the fork's C change (d6010efe50), the
fork's QTS values are carried unmodified, and the fork's `mt` command is
carried (23 lines) so the default environment is byte-identical to
stock's and the parity check becomes a plain cmp. ADR 0024's header
records the amendments; its body is untouched.

docs/uboot-tasks.md is rewritten as the desk plan for BOTH boards: the
DE10 U-series (wave A fans out to 13 agents, wave B integrates then
verifies with a Fable pass; U6 hardware deferred indefinitely) and a new
DE25 DU-series (the QSPI-audit build assertion, the now-redundant custom
pin, FIT cross-tree reproducibility, TF-A signature, the section 13
decisions). Five owner questions are listed up front; nothing is started.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015UwVRTNY37gE8GQjEqvU5k
…I audit hook

Executes docs/uboot-tasks.md wave A (13 tasks, each independently verified).

DE10-Nano (ships nowhere; builds as part of the regular image):
  - configs/mister_de10nano_defconfig: BR2_TARGET_UBOOT via Buildroot's
    LATEST_VERSION pin (2026.07), socfpga_de10_nano + our fragment + our
    env text file, FORMAT_CUSTOM u-boot-with-spl.sfp. NEEDS_GNUTLS is
    TEMPORARY: the pristine board defconfig resolves TOOLS_MKEFICAPSULE=y
    (host tool, needs gnutls); the real fragment turns it off and U2g
    drops the line again. Stub uboot.fragment / uboot.env hold the build
    green until the real ones land (staged, verified, integrated by U2g).
  - scripts/check-uboot-parity.sh + test-uboot-parity.sh: structural
    parity (4x SPL, Altera header, uImage CRCs, load address), the
    default environment cmp'd against stock's 1,150-byte blob, command
    table coverage. 39 fixture assertions pass against the stock blob.
  - scripts/check-uboot-handoff.sh + scripts/lib/qts-tables.py +
    test-uboot-handoff.sh: the ADR 0023 handoff-equality gate. The fork's
    seven QTS tables are found in stock's SPL copy 0 at the plan's
    offsets; pristine mainline's headers fail on the four diverged tables.
  - docs/uboot-mainline-port.md 3.3: the warm-reboot bridge argument.
  - uboot-patches/.gitkeep retired; patches live in patches/uboot/.

DE25-Nano:
  - configs/mister_de25nano_defconfig: LATEST_VERSION instead of the
    custom 2026.07 pin; patches/uboot/uboot.hash removed (Buildroot
    2026.08 carries the same hash line). u-boot.itb byte-identical
    before/after (f4e5c924...). TF-A stays on its custom v2.15.0 pin.
  - external.mk: MISTER_UBOOT_DE25_QSPI_AUDIT, an UBOOT_POST_BUILD_HOOKS
    hook guarded on the DE25 board defconfig, fails the build if the
    fragment asks for, or the resolved .config carries, any
    docs/de25-uboot.md section 7 QSPI symbol, if ENV_IS_IN_FAT is not y,
    or if u-boot.itb carries a QSPI-write command string beyond the one
    documented gate-closed linux_qspi_enable line. Negative test
    (ENV_IS_IN_UBI=y in the fragment) fails naming section 7.
  - scripts/ci-tests.sh: the Linux-side half (no fw_env.config naming an
    MTD/UBI device in the DE25 rootfs).
  - arm-trusted-firmware.hash: the v2.15.0 tag signature is verified
    against the tagger's self-published key; trust anchor stated.

Staged outside the repo for U2g: the five DE10 patches, the real
fragment and env (byte-identical to stock's blob), and drafted-not-sent
upstream mails for the two U-Boot fixes and the DE25 mtdids guard.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015UwVRTNY37gE8GQjEqvU5k
…esk work closed; DE25 build repaired

DE10-Nano (builds on every image; ships nowhere):
  - board/mister/de10nano/patches/uboot/: 0001 dead raw-sector hook guard,
    0002 exFAT 64-bit division (both to be submitted upstream, drafts not
    sent), 0003 the fork's QTS handoff headers unmodified, 0004 the fork's
    `mt`, 0005 the fork's release-bridges-after-reset behaviour re-expressed
    against misc_gen5.c, 0006 bound the Linux boot map at 64 MiB.
  - uboot.fragment / uboot.env: the real deltas and stock's 21 env entries;
    the built default_environment[] is byte-identical to stock's 1,150 B.
    BR2_TARGET_UBOOT_NEEDS_GNUTLS gone (TOOLS_MKEFICAPSULE is off).
  - external.mk: MISTER_UBOOT_DE10_CONFIG_ASSERT -- the resolved .config
    and the SPL's raw-sector hook asserted at build time; deleting a
    fragment line fails the build naming it.
  - scripts/ci-tests.sh: offline U-Boot checks on every run (structure,
    handoff tables in our SPL, no uboot.img / no .sfp in a release stage);
    release.yml runs the full stock comparison where the blob already is.
    lint-kernel-patches.sh lints both boards' U-Boot series.
  - docs/verification/uboot-mainline.md: what was built, every allowed
    diff, both check transcripts, the negative handoff run, and a
    section-11 adversarial review (bridge argument, effective-env, mailbox
    region, ih_ep/ih_load mixing hazard, watchdog takeover).

DE25-Nano:
  - The factory loader's FIT acceptance closed by reference: the FIT on
    Terasic's factory SD image is crc32-only, unsigned, same layout as ours
    (de25-uboot.md 12; de25-boot-chain.md 7 row 6, 8.3).
  - patches/arm-trusted-firmware/0001: BL31 boot+crash console to UART1,
    the header UART -- the one change Terasic's own BL31 makes. BL31 lines
    are now expected at bring-up (de25-uboot.md 11).
  - FIT byte-identical across three clean trees (DU3); section 13
    decisions dispositioned (DU4); wave-4 boot-path re-review logged (DU7).
  - Field notes from another DE25-Nano port recorded as device facts
    (de25-boot-chain.md 7b): no fpga load from U-Boot, HPS-first images,
    post-JTAG SD quirks, random HPS MAC, unsigned bitstreams accepted.
  - docs/de25-nano-overview.md: "how is this going to work", the chain link
    by link, blockers ranked, first-session plan; README row.
  - Kernel pin 7.2.5 (was 7.2.3 with no hash line after the RT bump), the
    hash file symlinked to package/linux-rt/linux-rt.hash, and the DE25
    defconfig added to the kernel-rt-7.2 Renovate manager so both move in
    one PR. All 34 DE25 patches apply with offsets, no fuzz.
  - package/linux-rt/linux-rt.mk: name LINUX_RT_KCONFIG_FILE only when the
    package is enabled. pkg-kconfig registers `<file>: | linux-rt-patch`
    for every package naming a kconfig file, so the DE25 tree's main
    kernel config depended on an empty-version RT download; `make de25`
    had been broken since ADR 0030. Full make de25 now green,
    check-sdcard-de25.sh passes.

References to the private third-party DE25 trees removed from the DE25
docs and DTS comments; facts kept, Terasic's public branches cited where
the facts are Terasic's.

Gates run locally: check-defconfigs OK (3/3), test-uboot-parity 39/0,
test-uboot-handoff both fixtures, ci-tests.sh PASS (183+), lint-kernel-
patches 46/46 git-am-able, shellcheck clean, make de25 green.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015UwVRTNY37gE8GQjEqvU5k
@mcfbytes
mcfbytes merged commit e8df549 into master Sep 14, 2026
6 of 8 checks passed
@mcfbytes
mcfbytes deleted the docs/uboot-desk-plan branch September 14, 2026 21:20
mcfbytes added a commit that referenced this pull request Sep 16, 2026
docs(uboot): fold in the ADR 0023 draft, re-pin at 2026.07, desk plan for both boards
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant