NAME
3com-3c996-to-sgi – Turning an HP A6825A into an SGI gigabit card

1. Why
IRIX only binds its tg driver to boards whose PCI subsystem ID is in if_tg.o's table. SGI's P/N 9210289 is a BCM5701 with subsystem 10a9:8011; HP's A6825A is the same BCM5701 (a rebadged 3Com 3C996B-T) with HP's ID (103c:128a) in the NVRAM. Rewrite the NVRAM and IRIX sees an SGI card.
2. What you need
- a Linux box with a PCI-X slot and ethtool (the Altix 350 here)
- the card, and a backup of its NVRAM before you touch it
- the script: tg3-sgi-recode.sh.gz on files.42718.net
3. Telling the boards apart
On the Altix the base I/O card carries the IOC4, the QLogic SCSI and the onboard BCM5701 together on bus 0001:00, so anything on another bus is an add-on card. lspci -vnn shows the subsystem:
0002:00:01.0 BCM5701 rev 15 Subsystem: Hewlett-Packard BCM5701 1000Base-T [103c:128a] 0002:00:02.0 BCM5703X rev 02 Subsystem: Broadcom NetXtreme BCM5703 [14e4:0009]
The 5703 is the same shape, same connector and same era, but the chip's own PCI device ID is baked into silicon and is not in IRIX's table. No amount of NVRAM editing helps. Only a 5701 converts.
4. What the script does
[paragraph: scan, inspect, backup with ethtool -e, patch subsystem vendor/device to 10a9/8011, recompute the manufacturing-block CRC32, give it a MAC under SGI's OUI 08:00:69, dry run, flash with ethtool -E, verify; restore puts the backup back]
# ./tg3-sgi-recode.sh scan # ./tg3-sgi-recode.sh backup eth1 # ./tg3-sgi-recode.sh dry eth1 # ./tg3-sgi-recode.sh flash eth1 --yes [paste a real run here]
A raw NVRAM dump on a 5701 is slow. It looks like a hang; it is not. Give it a few minutes before you reach for the reset button.
5. Gotchas
- 8011 is the single-port BCM5701 (P/N 9210289). 8013, which the forum
thread suggests, is the dual-port BCM5704 (P/N 9470434). The driver object settled that, not the thread.
- Keep the NVRAM dumps; they are the only way back.
- tail -c on old coreutils (SLES 11) silently returns nothing; the script
slices od output instead.
6. In the SGI
Both converted boards came up as tg0 in dave's PCI cardcage. Making the new card the primary interface is in howto/primary-interface-irix.
[hinv -c network output here]
SOURCES
- 3Com 3C996B-T 10/100/1000Mbps PCI-X RJ45, forums.sgi.sh -- the thread that started this; the NVRAM layout came from there
- IRIX's own if_tg.o, disassembled, for the authoritative list of accepted subsystem IDs
SEE ALSO
howto/primary-interface-irix, systems/dave, systems/lucy