Skip to content

docs(de25): DE25-Nano recon — D0/D1 dossiers, implementation path, task status - #132

Merged
mcfbytes merged 4 commits into
masterfrom
feature/de25-nano-recon
Sep 2, 2026
Merged

docs(de25): DE25-Nano recon — D0/D1 dossiers, implementation path, task status#132
mcfbytes merged 4 commits into
masterfrom
feature/de25-nano-recon

Conversation

@mcfbytes

@mcfbytes mcfbytes commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

Docs-only. Closes out phases D0 (recon) and D1 (readiness guards) of the DE25-Nano plan (docs/de25-nano-tasks.md, ADR 0027) and records the settled implementation path. Nothing is built; no code, config, or CI is touched.

New / expanded dossiers

Doc Phase What it settles
docs/de25-boot-chain.md D0.1 SDM → QSPI phase-1 bitstream (SPL embedded) → u-boot.itb → Linux. SDM cannot boot from microSD, so the QSPI seam is permanent. Factory SPL contract extracted (FAT partition 1, FIT at 0x82000000, ATF, FIT signature enabled with no keys). Factory golden_top_hps.jic identified and byte-verified. Brick-risk register with refuted/amended claims marked.
docs/de25-fpga-reconfig.md D0.2 DP-9 confirmed: fpga-region + DT overlay is the Agilex-native idiom; UIO doorbell patches 0043-0045 are not ported. Main_MiSTer owns the load; the image only has to expose the hardware.
docs/de25-patch-portability.md D0.3 All 40 unique kernel patches classified for aarch64/shared-series reuse. Triage-first shape (~20 agents instead of ~55).
docs/de25-readiness-ledger.md D1.1 Every DE10-specific coupling: 54 files / 65 rows / 14 semantic blockers. Three couplings ADR 0027 missed: lint.yml (fails silently), the renovate bump axis, release.yml. Canonical query is git grep, not the ugrep wrapper.
docs/de25-reference-implementation.md Analysis of a friend's working DE25-Nano kernel/U-Boot trees. Both reported symptoms ("only N cores in firmware", "very slow") root-caused to his design, not to Agilex 5. Contains one annotated false claim as a worked example.
docs/de25-implementation-path.md Nine owner decisions recorded: 7.2 kernel pin (fixes clkmgr), carried sdhci-cadence 40-bit DMA mask patch, mainline svc/FPGA manager, two-partition card, no vendor U-Boot, no VAB. §2.6 is the four-step fabric-programming test to run first on real hardware.

Task-list changes

  • Execution-status block and per-task DONE markers.
  • D2 gate corrected: only the on-silicon items wait for hardware. D2.1 (aarch64 defconfig green) is buildable now.
  • Sequencing lesson recorded: a verify stage must not run concurrently with the stage it verifies.

Open assumption

Whether mainline stratix10-svc can actually program the Agilex 5 fabric. Binding is proven; programming is not. Decision 9 keeps a vendor-patch escape hatch.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FYjrnzEEu4HzJSPWNAaRvm

mcfbytes and others added 3 commits September 2, 2026 00:10
…ability

Phase D0 of the DE25-Nano readiness plan, executed as three multi-agent runs.
Desk research only: no hardware, nothing built.

de25-boot-chain.md (D0.1) closes §8's open questions. The SDM cannot boot from
the microSD on this board [V], so the QSPI seam is permanent rather than an
artifact of missing documentation. All DDR/pinmux handoff lives inside the QSPI
bitstream [V]. saveenv writes back to wherever the env loaded from, so a FAT
miss lands in QSPI [V]. Terasic publish the factory QSPI image, which was
downloaded and hashed (golden_top_hps.jic, 16,777,447 B, sha256 e3d20c2d…b38a4).
Q2/Q3/Q4 are parked with named blockers, handed to D2.2.

§7's brick inventory went through a three-lens adversarial pass that amended 8
of 22 claims and added 7 new vectors; §9 records what survived and what was
merely never challenged. One risk stands unmitigated: "no release writes QSPI"
is enforced by prose only — git grep finds no board-identity assertion anywhere
outside docs/, so ADR 0027 Decision 4 remains unimplemented.

de25-fpga-reconfig.md (D0.2) confirms DP-9: fpga-region/DT-overlay is the
Agilex-native idiom, so the UIO doorbell patches 0043-0045 are not ported.

de25-patch-portability.md (D0.3) classifies all 40 unique patches. Run
triage-first on owner direction rather than as the flat per-patch sweep the task
list specified — risk-rate everything, deep-dive only the DE10/Cyclone-V set —
which cut it from ~55 agents to ~20. Adds a target-series verdict per patch
(shared / de10-only / de25-only) that the original task did not ask for, serving
the goal of one repo building both boards off a shared base.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FYjrnzEEu4HzJSPWNAaRvm
…, channel namespace

Phase D1. Docs only by design: no script, config, workflow or package file is
touched, per ADR 0027 Decision 3.

de25-readiness-ledger.md (D1.1) covers every de10nano / BR2_arm / zImage site
outside board/mister/de10nano/ and docs/ — 54 files, 457 lines, 65 rows, 14 of
them semantic blockers. Each row carries a one-sentence "when you touch this, do
this instead" instruction, which is the actual product.

The reconciliation command is git grep, not grep -r, and that matters: the grep
wrapper in this environment honours .gitignore, so the same query returns 457
lines here and 15,796 under GNU grep, which walks work/ and .claude/. A coverage
count that depends on the operator's grep is not a coverage count.

Three couplings ADR 0027's "four semantic couplings" did not anticipate:
lint.yml hard-codes ~20 board paths and fails silently, so a second board would
go unlinted behind a green check — a live hole for the DE10 today, not only a
DE25 problem; the renovate.json + renovate-hash-sync.yml bump axis, where a new
defconfig added without them lands a stale kernel pin; and release.yml's 13
coupled lines.

D1.2's arch-assert generalization is designed as a section of the ledger and
holds fail-closed for the DE10, but the code change is still owed — both guards
hard-assert ^BR2_arm, so D2.1's aarch64 defconfig cannot land until it exists.

D1.3 adds forward-pointer sections reserving the DE25 channel namespace:
downloader-contract.md §13 and a DE25 section in db-json-versioning.md. Both
state the names are reserved, not implemented.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FYjrnzEEu4HzJSPWNAaRvm
…sk-list status

Two documents the task list never anticipated, plus the status pass over it.

A third-party DE25-Nano that boots Linux to the MiSTer MENU was made available
as reference (kernel and U-Boot repos, read-only, nothing adopted, no code
copied). de25-reference-implementation.md analyses it and root-causes the two
symptoms reported second-hand. Neither is a property of Agilex 5: "only N cores
in firmware" was literal — cores staged into QSPI as RSU images, whose hardcoded
slot map consumes the whole 16 MiB device — and "very slow" was a staging path
pushing bitstreams through the FCS mailbox in 4096-byte writes with a 0.05 s
settle each, ~817 round-trips and >=41 s of sleep() for a 3.35 MB core, then a
reboot. The fast path he intended is the one he never tested end to end.

That document is partly salvaged. A spend limit killed 5 of 9 agents mid-run;
four research legs had completed, so their output was recovered from the run
journal rather than discarded. It is marked unrefuted throughout because the
adversarial pass never ran, and one of its claims was already found false and is
annotated in place as a worked example of why that marking matters.

de25-implementation-path.md is the settled path. Binding the mainline FPGA
manager needs no carried patch — a two-string DT fallback compatible binds the
stock driver, since both match tables are data-free — but binding is not
programming, and mainline svc lacks behaviour Terasic's vendor tree keys off the
agilex5 compatible. The one mainline reconfiguration attempted on real silicon
wedged a board, so §2.6 specifies the four-step hardware test that settles it.
Confidence there is deliberately low.

Kernel pinned to 7.2: 6.18 has no clk-agilex5.c, so clkmgr never probes and
every consumer including mmc0 defers forever. The mmc0 DMA fault is a separate
problem the version pin does not fix — it is a vendor-vs-mainline driver delta,
not a regression, and needs a carried sdhci-cadence patch coupled to its DTS
string. §1.1 exists to stop those two being read as one fix.

de25-nano-tasks.md records D0/D1 completion and corrects a gate drawn at the
wrong level: D2 was read as uniformly hardware-gated, but D2.1's own acceptance
criterion is a local green build, and D2.3/D2.4 are largely authorable now. The
closing section also records why a verify stage must not run concurrently with
the stage producing what it verifies — D0.1 was launched that way, and 17 of its
22 brick-risk claims turned out to be generated by the research it ran alongside.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FYjrnzEEu4HzJSPWNAaRvm
Copilot AI lite review requested due to automatic review settings September 2, 2026 05:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

There are a few internal documentation inconsistencies (notably mismatched reconciled counts and a cross-doc contradiction about the two-string DT fallback vs dtbs_check) that should be corrected to keep the docs self-consistent and reliably actionable.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Docs-only update that closes out DE25-Nano D0 (recon) and D1 (readiness guards) deliverables and records the chosen implementation path (kernel/U-Boot/DTS/FPGA reconfig approach), without changing build/CI/code.

Changes:

  • Adds DE25-Nano dossier docs covering FPGA reconfiguration, kernel patch portability, readiness ledger, and the implementation path/decisions.
  • Updates the DE25 task list to mark D0/D1 complete and clarify D2 gating/sequencing.
  • Reserves DE25-specific downloader/db.json channel namespace via forward-pointer sections.
File summaries
File Description
docs/downloader-contract.md Adds DE25-Nano reserved channel namespace clarification and its implications for the downloader contract.
docs/de25-readiness-ledger.md New ledger enumerating DE10-coupled references and what must/need-not be parameterized for DE25 readiness.
docs/de25-patch-portability.md New audit classifying kernel patches by arm64 portability and target series (shared vs board-specific).
docs/de25-nano-tasks.md Updates task status/sequence and clarifies which D2 items are hardware-gated vs buildable now.
docs/de25-implementation-path.md New “settled path” doc capturing owner decisions and mainline-first implementation rationale.
docs/de25-fpga-reconfig.md New DE25 FPGA reconfiguration dossier (fpga-region/DT overlay flow, gaps, risks, measurement plan).
docs/db-json-versioning.md Adds DE25 reservation note clarifying it is not a second versioning scheme.
Review details

Suppressed comments (2)

docs/de25-readiness-ledger.md:31

  • This paragraph hard-codes a "51 of the 55 files" count, but §7 shows a different total (54). Since the exact split is secondary to the point being made, removing the hard-coded numbers avoids another source of drift.
Everything else — 51 of the 55 files — says `de10nano` because that is where the board's files
*live*, or says `zImage_dtb` because that is what today's only kernel artifact is *called*.

docs/de25-readiness-ledger.md:36

  • This sentence refers to "fifty-five" files, but §7’s reconciliation table reports 54 distinct files hit. It should match the reconciled number (or avoid the specific count).
real design decisions to fifty-five.
  • Files reviewed: 8/9 changed files
  • Comments generated: 2
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread docs/de25-fpga-reconfig.md Outdated
Comment thread docs/de25-readiness-ledger.md
…ualify two-string dtbs_check claim

Ledger intro said 55 files where §7's reconciliation table says 54; the
hard-coded 51/55 split is replaced by prose so the headline cannot drift
from the table again. fpga-reconfig's "free and forward-compatible" now
says at runtime only, cross-referencing implementation-path §2.5, which
records that dtbs_check warns on the two-string form today.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FYjrnzEEu4HzJSPWNAaRvm
@mcfbytes
mcfbytes merged commit 240e8fb into master Sep 2, 2026
4 checks passed
@mcfbytes
mcfbytes deleted the feature/de25-nano-recon branch September 2, 2026 05:28
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.

2 participants