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
77 lines
6.4 KiB
Markdown
77 lines
6.4 KiB
Markdown
# 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 (`%u` → `u0`/`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:**
|
|
|
|
```bash
|
|
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
|
|
|
|
* [ARCHITECTURE.md](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/src/branch/main/ARCHITECTURE.md) — test flow, data models, constraints
|
|
* [CLAUDE.md](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/src/branch/main/CLAUDE.md) — commands and the bench gotchas
|
|
* [Blanton_Test_Flow.drawio](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/src/branch/main/docs/Blanton_Test_Flow.drawio) — the scripts side by side
|
|
|
|
**Full changelog:** [V1.1.8...V1.2.0](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/compare/V1.1.8...V1.2.0)
|