Linkspeed configuration of Broadcom network cards

From Thomas-Krenn-Wiki
Jump to navigation Jump to search

When integrating Broadcom network cards in Linux distributions, the linkspeed may differ from the expected value. This value can be configured later with the help of firmware utility bnxtnvm.

This article describes the verification and configuration of the linkspeeds with the help of bnxtnvm/NICCLI.

Before you start, follow this article for the Activation of maintenance mode in Proxmox VE.

Verification of linkspeed

Due to the mixed operation of different linkspeeds, individual ports may be out of service. In a production environment, this manifests itself as missing connections and/or reduced network speeds, for example, when operating a server cluster with mesh cabling. All transceivers of the configured network card must be also removed.

Hint: Please note the Compatibility of linkspeeds. Certain Broadcom cards support only certain or no mixed operations.

Here is an example for a defective issue: root@PMX1:~# ethtool enp67s0f0np0

Settings for enp67s0f0np0:
       Supported ports: [ FIBRE ]
       Supported link modes:   10000baseT/Full
                               25000baseCR/Full
       Supported pause frame use: Symmetric Receive-only
       Supports auto-negotiation: Yes
       Supported FEC modes: RS  BASER
       Advertised link modes:  10000baseT/Full
       Advertised pause frame use: No
       Advertised auto-negotiation: Yes
       Advertised FEC modes: RS         BASER
       Speed: 10000Mb/s
       Duplex: Full
       Auto-negotiation: on
       Port: Direct Attach Copper
       PHYAD: 0
       Transceiver: internal
       Supports Wake-on: g
       Wake-on: d
       Current message level: 0x00002081 (8321)
                              drv tx_err hw
       Link detected: yes

Under "Advertised link modes", only the speed is displayed (10 Gb/s), although the network card could run on 25 Gb/s.

Linkspeed configuration with bnxtnvm

Hint: If you are using a mesh network, you may need to disconnect the direct cabling of the systems to be configured before beginning the configuration process. The other systems can remain connected to each other.

To reach the desired and full functionality of the network cards, you must force the network cards to use the desired speed using bnxtnvm.

bnxtnvm can be downloaded in the Thomas-Krenn download area for your Windows systems or use the following commands on your Linux systems:

wget https://www.thomaskrenn.com/redx/tools/mb_download.php/ct.YuuHGw/mid.y9b3b4ba2bf7ab3b8/bnxtnvm.zip &&
unzip bnxtnvm.zip &&
chmod +x bnxtnvm

Next, you'll need to enter a series of commands to adjust your system to the desired speed:

Reading configurable speeds

In the first step, the driver linkspeed IDs of the network card are required:

./bnxtnvm  -dev=enp67s0f0np0 optionhelp=drv_link_speed

Issue:

d
Name                   : drv_link_speed
Description            : Driver Link speed
Option Type            : Multi Instance Type
Max Instance Indexes   : 0 to 15
Valid values           :
  0 (Autoneg)
  1 (1G)
  2 (10G)
  3 (25G)
  4 (40G)
  5 (50G)
  6 (100G)
  7 (200G_PAM4)
  8 (50G_PAM4)
  9 (100G_PAM4)
  14 (5G)
  15 (100M)

The linkspeed ID is required for the enforcement of the desired linkspeed.

Configuration of linkspeed

The linkspeed is now set with the help of the linkspeed ID:

./bnxtnvm -dev=enp67s0f0np0 setoption=drv_link_speed:0#3

./bnxtnvm -dev=enp67s0f0np0 setoption=firmware_link_speed_d0:0#3

./bnxtnvm -dev=enp67s0f0np0 setoption=firmware_link_speed_d3:0#3

Explanation of the commands:

Interface-ID Option Port Linkspeed-ID
enp67s0f0np0 drv_link_speed 0 3
enp67s0f0np0 firmware_link_speed_d0 0 3
enp67s0f0np0 firmware_link_speed_d3 0 3

The drv_link_speed, firmware_link_speed_d0 & firmware_link_speed_d3 have to be set for all ports.

The values correspond to the number of ports of the used network cards (for example 0, 1, 2 and 3 for a network card with 4 network ports).

With the linkspeed ID "3", a speed of 25 Gb/s is forced.

You will receive the following issue after performing the command:

root@PMX1:~# ./bnxtnvm  -dev=enp67s0f0np0 setoption=drv_link_speed:0#3
drv_link_speed is set successfully
Please reboot the system to apply the configuration

After entering the commands for all ports, a reboot of the system is necessary.

Verification of changes

Perform the following command to verify the state:

./bnxtnvm -dev=enp67s0f0np0 device_info

The configuration has been performed correctly, when the FW image status outputs the value Operational:

root@PMX1:~# ./bnxtnvm -dev=enp67s0f0np0 device_info
Device Interface Name       : enp67s0f0np0
MACAddress                  : bc:97:e1:da:92:a0
Base MACAddress             : BC:97:E1:DA:92:A0
Device Serial Number        : P425G214400143FV
Chip Number                 : BCM57504
Part Number                 : BCM957504-P425G
Description                 : Broadcom NetXtreme-E Quad-port 25Gb Ethernet PCIe Adapter
PCI Vendor Id               : 14e4
PCI Device Id               : 1750
PCI Subsys Vendor Id        : 14e4
PCI Subsys Device Id        : 2100
PCI Device Name             : 0000:01:00.0
Adapter Rev                 : 11
Active Package version      : 224.1.102.0
Package version on NVM      : 224.1.102.0
Firmware version            : 224.0.159.0
Active NVM config version   : 0.0.34
NVM config version          : 0.0.34
Firmware Reset Counter      : 0
Error Recovery Counter      : 0
Crash Dump Timestamp        : N/A
Reboot Required             : No
Secure Boot                 : Enabled
Secure Firmware Update      : Enabled
FW Image Status                              : Operational
Crash Dump Available in DDR : False

If this is not the case, the firmware of the network card must be synchronized additionally.

Firmware sync

Synchronizing the firmware will apply the entered link speed:

./bnxtnvm -dev=enp67s0f0np0 fw_sync

Control with the help of ethtool

The successful configuration can now be verified with the ethtool:root@PMX1:~# ethtool enp67f0np0

Settings for enp67f0np0:
       Supported ports: [ FIBRE ]
       Supported link modes:   10000baseT/Full
                               25000baseCR/Full
       Supported pause frame use: Symmetric Receive-only
       Supports auto-negotiation: Yes
       Supported FEC modes: RS  BASER
       Advertised link modes:  25000baseCR/Full
       Advertised pause frame use: No
       Advertised auto-negotiation: Yes
       Advertised FEC modes: RS         BASER
       Speed: 25000Mb/s
       Duplex: Full
       Auto-negotiation: on
       Port: Direct Attach Copper
       PHYAD: 0
       Transceiver: internal
       Supports Wake-on: g
       Wake-on: d
       Current message level: 0x00002081 (8321)
                              drv tx_err hw
       Link detected: yes

Finally, you can disable maintenance mode again and, if necessary, repeat this procedure for the remaining nodes.

Linkspeed configuration with NICCLI

Hint: In case of a mesh cabling, it may be necessary that you disconnect the direct cabling of the systems to be configured before beginning the configuration. The other systems can remain wired to each other. You also have to remove all transceivers of the configured network card.

To ensure that the network cards function as intended and at full capacity, you must use NICCLI to force them to operate at the desired speed.

NICCLI installation

To install NICCLI, follow these instructions: Installation NICCLI

First, perform the following command to find out the assignment of the interface names and PCI-IDs:

root@PMX2:~# lshw -c network -businfo
Bus info          Device           Class          Description
pci@0000:01:00.0  enp1s0f0np0      network        BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
pci@0000:01:00.1  enp1s0f1np1      network        BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
pci@0000:06:00.0  enp6s0f0         network        I350 Gigabit Network Connection
pci@0000:06:00.1  enp6s0f1         network        I350 Gigabit Network Connection
pci@0000:41:00.0  enp65s0f0np0     network        BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller
pci@0000:41:00.1  enp65s0f1np1     network        BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller
pci@0000:81:00.0       ens17f0np0               network                 BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
pci@0000:81:00.1  ens17f1np1       network        BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
pci@0000:81:00.2  ens17f2np2       network        BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
pci@0000:81:00.3  ens17f3np3       network        BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet
usb@1:1.3         enx42a65ce855c5  network        Ethernet interface


Next, enter "niccli" in the CLI. After this, you have to select a port index. Select the index here that has the same PCI ID as the one selected above:

root@PMX2:~# niccli
/opt/niccli/niccli.x86_64: /lib/x86_64-linux-gnu/libnl-3.so.200: no version information available (required by /opt/niccli/niccli.x86_64)

-------------------------------------------------------------------------------
Scrutiny NIC CLI v229.0.150.0 - Broadcom Inc. (c) 2024 (Bld-79.52.33.102.16.0) 
-------------------------------------------------------------------------------

     BoardId     MAC Address        FwVersion    PCIAddr        Type   Mode  
  1) BCM57508    84:16:0C:6F:16:90  226.0.145.1  0000:01:00.0   NIC    PCI   
  2) BCM57508    84:16:0C:6F:16:90  226.0.145.1  0000:01:00.1   NIC    PCI   
  3) BCM57416    00:62:0B:31:4A:F0  226.0.145.0  0000:41:00.0   NIC    PCI   
  4) BCM57416    00:62:0B:31:4A:F1  226.0.145.0  0000:41:00.1   NIC    PCI   
  5)  BCM57504       00:62:0B:6F:00:8C        226.0.145.1       0000:81:00.0         NIC         PCI   
  6) BCM57504    00:62:0B:6F:00:8C  226.0.145.1  0000:81:00.1   NIC    PCI   
  7) BCM57504    00:62:0B:6F:00:8E  226.0.145.1  0000:81:00.2   NIC    PCI   
  8) BCM57504    00:62:0B:6F:00:8E  226.0.145.1  0000:81:00.3   NIC    PCI   

Enter the target index to connect with : 5

Reading out configurable speeds

Now, you can read out the linkspeed ID for the desired port speed:

BCM57504> setoption -name firmware_link_speed_d0 -value ? -scope 0 
ERROR: Invalid syntax.
Name                  : firmware_link_speed_d0
Description           : This per-port option configures the speed setting when the device is in D0 mode.
                        The default speed is set to Autoneg. A 10GBaseT board only allows Autoneg.
Option Type           : Multi Instance Type
Instance Indexes      : 0 to 15
Valid values          : 
     0 (Autoneg)
     1 (1G)
     2 (10G)
     3 (25G)
     4 (40G)
     5 (50G)
     6 (100G)
     7 (200G_PAM4)
     8 (50G_PAM4)
     9 (100G_PAM4)
     14 (2_5G)
     15 (100M)
BCM57504> 

The linkspeed ID is required for the enforcement of the desired linkspeed.

Configuration of the linkspeed

This linkspeed ID must be entered in the following command under "-value ":

BCM57504> setoption -name firmware_link_speed_d0 -value 3 -scope 0
BCM57504> setoption -name firmware_link_speed_d0 -value 3 -scope 1
BCM57504> setoption -name firmware_link_speed_d0 -value 3 -scope 2
BCM57504> setoption -name firmware_link_speed_d0 -value 3 -scope 3
firmware_link_speed_d0 is set successfully
Please reboot the system to apply the configuration

The same must be repeated for "firmware_link_speed_d3":

BCM57504> setoption -name firmware_link_speed_d3 -value 3 -scope 0
BCM57504> setoption -name firmware_link_speed_d3 -value 3 -scope 1
BCM57504> setoption -name firmware_link_speed_d3 -value 3 -scope 2
BCM57504> setoption -name firmware_link_speed_d3 -value 3 -scope 3

Explanation of command:

Option Linkspeed-ID (value) Port (scope)
firmware_link_speed_d0 3 0-3
firmware_link_speed_d3 3 0-3

The firmware_link_speed_d0 & firmware_link_speed_d3 options must be set for all ports.

The values correspond to the number of ports of the used network card (for example 0, 1, 2 and 3 for a network card with 4 network ports).

With the linkspeed ID "3", a speed of 25 Gb/s is forced.

After entering the commands for all ports, a reboot of the system is necessary.

Verification of changes

Enter "niccli" again in the CLI after the reboot and perform the following command:

BCM57504> device_info
Interface Name                      : ens17f0np0
MAC Address                         : 00:62:0B:6F:00:8C
Base MAC Address                    : 00:62:0B:6F:00:8C
Serial Number                       : N425G224200E5NFG
Part Number                         : BCM957504-N425G
PCI Address                         : 0000:81:00.0
Chip Number                         : BCM57504
Chip Name                           : THOR
Description                         : Broadcom NetXtreme E-Series Quad-port 25Gb SFP28 OCP 3.0 Ethernet Adapter
Active Package Name                 : 226.1.107.1
Firmware Name                       : PRIMATE_FW
Firmware Version                    : 226.0.145.1
RoCE Firmware Version               : 226.0.145.0
HWRM Interface Spec                 : 1.10.2
Kong mailbox channel                : Not Applicable
Active Package Version              : 226.1.107.1
Package Version on NVM              : 226.1.107.1
PCI Device ID                       : 0x1751
PCI Vendor ID                       : 0x14E4
PCI Revision ID                     : 0x11
PCI Component ID                    : 0x1751
PCI Subsys Device ID                : 0x5425
PCI Subsys Vendor ID                : 0x14E4
Active NVM config version           : 0.0.37
NVM config version                  : 0.0.37
Reboot Required                     : No
Firmware Reset Counter              : 0
Error Recovery Counter              : 0
Crash Dump Timestamp                : Not Available
Secure Boot                         : Enabled
Secure Firmware Update              : Enabled
FW Image Status                                               :  Operational
Crash Dump Available in DDR         : No

Verify, whether the value is set to "Operational". If this is not the case, you have to perform a firmware sync. Otherwise, the configuration has been successful.

Firmware sync

Synchronizing the firmware will apply the entered link speed:

BCM57504> fw_sync

Control with the help of ethtool

Now, you can verify the configuration of the network card with ethtool:

root@PMX2:~# ethtool ens17f0np0 
Settings for ens17f0np0:
        Supported ports: [ FIBRE ]
        Supported link modes:   10000baseT/Full
                                10000baseKX4/Full
                                10000baseKR/Full
                                25000baseCR/Full
                                25000baseKR/Full
                                25000baseSR/Full
                                10000baseCR/Full
                                10000baseSR/Full
                                10000baseLR/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: RS  BASER
        Advertised link modes:  25000baseCR/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 25000Mb/s
        Duplex: Full
        Auto-negotiation: off
        Port: FIBRE
        PHYAD: 0
        Transceiver: internal
        Supports Wake-on: g
        Wake-on: d
        Current message level: 0x00002081 (8321)
                               drv tx_err hw
        Link detected: no

Finally, you can disable maintenance mode again and, if necessary, repeat this procedure for the remaining nodes.


Author: Niklas Pauli

Niklas Pauli works in the product management team at Thomas-Krenn. He completed his general university entrance qualification at Freyung High School and then his training as an IT specialist for system integration at Thomas-Krenn.AG. After completing his training, he continued to work in the areas of Proxmox VE incl. Ceph, backup (Proxmox, Veeam, SEP). He is also a regular writer for the Thomas-Krenn-Wiki.

Translator: Alina Ranzinger

Alina has been working at Thomas-Krenn.AG since 2024. After her training as multilingual business assistant, she got her job as assistant of the Product Management and is responsible for the translation of texts and for the organisation of the department.