Crossflashing Intel official firmware on Dell / Lenovo PCIe X710-DA2 nics? Solved

I’ve PM’d you a link to eeupdate which you can use to see if it can see the device, it can also be used to dump the rom of a working device without using a hardware programmer.

I haven’t checked but I think mine was a W25Q64FV on the back of the card, so I’d suggest looking up a guide for read/writing such chips with a CH341A and SOIC8 clip there will be plenty of guides involving bios flashing etc. and what software to use.

Remove the card from the machine and be sure to check datasheets to ensure you connect to the correct pins.

I’ve never used a CH341A but there is a lot of advice to modify it to operate at 3.3V or you risk frying the chip, but there are conflicting sources saying such modification is not necessary https://www.youtube.com/watch?v=J8-Sh7DjiXw based on the evidence provided I’d be inclined to agree.

The process I’d follow is:

  • Read a working card a few times and verify the files are identical and/or use eeupdate
  • Repeat for broken card – just in case it’s ever useful, or you want to compare them, plus it may keep a record of MAC addresses
  • Flash working rom to broken card
  • See if PC can now see the broken card
  • If it works eeupdate can be used to fix/change the MAC addresses

Hello,

I’m trying to crossflash to the Lenovo Intel x710 DA2 from a Lenovo M90Q Gen 4 running Ubuntu, but I’m getting an error when performing the step:

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

This is the error I get:

./bootutil64e -NIC=2 -up=combo

Intel(R) Ethernet Flash Firmware Utility
BootUtil version 1.43.08.0
Copyright (C) 2003-2025 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 1572400B.FLB…
Filename 1572400B.FLB already exists.
(O)verwrite/proceed or (S)top execution?: o
o
saved
/
EEPROM write failed on port 2

Port Network Address Location Series WOL Flash Firmware Version
==== ============ ============== ======= === ========================== =======
1 543121342134xcxc 00000:000:31.6 Gigabit N/A FLASH Not Present
2 51234241234123 00000:001:00.0 40GbE N/A UEFI,PXE Enabled 1.1.45
3 000000000000 00000:001:00.1 40GbE N/A FLASH Unknown
root@pve1:/home/crossflash# lspci -nn | grep -i ethe
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (17) I219-LM [8086:1a1c] (rev 11)
01:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01)
01:00.1 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01)

What could be happening? I’ve flashed two cards in the past without any problems.

i try ./bootutil64e -NIC=2 -FLASHENABLE but it didn’t help

Can you think of what might be happening and how to fix it?

Thanks in advance

Could you please address me to the EFI crossflash procedure?

Thank you!

FWIW I’ve kinda managed to crossflash a HPE 562SFP+, but only with a CH341A flasher, and only the first interface works. The second interface shows up in lspci, ethtool and friends but does not detect a link.

This card has a 8MB chip. broken behavior is the same with both “8M” firmware images I’ve tried (X710DA2_9p54_CFGID7p2_J51959_Retail_8M.bin and X710DA2_9p54_CFGID7p2_J83813_OEMGEN_8M_Type1.bin).

Has anyone managed to get both ports working?

Did you just flash the nvm image with a CH341A?
Perhaps you are now missing the config area with MAC addresses, they can restored.

Do you have the original image backup?

Does ethtool -P [device] or ip a show a mac address?

If it has mac addresses, I’d just try different images until you find one that works I don’t have the files hand but I had success with the OEMGEN ones.

I first tried with nvmupdate64e but this failed miserably, leaving the card bricked. I then flashed both 8M images with a CH341A.
The MAC addresses were indeed zeroed out after the CH341A flash, but I set them back with the EFI version of eeupdate.

I do, and I flashed it back so both interfaces work again now.
The HPE firmware version and card in question:

        NVM Version            : 5.96(5.60)
        PBA                    : H44490-019

Yes, since using eeupdate I never had an issue of missing MAC addresses, my issue sems to be more subtle. Since the HPE 562SFP+ has an 8M chip, only those two images I mentioned above can fit, and I’ve tried them both. What happens to the card with either of them is:

  • lspci and ethtool show both interfaces
  • nvmupdate64e -i -l shows both interfaces
  • nvmupdate64e -rd strangely only shows one interface
  • the first physical interface doesn’t work at all
  • the second interface works, but as interface 0 (i.e. enp13s0f0np0), and what the kernel knows as interface 1 (enp13s0f1np1) doesn’t seem do react to anything and never prints anything to dmesg.

I guess something about this card’s layout might be different from what both Retail and OEMGEN images expect, and the interface mapping gets mixed up.

I was going to suggest eeupdate could reprogram the MAC addresses, but you’re already aware.

Are you flashing from Linux? I found it bricked by Dell cards but I also had access to a programmer and it made me less afraid to try any of the images since you can easily revert.

I have much better success flashing using the EFI version of the application, probably because it’s a simpler more predicatable environment.

I wouldn’t be afraid to try the 4MiB images, I’m currently running X710DA2_9p54_CFGID7p2_OEMGEN_OO which is a 4MiB image on my Dell 8MiB cards. Half the image read back is just 0xFF. The name it reports as is a little weird but both ports are working so I don’t mind.

Thanks, that sounds like a good idea. I only tried the 8M images because I assumed the size must match. The time I bricked it with nvmupdate64e was from Linux.

I’ve just checked the dump of the HPE firmware and over half the image is 0xFF.

I’ve just tried flashing a 4MB image to the chip and flashrom complains Error: Image size (4194304 B) doesn't match the expected size (8388608 B)!. Edit: I managed to add padding with dd and flash one of these with flashrom but I still have the problem with only one interface working.

Did you use flashrom or nvmupdate64e on EFI for your 4MB crossflash?

Success, finally! The right file for my HPE 562SFP+ card (model H44490) seems to be X710DA2_9p54_CFGID7p2_OEMGEN_K97470.bin. I suspect the 8M images are only meant for OCP cards since that’s how the interfaces identify once crossflashed.

Here’s the procedure, in case it may be useful to someone, with firmware version 9.54 and a CH341A programmer.

Create a 4MiB 0xFF padding file and append:

dd if=/dev/zero bs=1 count=4194304 | tr '\000' '\377' > padding.bin
cat X710DA2_9p54_CFGID7p2_OEMGEN_K97470.bin padding.bin > X710DA2_9p54_CFGID7p2_OEMGEN_K97470_padded.bin

Flash:

sudo flashrom -p ch341a_spi -c "W25Q64BV/W25Q64CV/W25Q64FV" -w X710DA2_9p54_CFGID7p2_OEMGEN_K97470_padded.bin

Then reboot into UEFI shell and update the MAC addresses (repeat for both interfaces):

eeupdate64e.efi /NIC=... /MAC=...

The interfaces end up in reverse order compared to the HPE firmware but they both work.

Would like to share my experience on crossflashing the Dell X710-T4L (brand model K5DDV). Dell’s firmware does not allow 2.5G/5G speed link so that’s why I am doing this.

I firstly followed the instructions on github by mietzen, I was using ubuntu24 with latest nvm tool (version 30.3 at the moment) but was unable to install the QV driver. Then I switched to a Ubuntu22 live disk, was able to install the QV driver and upgrade the EEPROM (using the APPS/BOOTUTIL) but the nvmupdate64e got frozen at the checking inventory process forever. Then I found that someone says better not to use the live disk as the kernel is different so i switched to complete ubuntu22 installment. This time was able to select the card entry in nvmupdate64e but it throwed an error after a long time upgrading and eventually failed (I forgot which error it was). Then the card was bricked - all LAN LEDs are solid green and when linux boots it shows the card in recovery mode, checked with dmesg. And the nvm tool shows as cannot initialize port or something. Was desperate at the moment as I didn’t have any backups but eventually decided to try my luck in EFI shell, so the card was showing as ‘recovery available’ using nvm tool in EFI shell, and finally I was able to flash the retail firmware in the EFI shell following steps mentioned in #77. The firmware I was using is the K37380_retail one.

Long story short I think the best way is to use the EFI shell. Linux flow somehow not working smoothly and I see some other people having same issue.

Thanks so much, this worked perfectly for me.

I had a dell OEM X710-DA4 so I ended up flashing X710DA4_9p54_CFGID7p2_OEMGEN_OO.bin to the NVM.

For future reference, my Vendor ID was 8086, device: 1572, ETrackID: 800075E1, PBA: J72557-002.

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 Cannot PXEboot with Intel X710 NIC (pxe structure was not found in UNDI driver code segment) - Intel Community
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.

Hi,

I got a card with the same PBA: K10958-001
Which bin file did you use? :slight_smile:

Thanks!