Skip to content

Instantly share code, notes, and snippets.

@mietzen
Last active March 10, 2025 16:30
Show Gist options
  • Save mietzen/736583d37a1d370273c0775aaaa57aa5 to your computer and use it in GitHub Desktop.
Save mietzen/736583d37a1d370273c0775aaaa57aa5 to your computer and use it in GitHub Desktop.
X710 OEM crossflash

How to crossflash intel X710 OEM cards

Disclaimer

ONLY do this if you understand what this script does and when you are sure that this method is applicable to your card!!!

I'm not responsible for your doings! You are flashing the firmware of your ethernet card, in the worst case you endup with a soft- or even hardbricked card! Also this might void your warrenty.

Having said this, if you are uncertain if this will work for your card be sure to dump the ROM with a RPI, RPI Pico or 3.3v moded SPI-Flash Programmer:

sudo flashrom --programmer ch341a_spi -c "W25Q64BV/W25Q64CV/W25Q64FV" -r lenovo_X710-DA2_FW9.3.bin

Repeate this at least 3 times and check that all three dumps have the same checksum, use e.g. sha256sum

Why crossflash

Many OEM (lenovo/dell/hp) ethernet x710 cards have some features disabled, in my case my LENOVO INTEL X710-DA 00YK615 doesn't support SR-IOV.

This guide tells you how to flash the original intel firmware and boot image on your card to enable all features.

Flash

You need to run all of this as root:

$ sudo -i

Download the latest intel-ethernet-adapter-complete-driver-pack, e.g. version 29.0, update the link if a newer versions exist:

$ WORKDIR=/opt/intel_x710_ethernet_fw && \
  mkdir -p $WORKDIR/download_pkg && \
  cd $WORKDIR/download_pkg && \
  wget https://downloadmirror.intel.com/816410/Release_29.0.zip

Unzip and prepare files:

$ unzip Release_*.zip && \
  rm Release_*.zip && \
  cd NVMUpdatePackage/700_Series && \
  tar -xf 700Series_NVMUpdatePackage_v*_Linux.tar.gz && \
  cd $WORKDIR && \
  VERSION=$(cat download_pkg/NVMUpdatePackage/700_Series/700Series/Linux_x64/version.txt) && \ 
  mv download_pkg/NVMUpdatePackage/700_Series/700Series/Linux_x64 $VERSION && \
  mv download_pkg/APPS/BootUtil/Linux_x64/DRIVER $VERSION/ && \
  mv download_pkg/APPS/BootUtil/Linux_x64/bootutil64e $VERSION/ && \
  rm -rf download_pkg && \
  chmod +x $VERSION/nvmupdate64e && \
  chmod +x $VERSION/bootutil64e && \
  chmod +x $VERSION/DRIVER/install

You may need to install the kernel headers if they are not present on your system:

  • debian: apt install linux-headers-amd64
  • proxmox: apt install pve-headers
  • ubuntu: apt install linux-generic
  • rocky: dnf install kernel-headers-$(uname -r)

Install the QV driver, it is needed to flash the card.

$ cd $WORKDIR/$VERSION/DRIVER && ./install
Extracting archive...OK!
Compiling the driver...OK!
Directory for driver installation does not exist...need to create it.
Directory for driver installation created successfully.
Skipping removing QV driver - it does not exist...
Copying iqvlinux.ko driver file to /lib/modules directory...OK!
Driver installation verification...Installed!

Check which is the right card:

$ cd $WORKDIR/$VERSION && ./bootutil64e

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.40.05.0
Copyright (C) 2003-2023 Intel Corporation

Type BootUtil -? for help

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   xxx     0:31.6 Gigabit N/A FLASH Not Present
  2   xxx     1:00.0 40GbE   N/A UEFI,PXE                      -------
  3   xxx     1:00.1 40GbE   N/A UEFI,PXE                      -------

Look which nic is the X710, here it is NIC 2 and 3. Now flash the cards boot image.

$ ./bootutil64e -NIC=2 -up=combo

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.40.05.0
Copyright (C) 2003-2023 Intel Corporation

Programming flash on port 2 with flash firmware image
Create restore image of NIC 2 before proceeding? (Y)es or (N)o: Y
Y

Saving flash firmware image on port 2 to file 1572600B.FLB...saved
/
Flash update successful

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   xxx     0:31.6 Gigabit N/A FLASH Not Present
  2   xxx     1:00.0 40GbE   N/A UEFI,PXE Enabled              1.1.44
  3   xxx     1:00.1 40GbE   N/A UEFI,PXE Enabled              1.1.44

Run ethtool on your nic to get the ETrackID, here it is 8000ee1c:

$ ethtool -i enp1s0f0
driver: i40e
version: 6.5.13-1-pve
firmware-version: 9.30 0x8000ee1c 1.2890.0
expansion-rom-version:
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

Backup the default config file:

$ mv nvmupdate.cfg nvmupdate.cfg.bak

and create your own, put your ETrackID into the REPLACES block.

$ cat <<EOF > nvmupdate.cfg
CURRENT FAMILY: 1.0.0
CONFIG VERSION: 1.14.0

BEGIN DEVICE
DEVICENAME: XL710
VENDOR: 8086
DEVICE: 1572
NVM IMAGE: X710DA2_9p40_CFGID7p2_J51959_Retail_8M.bin
EEPID: 8000ECCE
REPLACES: 8000EE1C
OROM IMAGE: BootIMG.FLB
RESET TYPE: REBOOT
END DEVICE
EOF

Now update the Firmware, the -rd flag resets the vendor settings:

$ ./nvmupdate64e -rd

Intel(R) Ethernet NVM Update Tool
NVMUpdate version 1.40.5.5
Copyright(C) 2013 - 2023 Intel Corporation.


WARNING: To avoid damage to your device, do not stop the update or reboot or power off the system during this update.
Inventory in progress. Please wait [.|********]


Num Description                          Ver.(hex)  DevId S:B    Status
=== ================================== ============ ===== ====== ==============
01) Intel(R) Ethernet Connection (7)      N/A(N/A)   15BC 00:000 Not supported
    I219-V
02) Intel(R) Ethernet Controller X710   9.64(9.40)   1572 00:001 Update
    for 10GbE SFP+                                               available

Options: Adapter Index List (comma-separated), [A]ll, e[X]it
Enter selection: 2
Would you like to back up the NVM images? [Y]es/[N]o: Y
Update in progress. This operation may take several minutes.
[.....-****]


Num Description                          Ver.(hex)  DevId S:B    Status
=== ================================== ============ ===== ====== ==============
01) Intel(R) Ethernet Connection (7)      N/A(N/A)   15BC 00:000 Not supported
    I219-V
02) Intel(R) Ethernet Controller X710   9.64(9.40)   1572 00:001 Update
    for 10GbE SFP+                                               successful

A power cycle is required to complete the update process.

Tool execution completed with the following status: All operations completed successfully.
Press any key to exit.

Now reboot

$ reboot

After reboot your card is now crossflashed!

$ ethtool -i enp1s0f0
driver: i40e
version: 6.5.13-1-pve
firmware-version: 9.40 0x8000ecb7 1.3429.0
expansion-rom-version:
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

All functions should be available, in my case SR-IOV:

$ lspci -vv | grep -i SR-IOV
	Capabilities: [160 v1] Single Root I/O Virtualization (SR-IOV)

Resources:

@zbugrkx
Copy link

zbugrkx commented Aug 21, 2024

Hi!

I came accross your explanation after a lot of desperate research trying to update my card, which is unfortunately a slightly different model but seems to use an identical process. I still can’t get it to work and as you seem very knowledgeable on the subject, was hoping maybe you had an idea to help?

My card is an OEM (10gtek) x550-t2 which reports the following using nvmupdate -i -l:

[00:005:00:00]: Intel(R) Ethernet Controller X550-T2
Vendor : 8086
Device : 1563
Subvendor : 1DCF
Subdevice : 0314
Revision : 1
LAN MAC : XXX
Alt MAC : XXXX
SAN MAC : FFFFFFFFFFFF
ETrackId : 80000F48
SerialNumber : 000000FFFF000000
NVM Version : 2.16(2.10)
PBA : 000000-000
VPD status : Valid
VPD size : 38
NVM update : No config file entry
checksum : Valid
OROM update : No config file entry
CIVD : 1.3602.0
PXE : 2.4.54, checksum Valid
EFI : 8.2.46, checksum None

I did modify the nvmupdate.cfg file with 80000F48 for “OEM_SAGEPOND_B0_AT2_MCTP_H49289”, assuming it was the right one (that is the part i’m a bit unsure but I actually tried to paste 80000F48 in all the replaces for AT2 entries and no difference) .

no matter what I try, it always reports no updates available. It is running 2.10 which is quite old compared to current 3.6

thanks a lot for any suggestions and taking the time to read me.
Regards

@joat786
Copy link

joat786 commented Jan 15, 2025

QV driver install fails always. Tried Ubuntu, Proxmax and Debian. Same error. Where did I do wrong? Which O/S did you use to create these instructions? TIA.

root@debian12:/# cd $WORKDIR/$VERSION/DRIVER && ./install
Extracting archive...OK!
Compiling the driver...Error: make: Entering directory '/opt/intel_x710_ethernet/DRIVER/iqvlinux/src/linux/driver'
/DRIVER/iqvlinux/src/linux/driver' cannot contain spaces nor colons. Rename directory or move sources to another path.  Stop.
/DRIVER/iqvlinux/src/linux/driver'l_x710_ethernet_fw/v9.53
Error: unable to find driver file (iqvlinux.ko) in /opt/intel_x710_ethernet_fw/v/DRIVER/iqvlinux/src/linux/driver

@mietzen
Copy link
Author

mietzen commented Jan 15, 2025

I used debian, can you type set -xe in the terminal you are using and paste all the output.

And please use markdown code formatting .

@joat786
Copy link

joat786 commented Jan 15, 2025

set -xe gives no output. I manually unzipped the 29.5.zip file without any $WORKDIR/$VERSION then the qv driver installed fine. Now I am getting this error.

cd $WORKDIR/$VERSION && ./bootutil64e

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.40.05.0
Copyright (C) 2003-2023 Intel Corporation

Type BootUtil -? for help

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   (Cannot initialize adapter)
  2   (Cannot initialize adapter)

I saved the bin file from the modded CH314a. Do you think I should restore it? If yes, is this command correct? sudo flashrom --programmer ch341a_spi -c "W25Q64BV/W25Q64CV/W25Q64FV" -w mySavedx710.bin

@mietzen
Copy link
Author

mietzen commented Jan 16, 2025

set -xe gives no output. I manually unzipped the 29.5.zip file without any $WORKDIR/$VERSION then the qv driver installed fine. Now I am getting this error.

cd $WORKDIR/$VERSION && ./bootutil64e

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.40.05.0
Copyright (C) 2003-2023 Intel Corporation

Type BootUtil -? for help

Port Network Address Location Series  WOL Flash Firmware                Version
==== =============== ======== ======= === ============================= =======
  1   (Cannot initialize adapter)
  2   (Cannot initialize adapter)

I saved the bin file from the modded CH314a. Do you think I should restore it? If yes, is this command correct? sudo flashrom --programmer ch341a_spi -c "W25Q64BV/W25Q64CV/W25Q64FV" -w mySavedx710.bin

You don’t need to restore the card unless you tried flashing it with:

./bootutil64e -NIC=2 -up=combo

or

$ ./nvmupdate64e -rd

the flashrom command looks, but only do this if you execute one of the two commands above

@luckylinux
Copy link

I had so far good Experiences with Mellanox Firmwares but to be honest this Intel X710-DA2 Firmware Update looks quite scary.

Based on your suggestions I ordered a couple SOIC8 Clips from Aliexpress (I hope at least 1 of them is correct since they are all advertised as SOIC8/SOP8 but it's NOT the same Pitch) and will probably wait until I get them and are able to download a Backup from the Chip first.

In my case it's a Dell X710-DA2:

root@LiveTools1:/# ./nvmupdate64e -i -l
Inventory
[00:001:00:00]: Intel(R) Ethernet Converged Network Adapter X710
	Flash inventory started.
	Shadow RAM inventory started.
	Shadow RAM inventory finished.
	Flash inventory finished.
	OROM inventory started.
	OROM inventory finished.
[00:001:00:01]: Intel(R) Ethernet Converged Network Adapter X710
	Device already inventoried.
[00:001:00:00]: Intel(R) Ethernet Converged Network Adapter X710
	Vendor                 : 8086
	Device                 : 1572
	Subvendor              : 8086
	Subdevice              : 0006
	Revision               : 1
	LAN MAC                : F8F21E0A56F0
	Alt MAC                : 000000000000
	SAN MAC                : F8F21E0A56F1
	ETrackId               : 80002E8C
	SerialNumber           : F0560AFFFF1EF2F8
	NVM Version            : 5.64(5.40)
	PBA                    : H26869-006
	VPD status             : Valid
	VPD size               : 303
	NVM update             : No config file entry
	  checksum             : Valid
	OROM update            : No config file entry
	  CIVD                 : 18.0.14
	  PXE                  : 1.0.54, checksum Not Relevant
	  ISCSI                : 3.1.13, checksum Not Relevant
	  EFI                  : 2.1.2, checksum None
	  SMCLP                : 3.0.75, checksum Valid
[00:001:00:01]: Intel(R) Ethernet Converged Network Adapter X710
	Vendor                 : 8086
	Device                 : 1572
	Subvendor              : 8086
	Subdevice              : 0000
	Revision               : 1
	LAN MAC                : F8F21E0A56F2
	Alt MAC                : 000000000000
	SAN MAC                : F8F21E0A56F3
	ETrackId               : 80002E8C
	SerialNumber           : F0560AFFFF1EF2F8
	NVM Version            : 5.64(5.40)
	PBA                    : H26869-006
	VPD status             : Valid
	VPD size               : 303
	NVM update             : No config file entry
	  checksum             : Valid
	OROM update            : No config file entry
	  CIVD                 : 18.0.14
	  PXE                  : 1.0.54, checksum Not Relevant
	  ISCSI                : 3.1.13, checksum Not Relevant
	  EFI                  : 2.1.2, checksum None
	  SMCLP                : 3.0.75, checksum Valid

Intel(R) Ethernet NVM Update Tool
NVMUpdate version 1.41.3.4
Copyright(C) 2013 - 2024 Intel Corporation.


WARNING: To avoid damage to your device, do not stop the update or reboot or power off the system during this update.
Inventory in progress. Please wait [**|.......]


Num Description                          Ver.(hex)  DevId S:B    Status
=== ================================== ============ ===== ====== ==============
01) Intel(R) Ethernet Converged         5.64(5.40)   1572 00:001 Update        
    Network Adapter X710                                         available     
02) Intel(R) I210 Gigabit Network         N/A(N/A)   1533 00:003 Update not    
    Connection                                                   available     
03) Intel(R) I210 Gigabit Network         N/A(N/A)   1533 00:004 Update not    
    Connection                                                   available     
04) Intel(R) Gigabit 4P I350-t Adapter    N/A(N/A)   1521 00:005 Update not    
                                                                 available     

Options: Adapter Index List (comma-separated), [A]ll, e[X]it
root@LiveTools1:/# ethtool -i enp1s0f0np0
driver: i40e
version: 6.11.5+bpo-amd64
firmware-version: 5.40 0x80002e8c 18.0.14
expansion-rom-version: 
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
root@LiveTools1:/# ethtool -i enp1s0f1np1
driver: i40e
version: 6.11.5+bpo-amd64
firmware-version: 5.40 0x80002e8c 18.0.14
expansion-rom-version: 
bus-info: 0000:01:00.1
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

The main Complain I have with the current Firmware is that it's so SLOW. Less than 2.5 gbps, sometimes less than 1.0 gbps.

ASPM L1 is Enabled and works (eh ... that was the whole Point of getting the Intel X710-DA2 over some Mellanox ConnectX2/3/4, although the Mellanox ConnectX-4 LX "kinda" works in PCH/DMI Slot).

Did you experience any speed Improvement besides SR-IOV ?

Is ASPM L1 still working for you (is your CPU Package able to attain at least PC6/PC7 or are you stuck at PC2/PC3) ?

I cannot reply on the Level1Techs Forums because apparently my Account was put on Hold for almost 1 Month now 😞.

@mietzen
Copy link
Author

mietzen commented Jan 25, 2025

ASPM L1 is working with my Lenovo Card I'm mostly idling in C7. Speed is as expected with DAC Cabling 9.4-ish GBit/s - Can't complain. I recently got a very good deal on two more Lenovo cards, but hadn't any time yet to flash them.

@luckylinux
Copy link

I tried DAC Cabling as well as SFP+ LR Transceiver over OS2 Fiber ... Same disappointing Results 😢.

But I'd say better to wait until I get the SOIC8 Clip to take a backup, before updating the Firmware, right ?

Or should I update the FW to Dell-branded latest 23.x like this ?

@mietzen
Copy link
Author

mietzen commented Jan 25, 2025

Or should I update the FW to Dell-branded latest 23.x like this ?

I did the same with the lenovo card, this "should" be safe. It's a good test to make sure the Card is not somehow damaged. Getting only 2.5 GBit with DAC Cabeling, sound definitely fishy.

Edit: Have you tried it on different machines / PCI-E Slots?

BTW.: Your Level1Techs Account seem pretty empty / fresh. It shows no post / topics. Sure that it is not just limited functionality? I had to do this discobot tutorial to be able to post links etc. Just message the Bot 😉

@luckylinux
Copy link

luckylinux commented Jan 25, 2025

I think I tried in different PCIe Slots for ASPM, but not for the Speed.

EDIT1:
I tried several NICs (Dell Intel X710-DA2) in several Motherboards and the Result was consistently bad. So it's maybe a bad Firmware or possibly 2 Hosts both with ASPM Activated having very bad Performance when running iperf3 (also with Parallel Streams, parallel Processes, etc).

Regarding the Forum ...

I was trying to reply for a Mellanox ConnectX-4 LX Firmware Flashing post by providing Instructions since I was dealing with that Issue a few Weeks ago.

I received a Private Message from Wendell back then saying "Account temporarily on hold". Well after 4 Weeks of nothing happening and today I wanted to reply to your Thread, I just message Wendell back. Not that I hope anything is going to change though ...

And Today's Wendell's Message "Thanks for spending time with us" again I cannot even start new Topics, let alone reply to them.

Hey there. We see you’ve been busy reading, which is fantastic, so we’ve promoted you up a trust level!
We’re really glad you’re spending time with us and we’d love to know more about you. Take a moment to fill out your profile, or feel free to start a new topic 1.

@mietzen
Copy link
Author

mietzen commented Jan 25, 2025

I just message Wendell back.

Try sending a message to the @moderators group.

@luckylinux
Copy link

luckylinux commented Jan 25, 2025

Thanks for the @moderators Tip, I sent them a message 😃.

It might either be the Switch (Mikrotik CRS309-1G-8S+IN) or the other NIC running the older FW on the other Server I was testing against.

With some Tricks I tested on the same NIC (Port 1 to Port 2) and it achieves roughly 18 gbps combined, so that seems to be working:

Iteration 19
	Interface 1 RX Bandwidth: 9.424 gbps
	Interface 1 TX Bandwidth: .024 gbps
	Interface 2 RX Bandwidth: .024 gbps
	Interface 2 TX Bandwidth: 9.416 gbps
	Total Bandwith across Interface 1 & Interface 2: 18.888 gbps

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment