1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright (c) 2015 QLogic Corporation 3 4BNX2X Poll Mode Driver 5====================== 6 7The BNX2X poll mode driver library (**librte_net_bnx2x**) implements support 8for **QLogic 578xx** 10/20 Gbps family of adapters as well as their virtual 9functions (VF) in SR-IOV context. It is supported on several standard Linux 10distros like RHEL and SLES. It is compile-tested under FreeBSD OS. 11 12More information can be found at `QLogic Corporation's Official Website 13<http://www.qlogic.com>`_. 14 15Supported Features 16------------------ 17 18BNX2X PMD has support for: 19 20- Base L2 features 21- Unicast/multicast filtering 22- Promiscuous mode 23- Port hardware statistics 24- SR-IOV VF 25- Experimental 2.5Gbps support 26 27Non-supported Features 28---------------------- 29 30The features not yet supported include: 31 32- TSS (Transmit Side Scaling) 33- RSS (Receive Side Scaling) 34- LRO/TSO offload 35- Checksum offload 36- SR-IOV PF 37- Rx TX scatter gather 38 39Co-existence considerations 40--------------------------- 41 42- QLogic 578xx CNAs support Ethernet, iSCSI and FCoE functionalities. 43 These functionalities are supported using QLogic Linux kernel 44 drivers bnx2x, cnic, bnx2i and bnx2fc. DPDK is supported on these 45 adapters using bnx2x PMD. 46 47- When SR-IOV is not enabled on the adapter, 48 QLogic Linux kernel drivers (bnx2x, cnic, bnx2i and bnx2fc) and bnx2x 49 PMD can’t be attached to different PFs on a given QLogic 578xx 50 adapter. 51 A given adapter needs to be completely used by DPDK or Linux drivers. 52 Before binding DPDK driver to one or more PFs on the adapter, 53 please make sure to unbind Linux drivers from all PFs of the adapter. 54 If there are multiple adapters on the system, one or more adapters 55 can be used by DPDK driver completely and other adapters can be used 56 by Linux drivers completely. 57 58- When SR-IOV is enabled on the adapter, 59 Linux kernel drivers (bnx2x, cnic, bnx2i and bnx2fc) can be bound 60 to the PFs of a given adapter and either bnx2x PMD or Linux drivers 61 bnx2x can be bound to the VFs of the adapter. 62 63Supported QLogic NICs 64--------------------- 65 66- 578xx 67 68Prerequisites 69------------- 70 71- Requires firmware version **7.13.11.0**. It is included in most of the 72 standard Linux distros. If it is not available visit 73 `linux-firmware git repository <https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/bnx2x/bnx2x-e2-7.13.11.0.fw>`_ 74 to get the required firmware. 75 76- 2.5Gbps speed currently requires that the firmware's NVM configuration 77 number 7 / 35 (first port) and 36 (second port) are set to 0x70 78 for 1G/2.5G/10G support. 79 This can be done for EFI or DOS using EDIAG tool from Broadcom. 80 81Pre-Installation Configuration 82------------------------------ 83 84Config Options 85~~~~~~~~~~~~~~ 86 87The following options can be enabled with Meson flags. Please note that 88enabling debugging options may affect system performance. 89 90- ``RTE_LIBRTE_BNX2X_DEBUG_TX`` (default **disabled**) 91 92 Toggle display of transmit fast path run-time messages. 93 94- ``RTE_LIBRTE_BNX2X_DEBUG_RX`` (default **disabled**) 95 96 Toggle display of receive fast path run-time messages. 97 98- ``RTE_LIBRTE_BNX2X_DEBUG_PERIODIC`` (default **disabled**) 99 100 Toggle display of register reads and writes. 101 102.. _bnx2x_driver-compilation: 103 104Driver compilation and testing 105------------------------------ 106 107Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` 108for details. 109 110Jumbo: Limitation 111----------------- 112 113Rx descriptor limit for number of segments per MTU is set to 1. 114PMD doesn't support Jumbo Rx scatter gather. Some applications can 115adjust mbuf_size based on this param and max_pkt_len. 116 117For others, PMD detects the condition where Rx packet length cannot 118be held by configured mbuf size and logs the message. 119 120Example output: 121 122 .. code-block:: console 123 124 [...] 125 [bnx2x_recv_pkts:397(04:00.0:dpdk-port-0)] mbuf size 2048 is not enough to hold Rx packet length more than 2046 126 127SR-IOV: Prerequisites and sample Application Notes 128-------------------------------------------------- 129 130This section provides instructions to configure SR-IOV with Linux OS. 131 132#. Verify SR-IOV and ARI capabilities are enabled on the adapter using ``lspci``: 133 134 .. code-block:: console 135 136 lspci -s <slot> -vvv 137 138 Example output: 139 140 .. code-block:: console 141 142 [...] 143 Capabilities: [1b8 v1] Alternative Routing-ID Interpretation (ARI) 144 [...] 145 Capabilities: [1c0 v1] Single Root I/O Virtualization (SR-IOV) 146 [...] 147 Kernel driver in use: igb_uio 148 149#. Load the kernel module: 150 151 .. code-block:: console 152 153 modprobe bnx2x 154 155 Example output: 156 157 .. code-block:: console 158 159 systemd-udevd[4848]: renamed network interface eth0 to ens5f0 160 systemd-udevd[4848]: renamed network interface eth1 to ens5f1 161 162#. Bring up the PF ports: 163 164 .. code-block:: console 165 166 ifconfig ens5f0 up 167 ifconfig ens5f1 up 168 169#. Create VF device(s): 170 171 Echo the number of VFs to be created into "sriov_numvfs" sysfs entry 172 of the parent PF. 173 174 Example output: 175 176 .. code-block:: console 177 178 echo 2 > /sys/devices/pci0000:00/0000:00:03.0/0000:81:00.0/sriov_numvfs 179 180#. Assign VF MAC address: 181 182 Assign MAC address to the VF using iproute2 utility. The syntax is: 183 ip link set <PF iface> vf <VF id> mac <macaddr> 184 185 Example output: 186 187 .. code-block:: console 188 189 ip link set ens5f0 vf 0 mac 52:54:00:2f:9d:e8 190 191#. PCI Passthrough: 192 193 The VF devices may be passed through to the guest VM using virt-manager or 194 virsh etc. bnx2x PMD should be used to bind the VF devices in the guest VM 195 using the instructions outlined in the Application notes below. 196 197#. Running testpmd: 198 (Supply ``--log-level="pmd.net.bnx2x.driver",7`` to view informational messages): 199 200 Follow instructions available in the document 201 :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` 202 to run testpmd. 203 204 Example output: 205 206 .. code-block:: console 207 208 [...] 209 EAL: PCI device 0000:84:00.0 on NUMA socket 1 210 EAL: probe driver: 14e4:168e rte_bnx2x_pmd 211 EAL: PCI memory mapped at 0x7f14f6fe5000 212 EAL: PCI memory mapped at 0x7f14f67e5000 213 EAL: PCI memory mapped at 0x7f15fbd9b000 214 EAL: PCI device 0000:84:00.1 on NUMA socket 1 215 EAL: probe driver: 14e4:168e rte_bnx2x_pmd 216 EAL: PCI memory mapped at 0x7f14f5fe5000 217 EAL: PCI memory mapped at 0x7f14f57e5000 218 EAL: PCI memory mapped at 0x7f15fbd4f000 219 Interactive-mode selected 220 Configuring Port 0 (socket 0) 221 PMD: bnx2x_dev_tx_queue_setup(): fp[00] req_bd=512, thresh=512, 222 usable_bd=1020, total_bd=1024, 223 tx_pages=4 224 PMD: bnx2x_dev_rx_queue_setup(): fp[00] req_bd=128, thresh=0, 225 usable_bd=510, total_bd=512, 226 rx_pages=1, cq_pages=8 227 PMD: bnx2x_print_adapter_info(): 228 [...] 229 Checking link statuses... 230 Port 0 Link Up - speed 10000 Mbps - full-duplex 231 Port 1 Link Up - speed 10000 Mbps - full-duplex 232 Done 233 testpmd> 234