-
V1.2.7 Stable
released this
2026-10-22 14:26:17 +08:00 | 0 commits to main since this releasev1.2.7 — FDR on the cabled ports only, and the vendor NFC tool updated to v2.5
🐛 Bug fixes
blanton_fdr.shno longer prints the uncabled ports (v1.0.1)- The default port list was
'1-259,270-565', which also covered ports nothing is cabled to (cd15..19, cd47..51, cd111..115, ...). - It is now the cabled-port list from
blanton_traffic_linespeed.sh(TL_PS_PORTS), the same oneblanton_ber_debug.shuses:
1-24,40-96,112-168,184-240,256-259,270-308,310-327,342-380,382-399,414-452,454-471,486-524,526-543,558-565. - Script A, B and C pick this up with no change to the TTLs.
📦 Vendor tool update
blantons_nfc_validate.pyv2.3 → v2.5 — the customer'sqfx5252-nfc-validate, renamed to keep the namenfc_polling.shcalls.- New:
--read-ndef(Type 2 / Type 4 NDEF, Text and AMD FRU records),--write-ndef/--set-location,--max-ndef-bytes; NCI data packets with credit flow control. - Fixed: a
FileNotFoundErrorcrash while listing the processes that hold the NFC device open. - Bad arguments now print
[FAIL]and exit 1 —nfc_polling.shcounts that as FAIL, not ERROR. - The default
test --debugoutput ([PASS]/[FAIL]lines,NFCID1=) is unchanged, sonfc_polling.shis not modified.
📦 Downloads
File Contents Script_ABC_Blanton_V1.2.7.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTchmod +x ~/Blanton_Script/*.sh grep -rlU $'\r' ~/Blanton_Script # expect no output python3 ~/Blanton_Script/blantons_nfc_validate.py --version # expect 2.5⚠️ Before you run
- Port 268 (ce0, 100G uplink) is not in the FDR list — as before. Add it with
FDR_PORTS="...,268"if FDR is wanted there. - The cabled-port list now lives in three scripts —
blanton_traffic_linespeed.sh,blanton_ber_debug.sh,blanton_fdr.sh. Change all three when the cabling changes. - Never put the NFC write flags (
--write-ndef,--set-location,--confirm-write) inNFC_ARGS— polling would rewrite the tag every round. blanton_fdr.sh stop(fdrstat STOp) is still unverified on the bench; see v1.2.6.- Nothing turns the unused lanes back on; run
unused_lanes.sh onby hand. See v1.2.6. blanton_ber.sh(Script A / C) still usesp=3andsleep 30; see v1.2.5.- Script 4 has no teardown: finish it with
blanton_tr518.sh stopandsystemctl stop mlucas-amm. FAN_SPEEDis 100.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
Full changelog: V1.2.6...V1.2.7
Downloads
- The default port list was
-
v1.2.6 — FDR statistics around the traffic run, and unused lanes turned off before the baseline Stable
released this
2026-10-21 22:55:09 +08:00 | 3 commits to main since this release✨ New features
blanton_fdr.sh— FDR statistics throughphydiag fdrstat- Four sub-commands, each run on unit 0 then unit 1, over ports
'1-259,270-565':
start(fdrstat STArt bin_group=both Interval=30),clear(fdrstat clear),rdcnt(fdrstat Counters),stop(fdrstat STOp). - Output is printed as is, under a
### [time] unit N: ...header — no parsing, no PASS/FAIL. -u 0/-u 1for one switch unit,-i <sec>for the interval,-nfor a dry run.FDR_PORTSoverrides the port list.
FDR runs alongside the traffic test in Script A, B and C
- Script A wraps its traffic baseline:
fdr startafterinit,fdr clearafterclear,fdr rdcntafter the run,fdr stopafter the traffic stop. The traffic run is now 40 s instead of 15 s, so the counters are read after the first 30 s interval has been published — the same rule asprbsstat Ber. - Script B starts and clears FDR with the traffic setup, before the soak loop — the counters run for the whole soak — and reads them (
rdcnt) in every soak round, after the Tray ID stress. - Script C reads them (
rdcnt) before stopping the traffic and stops FDR after it — the closing read of the counters Script B started.
Script A turns off the unused lanes before the BER baseline
unused_lanes.sh off— TX squelch on the unused retimer lanes and TSC31 (cd112-cd115) disabled on the TH6, on both switch boards.
📦 Downloads
File Contents Script_ABC_Blanton_V1.2.6.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTchmod +x ~/Blanton_Script/*.sh grep -rlU $'\r' ~/Blanton_Script # expect no output⚠️ Before you run
chmod +xafter deploying.blanton_fdr.sh,unused_lanes.shandretimer_lanes.share all called by path;unused_lanes.shalso refuses to start ifretimer_lanes.shis not executable.blanton_fdr.sh stopsendsfdrstat STOp— that keyword is inferred fromprbsstat STOpand has not been checked on the bench.bcmcmdexits 0 even when the BCM shell rejects a command, so if it is wrong, FDR keeps running and only the log shows it. Check the first run.- FDR only runs when both switch units are enabled (
SWB_UNIT0 = SWB_UNIT1 = 1). The single-unit branches have no FDR, and Script A's single-unit traffic run is still 15 s. - Script B's per-round
fdr rdcntis not gated by the unit settings — with one unit enabled, FDR was never started and each round just logs whateverfdrstat Countersreturns. - Nothing turns the unused lanes back on. Script C has no
unused_lanes.sh on; run it by hand when the DUT is needed in its normal state. Whether a reboot clears it has not been checked. unused_lanes.sh offis not gated bySWB_UNIT0/SWB_UNIT1— it always acts on both boards.blanton_ber.sh(Script A / C) still usesp=3andsleep 30; see v1.2.5.- Script 4 has no teardown: finish it with
blanton_tr518.sh stopandsystemctl stop mlucas-amm. FAN_SPEEDis 100.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
Full changelog: V1.2.5...V1.2.6
Downloads
- Four sub-commands, each run on unit 0 then unit 1, over ports
-
released this
2026-10-21 09:01:55 +08:00 | 7 commits to main since this release✨ New features
PMON snapshots now carry the switch-board rail power
utils/setup_pmon.ttlcallsTH6_SWB0_power_readback.shandTH6_SWB1_power_readback.shright aftershow platform current— the 19 rails of each switch board with V × I and aTOTAL POWERline.setup_pmonis shared, so this lands in Script A, B, C, 4 and 5 alike.
blanton_ber_debug.sh— the hand-run BER flow as one command- Runs exactly what
tools/BER_Test.txtdoes:prbs set p=p31→prbs gettwice →prbsstat STArt Interval=30→sleep 40→prbsstat Ber→STOp→prbs clear. - Every
bcmcmdoutput is printed as is, under a### [time] unit N: ...header — no parsing, no PASS/FAIL, no summary. For looking at the raw output on the bench;blanton_ber.shremains the judged version. -u 0/-u 1for one switch unit; both by default.BER_POLY,BER_INTERVAL,BER_WAITandBER_PORTScan be overridden from the environment.
retimer_lanes.sh/unused_lanes.sh— turn off TX on lanes nothing is cabled toretimer_lanes.sh <asic> <addr> <lane_map> <off|on|status>acts on one Agera3 retimer, sys and line side.--method squelch(default, TX squelch, lanes stay powered) or--method power(TX+RX power-down, needs anagera3that has thepowercommand). It reads the state back afterwards and printsPASS/FAIL.unused_lanes.sh <off|on|status>applies that to a built-in table — 14 retimer rows and one direct-TH6 row (TSC31,cd112-cd115) — on both switch boards.--asic 0|1|all,--th6to also disable the TH6 ports behind the retimer rows,--only <target>for a single row. Ends withok / refused / failedcounts.offis refused on a lane that receives a signal (RX PMD lock, or link up on a TH6 port) unless--forceis given.
5_1_Blanton_Script_Boot_Cycle_Fast.ttl— the boot cycle without the traffic run (standalone)- Identical to Script 5, except Check Pt8 only runs
blanton_traffic_linespeed ps— noinit/start/ 15 s /stop/report. A shorter cycle when the point is the number of boots.
Boot cycle shows its count in the window title
- Script 5 and 5_1 set the Tera Term title to
Reboot Cycle Test : norPower Cycle Test : neach round.
🐛 Bug fixes
qfx5252-stress-usbnow runs with--forcein Script B and in the boot cycles.📦 Downloads
File Contents Script_ABC_Blanton_V1.2.5.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTchmod +x ~/Blanton_Script/*.sh grep -rlU $'\r' ~/Blanton_Script # expect no output⚠️ Before you run
chmod +xafter deploying. The power readbacks are called by path from every PMON snapshot, andunused_lanes.shrefuses to start unlessretimer_lanes.shnext to it is executable.- Script 4 now reads the switch-board power twice per round — once inside
setup_pmon, once from its own loop. Harmless, but the log carries both. blanton_ber_debug.shusesp=p31(verified on the bench);blanton_ber.sh, and so Script A / C, still setsp=3. The two may not be measuring the same pattern — do not compare their BER directly until that is settled.blanton_ber_debug.shleaves out port 268, the same list asBER_Test.txt. Add it withBER_PORTS="...,268".EN_Cold_Warm_boot = 0(theconfig.ttldefault) hangs Script 5 and 5_1. Set it to1(reboot) or2(power cycle).- Script 5 and 5_1 are two copies of the same macro — a fix to one has to be made to the other.
- Script 4 has no teardown: finish it with
blanton_tr518.sh stopandsystemctl stop mlucas-amm. FAN_SPEEDis 100.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
Full changelog: V1.2.4...V1.2.5
Downloads
-
released this
2026-10-01 13:32:24 +08:00 | 12 commits to main since this release✨ New features
tray_id_stress.sh— Tray ID I2C write / read-back stress- Buses
34/35/38/39, device0x70, register0x02. Each bus gets0xA5written and read back, then0x5Awritten 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 singleTray ID stress RESULT: PASS|FAILline. Exit0= all PASS,1= any FAIL or I2C error,2= bad arguments. FAIL(the read worked but returned the wrong value) andERROR(i2cset/i2cgetitself 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.
-Rskips that;-n Nrepeats 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_dmesgas 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 Berwas read before the first interval had been published — BER read 40–60× low- The BER cycle originally read
prbsstat Ber10 s afterprbsstat STArt Interval=30. Checked against the error counts thatprbs getreports 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: itsBergoes out 30.15 s afterSTArt, just before the first interval is published. SONiC'sbcmcmdadds ~0.3 s and just makes it. - The macro now uses
Interval=30+sleep 40. Over 73 cycles both sides agree with theprbs getestimate to within 0.1 decade. The rule: the sleep must be longer than the interval.
📦 Downloads
File Contents Script_ABC_Blanton_V1.2.4.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTchmod +x ~/Blanton_Script/*.sh grep -rlU $'\r' ~/Blanton_Script # expect no output⚠️ Before you run
chmod +xafter deploying. Script A and B calltray_id_stress.shby path; without the exec bit every call isPermission deniedand 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) needsprompt_sonic/prompt_sonic_rootedited, 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
YourPaSsWoRdplaceholder, and it does not readconfig.ttlorsecret/. - Script 4 has no teardown: finish it with
blanton_tr518.sh stopandsystemctl stop mlucas-amm. FAN_SPEEDis 100.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
Full changelog: V1.2.3...V1.2.4
Downloads
- Buses
-
v1.2.3 — DIMM and hot-swap temperatures in every snapshot, and CPU power next to the switch rails Stable
released this
2026-09-23 14:44:07 +08:00 | 15 commits to main since this release✨ New features
Every PMON snapshot now reads DDR5 DIMM and hot-swap controller temperatures
utils/setup_pmon.ttlrunsddr5_temp.shandhsc_temp_readback.shright aftershow platform temperature. Becausesetup_pmonis shared, this lands everywhere a snapshot is taken: Script A's baseline, each Script B soak round, Script C, the Script 4 loop and every Script 5 check point.ddr5_temp.shreads the SPD5118 hub on each DIMM: i2c bus 5,0x50/0x51, register0x31(bit[12:2], sign bit 12, 0.25 °C/LSB). A read that fails printsread fail— never a number it did not read. Bus and addresses can be passed:ddr5_temp.sh [bus] [addr ...].hsc_temp_readback.shreads both LTC4287 hot-swap controllers on i2c bus 28 —HSC_MAIN @ 0x40(PU11 internal / PQ1 external) andHSC_STBY @ 0x45(PU46 internal / PQ53 external). The source is selected through0xF3, thenREAD_TEMPERATURE0x8Dis read in Kelvin and converted.
Script 4 logs AMD CPU package power every round
avt_pmpower.shrunsAVTCMD -module pmm "get_pmdata()"and summarizesSktPwr,PPT Fast/PPT Slowagainst their limits, andMemPwr.- It runs after the two
TH6_SWBpower readbacks, so each sample now puts the switch rails and the CPU package side by side. -qprints the summary only. Exit2= AVTCMD not found,3= AVTCMD failed,4= the PM table parsed to nothing (format changed).
🐛 Bug fixes
hsc_temp_readback.shwas saved with CRLF line endings- Copied to the DUT as-is, bash on SONiC fails on the first line (
$'\r': command not found). The shipped file is LF. - Its comments said the delay between I2C transactions was 100 ms;
DELAY=0.5is what actually runs. Comments corrected and a Version History header added.
📦 Downloads
File Contents Script_ABC_Blanton_V1.2.3.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTchmod +x ~/Blanton_Script/*.sh grep -rlU $'\r' ~/Blanton_Script # expect no output ls ~/AVT_Linux_NDA_2.8.37/AVTCMD # Script 4 only - must already be there⚠️ Before you run
- Redeploy
Blanton_Script/. If an earlier copy ofhsc_temp_readback.shreached the DUT, it is CRLF and will not run. chmod +xafter deploying.setup_pmoncalls both new scripts by path. Without the exec bit each call isPermission deniedand the snapshot carries on without those rows — nothing stops, nothing warns.- Each PMON snapshot is ~4 s longer.
hsc_temp_readback.shsleeps 0.5 s twice for each of its four readings. It adds up in Script 5, which snapshots at every check point. - AVT is not in this package (NDA). Unpack it on the DUT at exactly
~/AVT_Linux_NDA_2.8.37/before Script 4. Missing, the call exits2every round and the loop runs on without a CPU power reading. - Script 4 logs the full PM table once a minute, because the call is made without
-q. - CPU power is SMU telemetry, not a measurement. Its absolute accuracy is whatever the BIOS SVI calibration gives — cross-check against the VR's PMBus
READ_POUTwhen the number matters. - None of the three new scripts has been checked against the Script A/B/C flow on hardware yet.
- Do not run the boot cycle with
EN_Cold_Warm_boot = 0, and check the hard-coded BDF on every board before the cold path (see v1.2.2). - BER, the DSC cycle,
blanton_traffic_linespeedandblanton_tr518.shcannot overlap. They all take the same ports. - Script 4 has no teardown: finish it with
blanton_tr518.sh stopandsystemctl stop mlucas-amm. blanton_multiphase_margin.sh saveis permanent, and must not be mixed withmargin.sh.FAN_SPEEDis 100.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
Full changelog: V1.2.2...V1.2.3
Downloads
-
released this
2026-09-15 21:27:40 +08:00 | 18 commits to main since this release✨ New features
The BER sweep now measures port 268, the 100G uplink
- The port list ran
256-259straight to270-308, soce0(268)— the 100G uplink — was never in it. It is now its own group alongside the 200G ports. - The summary gives each unit three rows:
200G ports,100G p268, andTOTAL. Unit 0 and unit 1 each have their ownce0(268), and a marginal uplink lane averaged into 432 others is invisible; on its own row it is not. - A group that reports no lane at all now counts as a failure, not a pass. Silence on the port under test is the easiest way to ship a green report that measured nothing.
Script 5 is now a boot cycle, warm or cold
5_Blanton_Script_Reboot_Cycle.ttl→5_Blanton_Script_Boot_Cycle.ttl, withEN_Cold_Warm_bootinconfig.ttlchoosing:1=reboot(warm),2= a cold cycle by writing the CB FPGA,0= neither.- The log file and the per-round banner are named after the kind of boot:
Blanton_Reboot_Cycle_<ts>.log/Reboot Cycle : N, orBlanton_Power_Cycle_<ts>.log/Power Cycle : N. - Both stress logs are removed before each run.
qfx5252-stress-*appends to its--logand the macrocats the whole thing, so every cycle was printing back everything the earlier cycles had written — 289 lines at cycle 1 and 36,555 by cycle 199. At roughly 6.2 ms a line on a 115200 console that accounted for +212 s of the +214 s the cycle grew over a 199-cycle run. The DUT was never getting slower.
bcm_100g_dsc_cycle.sh— 100G link down/up cycling with SerDes capture- Tuning once, then N cycles of
port 268 en=0→ wait →en=1→ wait →phydiag 268 dscon both units → retimerserdes-tx-get/serdes-rx-getforsys 0..7. One log per run under~/dsc_log/, split by### TEST CYCLE n/N. - Waiting is a poll of
bcmcmd ps 268, notshow interfaces status.port en=changes the SDK, and the SONiC table only follows once gbsyncd has synced it — and this test pauses gbsyncd. -dechoes every command as a grey[CMD]line before running it;-nis a dry run that touches nothing; the cycle count can be a bare argument (./bcm_100g_dsc_cycle.sh 200).
🐛 Bug fixes
blanton_ber.sh initreported a hard error on runs that were working[ERR ] unit 1: the BCM shell rejected 'phydiag ... prbs get'— except the command was fine.prbs getprints one line per lane, a lane that has not locked saysPRBS Error!, and the rejection check grepped the whole output case-insensitively forERROR|Invalid|....- Worse than the false alarm: the function returned early, so the lock count that was meant to judge those very lanes never ran. The operator saw an error they could not act on, and did not see which lanes had failed to lock. That check has been there since v1.0.0.
- Per-lane result lines are now excluded, the match is case-sensitive, and a genuine rejection prints the offending line.
🔧 Changes
- Script A takes a BER baseline before its first traffic run (v1.2.1), so together with Script C's closing sweep the pair brackets the soak.
EN_TX_FIRgates the SerDes DSC scans in Script A and Script C. Default0: a full scan is ~10 min and both scripts do one.
📦 Downloads
File Contents Script_ABC_Blanton_V1.2.2.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTchmod +x ~/Blanton_Script/*.sh grep -rlU $'\r' ~/Blanton_Script # expect no output ls ~/hammer/tools/amd/mlucas-avx2 # must already be there⚠️ Before you run
- Replace
config.ttlwith the macros.EN_Cold_Warm_bootis new, and Tera Term aborts on an undefined variable rather than treating it as 0. - Do not run the boot cycle with
EN_Cold_Warm_boot = 0. Nothing reboots, thewait "Booting in blind mode"underneath has no timeout, and since v1.2.2 there is nologopeneither — so it hangs and leaves no log showing where.0is the value for the A → B → C flow, where that macro is not used. - The cold path writes a raw FPGA register.
0x480isICB_CTRL_REG; the register map carries no bit definitions for it and0xD0000is not documented anywhere in this repo. The BDF0000:05:00.0is hard-coded whileblanton_fpga_pcimem.shauto-detects it because it moves per unit — check the BDF on every board before running the cold path. - Anything that parses these logs must accept both banners,
Reboot Cycle : NandPower Cycle : N. A parser that greps only the first finds zero cycles in a power-cycle log and reports nothing without complaining. bcm_100g_dsc_cycle.shhas not been run on hardware. It pausesgbsyncd0/1for tuning and unpauses them on exit, Ctrl-C included;-Pleaves them alone.sleep 30andBER_INTERVALnow live in three places — Script A, Script C andblanton_ber.sh.- BER, the DSC cycle,
blanton_traffic_linespeedandblanton_tr518.shcannot overlap. They all take the same ports. - Script 4 has no teardown: finish it with
blanton_tr518.sh stopandsystemctl stop mlucas-amm. blanton_multiphase_margin.sh saveis permanent, and must not be mixed withmargin.sh.READ_VINandREAD_IINare still not in the ADPM12200 coefficient table.FAN_SPEEDis 100.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
Full changelog: V1.2.1...V1.2.2
Downloads
- The port list ran
-
released this
2026-09-08 09:35:42 +08:00 | 23 commits to main since this release✨ New features
Script A now takes a SerDes BER sweep before the first traffic run
blanton_ber.sh init → start → sleep 30 → report → stop → clear, branched onSWB_UNIT0/SWB_UNIT1exactly like the traffic block beside it.- Script C already ran the closing sweep after its traffic report. With this one at the front, the pair brackets the soak — the same shape as the DSC scans added in v1.2.0, and the same reason: a BER figure on its own says very little, a change in it says a lot.
- The
sleep 30matchesblanton_ber.sh'sBER_INTERVAL. Reporting before one full interval has accumulated reads a window that has not finished, and nothing warns you about it.
🐛 Bug fixes
The new block's comment described the wrong position
- It was copied out of Script C, which runs BER after the traffic report, and the comment came with it and still said "after". In Script A the block runs before traffic. The comment now says what the code does and why the ordering is what it is.
⚠️ Before you run
- Watch Script A's first traffic report on the first run. PRBS holds the lanes out of normal operation and
blanton_ber.sh clearis what releases them — and in Script A nothing settles between thatclearand theblanton_traffic_linespeed ps/initthat follows. Script C does not have this ordering, so the two reports are a built-in comparison: if Script A shows NA or FAIL pairs that Script C does not, the lanes had not come back yet, and asleepafterclearis the fix. This has not been run on hardware yet. sleep 30andBER_INTERVALnow live in three places — Script A, Script C, andblanton_ber.shitself. Changing one without the others silently reports a partial interval.- BER,
blanton_traffic_linespeedandblanton_tr518.shcannot overlap. They all take over the same ports. Script A now touches those ports twice before the soak even starts. EN_TX_FIRis still 0 by default, so the DSC scans do not run unless you turn them on; a full scan is ~10 min in each of Script A and Script C.- Replace
config.ttlalong with the macros. Tera Term aborts the macro on an undefined variable rather than treating it as 0. bcm_dsc_scan.shneeds the execute bit:chmod +x ~/Blanton_Script/*.shafter copying.--runtimeis the job's overall limit, not a per-pass one.--passesdoes not extend it.- Script 4 has no teardown: finish it with
blanton_tr518.sh stopandsystemctl stop mlucas-amm. - Script 5 (reboot cycle) has no exit condition. A 199-cycle / 60-hour run has now been analysed: PCIe AER stayed at 0, all 218 traffic pairs and all 864 lanes passed every cycle, and the BMC never reset. Two things it did surface —
bmc-first-enrolldoes not exist on that BMC build, and NFC returned FAIL on every cycle. blanton_multiphase_margin.sh saveis permanent, and must not be mixed withmargin.sh.READ_VINandREAD_IINare still not in the ADPM12200 coefficient table.- The BMC USB service log only exists on the USB stick.
FAN_SPEEDis 100.- Still unverified from v1.1.0: the
ce0ingress mirror, the 120 s settle inblanton_tr518.sh, andtest mode nr=noon stop.
📦 Downloads
File Contents Script_ABC_Blanton_V1.2.1.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTchmod +x ~/Blanton_Script/*.sh grep -rlU $'\r' ~/Blanton_Script # expect no output ls ~/hammer/tools/amd/mlucas-avx2 # must already be there🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
Full changelog: V1.2.0...V1.2.1
Downloads
-
released this
2026-09-07 10:02:48 +08:00 | 25 commits to main since this release✨ New features
Full-machine SerDes DSC capture, before and after the soak
bcm_dsc_scan.shrunsphydiag <port> dscthrough 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 underBlanton_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 0scans one unit,-f <name>names the log (%u→u0/u1,%t→ timestamp),-Foverwrites,-ndry runs,-Cskips the copy. A name without%ugets_u0/_u1inserted automatically, so unit 1 can never overwrite unit 0.- Every run ends with
### DSC_SCAN_DONE rc=<n>.rc=0means every port returned a complete dump. phydiag ... dscis read-only — it does not change any SerDes setting.
bcm_dsc_parse.shturns 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 perpm_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 asUNPARSEDon stderr instead of being parsed wrongly.
EN_TX_FIRinconfig.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 to1when the SerDes data is what you are after.
The macro now waits on the DUT instead of on itself
- Every
pause Nin Scripts A, B and C becamesendln "sleep N"followed bywait prompt_sonic_root. pausestopped 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
clearis 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
bcmcmdreads 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
bcmcmdis 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.shblock in Script C have been deleted. They had been dead since bring-up. port_prbs_monitor.shstill 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.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTAfter 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.ttlalong with the macros.EN_TX_FIRis new, and Tera Term aborts on an undefined variable rather than treating it as 0. bcm_dsc_scan.shneeds the execute bit. Script A and Script C invoke it as./Blanton_Script/bcm_dsc_scan.sh. Withoutchmod +xit fails withPermission denied, the macro walks straight past it, and Script C's fourcplines then each report a missing file.- The DSC scan shares the ports with
blanton_ber.sh,blanton_traffic_linespeedandblanton_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. --runtimeis the job's overall limit, not a per-pass one.--passesdoes not extend it; for a 24 hour soak setRUNTIMEto86400.- Script 4 has no teardown: finish it with
blanton_tr518.sh stopandsystemctl stop mlucas-amm. - Script 5 (reboot cycle) is still unverified on hardware, has no exit condition, and its
wait "Booting in blind mode"has notimeoutguard. blanton_multiphase_margin.sh saveis permanent, and must not be mixed withmargin.sh.READ_VINandREAD_IINare still not in the ADPM12200 coefficient table.- The BMC USB service log only exists on the USB stick.
FAN_SPEEDis 100.- Still unverified from v1.1.0: the
ce0ingress mirror, the 120 s settle inblanton_tr518.sh, andtest mode nr=noon stop.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
- Blanton_Test_Flow.drawio — the scripts side by side
Full changelog: V1.1.8...V1.2.0
Downloads
-
released this
2026-09-06 17:31:37 +08:00 | 30 commits to main since this release✨ New features
mlucasnow runs as a systemd unit, so it survives a lost session- The AMD CPU load is started as
systemd-run --unit=mlucas-amm --property=Type=exec --property=Restart=always --property=RestartSec=2, instead of being backgrounded with&in the login shell. Script B and the thermal/safety macro (Script 4) both use it. - As a shell job it belonged to that one terminal: close Tera Term, drop the console, reconnect on a different session, and the load was gone — while
jobsfrom the new session showed nothing to tell you. A multi-day soak could spend most of its length with an idle CPU and produce thermal numbers that looked fine because nothing was loading the part. Restart=alwaysbrings it back if it exits on its own, and the log is appended (>>) inside the unit while being truncated (>) once before the unit starts, so a restart adds to the run rather than erasing it.- Script B now prints
systemctl is-active mlucas-ammbesidejobs, both in the one-shot check and in every pass of the monitor loop. One word —active— tells you the CPU is still loaded.
The old
&line is kept commented out directly above the new one, to fall back to ifsystemd-runis not available on a build.Script C stops the unit and brings its log home
systemctl stop mlucas-ammwas added next to the existingkill $(jobs -p), andmlucas_amm_logis copied into/host/hw-eval/jobs/with the other stress logs.kill $(jobs -p)cannot reach a systemd unit, so without this the load would have run straight through the post-test snapshot and into the next test — every temperature and power reading taken at full load, with nothing inshow interfaces statusto reveal it.
EN_timestamp— turn the per-line log timestamp on or off fromconfig.ttl- Script A's
logopentakes its 5th argument from the new flag:logopen filename 0 1 1 EN_timestamp. The argument order (<file> <binary> <append> <PlainText> <timestamp>) is now spelled out above the call.
BMC_USB_RUNTIME— the BMC USB ping duration is a knob, not a constant- It was hard-coded to
-w 14400(4 hours), which no longer matched the soak lengths the SSD and USB knobs were being set to. The shipped default is172800(2 days).
The shipped stress defaults are now one hour
SSD_RUNTIMEandUSB_RUNTIMEgo from 600 to3600. v1.1.7 shipped a 10 minute stress by default.
🐛 Bug fixes
publish.shproduced a different bundle depending on whose machine it ran onrsynccopied whatever sat insrc/Script_ABC_Blanton/, so a developer with thehammer/mlucas binaries in their working tree shipped a ~100 MB zip while a fresh clone shipped ~200 KB.hammer/is now excluded from the bundle and ignored by git.publish.sh -halso printed the first lines of code along with the usage text, and would have truncated the usage block as the header grew. It now reads the header up to the first line of code.
📦 Downloads
File Contents Script_ABC_Blanton_V1.1.8.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTAfter copying to the DUT:
chmod +x ~/Blanton_Script/*.sh # see below grep -rlU $'\r' ~/Blanton_Script # expect no output ls ~/hammer/tools/amd/mlucas-avx2 # must already be there - see belowblanton_ber.sh,nfc_polling.sh,blanton_tr518.sh,blanton_multiphase_margin.sh,pwr_brick.shand the twoTH6_SWB*_power_readback.share invoked through./or~/, so they need the execute bit along withbmc_monitor.shandusb_target.sh— neither git nor a Windows/USB copy carries it reliably.⚠️ Before you run
- Replace
config.ttlalong with the macros.EN_timestampandBMC_USB_RUNTIMEare new, and Tera Term aborts the macro on an undefined variable rather than treating it as 0 — keeping an oldconfig.ttlstops Script A at thelogopenline. hammer/is not in the bundle. The ~99 MB of mlucas binaries comes with the DUT image, not from this repo. If~/hammer/tools/amd/mlucas-avx2is missing, Script B does not stop — it starts a unit that fails and is restarted every 2 seconds. Check for the file before you start.- The timestamp format is not in the macro.
EN_timestamponly decides whether there is one; the format lives in Tera Term's Setup → Additional settings → Log, stored in that PC'sTERATERM.INI. Two benches running the same macro can produce differently stamped logs. - The three stress durations are deliberately different: SSD and USB at 1 hour, the BMC USB ping at 2 days. Set each to match the soak you are actually running.
--runtimeis the job's overall limit, not a per-pass one.qfx5252-stress-*stops afterRUNTIMEseconds whatever--passessays. For a 24 hour soak setRUNTIMEto86400.mlucas-ammhas not been run on hardware yet. The unit resolves~through bash's fallback to the passwd entry, because systemd does not setHOMEfor a system service withoutUser=. It should land on/root/hammer, the same path the interactive shell uses — confirm it on the bench, or change both paths to an absolute/root/hammer/....- Script 4 uses the same unit but has no teardown. The thermal/safety macro now starts
mlucas-ammthe same way Script B does, and it still ends atwhile 1— so stopping it meansblanton_tr518.sh stopandsystemctl stop mlucas-amm. Closing Tera Term does not stop the CPU load any more. - Script 5 (reboot cycle) is still unverified on hardware, still has no exit condition, and
wait "Booting in blind mode"still has notimeoutguard. blanton_multiphase_margin.sh saveis permanent, and must not be mixed withmargin.sh— same rails, two access paths, no interlock.READ_VINandREAD_IINare still not in the ADPM12200 coefficient table.- The BMC USB service log only exists on the USB stick.
- These three cannot share the switch:
blanton_ber.sh,blanton_tr518.sh,blanton_traffic_linespeed. FAN_SPEEDis 100.- Still unverified from v1.1.0: the
ce0ingress mirror, the 120 s settle inblanton_tr518.sh, andtest mode nr=noon stop.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
- Blanton_Test_Flow.drawio — the scripts side by side
Full changelog: V1.1.7...V1.1.8
Downloads
- The AMD CPU load is started as
-
released this
2026-09-04 22:44:25 +08:00 | 34 commits to main since this release✨ New features
blanton_multiphase_margin.sh normal— put the rails back without a power cyclenormalreturns all 38 multiphase rails to their nominal set point, with the same per-rail reporting as the margin profiles (SWB0_0V9_ANLG0 - 0.930V Configure Done).-u 0|1|allas usual.- Until now the only way out of a margin was to power-cycle the DUT. That mattered more than it sounds:
saverun while the board was still margined would have written the offsets into NVM, where a power cycle does not help either. - The commands it sends are in
tools/Multiphase_Normal.txtfor anyone driving the bench by hand.
⚠️
TH6_COREis 0.8 V nominal but settles near 0.8591 V once the load line is active. Reading back 0.859 afternormalis the load line doing its job, not a failed write.5_Blanton_Script_Reboot_Cycle.ttl— an unattended reboot-cycle run-
A standalone macro, like Script 4: it does not chain to A → B → C and does not use
hw-test-session. Every cycle is a fresh boot, so there is nothing to carry over and nothing to tear down. -
Each round: login →
sudo -i→date -s→ fan speed →wait_init→ Check Pt1 … Pt13 →show uptime→reboot→ wait for the next boot. The cycle number is printed in the banner of every round.Pt1 DUT info Pt2 BMC info + tools Pt3 mgmt ping Pt4 NFC poll Pt5 SSD stress Pt6 USB stress Pt7 BMC USB net Pt8 port status + 15 s traffic Pt9 BER sweep Pt10 NVMe errors Pt11 platform data Pt12 dmesg i2c Pt13 PCIe error counters -
The USB step takes its device node from
usb_target.sh, not a hard-coded/dev/sda1.
The SSD and USB stress durations are declared in
config.ttlSSD_RUNTIME/SSD_COUNTandUSB_RUNTIME/USB_COUNTreplace the values that were hard-coded in Script B, so a site changes them in one place.COUNTis passed straight through as--passes.
🐛 Bug fixes
Script B left the global
timeoutat 15 s for the rest of the cdc_ncm section- The NCM probe sets
timeout = 15and restored it only at:skip_ping— which the success path reaches severalwaits later. Until then everywaitgave up after 15 s instead of blocking, and awaitthat returns without eating the prompt puts the whole macro a beat ahead of the DUT. It is now restored on the success path too.
goto skip_pingin the reboot-cycle macro had no label to jump to- The probe was copied out of Script B without its
:skip_pinglabel. Tera Term does not check labels when it loads a macro — it raises the error only when it actually jumps, which here means only when the NCM interface is missing. The failure mode was an error dialog stopping the whole cycle, on the one run where something was already wrong. The label is there now, and thetimeoutis restored before the branch so one line covers both paths.
Two check points both numbered 12
Dmesg_i2candPCIE Error Countersboth announced themselves asCheck Pt12. The second is nowPt13; Pt1 … Pt13 are unique.
📦 Downloads
File Contents Script_ABC_Blanton_V1.1.7.zipThe full Tera Term working directory, including Blanton_Script/to copy onto the DUTAfter copying to the DUT:
chmod +x ~/Blanton_Script/*.sh # see below grep -rlU $'\r' ~/Blanton_Script # expect no outputblanton_ber.sh,nfc_polling.sh,blanton_tr518.sh,blanton_multiphase_margin.sh,pwr_brick.shand the twoTH6_SWB*_power_readback.share invoked through./or~/, so they need the execute bit along withbmc_monitor.shandusb_target.sh— neither git nor a Windows/USB copy carries it reliably.⚠️ Before you run
--runtimeis the job's overall limit, not a per-pass one.qfx5252-stress-*stops afterRUNTIMEseconds whatever--passessays, soSSD_RUNTIME=600is a 10 minute stress, not 600 ×SSD_COUNT. For a 24 hour soak setRUNTIMEto86400. The shipped defaults are 600.- Script 5 has not been run on hardware yet. Two things to confirm on the bench: that
wait "Booting in blind mode"really appears in this build's boot output — it has notimeoutguard, so a changed string waits forever — and that re-runningbmc-first-enrollevery cycle is safe. - Script 5 has no exit condition.
while 1with arebootat the end of each round; stop it by closing the Tera Term macro. blanton_multiphase_margin.sh saveis permanent, and must not be mixed withmargin.sh— same rails, two access paths, no interlock. Never run it while the board is margined.READ_VINandREAD_IINare still not in the ADPM12200 coefficient table —pwr_brick.shdecodes them with the voltage and current coefficients. Confirm before quoting brick Vin.- The BMC USB service log only exists on the USB stick.
- Script 4 (thermal/safety) has no teardown — finish with
blanton_tr518.sh stopandkill $(jobs -p). - These three cannot share the switch:
blanton_ber.sh,blanton_tr518.sh,blanton_traffic_linespeed. FAN_SPEEDis 100.- Still unverified from v1.1.0: the
ce0ingress mirror, the 120 s settle inblanton_tr518.sh, andtest mode nr=noon stop.
🔗 Links
- ARCHITECTURE.md — test flow, data models, constraints
- CLAUDE.md — commands and the bench gotchas
- Blanton_Test_Flow.drawio — the scripts side by side
Full changelog: V1.1.6...V1.1.7
Downloads