FAN_SPEED 30 -> 100. A soak is a thermal test of everything except the cooling, so the cooling should not be one of the variables in it. At 30% a long run can throttle partway through, and throttled results read like a different fault entirely. Folded into V1.0.11 rather than bumping the version: the tag has not moved on and this is the same delivery. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014RetWKFZFG1ZHcitQAyhwM
5.4 KiB
v1.0.11 — Saving the margin settings to NVM is now one command, and the command is correct
✨ New features
margin_save blanton — all 18 LTC2977 in one go
- On this platform the CB FPGA's I2C channels are also exposed as ordinary Linux i2c buses, so every margin controller on the box — CB and both switch boards — can be reached with plain
i2cset.margin_save blantonwalks all 18 of them from one flat list: nomargin_init, no FPGA channel setup, nopcimem. - The channel-to-bus mapping it relies on (F3 Ch6 → bus 13, Ch7 → 14, Ch8 → 15, Ch9 → 16; CB is bus 4 as before) is now written down in
ARCHITECTURE.mdand the margin README, not just known at the bench. - A partly-populated DUT is a normal build. Comment out the lines you do not have in
MARGIN_BLANTON_STOREat the top ofmargin.shrather than letting the tool talk to boards that are not there. - Missing bus and unresponsive chip are reported as two different failures.
/dev/i2c-16 does not existmeans the FPGA's i2c adapters did not enumerate;i2cset failed (NACK/busy)means the board is absent or the address is wrong. Chasing the second when you have the first wastes an afternoon.
margin_save all — every board in settings/
- Runs
margin_init+margin_saveacross all nine boards, then puts back whichever board you had loaded, so a followingmargin_statusstill reports the board you were looking at. - It does not stop at the first failure: a half-saved set is harder to reason about than a fully-attempted one. The summary names the boards that failed.
Both print a per-chip line and a N saved, M failed tally, and both return a non-zero exit code when anything failed.
The fans now default to full speed
FAN_SPEEDinconfig.ttlis 100 instead of 30. A soak is a thermal test of everything except the cooling, so the cooling should not be a variable in it — and a DUT that throttles halfway through a run produces results that look like a different fault. Lower it deliberately if quiet operation is what you are measuring.
🐛 Bug fixes
A failed NVM write still reported success
margin_savediscarded the result of every write, so a NACK printedChange Savedexactly like a successful store. For the one operation in this tool that is permanent, that is the worst place to stay quiet. Each store is now checked and named if it fails.
STORE_USER_ALL was sent with a data byte it should not have
- The command went out as
0x15followed by a dummy0x00— an SMBus write-byte, whereSTORE_USER_ALLis a send-byte. The LTC2977 tolerated it, but tolerance is not correctness. It is nowi2cset ... 0x15 con the native path and a no-datacb_pmbus_writeon the FPGA path.
📦 Downloads
| File | Contents |
|---|---|
Script_ABC_Blanton_V1.0.11.zip |
The full Tera Term working directory, including Blanton_Script/ to copy onto the DUT |
After copying to the DUT:
chmod +x ~/Blanton_Script/*.sh # see below
grep -rlU $'\r' ~/Blanton_Script # expect no output
mgmt_ping_monitor.sh and port_prbs_monitor.sh launch their workers through bash, so those two run without the execute bit. bmc_monitor.sh and usb_target.sh still need it, and neither git (mode 100644) nor a Windows/USB copy carries it. Without the chmod, start fails with Permission denied and the later cat finds nothing: the section ends up empty and nothing reports an error.
⚠️ Before you run
margin_savein any form writes NVM permanently. A power cycle does not undo it.margin_save allandmargin_save blantondo it to all 18 controllers at once. Runmargin_status_all.shfirst and never call any of them during a test run — the macros do not, and should not be made to.- The 18 raw commands were verified on the DUT; the wrapper was not.
margin_save blantonissues exactly the sequence that was run by hand at the bench, and the packaging was tested against stubbed hardware, but the function itself has not been run on a DUT yet. Watch the per-chip lines the first time. - Declare the switch population.
SWB_UNIT0/SWB_UNIT1inconfig.ttlsay which switch units this DUT has; traffic and the readiness gate both follow them. FAN_SPEEDis now 100. It is applied at the start of every run, so this build runs the fans flat out unless you changeconfig.ttl. Expect the noise.- Management connectivity is in use, not preserved. Both management NICs are up and pinging — drive the run from the serial console.
- PRBS is still not wired into the macros. Run
port_prbs_monitor.shby hand if you want it; the calls in A/B/C remain commented out. - Two settings persist to
config_db.jsonand survive a reboot: LLDP is left disabled and the 100G uplinks are left configured. Restore them before the DUT moves on.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
- LTC2980_Margin_Script/README.md — the three
margin_savevariants and what each one sends
Full changelog: V1.0.10...V1.0.11