GetPermanentMacAddress on Jaguar2 and Kestrel: per-unit identity on every generation - #386
Conversation
…ery-generation Jaguar2: logical EFUSE 0x107 — one offset for both dies (hal_pg.h: EEPROM_MAC_ADDR_8822BU == EEPROM_MAC_ADDR_8821CU) — served from the logical map HalJaguar2 already caches for RFE/TX-power, so post-bring-up it is a lookup. The device entry point serializes on _reg_mu and folds a USB-glitch throw from the lazy pre-init walk into the contract's false, like Jaguar3. Kestrel: the bring-up efuse parse already extracts the MAC at logical 0x488 and gates autoload_ok on exactly the programmed-value check; this is a route to a caller, not a new read. One constant serves both dies by vendor dispatch: mac_ax's USB efuse-info table has no 8852C entry and falls back to the 8852B offsets (reference/rtl8852cu mac_ax/efuse.c). Hardware verification, two stable doctor runs each, cross-checked against the vendor kernel driver built from reference/rtl88x2bu on the same host: - RTL8822BU 40:a5:ef:57:37:0c — matches the vendor driver's netdev MAC - Archer T3U 8c:86:dd:48:00:9d — matches the vendor driver's netdev MAC - TX50UH (8852C) cc:ba:bd:61:57:6b — stable + programmed; no same-host vendor-driver run for this unit, so its offset stands on the vendor-source dispatch above and on the same parse already feeding the on-air-working rfe/xtal/thermal fields. Its USB iSerial is the Realtek placeholder 00e04c000001 — the constant-serial premise, re-confirmed on AX silicon. - 8814AU / 8822CU regression: unchanged values. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PR Summary by QodoImplement permanent MAC identity for Jaguar2 and Kestrel devices
AI Description
Diagram
High-Level Assessment
Files changed (5)
|
Code Review by Qodo
1. Kestrel MAC needs Init
|
…yet" True on every generation — the EFUSE is only guaranteed readable on a brought-up chip, and the accessor never powers the chip on as a side effect. Kestrel serves the bring-up parse; the others' pre-init read is best-effort and degrades to false on an unpowered adapter. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
What this adds
#383 shipped
IRtlDevice::GetPermanentMacAddresson Jaguar1 and Jaguar3 and left Jaguar2 and Kestrel on the graceful default. This wires the remaining two generations — the identity is now every-generation.Jaguar2 — logical EFUSE
0x107, one offset for both dies (hal_pg.h:EEPROM_MAC_ADDR_8822BU == EEPROM_MAC_ADDR_8821CU). Served from the logical mapHalJaguar2already caches for RFE/TX-power, so post-bring-up it is a lookup; a pre-init call triggers the existing lazy walk. The device entry point serializes on_reg_muand folds a USB-glitch throw into the contract'sfalse, matching the Jaguar3 shape.Kestrel — a route, not a new read: the bring-up efuse parse already extracts the MAC at logical
0x488andautoload_okis exactly the programmed-value check. One constant serves both dies by vendor dispatch: mac_ax's USB efuse-info table has no 8852C entry and falls back to the 8852B offsets (reference/rtl8852cumac_ax/efuse.c, theelse info = efuse_info_usb_8852barm).The
IRtlDevice.hdoc drops the "expected follow-ups" paragraph — current state only; the default staysfalseso a future generation degrades gracefully.Hardware verification
Two stable
doctorruns per adapter; the Jaguar2 values are cross-checked against the vendor kernel driver built fromreference/rtl88x2buon the same host:40:a5:ef:57:37:0c8c:86:dd:48:00:9dcc:ba:bd:61:57:6bThe TX50UH has no same-host vendor-driver run; its offset stands on the vendor-source dispatch above plus the fact that the same parse already feeds the on-air-working rfe/xtal/thermal fields. Its USB iSerial is the Realtek placeholder
00e04c000001— the constant-serial premise that motivated #383, re-confirmed on AX silicon.The 8821C variant (RTL8811CU/8821CU/8821CE) shares the Jaguar2 path and constant but no unit was on the rig for this run.
Build clean, 49/49 ctest.
🤖 Generated with Claude Code