1 .. SPDX-License-Identifier: BSD-3-Clause
7 The PFE NIC PMD (**librte_pmd_pfe**) provides poll mode driver
8 support for the inbuilt NIC found in the **NXP LS1012** SoC.
10 More information can be found at `NXP Official Website
11 <https://nxp.com/ls1012a>`_.
16 This section provides an overview of the NXP PFE
17 and how it is integrated into the DPDK.
25 - Driver compilation and testing
31 PFE is a hardware programmable packet forwarding engine to provide
32 high performance Ethernet interfaces. The diagram below shows a
33 system level overview of PFE:
35 .. code-block:: console
37 ====================================================+===============
38 US +-----------------------------------------+ | Kernel Space
40 | PFE Ethernet Driver | |
41 +-----------------------------------------+ |
43 PFE RXQ| |TXQ RXQ| |TXQ |
45 | v | v | +----------+
46 +---------+ +----------+ | | pfe.ko |
47 | net_pfe0| | net_pfe1 | | +----------+
48 +---------+ +----------+ |
53 +------------------------+ |
56 +------------------------+ |
63 ==================| HIF |==================+===============
64 +-----------+ +--------------+
66 | PFE +--------------+ |
70 +-------+-----+----------------+-----+----+
75 The HIF, PFE, MAC and PHY are the hardware blocks, the pfe.ko is a kernel
76 module, the PFE HIF driver and the PFE ethernet driver combined represent
77 as DPDK PFE poll mode driver are running in the userspace.
79 The PFE hardware supports one HIF (host interface) RX ring and one TX ring
80 to send and receive packets through packet forwarding engine. Both network
81 interface traffic is multiplexed and send over HIF queue.
83 net_pfe0 and net_pfe1 are logical ethernet interfaces, created by HIF client
84 driver. HIF driver is responsible for send and receive packets between
85 host interface and these logical interfaces. PFE ethernet driver is a
86 hardware independent and register with the HIF client driver to transmit and
87 receive packets from HIF via logical interfaces.
89 pfe.ko is required for PHY initialisation and also responsible for creating
90 the character device "pfe_us_cdev" which will be used for interacting with
91 the kernel layer for link status.
96 - L3/L4 checksum offload
107 Below are some pre-requisites for executing PFE PMD on a PFE
110 1. **ARM 64 Tool Chain**
112 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>`_.
116 It can be obtained from `NXP's Github hosting <https://source.codeaurora.org/external/qoriq/qoriq-components/linux>`_.
118 3. **Rootfile system**
120 Any *aarch64* supporting filesystem can be used. For example,
121 Ubuntu 16.04 LTS (Xenial) or 18.04 (Bionic) userland which can be obtained
122 from `here <http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04.1-base-arm64.tar.gz>`_.
124 4. The ethernet device will be registered as virtual device, so pfe has dependency on
125 **rte_bus_vdev** library and it is mandatory to use `--vdev` with value `net_pfe` to
126 run DPDK application.
128 The following dependencies are not part of DPDK and must be installed
133 NXP Layerscape software development kit (LSDK) includes support for family
134 of QorIQ® ARM-Architecture-based system on chip (SoC) processors
135 and corresponding boards.
137 It includes the Linux board support packages (BSPs) for NXP SoCs,
138 a fully operational tool chain, kernel and board specific modules.
140 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>`_
142 - **pfe kernel module**
144 pfe kernel module can be obtained from NXP Layerscape software development kit at
145 location `/lib/modules/<kernel version>/kernel/drivers/staging/fsl_ppfe` in rootfs.
146 Module should be loaded using below command:
148 .. code-block:: console
153 Driver compilation and testing
154 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
156 Follow instructions available in the document
157 :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
158 to launch **testpmd**
160 Additionally, PFE driver needs `--vdev` as an input with value `net_pfe`
161 to execute DPDK application. There is an optional parameter `intf` available
162 to specify port ID. PFE driver supports only two interfaces, so valid values
163 for `intf` are 0 and 1.
164 see the command below:
166 .. code-block:: console
168 <dpdk app> <EAL args> --vdev="net_pfe0,intf=0" --vdev="net_pfe1,intf=1" -- ...
174 - Multi buffer pool cannot be supported.