xref: /dpdk/doc/guides/nics/bnx2x.rst (revision 048ca64705eb521deabe5577038570072f68d3f0)
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