I saw this article from a couple of years ago and wanted to share my experience building a custom firmware to get a newer revision.
The original article dealt with the tools for Windows, but I operate mostly in Linux so I'll describe those tools. First, you need to acquire all of the tools and drivers. Every kernel I have used in recent memory included the mlx4 modules by default, but many don't load mlx4_ib or ib_umad or ib_uverbs. Load these(modprobe mlx4_ib) before you get started. Next you will probably want to have infiniband_diags as this package includes ibstat. You'll also want mstflint
Once you have all the tools, find the PCI locations of the card
dmesg | grep mlx
In my case I have 2 cards a 10GbE and a QDR Infiniband card. I'll update the Infiniband card
sudo mstflint -d 19:00.0 q
So this card is a Sun rebranded Mellanox card.
We need to get the ini file to produce a new firmware:
sudo mstflint -d 19:00.0 dc > SUN0150000009.ini
The type of card is key to finding the correct firmware to download. You can get a pretty big hint from the PCI information:
lspci | grep Mellanox
You'll have to figure out what sort of card you have to download the appropriate firmware from Mellanox. In my case it just says ConnectX and the chip type is MT26428 revision a0. This along with some googling of the part number led me to the Mellanox part number of MHQH29-XSR. Go to the custom firmware page and find the card.
Download the MFT package from mellanox and install it so that we have the mlxburn tool. Then run this command to generate a new firmware image.
sudo mlxburn -wrimage sun.img -fw fw-25408-rel.mlx -conf SUN0150000009.ini
And now you can write this to the card, but first we should back up the original so we can revert if needed
sudo mstflint -d 19:00.0 ri sun-old.img
Finally write it to the card:
sudo mstflint -d 19:00.0 -i sun.img b
You can check that that burn was successful by querying the card
sudo mstflint -d 19:00.0 q
Reboot to load the new firmware.
Anyway I found that the original article didn't work for me. flint refused to read the info off of the card saying it was an unsupported device.
The original article dealt with the tools for Windows, but I operate mostly in Linux so I'll describe those tools. First, you need to acquire all of the tools and drivers. Every kernel I have used in recent memory included the mlx4 modules by default, but many don't load mlx4_ib or ib_umad or ib_uverbs. Load these(modprobe mlx4_ib) before you get started. Next you will probably want to have infiniband_diags as this package includes ibstat. You'll also want mstflint
Once you have all the tools, find the PCI locations of the card
dmesg | grep mlx
Code:
[ 18.254192] mlx4_core: Mellanox ConnectX core driver v2.2-1 (Feb, 2014)
[ 18.323748] mlx4_core: Initializing 0000:13:00.0
[ 20.798217] mlx4_core 0000:13:00.0: PCIe link speed is 5.0GT/s, device supports 5.0GT/s
[ 20.798218] mlx4_core 0000:13:00.0: PCIe link width is x8, device supports x8
[ 20.885096] mlx4_core: Initializing 0000:19:00.0
[ 23.148705] mlx4_core 0000:19:00.0: PCIe link speed is 5.0GT/s, device supports 5.0GT/s
[ 23.148707] mlx4_core 0000:19:00.0: PCIe link width is x8, device supports x8
sudo mstflint -d 19:00.0 q
Code:
Image type: FS2
FW Version: 2.9.1000
FW Release Date: 5.6.2011
Device ID: 26428
Description: Node Port1 Port2 Sys image
GUIDs: 00212800013f118a 00212800013f118b 00212800013f118c 00212800013f118d
MACs: 000000000000 000000000001
VSD:
PSID: SUN0150000009
We need to get the ini file to produce a new firmware:
sudo mstflint -d 19:00.0 dc > SUN0150000009.ini
The type of card is key to finding the correct firmware to download. You can get a pretty big hint from the PCI information:
lspci | grep Mellanox
Code:
13:00.0 Ethernet controller: Mellanox Technologies MT26448 [ConnectX EN 10GigE, PCIe 2.0 5GT/s] (rev b0)
19:00.0 InfiniBand: Mellanox Technologies MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE] (rev a0)
Download the MFT package from mellanox and install it so that we have the mlxburn tool. Then run this command to generate a new firmware image.
sudo mlxburn -wrimage sun.img -fw fw-25408-rel.mlx -conf SUN0150000009.ini
And now you can write this to the card, but first we should back up the original so we can revert if needed
sudo mstflint -d 19:00.0 ri sun-old.img
Finally write it to the card:
sudo mstflint -d 19:00.0 -i sun.img b
You can check that that burn was successful by querying the card
sudo mstflint -d 19:00.0 q
Reboot to load the new firmware.
Anyway I found that the original article didn't work for me. flint refused to read the info off of the card saying it was an unsupported device.