Files
etwenandClaude Opus 5 29ec4c2239 docs: Update CLAUDE / ARCHITECTURE for V1.2.0 and add the release note
CLAUDE.md: status to V1.2.0 / 2026-09-07; the PRBS paragraph now says the
A/B/C call sites were deleted in V1.1.9 rather than commented out; the
DSC scan and parser get a commands block and a line in the status
summary; the soak loop uses sleep 60; the bcmcmd gotcha records that
bcm_dsc_scan.sh hit the same stdin trap on 2026-09-07 and why the
existing marker check could not see it; and a new gotcha on pause versus
sleep.

ARCHITECTURE.md: bcm_dsc_scan.sh / bcm_dsc_parse.sh in the tree and a
Key Features row of their own; EN_TX_FIR in the config.ttl line; Script A
ref to V1.2.0 and the A / B / C rows updated for the DSC steps and sleep;
constraint 10 extended with the recurrence; new constraint 18 (pause
stops the macro, sleep stops the DUT) with the old 18 renumbered to 19
and EN_TX_FIR added to it; the git tag checkbox to V1.2.0; the PRBS and
bmc_monitor_ddr known issues corrected from "commented out" to "deleted";
and a new known issue for the DSC scan being off by default and sharing
ports with the other traffic tools.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014RetWKFZFG1ZHcitQAyhwM
2026-09-07 10:02:42 +08:00

6.4 KiB

v1.2.0 — SerDes DSC capture, and the macro now waits on the DUT

New features

Full-machine SerDes DSC capture, before and after the soak

  • bcm_dsc_scan.sh runs phydiag <port> dsc through the Broadcom diag shell across the whole port list — one 100G port plus the 200G ranges, about 445 per unit, on both units — and writes the raw log under Blanton_Script/log/, then copies it to /host/hw-eval/jobs/.
  • Script A takes a baseline and Script C takes a closing dump, so the pair brackets the stress run and the two are directly comparable.
  • -u 0 scans one unit, -f <name> names the log (%uu0/u1, %t → timestamp), -F overwrites, -n dry runs, -C skips the copy. A name without %u gets _u0 / _u1 inserted automatically, so unit 1 can never overwrite unit 0.
  • Every run ends with ### DSC_SCAN_DONE rc=<n>. rc=0 means every port returned a complete dump.
  • phydiag ... dsc is read-only — it does not change any SerDes setting.

bcm_dsc_parse.sh turns a raw DSC log into two CSVs

  • <prefix>_lane.csv — one row per lane: TXEQ, RXFFE, DFE, EYE, SNR and the rest.
  • <prefix>_pm.csv — one row per pm_id: temperature, PLL, lane count, SNR/EYE statistics.
  • POSIX sh + awk, no Python, so it runs on the DUT as happily as on a laptop. Lane rows are read by the order of their bracket groups rather than by fixed column positions, so the SDK re-spacing its output does not break parsing; a row that does not yield 9 groups is reported as UNPARSED on stderr instead of being parsed wrongly.

EN_TX_FIR in config.ttl — the DSC scan is off by default

  • A full scan is about 10 minutes and both Script A and Script C do one, so the shipped default (0) keeps ~20 minutes out of a routine run. Set it to 1 when the SerDes data is what you are after.

The macro now waits on the DUT instead of on itself

  • Every pause N in Scripts A, B and C became sendln "sleep N" followed by wait prompt_sonic_root.
  • pause stopped the macro for N seconds without touching the DUT — the shell sat idle and the macro was guessing how long the previous command would take. On a loaded DUT the guess ran short and the next command went out before the previous one had finished, putting the whole run a beat ahead of the switch. Now the wait happens on the DUT and the macro resumes when the prompt actually comes back.
  • It also means the wait appears in the console log with a timestamp, so a round that ran long is visible afterwards.
  • Timings changed with it: the management-ping sample in Script A is 15 s (was 30), the settle after each traffic clear is 5 s (was 15). The traffic run itself stays 15 s and Script B's monitor loop stays 60 s.

🐛 Bug fixes

The DSC scan only ever scanned one port — and reported success

  • The scan loop read its port list on stdin, and bcmcmd reads stdin too, so the first call swallowed the rest of the file and the loop ended after a single port.
  • Nothing looked wrong. The log held one port marker and one dsc block, the marker-to-dump comparison passed because both numbers shrank together, the exit code was 0, and a 445-port scan simply finished in seconds.
  • The loop now reads on file descriptor 3 and bcmcmd is given < /dev/null, and there is a new check that the number of iterations matches the number of ports in the list — a check that cannot be fooled by the loop ending early.

Dead call sites removed from Scripts A, B and C

  • The commented-out 100G PRBS calls, a duplicated commented 100G port-status block in Script A, and the stale bmc_monitor_ddr.sh block in Script C have been deleted. They had been dead since bring-up.
  • port_prbs_monitor.sh still ships and still runs by hand — but re-enabling it means writing the calls again, not un-commenting them.

🔧 Changes

  • Script C no longer prints the BMC poll log or the mlucas log to the console. Both files are still copied to /host/hw-eval/jobs/ and out to the USB stick with everything else; only the master log got shorter.

📦 Downloads

File Contents
Script_ABC_Blanton_V1.2.0.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      # bcm_dsc_scan.sh is invoked as ./Blanton_Script/... and needs it
grep -rlU $'\r' ~/Blanton_Script    # expect no output
ls ~/hammer/tools/amd/mlucas-avx2   # must already be there

⚠️ Before you run

  • Replace config.ttl along with the macros. EN_TX_FIR is new, and Tera Term aborts on an undefined variable rather than treating it as 0.
  • bcm_dsc_scan.sh needs the execute bit. Script A and Script C invoke it as ./Blanton_Script/bcm_dsc_scan.sh. Without chmod +x it fails with Permission denied, the macro walks straight past it, and Script C's four cp lines then each report a missing file.
  • The DSC scan shares the ports with blanton_ber.sh, blanton_traffic_linespeed and blanton_tr518.sh — do not run it alongside any of them.
  • Script 4 and Script 5 still use pause. Only A, B and C were converted.
  • --runtime is the job's overall limit, not a per-pass one. --passes does not extend it; for a 24 hour soak set RUNTIME to 86400.
  • Script 4 has no teardown: finish it with blanton_tr518.sh stop and systemctl stop mlucas-amm.
  • Script 5 (reboot cycle) is still unverified on hardware, has no exit condition, and its wait "Booting in blind mode" has no timeout guard.
  • blanton_multiphase_margin.sh save is permanent, and must not be mixed with margin.sh.
  • READ_VIN and READ_IIN are still not in the ADPM12200 coefficient table.
  • The BMC USB service log only exists on the USB stick.
  • FAN_SPEED is 100.
  • Still unverified from v1.1.0: the ce0 ingress mirror, the 120 s settle in blanton_tr518.sh, and test mode nr=no on stop.

Full changelog: V1.1.8...V1.2.0