xref: /dpdk/doc/guides/nics/nfp.rst (revision 68a03efeed657e6e05f281479b33b51102797e15)
1..  SPDX-License-Identifier: BSD-3-Clause
2    Copyright(c) 2015-2017 Netronome Systems, Inc. All rights reserved.
3    All rights reserved.
4
5NFP poll mode driver library
6============================
7
8Netronome's sixth generation of flow processors pack 216 programmable
9cores and over 100 hardware accelerators that uniquely combine packet,
10flow, security and content processing in a single device that scales
11up to 400-Gb/s.
12
13This document explains how to use DPDK with the Netronome Poll Mode
14Driver (PMD) supporting Netronome's Network Flow Processor 6xxx
15(NFP-6xxx) and Netronome's Flow Processor 4xxx (NFP-4xxx).
16
17NFP is a SRIOV capable device and the PMD driver supports the physical
18function (PF) and the virtual functions (VFs).
19
20Dependencies
21------------
22
23Before using the Netronome's DPDK PMD some NFP configuration,
24which is not related to DPDK, is required. The system requires
25installation of **Netronome's BSP (Board Support Package)** along
26with a specific NFP firmware application. Netronome's NSP ABI
27version should be 0.20 or higher.
28
29If you have a NFP device you should already have the code and
30documentation for this configuration. Contact
31**support@netronome.com** to obtain the latest available firmware.
32
33The NFP Linux netdev kernel driver for VFs has been a part of the
34vanilla kernel since kernel version 4.5, and support for the PF
35since kernel version 4.11. Support for older kernels can be obtained
36on Github at
37**https://github.com/Netronome/nfp-drv-kmods** along with the build
38instructions.
39
40NFP PMD needs to be used along with UIO ``igb_uio`` or VFIO (``vfio-pci``)
41Linux kernel driver.
42
43Building the software
44---------------------
45
46Netronome's PMD code is provided in the **drivers/net/nfp** directory.
47Although NFP PMD has Netronome´s BSP dependencies, it is possible to
48compile it along with other DPDK PMDs even if no BSP was installed previously.
49Of course, a DPDK app will require such a BSP installed for using the
50NFP PMD, along with a specific NFP firmware application.
51
52Once the DPDK is built all the DPDK apps and examples include support for
53the NFP PMD.
54
55
56Driver compilation and testing
57------------------------------
58
59Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
60for details.
61
62Using the PF
63------------
64
65NFP PMD supports using the NFP PF as another DPDK port, but it does not
66have any functionality for controlling VFs. In fact, it is not possible to use
67the PMD with the VFs if the PF is being used by DPDK, that is, with the NFP PF
68bound to ``igb_uio`` or ``vfio-pci`` kernel drivers. Future DPDK versions will
69have a PMD able to work with the PF and VFs at the same time and with the PF
70implementing VF management along with other PF-only functionalities/offloads.
71
72The PMD PF has extra work to do which will delay the DPDK app initialization
73like uploading the firmware and configure the Link state properly when starting or
74stopping a PF port. Since DPDK 18.05 the firmware upload happens when
75a PF is initialized, which was not always true with older DPDK versions.
76
77Depending on the Netronome product installed in the system, firmware files
78should be available under ``/lib/firmware/netronome``. DPDK PMD supporting the
79PF looks for a firmware file in this order:
80
81	1) First try to find a firmware image specific for this device using the
82	   NFP serial number:
83
84		serial-00-15-4d-12-20-65-10-ff.nffw
85
86	2) Then try the PCI name:
87
88		pci-0000:04:00.0.nffw
89
90	3) Finally try the card type and media:
91
92		nic_AMDA0099-0001_2x25.nffw
93
94Netronome's software packages install firmware files under ``/lib/firmware/netronome``
95to support all the Netronome's SmartNICs and different firmware applications.
96This is usually done using file names based on SmartNIC type and media and with a
97directory per firmware application. Options 1 and 2 for firmware filenames allow
98more than one SmartNIC, same type of SmartNIC or different ones, and to upload a
99different firmware to each SmartNIC.
100
101   .. Note::
102      Currently the NFP PMD supports using the PF with Agilio Basic Firmware. See
103      https://help.netronome.com/support/solutions for more information on the
104      various firmwares supported by the Netronome Agilio CX smartNIC.
105
106PF multiport support
107--------------------
108
109The NFP PMD can work with up to 8 ports on the same PF device. The number of
110available ports is firmware and hardware dependent, and the driver looks for a
111firmware symbol during initialization to know how many can be used.
112
113DPDK apps work with ports, and a port is usually a PF or a VF PCI device.
114However, with the NFP PF multiport there is just one PF PCI device. Supporting
115this particular configuration requires the PMD to create ports in a special way,
116although once they are created, DPDK apps should be able to use them as normal
117PCI ports.
118
119NFP ports belonging to same PF can be seen inside PMD initialization with a
120suffix added to the PCI ID: wwww:xx:yy.z_port_n. For example, a PF with PCI ID
1210000:03:00.0 and four ports is seen by the PMD code as:
122
123   .. code-block:: console
124
125      0000:03:00.0_port_0
126      0000:03:00.0_port_1
127      0000:03:00.0_port_2
128      0000:03:00.0_port_3
129
130   .. Note::
131
132      There are some limitations with multiport support: RX interrupts and
133      device hot-plugging are not supported.
134
135PF multiprocess support
136-----------------------
137
138Due to how the driver needs to access the NFP through a CPP interface, which implies
139to use specific registers inside the chip, the number of secondary processes with PF
140ports is limited to only one.
141
142This limitation will be solved in future versions but having basic multiprocess support
143is important for allowing development and debugging through the PF using a secondary
144process which will create a CPP bridge for user space tools accessing the NFP.
145
146
147System configuration
148--------------------
149
150#. **Enable SR-IOV on the NFP device:** The current NFP PMD supports the PF and
151   the VFs on a NFP device. However, it is not possible to work with both at the
152   same time because the VFs require the PF being bound to the NFP PF Linux
153   netdev driver.  Make sure you are working with a kernel with NFP PF support or
154   get the drivers from the above Github repository and follow the instructions
155   for building and installing it.
156
157   VFs need to be enabled before they can be used with the PMD.
158   Before enabling the VFs it is useful to obtain information about the
159   current NFP PCI device detected by the system:
160
161   .. code-block:: console
162
163      lspci -d19ee:
164
165   Now, for example, configure two virtual functions on a NFP-6xxx device
166   whose PCI system identity is "0000:03:00.0":
167
168   .. code-block:: console
169
170      echo 2 > /sys/bus/pci/devices/0000:03:00.0/sriov_numvfs
171
172   The result of this command may be shown using lspci again:
173
174   .. code-block:: console
175
176      lspci -d19ee: -k
177
178   Two new PCI devices should appear in the output of the above command. The
179   -k option shows the device driver, if any, that devices are bound to.
180   Depending on the modules loaded at this point the new PCI devices may be
181   bound to nfp_netvf driver.
182