Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15ea776b82 |
+28
-4
@@ -120,6 +120,7 @@ Blanton_TTL_Script/
|
|||||||
│ ├── Blantons_FPGA_Registers_draft.docx # 同上,客戶原始 docx
|
│ ├── Blantons_FPGA_Registers_draft.docx # 同上,客戶原始 docx
|
||||||
│ ├── Blantons_FPGA_Registers_Map_draft.xlsx
|
│ ├── Blantons_FPGA_Registers_Map_draft.xlsx
|
||||||
│ ├── Blantons_PCIe_AER_and_DDR_EDAC_checks.pdf # AER / EDAC 檢查點依據
|
│ ├── 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_20260814.xlsx
|
||||||
│ └── TTL_Script_Blanton_Status_20260817.xlsx # ⭐ 最新:三支腳本逐項 Status(OK / On-Going + Owner)
|
│ └── 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
|
│ ├── 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_vlan_setting.txt # bcmcmd VLAN 30..137 建立 + 成對 pbm(cdN <-> cdN+32)
|
||||||
│ ├── traffic_loopback_start.txt # bcmcmd tx 100 length=512 VLantag=<vid>
|
│ ├── traffic_loopback_start.txt # bcmcmd tx 100 length=512 VLantag=<vid>
|
||||||
│ └── traffic_loopback_vlan_remove.txt # bcmcmd vlan remove <vid> pbm=...
|
│ ├── traffic_loopback_vlan_remove.txt # bcmcmd vlan remove <vid> pbm=...
|
||||||
│ # ↑ 三份為手動貼上用的原始指令表,
|
│ │ # ↑ 三份為手動貼上用的原始指令表,
|
||||||
│ # blanton_traffic_linespeed.sh 是其 bash 版
|
│ │ # 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 設定
|
├── secret/ # 🚫 gitignored — DUT 密碼、per-unit BDF、COM 設定
|
||||||
│ ├── README.md # ✅ committed — 用途索引
|
│ ├── 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。
|
> 同一顆 LTC2980 的兩個位址**相差 2**(7-bit,由規格書 8-bit 配對除以 2 而來),不是 1。
|
||||||
> 兩張板共用一條通道,所以同通道上的位址必須互斥 —— 上表兩組(`0x5C/0x5E` 與 `0x62/0x64`)不重疊。
|
> 兩張板共用一條通道,所以同通道上的位址必須互斥 —— 上表兩組(`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 組合
|
### 3. `profiles/*.conf` — 16-ch 批次 margin 組合
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -600,9 +615,11 @@ margin status、全部 VRM 軌的 Vin/Vout/Iout/Temp、CB + ICB 溫感讀值,
|
|||||||
- [x] 壓力層改用平台的 `bgctl`(`memtester` / `qfx5252-stress-ssd` / `qfx5252-stress-usb`),
|
- [x] 壓力層改用平台的 `bgctl`(`memtester` / `qfx5252-stress-ssd` / `qfx5252-stress-usb`),
|
||||||
取代 `~/hammer/tools/stress_*.py`;Script B 以 `jobs` + `bgctl list` 兩者並列確認
|
取代 `~/hammer/tools/stress_*.py`;Script B 以 `jobs` + `bgctl list` 兩者並列確認
|
||||||
- [ ] `bgctl list` 之後加數量驗證,不符時 `messagebox` 提示(目前只印出來給人看)
|
- [ ] `bgctl list` 之後加數量驗證,不符時 `messagebox` 提示(目前只印出來給人看)
|
||||||
|
**← V1.0.10 起 `bgctl list` + `jobs` 改為每輪都印,中途死掉的 job 看得到,但仍要靠人眼比對**
|
||||||
- [ ] soak 迴圈改為「每輪先 `date`、跑完 `pause <間隔>`」,
|
- [ ] soak 迴圈改為「每輪先 `date`、跑完 `pause <間隔>`」,
|
||||||
把 `EN_LoopInterval`(預設 600 秒 = 10 min)放進 `config.ttl`,兌現 Status 表的「Get data every 10mins」
|
把 `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`
|
- [x] soak 每輪補 `show platform psustatus` / `voltage` / `current`
|
||||||
—— 迴圈已改為 `include "utils/setup_pmon.ttl"`,九項全收
|
—— 迴圈已改為 `include "utils/setup_pmon.ttl"`,九項全收
|
||||||
- [ ] 補 `; ========== CLEAR EVENT ==========`(Status 表 ScriptB #1,Owner: Alan)
|
- [ ] 補 `; ========== 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"`;
|
- **風扇確認提示是無限等待**:`wait "Set all configured fan channels to"` 之後才 `sendln "y"`;
|
||||||
若該版 `fan-speed-control.sh` 不再詢問(或字串改了),這個 `wait` 會永遠等下去,Script A 停在那裡
|
若該版 `fan-speed-control.sh` 不再詢問(或字串改了),這個 `wait` 會永遠等下去,Script A 停在那裡
|
||||||
且不報錯。加個 `timeout` + 分支會比較保險(記得還原 `timeout = 0`)。
|
且不報錯。加個 `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`,
|
- **Script C 沒有倒出 `mgmt_ping.log`**:C 會 `stop` 管理網路監控並印 `ip -s link show`,
|
||||||
但沒有 `cat ~/Blanton_Script/log/mgmt_ping.log`,所以整個 soak 期間累積的 per-leg `RESULT`
|
但沒有 `cat ~/Blanton_Script/log/mgmt_ping.log`,所以整個 soak 期間累積的 per-leg `RESULT`
|
||||||
留在 DUT 上、沒進 master log。Script A 那輪基線有 `cat`。
|
留在 DUT 上、沒進 master log。Script A 那輪基線有 `cat`。
|
||||||
|
|||||||
@@ -9,13 +9,14 @@ DUT 端的取數能力由一組 **bash 工具庫** 提供(CB FPGA `pcimem` →
|
|||||||
|
|
||||||
完整架構見 [ARCHITECTURE.md](ARCHITECTURE.md)。
|
完整架構見 [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 線速流量 /
|
PCIe AER / DDR EDAC / PMON+TPM / 電壓 margin(9 顆 LTC2980)/ SWB loopback 線速流量 /
|
||||||
10G+1G 管理網路 ping / BMC DDR 與 USB / NVMe 健康,壓力層走平台的 `bgctl`。
|
10G+1G 管理網路 ping / BMC DDR 與 USB / NVMe 健康,壓力層走平台的 `bgctl`。
|
||||||
switch unit 數量由 `config.ttl` 的 `SWB_UNIT0` / `SWB_UNIT1` 宣告,風扇轉速由 `FAN_SPEED` 指定。
|
switch unit 數量由 `config.ttl` 的 `SWB_UNIT0` / `SWB_UNIT1` 宣告,風扇轉速由 `FAN_SPEED` 指定。
|
||||||
測試 job log 收在 DUT 的 `/host/hw-eval/jobs/`,Script C 結束時掛好 USB 再帶時戳複製到 `/mnt/usb/`。
|
測試 job log 收在 DUT 的 `/host/hw-eval/jobs/`,Script C 結束時掛好 USB 再帶時戳複製到 `/mnt/usb/`。
|
||||||
100G PRBS(`port_prbs_monitor.sh`)已隨包交付,但 **A/B/C 的呼叫仍註解掉**,還在 bring-up。
|
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` 打包。
|
交付用 `./publish/publish.sh` 打包。
|
||||||
|
|
||||||
## 技術棧
|
## 技術棧
|
||||||
@@ -106,6 +107,11 @@ bgctl run /usr/sbin/memtester 1G 100
|
|||||||
bgctl list
|
bgctl list
|
||||||
bgctl stop --all ; bgctl reset --yes
|
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 ───────────────────────────────────
|
# ── 各工具的 help ───────────────────────────────────
|
||||||
blanton_fpga_help ; blanton_cb_i2c_help ; vi2c_help
|
blanton_fpga_help ; blanton_cb_i2c_help ; vi2c_help
|
||||||
temp_sensor_help ; pwr_data_help ; blanton_traffic_linespeed_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/`)
|
- `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 報表)、
|
- `tools/` — Host / 離線端:`bcm_mibpair_report_V1.1.0.py`(drivshell log → per-pair 報表)、
|
||||||
`traffic_loopback_*.txt`(bcmcmd 原始指令表,`blanton_traffic_linespeed.sh` 是其 bash 版,
|
`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**)
|
- `publish/` — `publish.sh`(打包工具,**進 git**)+ `Script_ABC_Blanton_<Ver>/` 產出(**gitignored**)
|
||||||
- `secret/` — 🚫 gitignored(除 `README.md` 與 `*.example`):DUT 帳密、per-unit BDF 覆寫、COM 設定
|
- `secret/` — 🚫 gitignored(除 `README.md` 與 `*.example`):DUT 帳密、per-unit BDF 覆寫、COM 設定
|
||||||
- `For_AI/` — 🚫 gitignored:AI 協作素材(波形截圖、草稿筆記)
|
- `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
|
; Script A for Blanton
|
||||||
; Version : V1.0.9
|
; Version : V1.0.10
|
||||||
; Date : 2026-08-26
|
; Date : 2026-08-27
|
||||||
; Author : ETWen
|
; Author : ETWen
|
||||||
; =============================================================================
|
; =============================================================================
|
||||||
; Version History:
|
; Version History:
|
||||||
@@ -65,6 +65,15 @@
|
|||||||
; ScriptA/B/C Job log path /host/hw-eval/current/jobs -> /host/hw-eval/jobs
|
; 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 Mount the USB (usb_target.sh) before copying the job logs
|
||||||
; ScriptC Reorder results: stress logs, then MGMT ping, then 100G status
|
; 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"
|
include "config.ttl"
|
||||||
|
|
||||||
|
|||||||
@@ -161,11 +161,16 @@ endif
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ========== Get data every 10mins ==========
|
; ========== Monitor loop: platform data + background jobs (pause 60s per round) ==========
|
||||||
while 1
|
while 1
|
||||||
include "utils/setup_pmon.ttl"
|
include "utils/setup_pmon.ttl"
|
||||||
|
wait prompt_sonic_root
|
||||||
|
sendln "bgctl list"
|
||||||
|
wait prompt_sonic_root
|
||||||
|
sendln "jobs"
|
||||||
; ========== Check Margin ==========
|
; ========== Check Margin ==========
|
||||||
if EN_Margin = 1 then
|
if EN_Margin = 1 then
|
||||||
include "utils/show_margin_status.ttl"
|
include "utils/show_margin_status.ttl"
|
||||||
endif
|
endif
|
||||||
endwhile
|
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