Commit e69d9ba
feat(drivers): EXP17 -- pin R3Z v4.70's FIXED ata_bd; our SDK snapshot predates "atad: fix device probing"
An independent Codex audit did the check I proposed and then talked past:
compare the ata_bd BYTES, not the source. They differ. My "OPL and R3Z run
the same driver we do" claim was true at the source level and FALSE at the
binary level -- and it was load-bearing under every theory I built and every
build that wasted a tester's evening.
Our container (ps2dev:v2.0.0, SDK 2026-05-16) predates ps2sdk ab3c5a88
"atad: fix device probing". R3Z v4.70, official OPL and RiptOPL
PS2DEVLATESTSDK all ship past it. Pre-fix ata_init_devices resets ONCE,
assumes device 0 is selected, probes it, then selects device 1 and probes --
with no per-device reset/select. Fixed: per-device soft reset + explicit
ata_device_select(i) before each probe. Verified against
.codex_refs/ps2sdk (the fixed loop is present; old form survives only under
ata_dvrp_workaround). Codex reproduced BOTH release hashes by rebuilding
each SDK revision with the pinned compiler.
The matrix explains every data point for the first time:
fixed ATA + current BDM = works (R3Z v4.70, OPL, RiptOPL LATESTSDK)
pre-fix ATA + current BDM = HANGS (our EXP12-15, both testers)
pre-fix ATA + old R3Z BDM = works (our rolling; old BDM never pushes the
bad probe path -- and has no GPT)
An aftermarket SATA bridge + a probe of device 1 on a bus never told which
device answers = a wedge inside _start, uninterruptible: the frozen 45.
The change: iop/embed/ata_bd.irx, carved byte-for-byte from R3Z v4.70's
shipped ELF, sha256 16c5d9f00d64be5ea4848b53da89bb5f89a54004957bae47d01dee3c354742f4
(11,917 bytes vs the pre-fix 11,709 -- the +208 is the fix). Verified here:
hash, ELF magic, atad/dev9/bdm module strings. No C++ change: the Makefile
vpath already prefers iop/embed/ over $(PS2SDK)/iop/irx, ata_bd.o uses the
generic BIN2S rule, and .gitignore:49 whitelists iop/embed/*.irx.
BASED ON ROLLING'S TIP (ae0bebe), per the maintainer: experimental must be
rolling + ONE variable or the result proves nothing. Delta vs rolling is the
blob + 2 version stamps + the notes. Rolling keeps the old ATA: it works,
and a working config does not get churned on a theory.
HARDWARE-ONLY: sAGA's 4TB GPT listing; the maintainer's drive without the
5-minute stall; USB/MX4SIO unchanged (this file serves the ATA path only).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>1 parent ae0bebe commit e69d9ba
4 files changed
Lines changed: 27 additions & 148 deletions
0 commit comments