Skip to content

Instantly share code, notes, and snippets.

@mietzen
Last active October 28, 2025 15:04
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:

@DrEVILish
Copy link

DrEVILish commented Apr 4, 2025

Slightly borked my card I think, how do I roll back force the firmware?
Current state:

NVMUpdate version 1.42.24.2
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 Controller XL710    N/A(N/A)   154B 00:001 Update not
    Generic ID                                                   available

Device ID should be 1583

@1Butcher
Copy link

1Butcher commented Apr 9, 2025

@DrEVILish I'm facing the exact same issue after a failed try of flashing the newest firmware. Did you find some way to force flash it?

@DrEVILish
Copy link

Not yet, I'm gonna try using the EFI version of the utils to perform the rewipe, but I'm currently unsure as to which "image" or "codes" I'm supposed to use to trick it into being useful :D

@Mrdindon
Copy link

Mrdindon commented Apr 13, 2025

I don't know if someone can assist me because I flashed the wrong firmware on my Dell Y5M7N (x710DA2 dual sfp) card.

So I did flashed the 4 port firmware (X710DA4_9p53_CFGID7p2_OEMGEN_J38273) instead of (X710DA2_9p53_CFGID7p2_OEMGEN), I know - my bad. Now the flash process failed and the card is in recovery mode.
I tried reverting to the stock firmware using Dell tool but that fails as well:

./Network_Firmware_M20T0_LN_20.5.13_A00.BIN
Running validation...
This Update Package is not compatible with your system configuration.

I have bin dump made with ethtool but I don't know how I could restore it:
ethtool -e enp1s0f0 raw on > F8F21E63E7A0.bin

I got no error from that but still, the card is stuck in recovery.

I also tried to flash it in EFI mode with the same result (RECOVERY not available)

Do you think the card is permanently bricked ?

@Mrdindon
Copy link

Nevermind I was able to restore the rollback image in EFI mode finally :)

@kid
Copy link

kid commented Apr 21, 2025

@Mrdindon I'm facing the same issue, how did you manage to rollback? I don't have the bin file, but I have another card on another machine, so I guess I could dump the firmware from that one

@Mrdindon
Copy link

@kid When you initially flashed the card and it failed, you probably hit "Y" to make a backup of the current fw/cfg. grab those files, boot your system with a UEFI boot shell where you also have nvmupdate64e and restore the stock files. Then reflash whatever you want. (I can't recall because I'm not at home)

@1Butcher
Copy link

@Mrdindon I lost my backup file. Is it possible to share yours? I still know my MAC addresses, if those are needed. Thanks

@tormento
Copy link

@DrEVILish @Mrdindon @ALL can someone address me to EFI crossflash procedure?

@loreno-heer
Copy link

Anyone tried this on a WRX90E board? The NIC lists as X710-TL.

@j0927413
Copy link

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

Rather than creating a new nvmupdate.cfg, copy the original and append your ETrackID to the appropriate REPLACE block. nvmupdate64e failed to read my custom file but worked with the modified original config.

@bobafetthotmail
Copy link

posting here my journey and experiences while flashing these cards, following the guide in the OP and some other people doing it on Dell cards, and adapting it to current day firmware and some quirks I encountered

I bought dell-branded cards so they had dell firmware on them.

this is the firmware version I started with:

ethtool -i enp3s0f0np0

driver: i40e
version: 6.14.6-2-default
firmware-version: 9.00 0x8000cfed 21.5.9
expansion-rom-version:
bus-info: 0000:03:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

my current firmware version causes errors in the nvmupdate tool and prints


The configuration file could not be opened/read or a syntax error was discovered in the file

the firmware version must be updated first, update card to version

22.5.7
22.5.7, A00
01 dic 2023

https://www.dell.com/support/home/it-it/drivers/driversdetails?driverid=1R0W0

executing the linux bin in the terminal fails to find updates.

extract it to a folder and runn the nvmupdate64e tool from it.

this works and updates the card to the firmware version in the dell update package

sudo ./Network_Firmware_9NPPG_LN_22.0.9_A00.BIN --extract ./firmware
cd firmware
sudo ./nvmupdate64e

reboot the system

check what code your card is again (use right interface name, check with "ip a")


ethtool -i enp3s0f0np0

driver: i40e
version: 6.14.6-2-default
firmware-version: 9.40 0x8000e9c2 21.5.9
expansion-rom-version:
bus-info: 0000:03:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

Now it is time to crossflash the card to original Intel firmware.
Since I downloaded the Release__30.1.0.1 of the Intel Ethernet Adapter Complete Driver Pack, this is my nvmupdate.cfg
The name of the NVMimage and EEPID is changed, check the nvmupdate.cfg with all adapters


CURRENT FAMILY: 1.0.0
CONFIG VERSION: 1.14.0

BEGIN DEVICE
DEVICENAME: XL710
VENDOR: 8086
DEVICE: 1572
NVM IMAGE: X710DA2_9p54_CFGID7p2_J51959_Retail_8M.bin
EEPID: 8000FB65
REPLACES: 8000E9C2
OROM IMAGE: BootIMG.FLB
RESET TYPE: REBOOT
END DEVICE

I used the same nvmupdate64e tool from the Dell software package (it is version 1.39.68.2), copied over in the folder with EFI tools (as I was originally trying to do this with EFI tools) I didn't need to compile and install any drivers (OpenSUSE Tumbleweed), but also the person that wrote part of this guide ran the tool on debian 11 and also he did not need to compile anything.

./nvmupdate64e -rd

and after that is done and a reboot, I can see the firmware is changed and the sr-iov is now available. (I don't really need it at the moment but I might as well have all I paid for)

Bonus information: one of the two cards I bought came pre-borked (shows up as "Intel(R) Ethernet Controller XL710 N/A(N/A) 154B 00:001" as others online noticed these cards show up when borked), and I managed to resuscitate it by copying the firmware from the good card with a SPI flasher tool (a device that can read and write the flash chip) and then I used a DOS tool called eeupdate.exe (you can find it on github together with the readme that shows the options) to change the MAC addresses of the two ports so it is using its original MAC address again. In theory there is also eeupdate64e and lanconf64e for linux from some firmware update packages floating around

Bonus information 2: the Intel X710 has a feature called LLDP agent, where the card's controller will intercept and handle independently the LLDP packets sent from the switch, not allowing them to reach the OS level. This will confuse Linux's LACP bonding. So LACP bonding on Linux will be unstable if this feature is active. It must be disabled from the UEFI setup of the adapter in NIC Configuration menu (or in its bios setup menu maybe, I don't test this). I don't know if this is also an issue for Windows or other operating systems. It also may be possible to disable it in the card from inside the Linux system by sending the following command (also not tested). The command does not save the setting and must be sent on every system reboot.
sudo ethtool --set-priv-flags <interface name> disable-fw-lldp on
it can be automated with a udev rule


/etc/udev/rules.d/10-disable-fw-lldp.rules
ACTION=="add", SUBSYSTEM=="net", ENV{INTERFACE}=="*", DRIVERS=="i40e", PROGRAM="/usr/sbin/ethtool --set-priv-flags $name disable-fw-lldp on"

you can verify the settings are set with
ethtool --show-priv-flags enp1s0f0
and it will print all flags and the "disable-fw-lldp" flag will be "on" as it must be
From my tests, the UEFI setting is remembered on reboot, so it's the preferred way.

Bonus Information 3: The card's boot ROM (the UEFI/PXE boot and card settings menu under UEFI/BIOS) does not work on my Asrock a520M-HDV and Asrock B550 Pro4 boards if the "Above 4G decoding" option is enabled in the UEFI settings. This does not happen if I have another card in a pcie slot (either a GPU or a network card Asrock B550 Pro4. Seems others had similar issues see https://community.intel.com/t5/Ethernet-Products/Cannot-PXEboot-with-Intel-X710-NIC-pxe-structure-was-not-found/m-p/621304
Thankfully I only need to use the boot ROM for disabling the LLDP agent. This is is done once and then I can enable "Above 4G decoding" again.

Bonus information 4: I have replaced the old thermal paste with a Thermal Grizzly Minus Pad 8 thermal pad, as this is a relatively low power device (i.e. not a CPU/GPU). The pad is more rugged and will last longer than paste without needing maintenance.

@zongzitao
Copy link

Successed flash on Dell X710 DA2 and Cisco X710 DA4.
Use a shell is the easiest way. No driver issue.
Boot has two parts - Pre-boot and boot. Use bootutil64e (./bootutil64e -NIC=[U nic No.] -up=combo) to flash pre boot doc(BootIMG.FLB).
Then, use nvmupdate64e flash boot (Edit nvmupdate.cfg first).
Other: after flash, my Cisco SFP can't work (need change SFP's ID) on Cisco card.

@DrEVILish
Copy link

Nevermind I was able to restore the rollback image in EFI mode finally :)

Did you manage to complete the crossflash or did you still get stuck?

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