• V1.1.0 59861cf953

    etwen released this 2026-08-28 16:33:43 +08:00 | 24 commits to main since this release

    New features

    Whole-switch SerDes BER sweep

    • New blanton_ber.sh runs PRBS across every cabled port and reports the bit error rate lane by lane. initstart → wait → reportstopclear, with -u 0 / -u 1 for a single switch unit.

    • A lane passes only when its BER is below 1e-6. Equal to the threshold is a FAIL, not a pass. -c <ber> sets a different bar.

    • report ends with a summary across both units, and each unit's row carries its worst lane — so a run where everything passes still tells you how much margin there was:

      Unit        LANES     PASS     FAIL       NA  WORST BER    WORST LANE RESULT
      unit 0        432      432        0        0  1.98e-08     203[0]     PASS
      unit 1        432      432        0        0  6.34e-10     366[1]     PASS
      
    • init also checks that every lane locked. This matters: an unlocked lane still reports a BER later, and it is a meaningless one. Without the check, a dead lane can report a beautiful number and pass.

    • A lane whose reading is not a number is NA — counted separately from FAIL, because "not measured" and "measured and bad" are different problems.

    • Script C runs the sweep after the traffic report, following SWB_UNIT0 / SWB_UNIT1 the same way the traffic block does.

    TR518 load test, for measuring power under traffic

    • New blanton_tr518.sh puts the cd ports in loopback and runs the built-in tr 518 packet test, then waits TR_SETTLE_SEC (120s by default) before handing back — so the power figures you take afterwards are loaded and settled, not caught mid-ramp.
    • -u 0 / -u 1 for one unit; no flag runs both.
    • stop sends port cd lb=none and nothing else, which is exactly what the bench procedure does. L2 learning and test mode are left as start set them — the tool says so on every stop rather than quietly leaving the box in a state you did not ask about. TR_RESTORE_LEARN=1 / TR_RESTORE_TESTMODE=1 if you want a true inverse.

    Per-rail power readback for both switch boards

    • TH6_SWB0_power_readback.sh / TH6_SWB1_power_readback.sh report V × I and total power for the 19 rails on each board.

    🐛 Bug fixes

    The power readback measured every rail at a different moment

    • It ran show platform voltage and show platform current once per rail — 38 invocations of a slow CLI, and 38 different instants. Under load the currents move a lot (TH6_CORE was seen going from 186 A to 636 A), so the "total" was a sum of readings taken seconds apart. Both tables are now read once, up front. Same output, one moment.
    • A rail missing from the sensor table used to contribute a silent 0.000 V / 0.00 W to the total. It now says so on stderr; the printed report format is unchanged.

    The 100G port stopped sending after one round trip

    • ce0 has no loopback partner, and a switch never forwards a frame back out the port it arrived on — so a tx burst went out, came back, and was dropped. TX 100, RX 100, silence. That measures the link; it does not exercise it.
    • init now sets an ingress mirror of ce0 back to itself. The mirrored copy is not egress-filtered, so each packet keeps lapping and the load is set by how much you inject (-tx). stop is what ends it — removing the VLAN membership does not, because the mirrored copy never consulted the VLAN.

    The 100G verdict was being decided the wrong way

    • ce0 was treated as a cross-unit check. The bench says otherwise: there is one ce0 per unit and a burst sent on unit 0 alone came back on unit 0. It is now judged within its own unit. The distinction is invisible while everything works and decisive when it does not — read as cross-unit, both links dying still leaves unit0.TX == unit1.RX (0 == 0) and reports PASS.

    Every BER lane reported NA, and the Port column printed NA too

    • bcmcmd returns CRLF, and the BER is the last token on its line, so the carriage return stayed glued to the number: it failed the numeric check, and printing it sent the cursor back to column 1 so the RESULT column overwrote the start of the row. Both symptoms, one stray \r.

    📦 Downloads

    File Contents
    Script_ABC_Blanton_V1.1.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      # see below
    grep -rlU $'\r' ~/Blanton_Script    # expect no output
    

    blanton_ber.sh is invoked by Script C as ./Blanton_Script/blanton_ber.sh, so it joins bmc_monitor.sh and usb_target.sh in needing the execute bit — and neither git nor a Windows/USB copy carries it reliably. Without the chmod the BER section fails with Permission denied and the log simply has no BER in it.

    ⚠️ Before you run

    • These three tests cannot share the switch. blanton_ber.sh, blanton_tr518.sh and blanton_traffic_linespeed all take over port loopback and L2 learning. Run one at a time; Script C already orders BER after the traffic report.
    • PRBS takes the links down. While blanton_ber.sh is armed the ports report DOWN and no traffic passes. That is the test working, not a fault. clear releases them.
    • ce0 keeps running until you stop it. If a run is interrupted between start and stop, the 100G port stays saturated with nothing in show interfaces status to hint at it. blanton_traffic_linespeed stop (or bcmcmd -n <u> -c 'mirror port ce0 Mode=Off') ends it.
    • Two numbers must stay in step: Script C's sleep 30 and blanton_ber.sh's BER_INTERVAL. Change one without the other and report reads an interval that has not finished accumulating — with no warning.
    • FAN_SPEED is 100. This build runs the fans flat out unless you change config.ttl.
    • Declare the switch population with SWB_UNIT0 / SWB_UNIT1; traffic, the readiness gate and now the BER sweep all follow it.
    • PRBS on the two 100G uplinks (port_prbs_monitor.sh) is still not wired into the macros. Unchanged from v1.0.9.

    🔬 Not yet verified on hardware

    Three things in this build were reasoned out rather than measured, and each has a one-command check:

    • The ce0 ingress mirror. mirror port ce0 Mode=Ingress DestPort=ce0 should make the port circulate, but the hardware may refuse a mirror destination equal to its source. Check show c | grep POK.ce0 twice ten seconds apart — the number must climb. The report cannot tell you: a one-shot burst is also TX == RX and also says PASS. Fallback is tr 518 PortList=268.
    • The 120s settle in blanton_tr518.sh. If tr 518's traffic is time-limited (its parameters include runtime=1, CheckDataTime=200), waiting 120s could mean measuring after the load has already dropped. Compare a power readback at 0s, 30s and 120s.
    • test mode nr=no in blanton_tr518.sh is the derived inverse of the nr=yes that start sends; it is not part of the bench-verified sequence, and is off by default.

    🔗 Links

    Full changelog: V1.0.11...V1.1.0

    Downloads