Updating the Firmware on a Myricom NIC

So you bought a used 10G network card, probably for cheap because it's old, really obscure and information is sparse? Welcome to my world!

This is a 10G network card designated 10G-PCIE-8B-S made by Myricom. It has one SFP+ slot, no module vendor lock-in and reasonable power usage. It seems like the primary usage was as an add-on card to Mac systems, but since support for it was stopped with Big Sur, they pop up on local marketplaces from time to time. I picked mine up for a whopping 9€ and got to work.

The first showstopper was that Linux just didn't want to boot with this card, regardless of which live system with a reasonably new Kernel I tried. Windows 10 booted without a problem though, so that's our starting point. We'll just need some drivers from Myricom, right?

Well, Myricom apparently got bought by a company named ARIA cybersecurity solutions and they thankfully still provide drivers and software for these old cards. You'll need the 64 bit drivers for Windows in the "Myri10G Drivers and Tools"-section.
At this point I had a working network connection on Windows 10. Great, but I want to use the card in a Linux system - how do I do that?

First some theory: the card has an onboard "EEPROM" (which is actually a W25Q80 SPI flash chip) that contains the firmware and an optional boot ROM section. The firmware has a loader integrated and on power up the controller loads the firmware into a SRAM section.
When a NIC driver gets loaded by the operating system, the firmware in the SRAM is replaced by the driver. Apparently there are some version restrictions in place: The card will not accept the newest firmware loaded into SRAM by the driver if the firmware in the EEPROM is too old. This is likely the reason why the Linux Kernel stumbles over the card at boot time.

Updating the firmware

Luckily Myricom - or ARIA - provide a way to update the firmware in the EEPROM. You'll need the 64 bit Toolkit (A, B & C Class) in the "Myri10G Drivers and Tools"-section from the download page for that. After installation you'll get a bunch of executables, a firmware file and a bunch of boot ROMS in C:\Program Files\Myricom\uba-tools-x64\

Take a look around with an administrator shell - there's a couple of tools to play with e.g. myri_info to get information about the card and the currently installed MCP (=firmware).

To upgrade the fimware, there's a tool named ze-upgrade. Basic usage only needs one parameter - the name of the firmware file. For some operations this tool needs to be called with its full path, so the complete call to upgrade is: "C:\Program Files\Myricom\uba-tools-x64\ze-upgrade.exe" "C:\Program Files\Myricom\uba-tools-x64\myri-eeprom-1.4.58.mcp2"
The card has to be inactive for this, so either unplug your copper/fibre cable or deactivate the card.

ze-upgrade also allows to integrate a boot ROM into the EEPROM. This is accomplished with the -R parameter and one of the provided ROMs. None of the EFI-Roms actually worked for me and integrating a iPXE build for this NIC doesn't seem to work with this tool, but here's a complete call for brevity: "C:\Program Files\Myricom\uba-tools-x64\ze-upgrade.exe" -R "C:\Program Files\Myricom\uba-tools-x64\rom\efi\MyriSnpX64.rom" "C:\Program Files\Myricom\uba-tools-x64\myri-eeprom-1.4.58.mcp2".

You can check the result with myri_info to make sure the latest firmware is installed. It might take a reboot for it to take effect.

After that the card works flawlessly for me, using a recent Linux kernel with the built-in driver. No driver and/or firmware hackery needed.