feat(soak): Show the background jobs each round, and stop the loop spinning
Script B's monitoring loop had no pause at all - each round started the instant the last one ended, so an overnight soak filled the log with near-identical samples taken seconds apart. The section was even labelled "Get data every 10mins" while running with no delay whatsoever. The loop now ends each round with pause 60 and prints both job lists: bgctl list for the platform job runner, jobs for anything the macro backgrounded in that shell. A stress job that dies mid-soak shows up as a shorter list on the next round instead of going unnoticed until the end. 60s is still hard-coded and the Status sheet asks for 10 minutes, so the Phase 3 item stays open - this makes the loop sane, it does not close it. Also adds docs/LTC2980_channel_map.csv: the nine settings/*.conf flattened into one Board,CONN,Ch,NetName,Vnom sheet, generated by tools/gen_channel_map.sh. The CSV is output, not source. NC channels are kept as NC/- because the channel number is also the PMBus page - dropping the gaps would shift every channel after them. Two things the merged table makes visible: SWB0 and SWB1 carry identical net names and voltages (only the bus and CB_I2C_CH differ), so those are two copies that can drift apart silently; and there are exactly 8 NC channels, all on CONN14/CONN15. tools/100G_PRBS.txt, TR518.txt and fan_ctrl.txt join the existing traffic_loopback_*.txt references. TR518 is not scripted yet and cannot share the hardware with blanton_traffic_linespeed - both drive port loopback and L2 learning. Script A -> V1.0.10. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014RetWKFZFG1ZHcitQAyhwM
This commit is contained in:
+28
-4
@@ -120,6 +120,7 @@ Blanton_TTL_Script/
|
||||
│ ├── Blantons_FPGA_Registers_draft.docx # 同上,客戶原始 docx
|
||||
│ ├── Blantons_FPGA_Registers_Map_draft.xlsx
|
||||
│ ├── Blantons_PCIe_AER_and_DDR_EDAC_checks.pdf # AER / EDAC 檢查點依據
|
||||
│ ├── LTC2980_channel_map.csv # 9 個 settings/*.conf 合併:Board,CONN,Ch,NetName,Vnom(144 列)
|
||||
│ ├── TTL_Script_Blanton_Status_20260814.xlsx
|
||||
│ └── TTL_Script_Blanton_Status_20260817.xlsx # ⭐ 最新:三支腳本逐項 Status(OK / On-Going + Owner)
|
||||
│
|
||||
@@ -127,9 +128,13 @@ Blanton_TTL_Script/
|
||||
│ ├── bcm_mibpair_report_V1.1.0.py # 離線解析 drivshell log → per-pair TX/RX + PASS/FAIL
|
||||
│ ├── traffic_loopback_vlan_setting.txt # bcmcmd VLAN 30..137 建立 + 成對 pbm(cdN <-> cdN+32)
|
||||
│ ├── traffic_loopback_start.txt # bcmcmd tx 100 length=512 VLantag=<vid>
|
||||
│ └── traffic_loopback_vlan_remove.txt # bcmcmd vlan remove <vid> pbm=...
|
||||
│ # ↑ 三份為手動貼上用的原始指令表,
|
||||
│ # blanton_traffic_linespeed.sh 是其 bash 版
|
||||
│ ├── traffic_loopback_vlan_remove.txt # bcmcmd vlan remove <vid> pbm=...
|
||||
│ │ # ↑ 三份為手動貼上用的原始指令表,
|
||||
│ │ # blanton_traffic_linespeed.sh 是其 bash 版
|
||||
│ ├── 100G_PRBS.txt # 100G PRBS 原始指令(port_prbs_monitor.sh 的來源)
|
||||
│ ├── TR518.txt # 內建封包測試 tr 518(Scenario=6 Profile=2)— 尚未腳本化
|
||||
│ ├── fan_ctrl.txt # MAX31790 unbind/bind + fan-speed-control.sh 30
|
||||
│ └── gen_channel_map.sh # settings/*.conf → docs/LTC2980_channel_map.csv(需 gawk)
|
||||
│
|
||||
├── secret/ # 🚫 gitignored — DUT 密碼、per-unit BDF、COM 設定
|
||||
│ ├── README.md # ✅ committed — 用途索引
|
||||
@@ -246,6 +251,16 @@ Channel 定址:`ch / 8` → `CHIPS[]` index,`ch % 8` → LTC2977 PMBus PAGE
|
||||
> 同一顆 LTC2980 的兩個位址**相差 2**(7-bit,由規格書 8-bit 配對除以 2 而來),不是 1。
|
||||
> 兩張板共用一條通道,所以同通道上的位址必須互斥 —— 上表兩組(`0x5C/0x5E` 與 `0x62/0x64`)不重疊。
|
||||
|
||||
**全通道 net / 電壓對照:`docs/LTC2980_channel_map.csv`**(9 個 `.conf` × 16ch = 144 列,
|
||||
欄位 `Board,CONN,Ch,NetName,Vnom`)。查「某個 net 在哪片哪個 channel」比翻 9 個 `.conf` 快。
|
||||
CSV 是產出物,不是正本 —— 改完 `.conf` 用 `./tools/gen_channel_map.sh` 重產,別手改 CSV。
|
||||
兩件從表上看得出來、改 `.conf` 時要記得的事:
|
||||
|
||||
- **SWB0 與 SWB1 的 net / 電壓完全相同**,差別只在 `CHIPS[]` 的 bus(`0:` vs `1:`)與 `CB_I2C_CH`。
|
||||
也就是說有兩份會各自漂移的重複資料 —— 改了 SWB0 沒改 SWB1,不會有任何東西擋你。
|
||||
- **8 個 NC 通道**(SWB0/1 CONN14 的 CH10/CH11/CH13、CONN15 的 CH10)在 CSV 裡以
|
||||
`NC` / `-` 原樣保留,不是漏掉;濾掉它們會讓 page 編號對不上。
|
||||
|
||||
### 3. `profiles/*.conf` — 16-ch 批次 margin 組合
|
||||
|
||||
```bash
|
||||
@@ -600,9 +615,11 @@ margin status、全部 VRM 軌的 Vin/Vout/Iout/Temp、CB + ICB 溫感讀值,
|
||||
- [x] 壓力層改用平台的 `bgctl`(`memtester` / `qfx5252-stress-ssd` / `qfx5252-stress-usb`),
|
||||
取代 `~/hammer/tools/stress_*.py`;Script B 以 `jobs` + `bgctl list` 兩者並列確認
|
||||
- [ ] `bgctl list` 之後加數量驗證,不符時 `messagebox` 提示(目前只印出來給人看)
|
||||
**← V1.0.10 起 `bgctl list` + `jobs` 改為每輪都印,中途死掉的 job 看得到,但仍要靠人眼比對**
|
||||
- [ ] soak 迴圈改為「每輪先 `date`、跑完 `pause <間隔>`」,
|
||||
把 `EN_LoopInterval`(預設 600 秒 = 10 min)放進 `config.ttl`,兌現 Status 表的「Get data every 10mins」
|
||||
**← 目前 `while 1` 仍無 `pause`,實際間隔取決於指令執行時間,不是 10 分鐘**
|
||||
**← V1.0.10 已補上 `pause 60`(迴圈不再全速空轉),但 60 秒是寫死的、也還沒有每輪 `date`;
|
||||
距 Status 表的 10 分鐘仍有差距,故本項未結**
|
||||
- [x] soak 每輪補 `show platform psustatus` / `voltage` / `current`
|
||||
—— 迴圈已改為 `include "utils/setup_pmon.ttl"`,九項全收
|
||||
- [ ] 補 `; ========== CLEAR EVENT ==========`(Status 表 ScriptB #1,Owner: Alan)
|
||||
@@ -735,6 +752,13 @@ margin status、全部 VRM 軌的 Vin/Vout/Iout/Temp、CB + ICB 溫感讀值,
|
||||
- **風扇確認提示是無限等待**:`wait "Set all configured fan channels to"` 之後才 `sendln "y"`;
|
||||
若該版 `fan-speed-control.sh` 不再詢問(或字串改了),這個 `wait` 會永遠等下去,Script A 停在那裡
|
||||
且不報錯。加個 `timeout` + 分支會比較保險(記得還原 `timeout = 0`)。
|
||||
- **TR518 內建封包測試尚未腳本化**:`tools/TR518.txt` 記下了 `tr 518 Scenario=6 Profile=2 Count=260
|
||||
PktSize=324 PortList=1-259,270-565` 這組指令(含 `port all lb=mac` + `l2 learn off` 前置),
|
||||
目前只能手貼。它與 `blanton_traffic_linespeed` 是兩條互斥的打流路線(都會動 loopback 與 L2 學習),
|
||||
要腳本化的話得先決定兩者怎麼共存,不能同時跑。
|
||||
- **`settings/` 裡 SWB0 與 SWB1 是兩份相同的資料**:8 個 `.conf` 中,SWB1 的四個除了 `CHIPS[]` 的
|
||||
bus 與 `CB_I2C_CH` 之外,net name 與 `VNOM` 與 SWB0 逐欄相同(見 `docs/LTC2980_channel_map.csv`)。
|
||||
改一邊忘了改另一邊不會有任何警告。可考慮改成「共用 net 定義 + 各自的 transport 覆寫」兩層檔案。
|
||||
- **Script C 沒有倒出 `mgmt_ping.log`**:C 會 `stop` 管理網路監控並印 `ip -s link show`,
|
||||
但沒有 `cat ~/Blanton_Script/log/mgmt_ping.log`,所以整個 soak 期間累積的 per-leg `RESULT`
|
||||
留在 DUT 上、沒進 master log。Script A 那輪基線有 `cat`。
|
||||
|
||||
@@ -9,13 +9,14 @@ DUT 端的取數能力由一組 **bash 工具庫** 提供(CB FPGA `pcimem` →
|
||||
|
||||
完整架構見 [ARCHITECTURE.md](ARCHITECTURE.md)。
|
||||
|
||||
**目前狀態(2026-08-26)**:Script A 為 **V1.0.9**(A 集中記錄 A/B/C 三支的變更)。涵蓋
|
||||
**目前狀態(2026-08-27)**:Script A 為 **V1.0.10**(A 集中記錄 A/B/C 三支的變更)。涵蓋
|
||||
PCIe AER / DDR EDAC / PMON+TPM / 電壓 margin(9 顆 LTC2980)/ SWB loopback 線速流量 /
|
||||
10G+1G 管理網路 ping / BMC DDR 與 USB / NVMe 健康,壓力層走平台的 `bgctl`。
|
||||
switch unit 數量由 `config.ttl` 的 `SWB_UNIT0` / `SWB_UNIT1` 宣告,風扇轉速由 `FAN_SPEED` 指定。
|
||||
測試 job log 收在 DUT 的 `/host/hw-eval/jobs/`,Script C 結束時掛好 USB 再帶時戳複製到 `/mnt/usb/`。
|
||||
100G PRBS(`port_prbs_monitor.sh`)已隨包交付,但 **A/B/C 的呼叫仍註解掉**,還在 bring-up。
|
||||
最後一次發布是 **V1.0.5**;SWB 的 I2C 通道與位址已於 2026-08-19 上機驗證。
|
||||
Script B 的 soak 迴圈每輪印 `bgctl list` + `jobs`,並 `pause 60`(V1.0.10 之前完全沒有 pause)。
|
||||
最後一次發布是 **V1.0.9**;SWB 的 I2C 通道與位址已於 2026-08-19 上機驗證。
|
||||
交付用 `./publish/publish.sh` 打包。
|
||||
|
||||
## 技術棧
|
||||
@@ -106,6 +107,11 @@ bgctl run /usr/sbin/memtester 1G 100
|
||||
bgctl list
|
||||
bgctl stop --all ; bgctl reset --yes
|
||||
|
||||
# ── 通道對照表(開發機上跑,改完 settings/*.conf 一定要重產)──
|
||||
./tools/gen_channel_map.sh # → docs/LTC2980_channel_map.csv(144 列)
|
||||
./tools/gen_channel_map.sh - # 只印到 stdout
|
||||
# ⚠️ 需要 gawk(用到 3 參數的 match());mawk 會直接擋下並提示
|
||||
|
||||
# ── 各工具的 help ───────────────────────────────────
|
||||
blanton_fpga_help ; blanton_cb_i2c_help ; vi2c_help
|
||||
temp_sensor_help ; pwr_data_help ; blanton_traffic_linespeed_help
|
||||
@@ -222,10 +228,13 @@ Tera Term 連 COM port (115200-8-N-1)
|
||||
## 資料夾說明
|
||||
|
||||
- `src/Script_ABC_Blanton/` — 可執行內容(Tera Term 工作目錄;內含要 scp 到 DUT 的 `Blanton_Script/`)
|
||||
- `docs/` — 客戶 FPGA 規格、AER/EDAC 檢查依據、逐項 Status 表(最新為 `*_20260817.xlsx`)
|
||||
- `docs/` — 客戶 FPGA 規格、AER/EDAC 檢查依據、逐項 Status 表(最新為 `*_20260817.xlsx`)、
|
||||
`LTC2980_channel_map.csv`(9 個 `settings/*.conf` 合併成 Board,CONN,Ch,NetName,Vnom 144 列,
|
||||
查 net 對應哪片哪個 channel 用;**改 `.conf` 後要重跑產生**)
|
||||
- `tools/` — Host / 離線端:`bcm_mibpair_report_V1.1.0.py`(drivshell log → per-pair 報表)、
|
||||
`traffic_loopback_*.txt`(bcmcmd 原始指令表,`blanton_traffic_linespeed.sh` 是其 bash 版,
|
||||
**改 loopback 線路時兩邊要同步**)
|
||||
**改 loopback 線路時兩邊要同步**)、`100G_PRBS.txt` / `TR518.txt` / `fan_ctrl.txt`
|
||||
(上機手貼用的原始指令;PRBS 已有 `.sh`,TR518 尚未腳本化)
|
||||
- `publish/` — `publish.sh`(打包工具,**進 git**)+ `Script_ABC_Blanton_<Ver>/` 產出(**gitignored**)
|
||||
- `secret/` — 🚫 gitignored(除 `README.md` 與 `*.example`):DUT 帳密、per-unit BDF 覆寫、COM 設定
|
||||
- `For_AI/` — 🚫 gitignored:AI 協作素材(波形截圖、草稿筆記)
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
Board,CONN,Ch,NetName,Vnom
|
||||
CB,CONN13,CH0,V5P0_ALW,5.0
|
||||
CB,CONN13,CH1,V3P3_ALW,3.3
|
||||
CB,CONN13,CH2,PWR_VDD_MISC_ALW,0.75
|
||||
CB,CONN13,CH3,V1P8_ALW,1.8
|
||||
CB,CONN13,CH4,PWR_APU_VDDIO_SUS,1.1
|
||||
CB,CONN13,CH5,PWR_VDD_MISC_RUN,0.75
|
||||
CB,CONN13,CH6,PWR_APU_VDD_MEM_RUN,0.78
|
||||
CB,CONN13,CH7,V0P8_PHY2_DVDD,0.8
|
||||
CB,CONN13,CH8,V0P8_AVDD,0.8
|
||||
CB,CONN13,CH9,V0P8_PHY,0.8
|
||||
CB,CONN13,CH10,V1P8_FPGA,1.8
|
||||
CB,CONN13,CH11,V2P5_FPGA,2.5
|
||||
CB,CONN13,CH12,V1P1_FPGA,1.1
|
||||
CB,CONN13,CH13,P5V_STBY,5.0
|
||||
CB,CONN13,CH14,P3V3_STBY,3.3
|
||||
CB,CONN13,CH15,V0P8_PHY2_AVDD,0.8
|
||||
SWB0,CONN13,CH0,P0V75_DVDD_47,0.75
|
||||
SWB0,CONN13,CH1,P0V75_AVDD_47,0.75
|
||||
SWB0,CONN13,CH2,P1V5_AVDD_47,1.5
|
||||
SWB0,CONN13,CH3,P0V9_AVDD_47,0.9
|
||||
SWB0,CONN13,CH4,P1V8_1,1.8
|
||||
SWB0,CONN13,CH5,PVDD3_3V_SYNTH_LDO_A3,3.3
|
||||
SWB0,CONN13,CH6,PVDD3_3V_SYNTH_LDO_B1,3.3
|
||||
SWB0,CONN13,CH7,P1V8_3,1.8
|
||||
SWB0,CONN13,CH8,P1V8_DVDDIO_3,1.8
|
||||
SWB0,CONN13,CH9,P0V75_DVDD_39,0.75
|
||||
SWB0,CONN13,CH10,P0V75_AVDD_39,0.75
|
||||
SWB0,CONN13,CH11,P1V5_AVDD_39,1.5
|
||||
SWB0,CONN13,CH12,P0V9_AVDD_39,0.9
|
||||
SWB0,CONN13,CH13,PVDD1V5_2,1.5
|
||||
SWB0,CONN13,CH14,PVDD1V8_DUT,1.8
|
||||
SWB0,CONN13,CH15,PVDD_MDIO,1.2
|
||||
SWB0,CONN14,CH0,P0V75_AVDD_7,0.75
|
||||
SWB0,CONN14,CH1,P1V5_AVDD_7,1.5
|
||||
SWB0,CONN14,CH2,P0V9_AVDD_7,0.9
|
||||
SWB0,CONN14,CH3,P1V8_5,1.8
|
||||
SWB0,CONN14,CH4,P1V8_2,1.8
|
||||
SWB0,CONN14,CH5,PVDD3_3V_SYNTH_LDO_B2,3.3
|
||||
SWB0,CONN14,CH6,PVDD3_3V_SYNTH_LDO_A2,3.3
|
||||
SWB0,CONN14,CH7,PVDD3_3V_SYNTH_LDO_A1,3.3
|
||||
SWB0,CONN14,CH8,PVDD1V5_TSC,1.5
|
||||
SWB0,CONN14,CH9,PVDD1V5_ANLG,1.5
|
||||
SWB0,CONN14,CH10,NC,-
|
||||
SWB0,CONN14,CH11,NC,-
|
||||
SWB0,CONN14,CH12,PVDD1V5_1,1.5
|
||||
SWB0,CONN14,CH13,NC,-
|
||||
SWB0,CONN14,CH14,P1V8_DVDDIO_1,1.8
|
||||
SWB0,CONN14,CH15,P0V75_DVDD_7,0.75
|
||||
SWB0,CONN15,CH0,P1V5_AVDD_55,1.5
|
||||
SWB0,CONN15,CH1,P0V9_AVDD_55,0.9
|
||||
SWB0,CONN15,CH2,P0V75_DVDD_63,0.75
|
||||
SWB0,CONN15,CH3,P0V75_AVDD_63,0.75
|
||||
SWB0,CONN15,CH4,P1V5_AVDD_63,1.5
|
||||
SWB0,CONN15,CH5,P0V9_AVDD_63,0.9
|
||||
SWB0,CONN15,CH6,PVDD3_3V_SYNTH_LDO_B3,3.3
|
||||
SWB0,CONN15,CH7,PVDD1V5_3,1.5
|
||||
SWB0,CONN15,CH8,P0V85_STBY,0.85
|
||||
SWB0,CONN15,CH9,P1V8_STBY,1.8
|
||||
SWB0,CONN15,CH10,NC,-
|
||||
SWB0,CONN15,CH11,P3V3_STBY,3.3
|
||||
SWB0,CONN15,CH12,PVDD0V9_2,0.9
|
||||
SWB0,CONN15,CH13,P0V75_DVDD_55,0.75
|
||||
SWB0,CONN15,CH14,P0V75_AVDD_55,0.75
|
||||
SWB0,CONN15,CH15,P1V8_DVDDIO_4,1.8
|
||||
SWB0,CONN16,CH0,PVDD1V5_0,1.5
|
||||
SWB0,CONN16,CH1,P1V8_4,1.8
|
||||
SWB0,CONN16,CH2,PVDD3_3V_SYNTH_LDO_B5,3.3
|
||||
SWB0,CONN16,CH3,PVDD3_3V_SYNTH_LDO_A5,3.3
|
||||
SWB0,CONN16,CH4,PVDD3_3V_SYNTH_LDO_B4,3.3
|
||||
SWB0,CONN16,CH5,PVDD3_3V_SYNTH_LDO_A4,3.3
|
||||
SWB0,CONN16,CH6,P3V3,3.3
|
||||
SWB0,CONN16,CH7,PVDD0_8V_T3,0.8
|
||||
SWB0,CONN16,CH8,P0V75_DVDD_1,0.75
|
||||
SWB0,CONN16,CH9,P0V75_AVDD_1,0.75
|
||||
SWB0,CONN16,CH10,P1V5_AVDD_1,1.5
|
||||
SWB0,CONN16,CH11,P0V9_AVDD_1,0.9
|
||||
SWB0,CONN16,CH12,PVDD0V9_0,0.9
|
||||
SWB0,CONN16,CH13,PVDD0V9_1,0.9
|
||||
SWB0,CONN16,CH14,PVDD0V9_3,0.9
|
||||
SWB0,CONN16,CH15,PVDD1V2_T3,1.2
|
||||
SWB1,CONN13,CH0,P0V75_DVDD_47,0.75
|
||||
SWB1,CONN13,CH1,P0V75_AVDD_47,0.75
|
||||
SWB1,CONN13,CH2,P1V5_AVDD_47,1.5
|
||||
SWB1,CONN13,CH3,P0V9_AVDD_47,0.9
|
||||
SWB1,CONN13,CH4,P1V8_1,1.8
|
||||
SWB1,CONN13,CH5,PVDD3_3V_SYNTH_LDO_A3,3.3
|
||||
SWB1,CONN13,CH6,PVDD3_3V_SYNTH_LDO_B1,3.3
|
||||
SWB1,CONN13,CH7,P1V8_3,1.8
|
||||
SWB1,CONN13,CH8,P1V8_DVDDIO_3,1.8
|
||||
SWB1,CONN13,CH9,P0V75_DVDD_39,0.75
|
||||
SWB1,CONN13,CH10,P0V75_AVDD_39,0.75
|
||||
SWB1,CONN13,CH11,P1V5_AVDD_39,1.5
|
||||
SWB1,CONN13,CH12,P0V9_AVDD_39,0.9
|
||||
SWB1,CONN13,CH13,PVDD1V5_2,1.5
|
||||
SWB1,CONN13,CH14,PVDD1V8_DUT,1.8
|
||||
SWB1,CONN13,CH15,PVDD_MDIO,1.2
|
||||
SWB1,CONN14,CH0,P0V75_AVDD_7,0.75
|
||||
SWB1,CONN14,CH1,P1V5_AVDD_7,1.5
|
||||
SWB1,CONN14,CH2,P0V9_AVDD_7,0.9
|
||||
SWB1,CONN14,CH3,P1V8_5,1.8
|
||||
SWB1,CONN14,CH4,P1V8_2,1.8
|
||||
SWB1,CONN14,CH5,PVDD3_3V_SYNTH_LDO_B2,3.3
|
||||
SWB1,CONN14,CH6,PVDD3_3V_SYNTH_LDO_A2,3.3
|
||||
SWB1,CONN14,CH7,PVDD3_3V_SYNTH_LDO_A1,3.3
|
||||
SWB1,CONN14,CH8,PVDD1V5_TSC,1.5
|
||||
SWB1,CONN14,CH9,PVDD1V5_ANLG,1.5
|
||||
SWB1,CONN14,CH10,NC,-
|
||||
SWB1,CONN14,CH11,NC,-
|
||||
SWB1,CONN14,CH12,PVDD1V5_1,1.5
|
||||
SWB1,CONN14,CH13,NC,-
|
||||
SWB1,CONN14,CH14,P1V8_DVDDIO_1,1.8
|
||||
SWB1,CONN14,CH15,P0V75_DVDD_7,0.75
|
||||
SWB1,CONN15,CH0,P1V5_AVDD_55,1.5
|
||||
SWB1,CONN15,CH1,P0V9_AVDD_55,0.9
|
||||
SWB1,CONN15,CH2,P0V75_DVDD_63,0.75
|
||||
SWB1,CONN15,CH3,P0V75_AVDD_63,0.75
|
||||
SWB1,CONN15,CH4,P1V5_AVDD_63,1.5
|
||||
SWB1,CONN15,CH5,P0V9_AVDD_63,0.9
|
||||
SWB1,CONN15,CH6,PVDD3_3V_SYNTH_LDO_B3,3.3
|
||||
SWB1,CONN15,CH7,PVDD1V5_3,1.5
|
||||
SWB1,CONN15,CH8,P0V85_STBY,0.85
|
||||
SWB1,CONN15,CH9,P1V8_STBY,1.8
|
||||
SWB1,CONN15,CH10,NC,-
|
||||
SWB1,CONN15,CH11,P3V3_STBY,3.3
|
||||
SWB1,CONN15,CH12,PVDD0V9_2,0.9
|
||||
SWB1,CONN15,CH13,P0V75_DVDD_55,0.75
|
||||
SWB1,CONN15,CH14,P0V75_AVDD_55,0.75
|
||||
SWB1,CONN15,CH15,P1V8_DVDDIO_4,1.8
|
||||
SWB1,CONN16,CH0,PVDD1V5_0,1.5
|
||||
SWB1,CONN16,CH1,P1V8_4,1.8
|
||||
SWB1,CONN16,CH2,PVDD3_3V_SYNTH_LDO_B5,3.3
|
||||
SWB1,CONN16,CH3,PVDD3_3V_SYNTH_LDO_A5,3.3
|
||||
SWB1,CONN16,CH4,PVDD3_3V_SYNTH_LDO_B4,3.3
|
||||
SWB1,CONN16,CH5,PVDD3_3V_SYNTH_LDO_A4,3.3
|
||||
SWB1,CONN16,CH6,P3V3,3.3
|
||||
SWB1,CONN16,CH7,PVDD0_8V_T3,0.8
|
||||
SWB1,CONN16,CH8,P0V75_DVDD_1,0.75
|
||||
SWB1,CONN16,CH9,P0V75_AVDD_1,0.75
|
||||
SWB1,CONN16,CH10,P1V5_AVDD_1,1.5
|
||||
SWB1,CONN16,CH11,P0V9_AVDD_1,0.9
|
||||
SWB1,CONN16,CH12,PVDD0V9_0,0.9
|
||||
SWB1,CONN16,CH13,PVDD0V9_1,0.9
|
||||
SWB1,CONN16,CH14,PVDD0V9_3,0.9
|
||||
SWB1,CONN16,CH15,PVDD1V2_T3,1.2
|
||||
|
@@ -0,0 +1,56 @@
|
||||
# v1.0.10 — The soak loop stops spinning flat out, and shows you what is still running
|
||||
|
||||
## ✨ New features
|
||||
|
||||
**Every soak round now reports the background jobs**
|
||||
* Script B's monitoring loop prints `bgctl list` (platform jobs) and `jobs` (the login shell's own background jobs) on every pass, right after the platform data. A stress job that dies three hours into an overnight soak now shows up as a shorter list on the next round, instead of only being noticed at the end — or not at all.
|
||||
* The two lists answer different questions and are both worth having: `bgctl` knows about the platform's job runner, `jobs` knows about anything the macro backgrounded in that shell.
|
||||
|
||||
**A single table for all 144 margin channels**
|
||||
* `docs/LTC2980_channel_map.csv` flattens the nine `settings/*.conf` files into one sheet — `Board,CONN,Ch,NetName,Vnom` — so "which board and channel is `PVDD1V5_TSC` on?" is one search instead of opening nine files.
|
||||
* `tools/gen_channel_map.sh` regenerates it. **The CSV is output, not source**: edit the `.conf` files and re-run the script, never the other way round.
|
||||
* Unused channels stay in the table as `NC` / `-` rather than being dropped, because the channel number is also the PMBus page (`ch / 8` picks the chip, `ch % 8` picks the page) — filtering the gaps out would shift everything after them.
|
||||
|
||||
**The bench command lists that these scripts came from**
|
||||
* `tools/100G_PRBS.txt`, `tools/TR518.txt` and `tools/fan_ctrl.txt` join the existing `traffic_loopback_*.txt` set: the raw `bcmcmd` / sysfs sequences, kept in the form you can paste into a console when a script is misbehaving and you want to drive the hardware directly.
|
||||
|
||||
## 🐛 Bug fixes
|
||||
|
||||
**The soak loop ran as fast as the DUT could answer**
|
||||
* `while 1` had no pause at all, so each round started the moment the previous one finished. Over a long soak that means constant console traffic and a log full of near-identical samples taken seconds apart. The loop now ends each round with `pause 60`.
|
||||
* Note the gap this leaves: the Status sheet asks for a 10-minute sampling interval, and 60 seconds is still hard-coded rather than configurable. This makes the loop sane, it does not finish the job.
|
||||
|
||||
**A comment promised a cadence the code never had**
|
||||
* The loop was labelled `Get data every 10mins` while running with no delay whatsoever. It now says what it does.
|
||||
|
||||
## 📦 Downloads
|
||||
|
||||
| File | Contents |
|
||||
|---|---|
|
||||
| `Script_ABC_Blanton_V1.0.10.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 # see below
|
||||
grep -rlU $'\r' ~/Blanton_Script # expect no output
|
||||
```
|
||||
|
||||
`mgmt_ping_monitor.sh` and `port_prbs_monitor.sh` launch their workers through `bash`, so those two run without the execute bit. `bmc_monitor.sh` and `usb_target.sh` still need it, and neither git (mode 100644) nor a Windows/USB copy carries it. Without the `chmod`, `start` fails with `Permission denied` and the later `cat` finds nothing: **the section ends up empty and nothing reports an error.**
|
||||
|
||||
## ⚠️ Before you run
|
||||
|
||||
* **Declare the switch population.** `SWB_UNIT0` / `SWB_UNIT1` in `config.ttl` say which switch units this DUT has; traffic and the readiness gate both follow them.
|
||||
* **Set `FAN_SPEED`.** It is applied at the start of every run.
|
||||
* **Management connectivity is in use, not preserved.** Both management NICs are up and pinging — drive the run from the serial console.
|
||||
* **PRBS is still not wired into the macros.** Run `port_prbs_monitor.sh` by hand if you want it; the calls in A/B/C remain commented out, unchanged from v1.0.9.
|
||||
* **TR518 and the loopback traffic test cannot both run.** `tools/TR518.txt` sets `port all lb=mac` and `l2 learn off` across the whole unit, which is the same hardware `blanton_traffic_linespeed` is using. Pick one.
|
||||
* **Two settings persist to `config_db.json`** and survive a reboot: LLDP is left disabled and the 100G uplinks are left configured. Restore them before the DUT moves on.
|
||||
|
||||
## 🔗 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
|
||||
* [LTC2980_channel_map.csv](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/src/branch/main/docs/LTC2980_channel_map.csv) — all 144 margin channels
|
||||
|
||||
**Full changelog:** [V1.0.9...V1.0.10](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/compare/V1.0.9...V1.0.10)
|
||||
@@ -1,7 +1,7 @@
|
||||
; =============================================================================
|
||||
; Script A for Blanton
|
||||
; Version : V1.0.9
|
||||
; Date : 2026-08-26
|
||||
; Version : V1.0.10
|
||||
; Date : 2026-08-27
|
||||
; Author : ETWen
|
||||
; =============================================================================
|
||||
; Version History:
|
||||
@@ -65,6 +65,15 @@
|
||||
; ScriptA/B/C Job log path /host/hw-eval/current/jobs -> /host/hw-eval/jobs
|
||||
; ScriptC Mount the USB (usb_target.sh) before copying the job logs
|
||||
; ScriptC Reorder results: stress logs, then MGMT ping, then 100G status
|
||||
; V1.0.10 2026-08-27 ScriptB Monitor loop lists the background jobs every round
|
||||
; + bgctl list - platform jobs
|
||||
; + jobs - shell jobs of the login shell
|
||||
; + pause 60 - the loop used to run with no pause at all
|
||||
; docs/LTC2980_channel_map.csv Channel / net / Vnom map built from settings/*.conf
|
||||
; tools/gen_channel_map.sh Regenerates that CSV - the CSV is output, not source
|
||||
; tools/100G_PRBS.txt Bench command references, kept for hand-run debug
|
||||
; tools/TR518.txt TR518 = built-in packet test (swutil / bcmcmd tr 518)
|
||||
; tools/fan_ctrl.txt MAX31790 rebind + fan-speed-control.sh
|
||||
; =============================================================================
|
||||
include "config.ttl"
|
||||
|
||||
|
||||
@@ -161,11 +161,16 @@ endif
|
||||
|
||||
|
||||
|
||||
; ========== Get data every 10mins ==========
|
||||
; ========== Monitor loop: platform data + background jobs (pause 60s per round) ==========
|
||||
while 1
|
||||
include "utils/setup_pmon.ttl"
|
||||
wait prompt_sonic_root
|
||||
sendln "bgctl list"
|
||||
wait prompt_sonic_root
|
||||
sendln "jobs"
|
||||
; ========== Check Margin ==========
|
||||
if EN_Margin = 1 then
|
||||
include "utils/show_margin_status.ttl"
|
||||
endif
|
||||
pause 60
|
||||
endwhile
|
||||
@@ -0,0 +1,63 @@
|
||||
|
||||
|
||||
echo PORTS0=$(bcmcmd -n 0 -c ps | grep -w up | wc -l)
|
||||
echo PORTS0=$(bcmcmd -n 1 -c ps | grep -w up | wc -l)
|
||||
|
||||
show interfaces status Ethernet513,Ethernet514
|
||||
|
||||
|
||||
//100G Port 513
|
||||
sudo sfputil lpmode off Ethernet513
|
||||
bcmcmd -n 0 -c 'dsh -c "phy diag 268 prbs set p=3"'
|
||||
bcmcmd -n 0 -c 'dsh -c "phy diag 268 prbsstat STArt Interval=5"'
|
||||
|
||||
bcmcmd -n 0 -c 'dsh -c "phy diag 268 prbs get"'
|
||||
bcmcmd -n 0 -c 'dsh -c "phydiag 268 prbsstat Ber"'
|
||||
|
||||
bcmcmd -n 0 -c 'dsh -c "phydiag 268 prbsstat STOp"'
|
||||
bcmcmd -n 0 -c 'dsh -c "phydiag 268 prbs clear"'
|
||||
|
||||
|
||||
//100G Port 514
|
||||
sudo sfputil lpmode off Ethernet514
|
||||
bcmcmd -n 1 -c 'dsh -c "phy diag 268 prbs set p=3"'
|
||||
bcmcmd -n 1 -c 'dsh -c "phy diag 268 prbsstat STArt Interval=5"'
|
||||
bcmcmd -n 1 -c 'dsh -c "phy diag 268 prbs get"'
|
||||
bcmcmd -n 1 -c 'dsh -c "phydiag 268 prbsstat Ber"'
|
||||
bcmcmd -n 1 -c 'dsh -c "phydiag 268 prbsstat STOp"'
|
||||
bcmcmd -n 1 -c 'dsh -c "phydiag 268 prbs clear"'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//100G Port 513
|
||||
sudo sfputil lpmode off Ethernet513
|
||||
sudo sfputil lpmode off Ethernet514
|
||||
|
||||
bcmcmd -n 0 -c 'dsh -c "phy diag 268 prbs set p=3"'
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c 'dsh -c "phy diag 268 prbs set p=3"'
|
||||
|
||||
bcmcmd -n 0 -c 'dsh -c "phy diag 268 prbsstat STArt Interval=5"'
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c 'dsh -c "phy diag 268 prbsstat STArt Interval=5"'
|
||||
|
||||
bcmcmd -n 0 -c 'dsh -c "phy diag 268 prbs get"'
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c 'dsh -c "phy diag 268 prbs get"'
|
||||
|
||||
bcmcmd -n 0 -c 'dsh -c "phydiag 268 prbsstat Ber"'
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c 'dsh -c "phydiag 268 prbsstat Ber"'
|
||||
|
||||
bcmcmd -n 0 -c 'dsh -c "phydiag 268 prbsstat STOp"'
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c 'dsh -c "phydiag 268 prbsstat STOp"'
|
||||
|
||||
bcmcmd -n 0 -c 'dsh -c "phydiag 268 prbs clear"'
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c 'dsh -c "phydiag 268 prbs clear"'
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
bcmcmd -n 0 -c '*:port all lb=mac'
|
||||
bcmcmd -n 0 -c '*:l2 learn off'
|
||||
bcmcmd -n 0 -c '*:dsh -c "test mode nr=yes"'
|
||||
bcmcmd -n 0 -c '*:dsh -c "tr 518 Scenario=6 Profile=2 Count=260 PktSize=324 PortList=1-259,270-565 rm=ext CheckLinkTime=20 CheckDataTime=200 testphase=2"'
|
||||
|
||||
bcmcmd -n 1 -c "*:port all lb=mac"
|
||||
bcmcmd -n 1 -c "*:l2 learn off"
|
||||
bcmcmd -n 1 -c "*:dsh -c 'test mode nr=yes'"
|
||||
bcmcmd -n 1 -c "*:dsh -c 'tr 518 Scenario=6 Profile=2 Count=260 PktSize=324 PortList=1-259,270-565 rm=ext CheckLinkTime=20 CheckDataTime=200 testphase=2'"
|
||||
|
||||
|
||||
bcmcmd -n 0 -c "*:port all lb=mac"
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c "*:port all lb=mac"
|
||||
sleep 1
|
||||
bcmcmd -n 0 -c "*:l2 learn off"
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c "*:l2 learn off"
|
||||
sleep 1
|
||||
bcmcmd -n 0 -c "*:dsh -c 'test mode nr=yes'"
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c "*:dsh -c 'test mode nr=yes'"
|
||||
sleep 1
|
||||
bcmcmd -n 0 -c "*:dsh -c 'tr 518 Scenario=6 Profile=2 Count=260 PktSize=324 PortList=1-259,270-565 rm=ext CheckLinkTime=20 CheckDataTime=200 testphase=2'"
|
||||
sleep 1
|
||||
bcmcmd -n 1 -c "*:dsh -c 'tr 518 Scenario=6 Profile=2 Count=260 PktSize=324 PortList=1-259,270-565 rm=ext CheckLinkTime=20 CheckDataTime=200 testphase=2'"
|
||||
sleep 1
|
||||
|
||||
|
||||
root@(none):/usr/local/bin# swutil *:l2 learn off
|
||||
root@(none):/usr/local/bin# swutil *:dsh -c \"test mode nr=yes\"
|
||||
root@(none):/usr/local/bin# swutil *:dsh -c \"tr 518 Scenario=6 Profile=2 Count=260 PktSize=324 PortList=1-259,270-565 rm=ext CheckLinkTime=20 CheckDataTime=200 testphase=2"
|
||||
@@ -0,0 +1,7 @@
|
||||
echo 18-0020 > /sys/bus/i2c/drivers/max31790/unbind
|
||||
sleep .5
|
||||
echo 18-0020 > /sys/bus/i2c/drivers/max31790/bind
|
||||
echo 25-0020 > /sys/bus/i2c/drivers/max31790/unbind
|
||||
sleep .5
|
||||
echo 25-0020 > /sys/bus/i2c/drivers/max31790/bind
|
||||
fan-speed-control.sh 30
|
||||
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# gen_channel_map.sh - Build docs/LTC2980_channel_map.csv from settings/*.conf
|
||||
# Version : V1.0.0
|
||||
# Date : 2026-08-27
|
||||
# Author : ETWen
|
||||
# =============================================================================
|
||||
# Runs on the DEV machine, not the DUT. Reads every LTC2980 margin settings
|
||||
# file and flattens CH<n>_VNOM / CH<n>_NET into one CSV:
|
||||
#
|
||||
# Board,CONN,Ch,NetName,Vnom
|
||||
# CB,CONN13,CH0,V5P0_ALW,5.0
|
||||
#
|
||||
# NC channels keep their literal NC / "-" so the page numbering still lines up
|
||||
# (ch/8 -> CHIPS[] index, ch%8 -> LTC2977 PAGE). Do not filter them out.
|
||||
#
|
||||
# Usage:
|
||||
# tools/gen_channel_map.sh # write docs/LTC2980_channel_map.csv
|
||||
# tools/gen_channel_map.sh - # write to stdout
|
||||
# =============================================================================
|
||||
set -eu
|
||||
|
||||
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
SET_DIR="${REPO_ROOT}/src/Script_ABC_Blanton/Blanton_Script/LTC2980_Margin_Script/settings"
|
||||
OUT="${1:-${REPO_ROOT}/docs/LTC2980_channel_map.csv}"
|
||||
|
||||
[ -d "${SET_DIR}" ] || { echo "settings dir not found: ${SET_DIR}" >&2; exit 1; }
|
||||
|
||||
# 3-argument match(str, regex, array) is a gawk extension. Under mawk it is a
|
||||
# syntax error at best and an empty CSV at worst - fail loudly instead.
|
||||
awk 'BEGIN { if (match("a", /a/, m) != 1) exit 1 }' 2>/dev/null \
|
||||
|| { echo "need gawk (3-arg match); this awk is: $(awk --version 2>&1 | head -1)" >&2; exit 1; }
|
||||
|
||||
gen() {
|
||||
printf 'Board,CONN,Ch,NetName,Vnom\n'
|
||||
# CB first, then SWB0/SWB1 CONN13..CONN16 - matches the physical walk order.
|
||||
for f in "${SET_DIR}"/Blanton_CB_CONN*.conf \
|
||||
"${SET_DIR}"/Blanton_SWB0_CONN*.conf \
|
||||
"${SET_DIR}"/Blanton_SWB1_CONN*.conf ; do
|
||||
[ -f "${f}" ] || continue
|
||||
base="$(basename "${f}" .conf)" # Blanton_SWB0_CONN13
|
||||
board="$(echo "${base}" | cut -d_ -f2)" # SWB0
|
||||
conn="$(echo "${base}" | cut -d_ -f3)" # CONN13
|
||||
|
||||
# .conf files are LF per .gitattributes, but strip CR anyway - a stray
|
||||
# CR would land inside the net name and travel into the CSV unseen.
|
||||
sed 's/\r$//' "${f}" | awk -v b="${board}" -v c="${conn}" '
|
||||
match($0, /^CH([0-9]+)_VNOM="([^"]*)"[^"]*CH[0-9]+_NET="([^"]*)"/, m) {
|
||||
printf "%s,%s,CH%s,%s,%s\n", b, c, m[1], m[3], m[2]
|
||||
}'
|
||||
done
|
||||
}
|
||||
|
||||
if [ "${OUT}" = "-" ]; then
|
||||
gen
|
||||
else
|
||||
gen > "${OUT}"
|
||||
echo "wrote ${OUT} ($(($(wc -l < "${OUT}") - 1)) channels)"
|
||||
fi
|
||||
Reference in New Issue
Block a user