Unlocking Any Brand SFP modules on Intel X710

Notice: Page may contain affiliate links for which we may earn a small commission through services like Amazon Affiliates or Skimlinks.

seb101

New Member
Jun 9, 2020
6
9
3
Inspired by this post I have been investigating if it is possible to edit the NVM of Intel X710 adaptors to allow any brand of SFP module to be used. The good news is, I think it's entirely possible using similar methods to NathanA's post.

First ray of hope is that in this document: https://www.intel.com/content/dam/w...tasheets/xl710-10-40-controller-datasheet.pdf

There are multiple references to the 'qualfied module check' being something that can be enabled or disabled.

Page 136 (note: all my page references are to the PDF page index not the printed page index)

4.If link is setup for module connectivity:
• Firmware verifies that the connected module is a qualified module (when enabled).
• Based on module type, optical or direct attach, firmware configures the PCS registers and
the re-timer (when applicable).
• Firmware restarts the link setup.
If module or PHY qualification is enabled and connected device is not found in the qualified
list, firmware stops the link setup process and reports event to software.
Further reading reveals that the qualification check is indeed enabled or disabled with a flag in the NVM (EEPROM):

Page 498:
6.3.24.9 PHY capabilities misc0 (0x0008)
BitsField NameDefault NVM ValueDescription
15:13RESERVED000bReserved.
12Disable Firmware Link Management0bUsed to disable the firmware's link management and enable direct software control of the link parameters for debug.
Note:This field is preserved by the Intel NVM update tool.
11Enable Module Qualification0bWhen, set to 1b, module qualification process is enabled.
Note:This field is preserved by the Intel NVM update tool.

This is per-port on the x710 series. Interestingly the documents state the default is 0b (i.e. check is off) so Intel must force the flag to 'on' for their product firmwares. The document notes that these fields are preserved by the update tool - I beleive this is simply so that any changes that manufacturers make to these settings don't get blown away by firmware updates, not a statement that these fields cannot be changes... though we shall see.

The structure of the NVM is slightly more complex than the X520 series. I have not been able to validate yet because I do not have hardware to experiment on right now, but rather than being a fixed monolithic data structure the top level NVM is organised as a list of pointers to other memory locations.

Reverse engineering this from the bit field we need to change backwards..

  • The Enable Module Qualification field is bit 11 of the 'PHY Cababilities misc0' word (Page 496)
  • The 'PHY Capabilities misc0' word is located at offset 0x0008 of the 'PHY Capabilites Data Structure 0' (Page 494)
  • The 'PHY Capabilities Data Structure 0' is located at 0x07 of the 'EMP Settings' section. The data structures for the other ports (up to four) are at 0x08, 0x09, 0x0A. (Page 291) I am unsure at this point if these are the locations of the actual Structures or further pointers to the structures.
  • Finally Table 6-2 (Page 293) confims the pointer to the EMP Settings section is located at word 0x0F of the NVM.
So to find the right bit to change, you'd take the Pointer address located at 0x0F. Add the pointer value to it the Data Structure offset address of the port you wish to change. Add to that the misc0 word offset 0x08. Then toggle bit 11 of that word.

This is as far as I can go in theory - in the next few days I will have hardware to test with and I will update you!
 

mha

New Member
Feb 6, 2021
8
4
3
Interestingly enough I have a X710.

On my stock NVM I got a strict block for adding my Huawei 10G SM 10km modules. However, after applying NVMUpdatePackage_700_Series_v8_15.zip it would without complaint bring up the interfaces with this module. Without any EEPROM updates.

This update can be fetched from Download Non-Volatile Memory (NVM) Update Utility for Intel® Ethernet Network Adapter 700 Series

I am wondering if Intel reverted the global bit for Enable Module Qualification for this release or simply somehow whitelisted more modules?` However, as the check is done it seems just to be a bit in the NVM / EEPROM to qualify modules. Otherwise it's down to drivers to qualify them?


Code:
[  712.398555] i40e 0000:04:00.0: fw 8.13.63341 api 1.12 nvm 8.15 0x80009613 1.2829.0
[  712.503651] i40e 0000:04:00.0: MAC address: 00:1c:7f:80:b4:d9
[  712.503966] i40e 0000:04:00.0: FW LLDP is enabled
[  712.508841] i40e 0000:04:00.0 enp4s0f0: renamed from eth0
[  712.524789] i40e 0000:04:00.0: PCI-Express: Speed 5.0GT/s Width x8
[  712.524792] i40e 0000:04:00.0: PCI-Express bandwidth available for this device may be insufficient for optimal performance.
[  712.524793] i40e 0000:04:00.0: Please move the device to a different PCI-e link with more lanes and/or higher transfer rate.
[  712.533893] i40e 0000:04:00.0: Features: PF-id[0] VFs: 64 VSIs: 66 QP: 4 RSS FD_ATR FD_SB NTUPLE CloudF DCB VxLAN Geneve NVGRE PTP VEPA
[  712.548416] i40e 0000:04:00.1: fw 8.13.63341 api 1.12 nvm 8.15 0x80009613 1.2829.0
[  712.655738] i40e 0000:04:00.1: MAC address: 00:1c:7f:80:b4:da
[  712.656051] i40e 0000:04:00.1: FW LLDP is enabled
[  712.660287] i40e 0000:04:00.1: PCI-Express: Speed 5.0GT/s Width x8
[  712.660289] i40e 0000:04:00.1: PCI-Express bandwidth available for this device may be insufficient for optimal performance.
[  712.660290] i40e 0000:04:00.1: Please move the device to a different PCI-e link with more lanes and/or higher transfer rate.
[  712.660556] i40e 0000:04:00.1 enp4s0f1: renamed from eth0
[  712.660665] i40e 0000:04:00.1: Features: PF-id[1] VFs: 64 VSIs: 66 QP: 4 RSS FD_ATR FD_SB NTUPLE CloudF DCB VxLAN Geneve NVGRE PTP VEPA
 
Last edited:

tinfoil3d

QSFP28
May 11, 2020
901
427
63
Japan
Thanks the linked github unlocker worked, just required some fiddling first to figure out what's going on and what to look for.
Mine 1572 rev 02 had 000c not 000b, and it had 6b0c value, which I set to 630c, at offset 0x68f6.
Hope this helps.
I'm able to use SFP+ DACs(MT, FS, noname) and SFP+ modules but not SFP modules for whatever reason but who cares if it's 10G card, why would you put SFP in there.
Thank you.
 

mha

New Member
Feb 6, 2021
8
4
3
Thanks the linked github unlocker worked, just required some fiddling first to figure out what's going on and what to look for.
Mine 1572 rev 02 had 000c not 000b, and it had 6b0c value, which I set to 630c, at offset 0x68f6.
Hope this helps.
I'm able to use SFP+ DACs(MT, FS, noname) and SFP+ modules but not SFP modules for whatever reason but who cares if it's 10G card, why would you put SFP in there.
Thank you.
I've experienced the same. And it comes down to the qualification of the SFP and SFP+ seems to be done independently where one function checks for this register bit and the other does not. It does not make much sense to me either, but I agree that this is not a card you install to use with 1GE networking. :)

Glad it worked for you as well.
 

Gio

Member
Apr 8, 2017
83
12
8
36
Does anyone have recent experience with X710-DA2 on the latest 9.20 firmware and getting this to work? I've been unsuccessful.

Code:
root@6600:/home# ip link show enp8s0f1
4: enp8s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 3c:fd:fe:ab:e4:51 brd ff:ff:ff:ff:ff:ff
root@6600:/home# ethtool --module-info enp8s0f1
        Identifier                                : 0x03 (SFP)
        Extended identifier                       : 0x04 (GBIC/SFP defined by 2-wire interface ID)
        Connector                                 : 0x21 (Copper pigtail)
        Transceiver codes                         : 0x00 0x00 0x00 0x00 0x00 0x04 0x00 0x00 0x00
        Transceiver type                          : Passive Cable
        Encoding                                  : 0x00 (unspecified)
        BR, Nominal                               : 10300MBd
        Rate identifier                           : 0x00 (unspecified)
        Length (SMF,km)                           : 0km
        Length (SMF)                              : 0m
        Length (50um)                             : 0m
        Length (62.5um)                           : 0m
        Length (Copper)                           : 3m
        Length (OM3)                              : 0m
        Passive Cu cmplnce.                       : 0x01 (SFF-8431 appendix E) [SFF-8472 rev10.4 only]
        Vendor name                               : OEM
        Vendor OUI                                : 00:40:20
        Vendor PN                                 : SFP-H10GB-CU3M
        Vendor rev                                : 03
        Option values                             : 0x00 0x00
        BR margin, max                            : 0%
        BR margin, min                            : 0%
        Vendor SN                                 : 2106231716
        Date code                                 : 210623
root@6600:/home# dmesg | grep i40
[    1.496193] i40e: Intel(R) Ethernet Connection XL710 Network Driver
[    1.496195] i40e: Copyright (c) 2013 - 2019 Intel Corporation.
[    1.509937] i40e 0000:08:00.0: fw 9.120.73026 api 1.15 nvm 9.20 0x8000d87f 1.3353.0 [8086:1572] [8086:0008]
[    1.806150] i40e 0000:08:00.0: MAC address: xxx
[    1.806408] i40e 0000:08:00.0: FW LLDP is enabled
[    1.810786] i40e 0000:08:00.0: PCI-Express: Speed 8.0GT/s Width x4
[    1.810788] i40e 0000:08:00.0: PCI-Express bandwidth available for this device may be insufficient for optimal performance.
[    1.810789] i40e 0000:08:00.0: Please move the device to a different PCI-e link with more lanes and/or higher transfer rate.
[    1.811299] i40e 0000:08:00.0: Features: PF-id[0] VFs: 64 VSIs: 66 QP: 4 RSS FD_ATR FD_SB NTUPLE DCB VxLAN Geneve PTP VEPA
[    1.824045] i40e 0000:08:00.1: fw 9.120.73026 api 1.15 nvm 9.20 0x8000d87f 1.3353.0 [8086:1572] [8086:0008]
[    2.136433] i40e 0000:08:00.1: MAC address: xxx
[    2.136703] i40e 0000:08:00.1: FW LLDP is enabled
[    2.141055] i40e 0000:08:00.1: PCI-Express: Speed 8.0GT/s Width x4
[    2.141057] i40e 0000:08:00.1: PCI-Express bandwidth available for this device may be insufficient for optimal performance.
[    2.141059] i40e 0000:08:00.1: Please move the device to a different PCI-e link with more lanes and/or higher transfer rate.
[    2.141533] i40e 0000:08:00.1: Features: PF-id[1] VFs: 64 VSIs: 66 QP: 4 RSS FD_ATR FD_SB NTUPLE DCB VxLAN Geneve PTP VEPA
[    2.145908] i40e 0000:08:00.1 enp8s0f1: renamed from eth2
[    2.164835] i40e 0000:08:00.0 enp8s0f0: renamed from eth1
[   70.955501] i40e 0000:08:00.0 enp8s0f0: Cannot read module EEPROM memory. No module connected.
root@6600:/home# ethtool -a enp8s0f1
Pause parameters for enp8s0f1:
Autonegotiate:  off
RX:             off
TX:             off
 

nicolas9510

New Member
Dec 19, 2016
2
3
3
Found this thread when going down the rabbit hole today.
just recently got 3x x710-da2 from ebay along witih a 10gtek 1/2.5/5/10 SFP+.
i was able to update the nvram with linux to 9.3 firmware.
I did find another github with a modified x710 unlock here: GitHub - bibigon812/xl710-unlocker: Unlock Intel XL710 / X710 cards for use with any SFP+
Ran it once and if showed the 4 things it would modify.
worked perfectly and rebooted my host and link light was active.
hope this helps anyone like it did myself
 

Jakub

New Member
Oct 16, 2022
26
17
3
Found this thread when going down the rabbit hole today.
just recently got 3x x710-da2 from ebay along witih a 10gtek 1/2.5/5/10 SFP+.
i was able to update the nvram with linux to 9.3 firmware.
I did find another github with a modified x710 unlock here: GitHub - bibigon812/xl710-unlocker: Unlock Intel XL710 / X710 cards for use with any SFP+
Ran it once and if showed the 4 things it would modify.
worked perfectly and rebooted my host and link light was active.
hope this helps anyone like it did myself
How do you run this code? I can VM any flavor of Linux to run the code. It'll be going on a TrueNAS machine.
 

nicolas9510

New Member
Dec 19, 2016
2
3
3
How do you run this code? I can VM any flavor of Linux to run the code. It'll be going on a TrueNAS machine.
I believe I spun up a ubuntu vm and did the passthrough of the full device with vmware to run the code.
Or its possible i booted a live ubuntu iso on my actual host to compile and run it. something along those lines.
 

blunden

Active Member
Nov 29, 2019
711
228
43
How do you run this code? I can VM any flavor of Linux to run the code. It'll be going on a TrueNAS machine.
It will probably work in a KVM VM with passthrough, but you might as well live boot something like Ubuntu, clone the git repo and run it from there. That latter is what I did since my card was going into a Windows PC.
 

HardwareHarry

New Member
Dec 14, 2023
1
0
1
Since I have this problem and found this thread via google and it might help others as well:

1. )
Just FYI:
I received a used original intel X710-DA2 (with yottamark) with fw version 6.x from a It Re-Seller/Refurbishing Company and all cheap Amazon Tranceivers (10Gtec, H!Fiber, etc. )worked perfectly with the current drivers 28.2.1)
I updated to FW 9.30 and suddenly they all did not work anymore. Luckily I had some "Intel" FTLX8571D3BCV-IT (Shop Zupoint) from Aliexpress for about 8.26€ including Shipping laying around and they do work.(Just ordered 2 more but now they cost 8.68€/pcs).

Until now I did not find a FW Changelog/History on the Intel website to check if that "feature" was introduced with some newer FW.


2.)
Until now I did not try if a downgrade of the FW will remove the check


3.)
Found this thread when going down the rabbit hole today.
just recently got 3x x710-da2 from ebay along witih a 10gtek 1/2.5/5/10 SFP+.
i was able to update the nvram with linux to 9.3 firmware.
I did find another github with a modified x710 unlock here: GitHub - bibigon812/xl710-unlocker: Unlock Intel XL710 / X710 cards for use with any SFP+
Ran it once and if showed the 4 things it would modify.
worked perfectly and rebooted my host and link light was active.
hope this helps anyone like it did myself

As I'm a Windows guy: How do I compile/run this in Linux Mint or Ubuntu?
 
Last edited:

Jakub

New Member
Oct 16, 2022
26
17
3
Since I have this problem and found this thread via google and it might help others as well:

1. )
Just FYI:
I received a used original intel X710-DA2 (with yottamark) with fw version 6.x and all cheap Amazon Tranceivers (10Gteck, H!Fiber, etc. )worked perfectly.
I updated to FW 9.30 and suddenly they all did not work anymore. Luckily I had some "Intel" FTLX8571D3BCV-IT (Shop Zupoint) from Aliexpress for about 8.26€ including Shipping laying around and they do work.(Just ordered 2 more but now they cost 8.68€/pcs).

Until now I did not find a FW Changelog/History on the Intel website to check if that "feature" was introduced with some newer FW.


2.)
Until now I did not try if a downgrade of the FW will remove the check


3.)



As I'm a Windows guy: How do I compile/run this in Linux Mint or Ubuntu?
VM Ubuntu or boot USB. Follow this guide. I was unsure until I found that in Github. x520 is a bit easier as its a simple python script. X710 is a lot more work.
 
  • Like
Reactions: HardwareHarry

blunden

Active Member
Nov 29, 2019
711
228
43
VM Ubuntu or boot USB. Follow this guide. I was unsure until I found that in Github. x520 is a bit easier as its a simple python script. X710 is a lot more work.
That looks needlessly complicated if you use the more updated fork.

@HardwareHarry

1. Boot the latest Ubuntu (or distro of choice) from USB
2. Select Try Ubuntu to get to a desktop.
3. Open a terminal
4. Install the tools: sudo apt install git build-essential.
5. Download the code (clone the git repo): git clone https://github.com/bibigon812/xl710-unlocker.git
6. Change to the directory (folder) with the downloaded code: cd xl710-unlocker
7. Compile the code: make
8. Make the compiled program executable: chmod +x xl710_unlock
9. Run the tool as root as described in the readme, but change the end of the command to whatever the two interfaces end up being named in your particular case. :)
 
Last edited:

RedRover72

New Member
Jan 10, 2024
11
2
3
Does it need to be a genuine Intel card, or can it be one of the thousands of Dell or Lenovo rebranded Intel cards available on the bay.
 

blunden

Active Member
Nov 29, 2019
711
228
43
Does it need to be a genuine Intel card, or can it be one of the thousands of Dell or Lenovo rebranded Intel cards available on the bay.
Worked on my Dell card, so it presumably works on all OEM cards. :)

The only downside with the OEM cards is that you can't use firmware updates from Intel.com, you need to get them from the OEMs themselves.
 

tfboy

New Member
Mar 19, 2023
16
3
3
Just a bump to this post: has anyone managed to get it working or figure out how to allow 1Gb SFP to work in addition to the 10Gb SFP+ modules?
I ask because I want to use a fibre SFP provided by my ISP that runs at 1Gb and getting a 10Gb version is nigh on impossible / expensive (1Gb 1310/1550nm BiDi SFP).

My Intel X710 is in a Protectli Vault 6 box and I've engaged their support but they seem a little stumped by it. Initially, the NVM firmware version was quite old and didn't even recognise the SFP. Now I updated to the latest 9.40, it does, but refuses to bring the link up, producing ixl1_set_link: Error getting phy capabilities -37, aq error: 8 error messages. Having played aroud with different SFPs, I've come to realise that it'll only work with 10Gb SFP+ modules, the irong being that if I use a 10Gb Base-T SFP with a 1Gb link on the other end, the link comes up at 1Gb and works, but if I use a 1Gb Base-T SFP, it doesn't work at all.
 

Fmfranz

New Member
Jul 11, 2024
3
0
1
That looks needlessly complicated if you use the more updated fork.

@HardwareHarry

1. Boot the latest Ubuntu (or distro of choice) from USB
2. Select Try Ubuntu to get to a desktop.
3. Open a terminal
4. Install the tools: sudo apt install git build-essential.
5. Download the code (clone the git repo): git clone https://github.com/bibigon812/xl710-unlocker.git
6. Change to the directory (folder) with the downloaded code: cd xl710-unlocker
7. Compile the code: make
8. Make the compiled program executable: chmod +x xl710_unlock
9. Run the tool as root as described in the readme, but change the end of the command to whatever the two interfaces end up being named in your particular case. :)
Does this command need to be applied after every reboot? If not: can one revert the changes made by the unlocker?
 

blunden

Active Member
Nov 29, 2019
711
228
43
Does this command need to be applied after every reboot? If not: can one revert the changes made by the unlocker?
No, it gets written to the EEPROM to basically make it act like a card unlocked from the factory.

I haven't checked if the unlocker has implemented locking as well, but I personally see no need to ever revert the change. :) The EEPROM remains writable though, so from that standpoint it is reversible. You just potentially need to modify the tool to do it.
 

dialeantiv

New Member
Jul 12, 2024
4
0
1
Hello,

Have a couple quad port Intel X710 based NICs[Silicom
PE310G4I71L[PE310G4i71L-XR][0] on the way. And a have few questions.

1. So need to run the xl710_unlock command on each port / interface,
correct; four times in my case on each NIC?

2. Do we need to repeat the above, after updating the driver?

3. So after running the xl710_unlock command, any no name brand or brand
name transceivers should work; without buying specific Intel coded
transceivers? Like the following transceivers:

Ubiquiti UACC-CM-RJ45-MG[1] and
FS SFP-10G-T100 Generic[2].

Or transceivers coded for a specific switch, like Cisco, Mikrotik,
etc...?

Thank You


[0] https://www.silicom-usa.com/pr/serv...tworking-adapters/pe310g4i71l-server-adapter/
[1] SFP+ to RJ45 Adapter - Ubiquiti Store
[2] https://www.fs.com/products/154925.html