Fix for unsupported SFP+ on X553 10GE NIC / C3758R SoC

This is my fix for unsupported SFP+ on X553 chipset, ixgbe, on Debian, tested on 13 (trixie), 12 (bookworm) and 11 (bullseye), Proxmox PVE 8


Download, patch and compile the latest driver ixgbe 5.20.9 from Intel

The patch ixgbe_param.c.diff will make unsupported modules be the default behaviour:
     
310c310
< 	    "SFP+ modules on 82599 based adapters, default 0 = Disable");
---
> 	    "SFP+ modules on 82599 based adapters, default 1 = Enable");
1138,1139c1138,1139
< 			.err  = "defaulting to Disabled",
< 			.def  = OPTION_DISABLED
---
> 			.err  = "defaulting to Enabled",
> 			.def  = OPTION_ENABLED
1151c1151
< 				adapter->hw.allow_unsupported_sfp = false;
---
> 				adapter->hw.allow_unsupported_sfp = true;
1155c1155
< 				adapter->hw.allow_unsupported_sfp = false;
---
> 				adapter->hw.allow_unsupported_sfp = true;

Download the driver and the pacth

# wget https://downloadmirror.intel.com/825849/ixgbe-5.20.9.tar.gz

# wget https://tfr.org/ixgbe_param.c.diff


Unpack the driver and apply the patch

# tar -zxf ixgbe-5.20.9.tar.gz

# patch ixgbe-5.20.9-org/src/ixgbe_param.c ixgbe_param.c.diff

Compile the driver

# cd ixgbe-5.20.9

# make clean
# make
# make install

Make sure the allow_unsupported_sfp option is set in /etc/modprobe.d/ixgbe.conf and /etc/default/grub

# echo "options ixgbe allow_unsupported_sfp=1,1,1,1" > /etc/modprobe.d/ixgbe.conf

# nano /etc/default/grub

Find the GRUB_CMDLINE_LINUX_DEFAULT option and set modify it to

     GRUB_CMDLINE_LINUX_DEFAULT="quiet ixgbe.allow_unsupported_sfp=1,1,1,1"

Then generate new grub boot config:

# update-grub2

Reload the module, a reboot may be required

# rmmod ixgbe
# modprobe ixgbe

Check to make sure SFP ports have the correct flag set to allow unsupported brands

Verify by running (replace X with interface number):

# ethtool -e enoX offset 0x58 length 1

Offset Values
------ ------
0x0058: fd


If the valude is not fd, run the command below:

# ethtool -E enoX magic 0x15c48086 offset 0x58 value 0xfd


And now we should get link up on the SFP+ ports, we can test with:
(In this case I only have an SFP+ module in first port)

# for x in `ls -1 /proc/sys/net/ipv4/conf/ | grep eno` ; do ip link set $x up ; ip link show $x ; done

6: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 20:7c:14:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    altname enp11s0f0
8: eno2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 20:7c:14:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    altname enp11s0f1
9: eno3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 20:7c:14:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    altname enp12s0f0
10: eno4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 20:7c:14:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    altname enp12s0f1


Tested with 10+ models of uncoded/randomly coded Chinesium SFP+ DAC cables, SFP+ BiDi 10/20/60/80km, SFP+ 1310 10km, SFP+ TX (rj45) 30m from Aliexpress.



Published 2024-06-30 tiamo@tfr.org

Tags: Q203XXG9, Q20331G9 S10, Q20331G9 1U, QDNV01, Intel(R) Atom(TM) CPU C3758R, Ethernet controller: Intel Corporation Ethernet Connection X553 10 GbE SFP+, C3000