Rescue card: close the A15 guard gap in its compiled-in bootcmd, at the next sync #64
Labels
No labels
blocked-physical
cleanup
hardware
infra
kernel
P1-critical
P2-high
P3-normal
P4-later
reliability
security
upstream
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
tiagoagueda/a80#64
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Deferred deliberately on 2026-08-30, to be picked up the next time
tools/sync-rescue-sd.shis run — it needs the card inserted and the board booted from theeMMC, which is exactly the state a sync already requires.
The gap
The card's boot menu is fully correct: all five entries carry
roandmaxcpus=4 a15=off, andsync-rescue-sd.shnow verifies every entry rather than just finding one.What is not covered is the layer beneath it. The card runs U-Boot
2026.10-rc3-00002-g6a5618, its env area at 768 KiB is blank, so it boots from itscompiled-in
bootcmd— and that build predates the guard fix. Measured on the card:The eMMC had the same gap and it is now fixed there, in both the stored
bootcmdandaltbootcmd.Severity is genuinely third-order. That fallback only runs if
sysbootcannot read/boot/extlinux/extlinux.confon either medium. If both are unreadable the card is alreadyin deep trouble. It is filed because it is the same class of defect that was just found on the
eMMC, not because it is likely.
Why it was not fixed on the spot
Both available fixes add risk to the medium whose entire job is to be reliable:
-00009, whose compiled-in bootcmd is guarded.But the two vintages are deliberately different: the card is the last resort if an eMMC
bootloader flash goes wrong, and making them identical removes that. See
[a80-lab-infrastructure] and
tools/sync-rescue-sd.sh, which has never touched thebootloader on purpose.
bootcmd. Preserves the vintage split,but the card's blank env is itself a simplicity property — it runs on built-in defaults with
nothing to corrupt — and a malformed env write would break the rescue medium.
Options, to decide at the sync
unreadable.
bootcmd.fw_env.configon the card alreadycorrectly names
/dev/mmcblk0, sofw_setenvfrom the card would land in the right place.Verify by reading the env back before rebooting.
-00009has more running time behind it.Not a bug, so nobody "fixes" it
The eMMC's
testentry has noa15=offby design — it is the labelled all-8-cores entryand exists to bring the A15 up for #53 work. Both
provision.shandsync-rescue-sd.shexclude it from their checks by name.
Done when
is written down with its reasoning
sync-rescue-sd.shchecks it, so it cannot drift back silentlyThere is now a second, worse reason to deal with this card's compiled-in bootcmd, found
while enabling Docker: #72.
The card's env is blank, so it boots from the compiled-in bootcmd - which is also why that
bootcmd loads the kernel at a copy address. u-boot's
CONFIG_SYS_BOOTM_LENis exactly 8 MiBand the current eMMC kernel is 8.42 MiB, so the eMMC now dodges the ceiling by loading at
0x20007fc0(payload lands on the load address, bootm takes its XIP branch). The card gets nosuch dodge.
So the exposure is no longer only the third-order
a15=offgap this issue was opened for.tools/sync-rescue-sd.shline 103 copies/boot/uImageonto the card, and doing that todaywould hand the card a kernel its own bootloader cannot start - discovered only by needing the
card, which is precisely the trip it exists to prevent.
That is now blocked in the tool: the sync refuses to run if the kernel is over the ceiling and
the card's boot area does not advertise the XIP address. Tested both ways against a real boot
area.
It also collapses the three options in the original post into one. "Leave it, recorded" is no
longer defensible, because the card is now on a divergent boot path from the eMMC, not merely an
older one. Whatever is done here should be done together with #72.
Closed by the #72 work, and closed properly rather than worked around.
The card was flashed with
2026.10-rc3-00011-g103b8b, and that build's compiled-in bootcmdalready carries the guard on both branches:
one for the
mmc 0:1branch and one formmc 1:1. So the third-order path this issue was aboutA15 cluster up disabled, exactly like every other route.
That resolves it without needing any of the three options in the original post: no minimal env to
maintain, and the card did not have to keep a bootcmd that disagreed with the eMMC's.
Verified afterwards by booting the card: it came up as
a80-rescueon/dev/mmcblk0p1.The eMMC's
testentry remains unguarded by design - it is the labelled all-8-cores entry for#53 work, and both
provision.shandsync-rescue-sd.shexclude it by name.Note the tradeoff this took, recorded in #72 and
58-docker.md: the card no longer runs adifferent bootloader vintage from the eMMC.