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