这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

HP544+ 网卡固件

介绍HP544+ 网卡固件的下载、修改和刷新

1 - 查看固件

介绍MFT工具软件的安装和使用,查看当前固件信息

介绍

MFT 是 Nvidia Firmware Tools (Mellanox Firmware Tools),包含多个工具,日常主要用到的是:

  1. mst

    该工具提供以下功能:

    • 启动/停止寄存器访问驱动程序
    • 列举可用的mst设备
  2. flint

    该工具可将固件二进制镜像或扩展ROM镜像刻录到NVIDIA网络适配器/网关/交换机设备的闪存设备中。它包括对刻录的固件镜像和二进制镜像文件的查询功能。

下载

下载地址: NVIDIA Firmware Tools (MFT)

在页面中的 MFT Download Center 下找到对应的平台,一般常用的就是 windows 和 linux。

注意:hp544+ 等 cx3 pro 的网卡因为已经结束维护周期,新版本的 mft 已经不再支持这些网卡, 体现在 mft 安装完成后,执行 mst status 时会无法找到设备。

mst status
MST modules:
------------
    MST PCI module is not loaded
    MST PCI configuration module is not loaded

PCI Devices:
------------

	No devices were found.

因此,对于这些老的网卡,要安装旧的版本,如 4.24 版本。

对于 cx4 / cx5 等新一点的网卡,可以安装最新版本。

安装

windows安装

直接打开下载的 WinMFT_x64_4_24_0_72.exe 安装即可,默认安装路径为 C:\Program Files\Mellanox\WinMFT

linux安装

以 ubuntu 为例,

$ wget --no-check-certificate https://www.mellanox.com/downloads/MFT/mft-4.24.0-72-x86_64-deb.tgz
$ tar xvf mft-4.24.0-72-x86_64-deb.tgz
$ cd mft-4.24.0-72-x86_64-deb
# 如果缺少依赖包会导致安装失败,可以先apt命令安装以下包
$ sudo apt-get install gcc make dkms
$ sudo ./install.sh
-I- Removing mft external packages installed on the machine
-I- Installing package: /home/sky/hp544/mft-4.24.0-72-x86_64-deb/SDEBS/kernel-mft-dkms_4.24.0-72_all.deb
-I- Installing package: /home/sky/hp544/mft-4.24.0-72-x86_64-deb/DEBS/mft_4.24.0-72_amd64.deb
-I- In order to start mst, please run "mst start".

重新安装

在 pve 下遇到安装时正常使用,后续不知道为什么突然无法使用了,报错如下:

mst start  
Starting MST (Mellanox Software Tools) driver set
Loading MST PCI modulemodprobe: FATAL: Module mst_pci not found in directory /lib/modules/6.5.13-1-pve
 - Failure: 1
Loading MST PCI configuration modulemodprobe: FATAL: Module mst_pciconf not found in directory /lib/modules/6.5.13-1-pve
 - Failure: 1
Create devices

mst_pci driver not found
Unloading MST PCI module (unused)modprobe: FATAL: Module mst_pci not found.
 - Failure: 1
Unloading MST PCI configuration module (unused)modprobe: FATAL: Module mst_pciconf not found.
 - Failure: 1

解决的方式是重新安装 mft 工具,就可以恢复正常使用。

启动

在 linux 下需要运行如下命令启动 mst (windows 下不需要):

sudo mst start

Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices

使用

所有工具都有权限要求,在 windows 下打开 cmd 时必须选择以管理员身份运行 cmd ,linux下需要用到 sudo。

mst工具

mst status 用来查看当前的网卡情况,linux下是这样:

sudo mst status
MST modules:
------------
    MST PCI module loaded
    MST PCI configuration module loaded

MST devices:
------------
/dev/mst/mt4103_pciconf0         - PCI configuration cycles access.
                                   domain:bus:dev.fn=0000:04:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                   Chip revision is: 00
/dev/mst/mt4103_pciconf1         - PCI configuration cycles access.
                                   domain:bus:dev.fn=0000:14:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                   Chip revision is: 00
/dev/mst/mt4103_pciconf2         - PCI configuration cycles access.
                                   domain:bus:dev.fn=0000:1d:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                   Chip revision is: 00
/dev/mst/mt4103_pci_cr0          - PCI direct access.
                                   domain:bus:dev.fn=0000:04:00.0 bar=0xfe700000 size=0x100000
                                   Chip revision is: 00
/dev/mst/mt4103_pci_cr1          - PCI direct access.
                                   domain:bus:dev.fn=0000:14:00.0 bar=0xfd900000 size=0x100000
                                   Chip revision is: 00
/dev/mst/mt4103_pci_cr2          - PCI direct access.
                                   domain:bus:dev.fn=0000:1d:00.0 bar=0xfd100000 size=0x100000
                                   Chip revision is: 00

我这里插了三块卡,所以出来的信息比较多,如果只有一块网卡,则应该是这样:

sudo mst status
MST modules:
------------
    MST PCI module loaded
    MST PCI configuration module loaded

MST devices:
------------
/dev/mst/mt4103_pciconf0         - PCI configuration cycles access.
                                   domain:bus:dev.fn=0000:04:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                   Chip revision is: 00
                                   Chip revision is: 00
/dev/mst/mt4103_pci_cr0          - PCI direct access.
                                   domain:bus:dev.fn=0000:04:00.0 

windows下输出内容类似,只是 devices 信息中,"/dev/mst/mt4103_pci_cr0" 会变成 “mt4103_pci_cr0”。

mst status

MST devices:
------------
  mt4103_pci_cr0
  mt4103_pciconf0

mlxfwmanager工具

mlxfwmanager工具可以用来查询当前固件信息:

sudo mlxfwmanager
Querying Mellanox devices firmware ...

Device #1:
----------

  Device Type:      ConnectX3Pro
  Part Number:      764285-B21_Ax
  Description:      HP InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP Adapter
  PSID:             HP_1380110017
  PCI Device Name:  /dev/mst/mt4103_pci_cr2
  Port1 MAC:        e0071b783ea1
  Port2 MAC:        e0071b783ea2
  Versions:         Current        Available     
     FW             2.42.5700      N/A           
     CLP            8025           N/A           
     PXE            3.4.0754       N/A           
     UEFI           14.11.0049     N/A           

  Status:           No matching image found

FW 2.42.5700 N/A 这里显示的就是当前设置的固件版本。5700是最新的固件版本,有些老一点的固件会显示为类似 FW 2.42.5016 N/A

注意:在 linux 下运行时要 sudo,不然没有权限会显示没有设备的信息,容易被误导:

mlxfwmanager  
-E- No devices found or specified, mst might be stopped, run 'mst start' to load MST modules
➜  mft-4.24.0-72-x86_64-deb sudo mlxfwmanager
Querying Mellanox devices firmware ...

类似的,在 windows 下打开 cmd 时必须选择以管理员身份运行 cmd 。

mlxconfig

mlxconfig工具用于修改网卡的设置,常见命令有:

查询设置

windows下:

mlxconfig -d mt4103_pci_cr0 query

linux下:

sudo mlxconfig -d /dev/mst/mt4103_pci_cr0 query

sudo mlxconfig -d /dev/mst/mt4103_pci_cr0 query

Device #1:
----------

Device type:    ConnectX3Pro    
Device:         /dev/mst/mt4103_pci_cr0

Configurations:                                      Next Boot
         SRIOV_EN                                    True(1)         
         NUM_OF_VFS                                  16              
         WOL_MAGIC_EN_P2                             True(1)         
         LINK_TYPE_P1                                ETH(2)          
         PHY_TYPE_P1                                 XFI(2)          
         XFI_MODE_P1                                 _10G(0)         
         FORCE_MODE_P1                               False(0)        
         LINK_TYPE_P2                                ETH(2)          
         PHY_TYPE_P2                                 XFI(2)          
         XFI_MODE_P2                                 _10G(0)         
         FORCE_MODE_P2                               False(0)        
         LOG_BAR_SIZE                                5               
         BOOT_PKEY_P1                                0               
         BOOT_PKEY_P2                                0               
         BOOT_OPTION_ROM_EN_P1                       True(1)         
         BOOT_VLAN_EN_P1                             False(0)        
         BOOT_RETRY_CNT_P1                           0               
         LEGACY_BOOT_PROTOCOL_P1                     PXE(1)          
         BOOT_VLAN_P1                                1               
         BOOT_OPTION_ROM_EN_P2                       True(1)         
         BOOT_VLAN_EN_P2                             False(0)        
         BOOT_RETRY_CNT_P2                           0               
         LEGACY_BOOT_PROTOCOL_P2                     PXE(1)          
         BOOT_VLAN_P2                                1               
         IP_VER_P1                                   IPv4(0)         
         IP_VER_P2                                   IPv4(0)         
         CQ_TIMESTAMP                                True(1)         
         STEER_FORCE_VLAN                            False(0)

重置设置

windows下:

mlxconfig -d mt4103_pci_cr0 reset

linux下:

sudo mlxconfig -d /dev/mst/mt4103_pci_cr0 reset

切换IB/Ethernet模式

windows下:

mlxconfig -d mt4103_pci_cr0 set LINK_TYPE_P1=2  # 1. ib模式 2. eth模式 3. vpi 模式 
mlxconfig -d mt4103_pci_cr0 set LINK_TYPE_P2=2

linux下:

sudo mlxconfig -d /dev/mst/mt4103_pciconf0 set LINK_TYPE_P1=2
sudo mlxconfig -d /dev/mst/mt4103_pciconf0 set LINK_TYPE_P2=2

flint工具

flint工具用于刷新网卡的固件,后续详细介绍。

2 - 下载固件

介绍如何下载hp544+网卡的固件

HPE 官方下载

HPE 官方下载页面

Product Detail - HPE FDR InfiniBand Adapters | HPE Support

Select Model 中选择 “HPE InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP Adapter”,列出来的内容中找到

这就是最新的 5700 版本的固件了。

直接下载链接为:

解压缩之后得到的 fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.bin 文件就可以用于后续的固件刷新了。

3 - 刷新固件

介绍如何刷新hp544+网卡的固件

准备工作

首先安装前面的要求安装好 MFT 工具,并下载好需要进行刷新的固件文件。

刷新固件

MFT 中的 flint工具用于刷新网卡的固件。

注意: 有权限要求,在 windows 下打开 cmd 时必须选择以管理员身份运行 cmd ,linux下需要用到 sudo。

windows刷新固件

windows 下可以将要刷新的固件文件(如 fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.bin ) 放在mft的安装目录下,如 C:\Program Files\Mellanox\WinMFT

执行 flint 命令刷新固件:

cd C:\Program Files\Mellanox\WinMFT

flint -d mt4103_pci_cr0 -i fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.bin b

    Current FW version on flash:  2.42.5016
    New FW version:               2.42.5700

Burning FS2 FW image without signatures - OK
Restoring signature                     - OK

再次执行 mlxfwmanager 命令查看刷新之后的固件信息:

mlxfwmanager
Querying Mellanox devices firmware ...

Device #1:
----------

  Device Type:      ConnectX3Pro
  Part Number:      764285-B21_Ax
  Description:      HP InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP Adapter
  PSID:             HP_1380110017
  PCI Device Name:  mt4103_pci_cr0
  Port1 GUID:       24be05ffffbd0801
  Port2 GUID:       24be05ffffbd0802
  Versions:         Current        Available
     FW             2.42.5700      2.42.5700
     CLP            8025           8025
     FW (Running)   2.42.5016      N/A
     PXE            3.4.0754       3.4.0754
     UEFI           14.11.0049     14.11.0049

  Status:           Up to date

可以看到固件已经被刷新到 2.42.5700 版本。

linux下刷新固件

linux 下类似,注意 -d 参数后面的设置信息需要是类似 “/dev/mst/mt4103_pci_cr0” 这样,具体参见 mft status 命令的输出:

sudo flint -d /dev/mst/mt4103_pci_cr0 -i fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.bin b

重置设置

刷新固件之后,推荐重置网卡设置。windows下:

mlxconfig -d mt4103_pci_cr0 reset

linux下:

sudo mlxconfig -d /dev/mst/mt4103_pci_cr0 reset

切换Ethernet模式

hp544+支持 ib / eth / vpi 三种模式,但一般我固定用 eth 模式(ib模式暂时还不会设置软路由)。这种情况下可以考虑将网卡的工作模式固定为 eth。

windows下:

mlxconfig -d mt4103_pci_cr0 set LINK_TYPE_P1=2  # 1. ib模式 2. eth模式 3. vpi 模式 
mlxconfig -d mt4103_pci_cr0 set LINK_TYPE_P2=2

linux下:

sudo mlxconfig -d /dev/mst/mt4103_pciconf0 set LINK_TYPE_P1=2
sudo mlxconfig -d /dev/mst/mt4103_pciconf0 set LINK_TYPE_P2=2

移除 flexboot

flexboot 支持网卡启动,但目前我没有这方面的需求,而 flexboot 会影响开机启动速度,因此在不需要 flexboot 的情况下可以通过移除 flexboot 来加快开机启动速度。

windows下:

flint -d mt4103_pci_cr0 --allow_rom_change drom

linux下:

sudo flint -d /dev/mst/mt4103_pciconf0 --allow_rom_change drom

4 - 修改原厂固件

介绍如何修改原厂固件以便支持特性如单模光模块和56G以太网

说明

原文地址

原文请访问:

544+ flr 解锁56G直连 (github.com)

修改后的固件下载

修改好的固件请在此下载:

链接: https://pan.baidu.com/s/1uiebg1P-tTL1WIuxMgLblQ?pwd=tfgi

简单说明:

  • powerlevel: 支持单模光模块 (已验证,可用,但我只测试了40g的光模块)
  • 56kr4: 支持56g 以太网 (已验证,可用,但我只测试原厂dac线)
  • drom:去除 flexboot,这样开机不用在屏幕上显示网卡的字样,可以提供开机速度(应该bios里面也不会增加boot的内容,待验证)

有尝试这几个固件的同学请留言说明验证情况,谢谢!


复制一份原文在此以备不时之需:

原文

需要的工具

准备工作

下载所有需要的工具,并且安装 NVIDIA Firmware Tools (MFT)NVIDIA Firmware Tools (MFT) 4.3.0.25ConnectX3Pro-rel-2_40_5030.tgz 里的 fw-ConnectX3Pro-rel.mlxMCX354A-FCC_Ax.ini 复制到 NVIDIA Firmware Tools (MFT) 4.3.0.25 安装目录 我安装在了 C:\Program Files\Mellanox\WinMFT_x64_4_3_0_25 再复制一份 MCX354A-FCC_Ax.ini 命名为 MCX354A-FCC_Ax_56G.ini

再将 fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.tgz 里的 fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.binmft-scripts 里的 fs2_update_ini.py 复制到 NVIDIA Firmware Tools (MFT) 安装目录 我安装在了 C:\Program Files\Mellanox\WinMFT

生成固件

修改 MCX354A-FCC_Ax_56G.ini[IB] 部分

port1_802_3ap_56kr4_ability = true
port2_802_3ap_56kr4_ability = true

port1_802_3ap_cr4_enable = true
port2_802_3ap_cr4_enable = true
port1_802_3ap_cr4_ability = true
port2_802_3ap_cr4_ability = true

port1_802_3ap_kr4_enable = true
port2_802_3ap_kr4_enable = true
port1_802_3ap_kr4_ability = true
port2_802_3ap_kr4_ability = true

改为

port1_802_3ap_56kr4_enable = true
port2_802_3ap_56kr4_enable = true
port1_802_3ap_56kr4_ability = true
port2_802_3ap_56kr4_ability = true

port1_802_3ap_cr4_enable = true
port2_802_3ap_cr4_enable = true
port1_802_3ap_cr4_ability = true
port2_802_3ap_cr4_ability = true

port1_802_3ap_kr4_enable = true
port2_802_3ap_kr4_enable = true
port1_802_3ap_kr4_ability = true
port2_802_3ap_kr4_ability = true

分别生成两个固件, 开启56G和不开启的

C:\Program Files\Mellanox\WinMFT_x64_4_3_0_25> mlxburn -fw fw-ConnectX3Pro-rel.mlx -c MCX354A-FCC_Ax_56G.ini -wrimage MCX354A-FCC_Ax_56G.bin
-W- Removing parameter defined outside a group: "prepMLX version".
-I- Generating image ...
-I- Image generation completed successfully.
C:\Program Files\Mellanox\WinMFT_x64_4_3_0_25> mlxburn -fw fw-ConnectX3Pro-rel.mlx -c MCX354A-FCC_Ax.ini -wrimage MCX354A-FCC_Ax.bin
-W- Removing parameter defined outside a group: "prepMLX version".
-I- Generating image ...
-I- Image generation completed successfully.

分析固件

通过 UltraCompare 对比两个固件, 一共有四处改动

第一处在头部

MCX354A-FCC_Ax_56G.bin MCX354A-FCC_Ax.bin
00000020h: 00 00 68 E6 00 00 00 04 F5 00 00 0B FD 00 3B C8 ; 00000020h: 00 00 32 AE 00 00 00 04 F5 00 00 0B FD 00 3B C8 ;
00000030h: 00 0A 99 48 00 00 3B 84 00 10 00 40 00 00 01 ; 00000030h: 00 0A 99 44 00 00 3B 84 00 10 00 40 00 00 01 85 ;

第二处在文件靠后位置

MCX354A-FCC_Ax_56G.bin MCX354A-FCC_Ax.bin
000a7bb0h: 1F 83 F9 00 7F 8F FF 20 00 01 F9 A0 00 8F F0 02 ; 000a7bb0h: 1F 03 F9 00 7F 8F FF 20 00 01 F9 A0 00 8F F0 02 ;
000a7bc0h: 03 8F F0 17 00 01 F9 A4 00 40 00 01 00 D3 01 FF ; 000a7bc0h: 03 8F F0 17 00 01 F9 A4 00 40 00 01 00 D3 01 FF ;
000a7bd0h: 00 01 F9 AC 1F 83 F9 00 7F 8F FF 20 00 01 F9 B0 ; 000a7bd0h: 00 01 F9 AC 1F 03 F9 00 7F 8F FF 20 00 01 F9 B0 ;

第三处在文件末尾前

MCX354A-FCC_Ax_56G.bin MCX354A-FCC_Ax.bin
000a8fe0h: 00 00 96 1F 00 00 00 03 00 00 00 18 00 00 00 00 ; 000a8fe0h: 00 00 22 2D 00 00 00 03 00 00 00 18 00 00 00 ;

第四处为文件末尾全部

第四处改动较多, 实际为ini压缩后数据, 第二处改了两个位置, 通过

port1_802_3ap_56kr4_enable = true
port2_802_3ap_56kr4_enable = true

可以猜测, 此处为两个端口的设置项 而第一处和第三处则为校验位

继续分析 fw-ConnectX3Pro-rel.mlx, 找到 port1_802_3ap_56kr4_enable相关选项

scratchpad.eth.port[0].mode_40g_is_50g 0x1f99c.5 1 scratchpad.eth.port[0].b0_hw_eye_opener_cfg_measure_time 0x1f99c.8 4 scratchpad.eth.port[0].eth_802_3ap_56kr4_ability 0x1f99c.12 1 scratchpad.eth.port[0].eth_802_3ap_cr4_ability 0x1f99c.13 1 scratchpad.eth.port[0].eth_802_3ap_kr4_ability 0x1f99c.14 1 scratchpad.eth.port[0].eth_802_3ap_kr_ability 0x1f99c.15 1 scratchpad.eth.port[0].eth_802_3ap_kx_ability 0x1f99c.16 1 scratchpad.eth.port[0].eth_802_3ap_kx4_ability 0x1f99c.17 1 scratchpad.eth.port[0].eth_802_3ap_kr2_ability 0x1f99c.18 1 scratchpad.eth.port[0].eth_802_3ap_100M_ability 0x1f99c.19 1 scratchpad.eth.port[0].eth_802_3ap_56kr4_enable 0x1f99c.23 1 scratchpad.eth.port[0].eth_802_3ap_cr4_enable 0x1f99c.24 1 scratchpad.eth.port[0].eth_802_3ap_kr4_enable 0x1f99c.25 1 scratchpad.eth.port[0].eth_802_3ap_kr_enable 0x1f99c.26 1 scratchpad.eth.port[0].eth_802_3ap_kx_enable 0x1f99c.27 1 scratchpad.eth.port[0].eth_802_3ap_kx4_enable 0x1f99c.28 1 scratchpad.eth.port[0].eth_802_3ap_kr2_enable 0x1f99c.29 1 scratchpad.eth.port[0].eth_802_3ap_100M_enable 0x1f99c.30 1

可以看到此项位置为 0x1f99c.23 将第二处改动转为二进制进行对比

1F83 F900

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0

1F03 F900

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0

很明显, 第23位为 port1_802_3ap_56kr4_enable, 所以只要修改此位就可以不通过 mlxburn 解锁56G

制作固件

先到 NVIDIA Firmware Tools (MFT) 目录提取一份配置文件

C:\Program Files\Mellanox\WinMFT> flint -i fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.bin dc HP_1380110017.ini

转到 [IB]

;;speed flags for port0
cx3_spec1_3_ib_support_port0 = 1
cx3_spec1_2_ib_support_port0 = 1
spec1_3_fdr10_ib_support_port0 = 1
spec1_3_fdr14_ib_support_port0 = 1
port1_802_3ap_56kr4_ability = 1
port1_802_3ap_cr4_ability = 1
port1_802_3ap_cr4_enable  = 1

可以看到缺少了以下三项

port1_802_3ap_56kr4_enable = true
port1_802_3ap_kr4_enable = true
port1_802_3ap_kr4_ability = true

根据上面分析, 缺失的部分为

scratchpad.eth.port[0].eth_802_3ap_kr4_ability 0x1f99c.14 1 scratchpad.eth.port[0].eth_802_3ap_56kr4_enable 0x1f99c.23 1 scratchpad.eth.port[0].eth_802_3ap_kr4_enable 0x1f99c.25 1

此时设置项应为

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 1 0 1 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0

转换成16进制 1D03 B900 使用 UltraEdit 查找 1D03 B900

fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.bin
000ed760h: 00 01 F9 9C 1D 03 B9 00 7F 8F FF 20 00 01 F9 A0 ;
000ed770h: 00 8F F0 02 03 8F F0 17 00 01 F9 A4 00 40 00 01 ;
000ed780h: 00 D3 01 FF 00 01 F9 AC 1D 03 B9 00 7F 8F FF 20 ;

说明判断正确, 修改设置项

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0

转换成16进制 1F83 F900, 与 MCX354A-FCC_Ax_56G.bin 一致 使用 UltraEdit 更改 fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754.bin 并重命名为 fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754_56G.bin

fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754_56G.bin
000ed760h: 00 01 F9 9C 1F 83 F9 00 7F 8F FF 20 00 01 F9 A0 ;
000ed770h: 00 8F F0 02 03 8F F0 17 00 01 F9 A4 00 40 00 01 ;
000ed780h: 00 D3 01 FF 00 01 F9 AC 1F 83 F9 00 7F 8F FF 20 ;

此时并不能直接刷固件, 因为前面说了还有校验码

校验固件

C:\Program Files\Mellanox\WinMFT> flint -i fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754_56G.bin v

     FS2 failsafe image. Start address: 0x0. Chunk size 0x80000:

     NOTE: The addresses below are contiguous logical addresses. Physical addresses on
           flash may be different, based on the image start address and chunk size

     /0x00000038-0x0000065b (0x000624)/ (BOOT2) - OK
     /0x0000065c-0x0000297f (0x002324)/ (BOOT2) - OK
     /0x00002980-0x00003923 (0x000fa4)/ (Configuration) - OK
     /0x00003924-0x00047f5f (0x04463c)/ (ROM) - OK
     /0x00047f60-0x00047fa3 (0x000044)/ (GUID) - OK
     /0x00047fa4-0x0004812f (0x00018c)/ (Image Info) - OK
     /0x00048130-0x00055513 (0x00d3e4)/ (DDR) - OK
     /0x00055514-0x00056577 (0x001064)/ (DDR) - OK
     /0x00056578-0x00056967 (0x0003f0)/ (DDR) - OK
     /0x00056968-0x00094fab (0x03e644)/ (DDR) - OK
     /0x00094fac-0x00099e2f (0x004e84)/ (DDR) - OK
     /0x00099e30-0x0009e423 (0x0045f4)/ (DDR) - OK
     /0x0009e424-0x0009ef1b (0x000af8)/ (DDR) - OK
     /0x0009ef1c-0x000cf0ef (0x0301d4)/ (DDR) - OK
     /0x000cf0f0-0x000d2c9b (0x003bac)/ (DDR) - OK
     /0x000d2c9c-0x000e820f (0x015574)/ (DDR) - OK
     /0x000e8210-0x000e8317 (0x000108)/ (DDR) - OK
     /0x000e8318-0x000ed39b (0x005084)/ (DDR) - OK
     /0x000ed39c-0x000eeb97 (0x0017fc)/ (Configuration) /0x000ed39c/ - wrong CRC (exp:0x8e4c, act:0x9008)
-E- FW image verification failed: Bad CRC.. AN HCA DEVICE CAN NOT BOOT FROM THIS IMAGE.

使用 UltraEdit 定位到 0x000eeb96

fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754_56G.bin
000eeb90h: 00 00 00 7F 00 00 90 08 00 00 00 03 00 00 00 18 ;

按照提示修改为

fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754_56G.bin
000eeb90h: 00 00 00 7F 00 00 8E 4C 00 00 00 03 00 00 00 18 ;

现在可以把ini文件再更新进去 复制 HP_1380110017.iniHP_1380110017_56G.ini, 修改 [IB] 部分

;;speed flags for port0
cx3_spec1_3_ib_support_port0 = 1
cx3_spec1_2_ib_support_port0 = 1
spec1_3_fdr10_ib_support_port0 = 1
spec1_3_fdr14_ib_support_port0 = 1
port1_802_3ap_56kr4_ability = 1
port1_802_3ap_cr4_ability = 1
port1_802_3ap_cr4_enable  = 1

;;speed flags for port1
cx3_spec1_3_ib_support_port1 = 1
cx3_spec1_2_ib_support_port1 = 1
spec1_3_fdr10_ib_support_port1 = 1
spec1_3_fdr14_ib_support_port1 = 1
port2_802_3ap_56kr4_ability = 1
port2_802_3ap_cr4_ability = 1
port2_802_3ap_cr4_enable  = 1

改为

;;speed flags for port0
cx3_spec1_3_ib_support_port0 = 1
cx3_spec1_2_ib_support_port0 = 1
spec1_3_fdr10_ib_support_port0 = 1
spec1_3_fdr14_ib_support_port0 = 1
port1_802_3ap_56kr4_ability = 1
port1_802_3ap_56kr4_enable = 1
port1_802_3ap_cr4_ability = 1
port1_802_3ap_cr4_enable  = 1
port1_802_3ap_kr4_ability = 1
port1_802_3ap_kr4_enable = 1

;;speed flags for port1
cx3_spec1_3_ib_support_port1 = 1
cx3_spec1_2_ib_support_port1 = 1
spec1_3_fdr10_ib_support_port1 = 1
spec1_3_fdr14_ib_support_port1 = 1
port2_802_3ap_56kr4_ability = 1
port2_802_3ap_56kr4_enable = 1
port2_802_3ap_cr4_ability = 1
port2_802_3ap_cr4_enable  = 1
port2_802_3ap_kr4_ability = 1
port2_802_3ap_kr4_enable = 1

替换固件内的ini文件

C:\Program Files\Mellanox\WinMFT> python3 fs2_update_ini.py fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754_56G.bin HP_1380110017_56G.ini

再次校验固件

C:\Program Files\Mellanox\WinMFT> flint -i fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754_56G.bin v

     FS2 failsafe image. Start address: 0x0. Chunk size 0x80000:

     NOTE: The addresses below are contiguous logical addresses. Physical addresses on
           flash may be different, based on the image start address and chunk size

     /0x00000038-0x0000065b (0x000624)/ (BOOT2) - OK
     /0x0000065c-0x0000297f (0x002324)/ (BOOT2) - OK
     /0x00002980-0x00003923 (0x000fa4)/ (Configuration) - OK
     /0x00003924-0x00047f5f (0x04463c)/ (ROM) - OK
     /0x00047f60-0x00047fa3 (0x000044)/ (GUID) - OK
     /0x00047fa4-0x0004812f (0x00018c)/ (Image Info) - OK
     /0x00048130-0x00055513 (0x00d3e4)/ (DDR) - OK
     /0x00055514-0x00056577 (0x001064)/ (DDR) - OK
     /0x00056578-0x00056967 (0x0003f0)/ (DDR) - OK
     /0x00056968-0x00094fab (0x03e644)/ (DDR) - OK
     /0x00094fac-0x00099e2f (0x004e84)/ (DDR) - OK
     /0x00099e30-0x0009e423 (0x0045f4)/ (DDR) - OK
     /0x0009e424-0x0009ef1b (0x000af8)/ (DDR) - OK
     /0x0009ef1c-0x000cf0ef (0x0301d4)/ (DDR) - OK
     /0x000cf0f0-0x000d2c9b (0x003bac)/ (DDR) - OK
     /0x000d2c9c-0x000e820f (0x015574)/ (DDR) - OK
     /0x000e8210-0x000e8317 (0x000108)/ (DDR) - OK
     /0x000e8318-0x000ed39b (0x005084)/ (DDR) - OK
     /0x000ed39c-0x000eeb97 (0x0017fc)/ (Configuration) - OK
     /0x000eeb98-0x000eec0b (0x000074)/ (Jump addresses) - OK
     /0x000eec0c-0x000ef7d7 (0x000bcc)/ (FW Configuration) - OK
     /0x00000000-0x000ef7d7 (0x0ef7d8)/ (Full Image) - OK

-I- FW image verification succeeded. Image is bootable.

全部OK

刷入固件

获取网卡名

C:\Program Files\Mellanox\WinMFT> mst status -v
MST devices:
------------
  mt4103_pci_cr0         bus:dev.fn=2d:00.0
  mt4103_pciconf0        bus:dev.fn=2d:00.0

刷入修改好的固件

C:\Program Files\Mellanox\WinMFT> flint -d mt4103_pci_cr0 -i fw-ConnectX3Pro-rel-2_42_5700-764285-B21_Ax-CLP-8025-UEFI-14.11.49-FlexBoot-3.4.754_56G.bin b

    Current FW version on flash:  2.42.5700
    New FW version:               2.42.5700

    Note: The new FW version is the same as the current FW version on flash.

 Do you want to continue ? (y/n) [n] : y

Burning FS2 FW image without signatures - OK
Restoring signature                     - OK

(可选)删除 FlexBoot

C:\Program Files\Mellanox\WinMFT> flint -d mt4103_pci_cr0 --allow_rom_change drom

-I- Preparing to remove ROM ...
Removing ROM image    - OK
Restoring signature  - OK

重置网卡

C:\Program Files\Mellanox\WinMFT> mlxconfig -d mt4103_pci_cr0 reset

 Reset configuration for device mt4103_pci_cr0? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.

重启即可开启56G

参考