• V1.2.0 29ec4c2239

    etwen released this 2026-09-07 10:02:48 +08:00 | 4 commits to main since this release

    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.

    🔗 Links

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

    Downloads