1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright 2019 NXP 3 4PFE Poll Mode Driver 5====================== 6 7The PFE NIC PMD (**librte_net_pfe**) provides poll mode driver 8support for the inbuilt NIC found in the **NXP LS1012** SoC. 9 10More information can be found at `NXP Official Website 11<https://nxp.com/ls1012a>`_. 12 13PFE 14--- 15 16This section provides an overview of the NXP PFE 17and how it is integrated into the DPDK. 18 19Contents summary 20 21- PFE overview 22- PFE features 23- Supported PFE SoCs 24- Prerequisites 25- Driver compilation and testing 26- Limitations 27 28PFE Overview 29~~~~~~~~~~~~ 30 31PFE is a hardware programmable packet forwarding engine to provide 32high performance Ethernet interfaces. The diagram below shows a 33system level overview of PFE: 34 35.. code-block:: console 36 37 ====================================================+=============== 38 US +-----------------------------------------+ | Kernel Space 39 | | | 40 | PFE Ethernet Driver | | 41 +-----------------------------------------+ | 42 ^ | ^ | | 43 PFE RXQ| |TXQ RXQ| |TXQ | 44 PMD | | | | | 45 | v | v | +----------+ 46 +---------+ +----------+ | | pfe.ko | 47 | net_pfe0| | net_pfe1 | | +----------+ 48 +---------+ +----------+ | 49 ^ | ^ | | 50 TXQ| |RXQ TXQ| |RXQ | 51 | | | | | 52 | v | v | 53 +------------------------+ | 54 | | | 55 | PFE HIF driver | | 56 +------------------------+ | 57 ^ | | 58 RX | TX | | 59 RING| RING| | 60 | v | 61 +--------------+ | 62 | | | 63 ==================| HIF |==================+=============== 64 +-----------+ +--------------+ 65 | | | | HW 66 | PFE +--------------+ | 67 | +-----+ +-----+ | 68 | | MAC | | MAC | | 69 | | | | | | 70 +-------+-----+----------------+-----+----+ 71 | PHY | | PHY | 72 +-----+ +-----+ 73 74 75The HIF, PFE, MAC and PHY are the hardware blocks, the pfe.ko is a kernel 76module, the PFE HIF driver and the PFE ethernet driver combined represent 77as DPDK PFE poll mode driver are running in the userspace. 78 79The PFE hardware supports one HIF (host interface) RX ring and one TX ring 80to send and receive packets through packet forwarding engine. Both network 81interface traffic is multiplexed and send over HIF queue. 82 83net_pfe0 and net_pfe1 are logical ethernet interfaces, created by HIF client 84driver. HIF driver is responsible for send and receive packets between 85host interface and these logical interfaces. PFE ethernet driver is a 86hardware independent and register with the HIF client driver to transmit and 87receive packets from HIF via logical interfaces. 88 89pfe.ko is required for PHY initialisation and also responsible for creating 90the character device "pfe_us_cdev" which will be used for interacting with 91the kernel layer for link status. 92 93PFE Features 94~~~~~~~~~~~~ 95 96- L3/L4 checksum offload 97- Packet type parsing 98- Basic stats 99- MTU update 100- Promiscuous mode 101- Allmulticast mode 102- Link status 103- ARMv8 104 105Supported PFE SoCs 106~~~~~~~~~~~~~~~~~~ 107 108- LS1012 109 110Prerequisites 111~~~~~~~~~~~~~ 112 113Below are some pre-requisites for executing PFE PMD on a PFE 114compatible board: 115 1161. **ARM 64 Tool Chain** 117 118 For example, the `*aarch64* Linaro Toolchain <https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-i686_aarch64-linux-gnu.tar.xz>`_. 119 1202. **Linux Kernel** 121 122 It can be obtained from `NXP's Github hosting <https://source.codeaurora.org/external/qoriq/qoriq-components/linux>`_. 123 1243. **Rootfile system** 125 126 Any *aarch64* supporting filesystem can be used. For example, 127 Ubuntu 16.04 LTS (Xenial) or 18.04 (Bionic) userland which can be obtained 128 from `here <http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04.1-base-arm64.tar.gz>`_. 129 1304. The ethernet device will be registered as virtual device, so pfe has dependency on 131 **rte_bus_vdev** library and it is mandatory to use `--vdev` with value `net_pfe` to 132 run DPDK application. 133 134The following dependencies are not part of DPDK and must be installed 135separately: 136 137- **NXP Linux LSDK** 138 139 NXP Layerscape software development kit (LSDK) includes support for family 140 of QorIQ® ARM-Architecture-based system on chip (SoC) processors 141 and corresponding boards. 142 143 It includes the Linux board support packages (BSPs) for NXP SoCs, 144 a fully operational tool chain, kernel and board specific modules. 145 146 LSDK and related information can be obtained from: `LSDK <https://www.nxp.com/support/developer-resources/run-time-software/linux-software-and-development-tools/layerscape-software-development-kit:LAYERSCAPE-SDK>`_ 147 148- **pfe kernel module** 149 150 pfe kernel module can be obtained from NXP Layerscape software development kit at 151 location `/lib/modules/<kernel version>/kernel/drivers/staging/fsl_ppfe` in rootfs. 152 Module should be loaded using below command: 153 154 .. code-block:: console 155 156 insmod pfe.ko us=1 157 158 159Driver compilation and testing 160~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 161 162Follow instructions available in the document 163:ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` 164to launch **testpmd** 165 166Additionally, PFE driver needs `--vdev` as an input with value `net_pfe` 167to execute DPDK application. There is an optional parameter `intf` available 168to specify port ID. PFE driver supports only two interfaces, so valid values 169for `intf` are 0 and 1. 170see the command below: 171 172 .. code-block:: console 173 174 <dpdk app> <EAL args> --vdev="net_pfe0,intf=0" --vdev="net_pfe1,intf=1" -- ... 175 176 177Limitations 178~~~~~~~~~~~ 179 180- Multi buffer pool cannot be supported. 181