Files
cabletest/docs/modules/fs/README.md
T

5.1 KiB
Raw Blame History

FS SFP-10G-T-100 (Broadcom BCM84891L)

Documented, robust — survived the whole poking campaign un-bricked. Honest EEPROM (RJ45/10GBASE-T codes), which is what trips stock ixgbe qualification (../README.md).

References in this directory: bcm84891l-mdio-commands.md (command handler, transcribed), bcm84891l-sfp-registers.md (transport reference, transcribed), and their source PDFs.

SMI transport (I2C→MDIO bridge)

PHY at I2C 8-bit 0xAC write / 0xAD read.

Op Frames
Clause-45 write one I2C write to 0xAC: [000+DevAD, RegH, RegL, DataH, DataL]
Clause-45 read I2C write to 0xAC: [001+DevAD, RegH, RegL]delay >1 ms (3 ms proven) → I2C read 2 B from 0xAD
  • Single-byte reads see the bridge as inert (returns 0) — the DevAD-prefixed frame + delay is mandatory. This is why early probing wrongly declared 0x56 dead. Treat 0x0000 reads as retry-with-longer-delay: 0 is also the bridge's not-ready signature.
  • Recorded for a future multi-byte firmware transport (mlx5 MCIA shape): read = write [001+devad,RegH,RegL] offset_size=1, STOP, >1 ms, read 2 B offset_size=0; write = offset_size=2, addr = devad<<8|RegH, data = [RegL,DataH,DataL].

MDIO command handler

Protocol and full verified catalog: bcm84891l-mdio-commands.md. Traps:

  • SET commands execute stale DATA1 — the handler never clears DATA registers; write every parameter register explicitly before any SET.
  • Poll STATUS ~100 ms; frozen up to 2 s during 10GBASE-T training — only run after link-up.

Proven diagnostics

Capability How Observed
Per-pair SNR CMD_GET_SNR 0x8030, invoked bare (writing the documented DATA1 display flag returns zeros; IEEE 1.1331.140 never populate — constant 0x8080) DATA25 = SNR AD ×0.1 dB; ≈ 2732 dB absolute on bench, 0.10.4 dB jitter. 10GBASE-T operating point ≈ 26.5 dB, so margin ≈ value 26.5
Die temperature CMD_GET_CURRENT_TEMP 0x8031 ~6870 °C on bench
Supply rails GET_CURRENT_VOLTAGE 0x802F 0.8 V and 1.88 V rails, tenths of mV
Error counters IEEE PCS 3.32/3.33 — block lock, latched errored-block/BER, clear-on-read The noise-stress error proxy
Retrain on demand IEEE AN restart 7.0 |= bit9 Relinks in ~56 s

Probed configuration states

Item Command State
EEE / AutogrEEEn 0x8008/0x8009 Once read 0x0047 (10G AutogrEEEn variable latency + 5G/1G native — local-only, invisible in IEEE 7.60/7.61, which read 0); later reads 0. Forced all-off via SET with explicit params (0, 0, 0x7A12, 0x480, 0) + AN restart, verified. cabletest should apply this defensively at bringup
EEE wire-truth arm 0x801A after link-up, read 0x801B Zero LPI events/duration on idle link; repeat under traffic
Fast retrain 0x800A (datasheet titles it EMI_MODE; description is fast retrain) Enabled 10G/5G/2.5G; IEEE 1.147 = 0x0019, count bits zero. Keep enabled; read the 1.147 count per run — a marginal cable that fast-retrains still gets counted
Pair map 0x8000 DATA2 = 0x00E4 = identity (A/B/C/D straight through) — MDI wiring verification works
Fault pass-through 0x800D 0 = LF/RF pass to the line (0x8011/0x8010 could mask them as IDLE — leave off)
Host interface 0x802B/0x802D/0x8027 XFI polarity normal; TX FIR = main tap 0x3C only; MAC/PHY frequency locked; KR/SyncE/USXGMII/WOL disabled; jumbo on at 9K; temp warnings off
1588 0x8004 Disabled (engine registers undocumented — see asks below)
Limited reach 0x8006 Disabled — its DATA3 "linked in LR mode" bit, the only handler-visible trace of the DSP length estimate, is unavailable without a config change

Firmware-reliability caveat

Several documented DATA1 returns on this ODM firmware are untrustworthy: die-temperature-like values (0x43/0x44/0x46/0x47) appear in DATA1 of commands that should return modes, and repeat reads of the same GET disagree. Corroborate anything load-bearing through IEEE registers (7.60/7.61 for EEE advertisement) or wire behavior (EEE statistics under traffic), and write every DATA register explicitly before any SET.

No cable length — and the asks to FS

The handler catalog is complete (§1.25.1.145) and contains no ECD, length, or skew command. Cable length, opens/shorts, pair skew, and polarity live in the separate ECD register mechanism whose chapter FS hasn't sent; the 1588 engine is the same story (one-command enable, undocumented operation — in-PHY timestamping would measure path delay at the MDI, removing PHY-pipeline latency from the length equation; ../../open-questions.md §2). Until either chapter lands, FS-side length comes only from the NIC timestamp path.

Asks, in value order:

  1. The ECD chapter — shorts/opens/cable length invocation.
  2. The 1588 operation chapter.
  3. Datasheet §1.20 loopback (copper line loopback) and §1.17 EEE/fast-retrain monitoring.
  4. Chapter 2 register summary. The excerpt's TOC names them all.