Intel unsupported sfp: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 25: Строка 25:
 
Тут нужно указать список если более чем одна карта (или порт?)
 
Тут нужно указать список если более чем одна карта (или порт?)
   
  +
  +
==<code>x520 Unlocker</code>==
  +
  +
<BR>
  +
Последний бит должен быть установлен 1 (в примере уже установлен, в обоих случаях )
  +
<PRE>
  +
ethtool -e enp3s0f1 offset 0x58 length 1
  +
Offset Values
  +
------ ------
  +
0x0058: fd
  +
</PRE>
  +
<PRE>
  +
ethtool -e enp7s0f0 offset 0x58 length 1
  +
Offset Values
  +
------ ------
  +
0x0058: ff
  +
</PRE>
  +
  +
Все манипуляции проводить только с 1 битом, например если было значение <code>fe</code>
  +
<BR>
  +
( Бинарное <code>11111110</code> ) то записать следует <code>ff</code>( Бинарное <code>11111111</code>
  +
  +
Что бы не возиться руками все те же манипуляции можно сделать скриптом
   
 
{{#spoiler:show=1|
 
{{#spoiler:show=1|
   
 
<PRE>
 
<PRE>
  +
cat intel_x520_patcher.py
  +
#!/usr/bin/env python3
  +
#
  +
# Simple Intel x520 EEPROM patcher
  +
# Modifies the EEPROM to unlock the card for non-intel branded SFP modules.
  +
#
  +
# Copyright 2020,2021,2022 Andreas Thienemann <andreas@bawue.net>
  +
#
  +
# Licensed under the GPLv3
  +
#
  +
# Based on research described at https://forums.servethehome.com/index.php?threads/patching-intel-x520-eeprom-to-unlock-all-sfp-transceivers.24634/
  +
#
  +
# Quick explanation of what's going on:
  +
# Looking at the Intel driver at e.g. https://elixir.bootlin.com/linux/v5.8/source/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h#L2140 we can see
  +
# that the bit 0x1 at Address 0x58 contains a configuration setting whether the card allows any SFP modules or if Intel specific ones are enforced
  +
# by the driver.
  +
#
  +
# Addr Bitstring
  +
# 0x58 xxxxxxx0 means Intel specific SFPs
  +
# 0x58 xxxxxxx1 means any SFP is allowed.
  +
#
  +
# Using the parameter allow_unsupported_sfp for the kernel module we can tell the driver to accept any SFPs.
  +
# But this tool will flip the right bit 1 to make that change permanent in the configuration bits in the EEPROM,
  +
# thus making kernel module parameters unnecessary.
  +
#
  +
  +
import subprocess
  +
import sys
  +
  +
try:
  +
intf = sys.argv[1]
  +
except IndexError:
  +
print("%s <interface>" % sys.argv[0])
  +
sys.exit(255)
  +
  +
try:
  +
with open("/sys/class/net/%s/device/vendor" % intf) as f:
  +
vdr_id = f.read().strip()
  +
  +
with open("/sys/class/net/%s/device/device" % intf) as f:
  +
dev_id = f.read().strip()
  +
except IOError:
  +
print("Can't read interface data.")
  +
sys.exit(2)
  +
  +
if vdr_id not in ('0x8086') or dev_id not in ('0x10fb', '0x154d'):
  +
print("Not a recognized Intel x520 card.")
  +
sys.exit(3)
  +
  +
  +
output = subprocess.check_output(['ethtool', '-e', intf, 'offset', '0x58', 'length', '1'])
  +
print(output)
  +
v = output.strip().decode('utf-8').split('\n')
  +
print(v)
  +
val = output.strip().decode('utf-8').split('\n')[-1].split()[-1]
  +
val_bin = int(val, 16)
  +
  +
  +
print("EEPROM Value at 0x58 is 0x%s (%s)" % (val, bin(val_bin)))
  +
if val_bin & 0b00000001 == 1:
  +
print("Card is already unlocked for all SFP modules. Nothing to do.")
  +
exit(1)
  +
if val_bin & 0b00000001 == 0:
  +
print("Card is locked to Intel only SFP modules. Patching EEPROM...")
  +
new_val = val_bin | 0b00000001
  +
print("New EEPROM Value at 0x58 will be %s (%s)" % (hex(new_val), bin(new_val)))
  +
  +
magic = "%s%s" % (dev_id, vdr_id[2:])
  +
cmd = ['ethtool', '-E', intf, 'magic', magic, 'offset', '0x58', 'value', hex(new_val), 'length', 1]
  +
print("Running %s" % " ".join(cmd))
  +
#subprocess.call(cmd)
  +
print("Reboot the machine for changes to take effect...")
 
</PRE>
 
</PRE>
 
}}
 
}}

Версия 12:05, 25 февраля 2024


Ошибка ixgbe failed to load because an unsupported SFP+ module type was detected

x520

  • файл /etc/default/grub.d/60_custom.cfg
GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX ixgbe.allow_unsupported_sfp=1"

Или если более чем одна карта - ixgbe.allow_unsupported_sfp=1,1,1,1

  • Запустить update-grub
  • Файл /etc/modprobe.d/ixgbe.conf
options ixgbe allow_unsupported_sfp=1,1,1,1

Тут нужно указать список если более чем одна карта (или порт?)


x520 Unlocker


Последний бит должен быть установлен 1 (в примере уже установлен, в обоих случаях )

ethtool -e enp3s0f1  offset 0x58 length 1
Offset		Values
------		------
0x0058:		fd
ethtool -e enp7s0f0 offset 0x58 length 1
Offset		Values
------		------
0x0058:		ff

Все манипуляции проводить только с 1 битом, например если было значение fe
( Бинарное 11111110 ) то записать следует ff( Бинарное 11111111

Что бы не возиться руками все те же манипуляции можно сделать скриптом

xl710