Files
etwenandClaude Opus 5.5 4db9b45ce7 docs: Record V1.2.4 in Script A's history and add the release note
Script A: header to V1.2.4 / 2026-10-01; entries for tray_id_stress.sh,
the Script A and Script B hooks, and 6_Blanton_Script_BER_Cycle.ttl,
with notes on the exec bit, the sleep-vs-Interval rule, the hard-coded
BDF, the hostname, the SONiC-only fan setting and the placeholder
password.

CLAUDE.md: status and last release to V1.2.4; the Tray ID stress and the
BER cycle in the overview; a commands block for tray_id_stress.sh; a
gotcha that prbsstat Ber must be read after the first interval is
published, and that Script A / C's own BER (Interval=30, sleep 30) sits
on that edge and has not been verified.

ARCHITECTURE.md: Script A ref and the tag checkbox to V1.2.4; Script 5's
current file name and the new macro 6 in the tree; tray_id_stress.sh in
the tree.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UniUXkxgCG2Ty74advL8Pd
2026-10-01 13:32:14 +08:00

4.3 KiB
Raw Permalink Blame History

v1.2.4 — Tray ID I2C stress in Script A and B, and a Diag / SONiC BER cycle that reads the BER correctly

✨ New features

tray_id_stress.sh — Tray ID I2C write / read-back stress

  • Buses 34 / 35 / 38 / 39, device 0x70, register 0x02. Each bus gets 0xA5 written and read back, then 0x5A written and read back — the two patterns put every bit in both states.
  • One line per step (PASS / FAIL / ERROR), then a per-bus Summary table and a single Tray ID stress RESULT: PASS|FAIL line. Exit 0 = all PASS, 1 = any FAIL or I2C error, 2 = bad arguments.
  • FAIL (the read worked but returned the wrong value) and ERROR (i2cset / i2cget itself failed) are counted separately, because they point at different faults.
  • The original register value is read first and written back at the end, verified by a read. -R skips that; -n N repeats the whole sequence N times. Buses, address, register and patterns are editable at the top of the file.

Script A and Script B run it

  • Script A runs one pass after show_dmesg as the baseline.
  • Script B runs one pass in every soak round, before sleep 60 — 12 writes per round, registers restored each time.

6_Blanton_Script_BER_Cycle.ttl — Diag ↔ SONiC BER cycle (standalone)

  • Each cycle measures PRBS BER on unit 0 in the Diag OS, cold-boots into SONiC, measures again, and cold-boots back to Diag. while 1, no end. The boot target is picked in the BIOS Boot Manager (USB Device = Diag, Hard Drive = SONiC).
  • Log: Logs\Blanton_BER_Cycle_<ts>.log, timestamps always on.

🐛 Bug fixes

prbsstat Ber was read before the first interval had been published — BER read 40–60× low

  • The BER cycle originally read prbsstat Ber 10 s after prbsstat STArt Interval=30. Checked against the error counts that prbs get reports in the same cycle, that read Diag ~60× low and SONiC ~40× low.
  • Moving to sleep 30 (equal to the interval) fixed SONiC but not Diag: its Ber goes out 30.15 s after STArt, just before the first interval is published. SONiC's bcmcmd adds ~0.3 s and just makes it.
  • The macro now uses Interval=30 + sleep 40. Over 73 cycles both sides agree with the prbs get estimate to within 0.1 decade. The rule: the sleep must be longer than the interval.

📦 Downloads

File Contents
Script_ABC_Blanton_V1.2.4.zip The full Tera Term working directory, including Blanton_Script/ to copy onto the DUT
chmod +x ~/Blanton_Script/*.sh
grep -rlU $'\r' ~/Blanton_Script    # expect no output

⚠️ Before you run

  • chmod +x after deploying. Script A and B call tray_id_stress.sh by path; without the exec bit every call is Permission denied and the round carries on without the check.
  • Any BER log taken before 2026-09-30 14:13 reads 40–60× low (BER cycle with sleep ≤ Interval). Relative Diag-vs-SONiC trends are usable; absolute values are not.
  • Script A / C's BER is the same edge case: blanton_ber.sh start (Interval=30) → sleep 30 → report, on SONiC. Whether it catches the first interval has not been verified. Lengthening that sleep to 40 is the safe change.
  • The BER cycle's SONiC → Diag boot writes a hard-coded BDF (pcimem /sys/bus/pci/devices/0000:05:00.0/resource0 0x480). Check the CB FPGA BDF on every unit before running it.
  • The BER cycle expects the hostname sonic. A unit with another hostname (e.g. Margin02) needs prompt_sonic / prompt_sonic_root edited, or the macro waits forever.
  • The BER cycle sets the fan to 30 % on the SONiC side only — SONiC runs ~11 °C hotter than Diag, a variable in any Diag-vs-SONiC comparison.
  • Its SONiC password is the YourPaSsWoRd placeholder, and it does not read config.ttl or secret/.
  • Script 4 has no teardown: finish it with blanton_tr518.sh stop and systemctl stop mlucas-amm.
  • FAN_SPEED is 100.

Full changelog: V1.2.3...V1.2.4