1 .. SPDX-License-Identifier: BSD-3-Clause
8 The DPAA NIC PMD (**librte_pmd_dpaa**) provides poll mode driver
9 support for the inbuilt NIC found in the **NXP DPAA** SoC family.
11 More information can be found at `NXP Official Website
12 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/qoriq-arm-processors:QORIQ-ARM>`_.
14 NXP DPAA (Data Path Acceleration Architecture - Gen 1)
15 ------------------------------------------------------
17 This section provides an overview of the NXP DPAA architecture
18 and how it is integrated into the DPDK.
23 - DPAA driver architecture overview
30 Reference: `FSL DPAA Architecture <http://www.nxp.com/assets/documents/data/en/white-papers/QORIQDPAAWP.pdf>`_.
32 The QorIQ Data Path Acceleration Architecture (DPAA) is a set of hardware
33 components on specific QorIQ series multicore processors. This architecture
34 provides the infrastructure to support simplified sharing of networking
35 interfaces and accelerators by multiple CPU cores, and the accelerators
41 - Network and packet I/O
42 - Hardware offload accelerators
43 - Infrastructure required to facilitate flow of packets between the components above
45 Infrastructure components are:
47 - The Queue Manager (QMan) is a hardware accelerator that manages frame queues.
48 It allows CPUs and other accelerators connected to the SoC datapath to
49 enqueue and dequeue ethernet frames, thus providing the infrastructure for
50 data exchange among CPUs and datapath accelerators.
51 - The Buffer Manager (BMan) is a hardware buffer pool management block that
52 allows software and accelerators on the datapath to acquire and release
53 buffers in order to build frames.
55 Hardware accelerators are:
57 - SEC - Cryptographic accelerator
58 - PME - Pattern matching engine
60 The Network and packet I/O component:
62 - The Frame Manager (FMan) is a key component in the DPAA and makes use of the
63 DPAA infrastructure (QMan and BMan). FMan is responsible for packet
64 distribution and policing. Each frame can be parsed, classified and results
65 may be attached to the frame. This meta data can be used to select
66 particular QMan queue, which the packet is forwarded to.
69 DPAA DPDK - Poll Mode Driver Overview
70 -------------------------------------
72 This section provides an overview of the drivers for DPAA:
74 * Bus driver and associated "DPAA infrastructure" drivers
75 * Functional object drivers (such as Ethernet).
77 Brief description of each driver is provided in layout below as well as
78 in the following sections.
80 .. code-block:: console
87 +-----+------+ +---------------+
88 : Ethernet :.......| DPDK DPAA |
89 . . . . . . . . . : (FMAN) : | Mempool driver|
90 . +---+---+----+ | (BMAN) |
91 . ^ | +-----+---------+
96 . . . . . . . . . . .: Portal drv : .
101 +----+------+-------+ +-----+------+ .
102 | DPDK DPAA Bus | | .
103 | driver |....................|.....................
105 +-------------------+ |
107 ========================== HARDWARE =====|========================
109 =========================================|========================
111 In the above representation, solid lines represent components which interface
112 with DPDK RTE Framework and dotted lines represent DPAA internal components.
117 The DPAA bus driver is a ``rte_bus`` driver which scans the platform like bus.
118 Key functions include:
120 - Scanning and parsing the various objects and adding them to their respective
122 - Performing probe for available drivers against each scanned device
123 - Creating necessary ethernet instance before passing control to the PMD
125 DPAA NIC Driver (PMD)
126 ~~~~~~~~~~~~~~~~~~~~~
128 DPAA PMD is traditional DPDK PMD which provides necessary interface between
129 RTE framework and DPAA internal components/drivers.
131 - Once devices have been identified by DPAA Bus, each device is associated
133 - PMD is responsible for implementing necessary glue layer between RTE APIs
134 and lower level QMan and FMan blocks.
135 The Ethernet driver is bound to a FMAN port and implements the interfaces
136 needed to connect the DPAA network interface to the network stack.
137 Each FMAN Port corresponds to a DPDK network interface.
143 Features of the DPAA PMD are:
145 - Multiple queues for TX and RX
146 - Receive Side Scaling (RSS)
147 - Packet type information
154 DPAA has a hardware offloaded buffer pool manager, called BMan, or Buffer
157 - Using standard Mempools operations RTE API, the mempool driver interfaces
158 with RTE to service each mempool creation, deletion, buffer allocation and
159 deallocation requests.
160 - Each FMAN instance has a BMan pool attached to it during initialization.
161 Each Tx frame can be automatically released by hardware, if allocated from
174 There are three main pre-requisities for executing DPAA PMD on a DPAA
177 1. **ARM 64 Tool Chain**
179 For example, the `*aarch64* Linaro Toolchain <https://releases.linaro.org/components/toolchain/binaries/6.4-2017.08/aarch64-linux-gnu/>`_.
183 It can be obtained from `NXP's Github hosting <https://github.com/qoriq-open-source/linux>`_.
185 3. **Rootfile system**
187 Any *aarch64* supporting filesystem can be used. For example,
188 Ubuntu 15.10 (Wily) or 16.04 LTS (Xenial) userland which can be obtained
189 from `here <http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04.1-base-arm64.tar.gz>`_.
193 Before any DPDK application can be executed, the Frame Manager Configuration
194 Tool (FMC) need to be executed to set the configurations of the queues. This
195 includes the queue state, RSS and other policies.
196 This tool can be obtained from `NXP (Freescale) Public Git Repository <https://github.com/qoriq-open-source/fmc>`_.
198 This tool needs configuration files which are available in the
199 :ref:`DPDK Extra Scripts <extra_scripts>`, described below for DPDK usages.
201 As an alternative method, DPAA PMD can also be executed using images provided
202 as part of SDK from NXP. The SDK includes all the above prerequisites necessary
203 to bring up a DPAA board.
205 The following dependencies are not part of DPDK and must be installed
210 NXP Linux software development kit (SDK) includes support for family
211 of QorIQ® ARM-Architecture-based system on chip (SoC) processors
212 and corresponding boards.
214 It includes the Linux board support packages (BSPs) for NXP SoCs,
215 a fully operational tool chain, kernel and board specific modules.
217 SDK and related information can be obtained from: `NXP QorIQ SDK <http://www.nxp.com/products/software-and-tools/run-time-software/linux-sdk/linux-sdk-for-qoriq-processors:SDKLINUX>`_.
222 - **DPDK Extra Scripts**
224 DPAA based resources can be configured easily with the help of ready scripts
225 as provided in the DPDK Extra repository.
227 `DPDK Extras Scripts <https://github.com/qoriq-open-source/dpdk-extras>`_.
229 Currently supported by DPDK:
232 - Supported architectures: **arm64 LE**.
234 - Follow the DPDK :ref:`Getting Started Guide for Linux <linux_gsg>`
235 to setup the basic DPDK environment.
239 Some part of dpaa bus code (qbman and fman - library) routines are
240 dual licensed (BSD & GPLv2), however they are used as BSD in DPDK in userspace.
242 Pre-Installation Configuration
243 ------------------------------
248 The following options can be modified in the ``config`` file.
249 Please note that enabling debugging options may affect system performance.
251 - ``CONFIG_RTE_LIBRTE_DPAA_BUS`` (default ``n``)
253 By default it is enabled only for defconfig_arm64-dpaa-* config.
254 Toggle compilation of the ``librte_bus_dpaa`` driver.
256 - ``CONFIG_RTE_LIBRTE_DPAA_PMD`` (default ``n``)
258 By default it is enabled only for defconfig_arm64-dpaa-* config.
259 Toggle compilation of the ``librte_pmd_dpaa`` driver.
261 - ``CONFIG_RTE_LIBRTE_DPAA_DEBUG_DRIVER`` (default ``n``)
263 Toggles display of bus configurations and enables a debugging queue
264 to fetch error (Rx/Tx) packets to driver. By default, packets with errors
265 (like wrong checksum) are dropped by the hardware.
267 - ``CONFIG_RTE_LIBRTE_DPAA_HWDEBUG`` (default ``n``)
269 Enables debugging of the Queue and Buffer Manager layer which interacts
270 with the DPAA hardware.
272 - ``CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS`` (default ``dpaa``)
274 This is not a DPAA specific configuration - it is a generic RTE config.
275 For optimal performance and hardware utilization, it is expected that DPAA
276 Mempool driver is used for mempools. For that, this configuration needs to
279 Environment Variables
280 ~~~~~~~~~~~~~~~~~~~~~
282 DPAA drivers uses the following environment variables to configure its
283 state during application initialization:
285 - ``DPAA_NUM_RX_QUEUES`` (default 1)
287 This defines the number of Rx queues configured for an application, per
288 port. Hardware would distribute across these many number of queues on Rx
290 In case the application is configured to use lesser number of queues than
291 configured above, it might result in packet loss (because of distribution).
294 Driver compilation and testing
295 ------------------------------
297 Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
302 Follow instructions available in the document
303 :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
308 .. code-block:: console
310 ./arm64-dpaa-linuxapp-gcc/testpmd -c 0xff -n 1 \
311 -- -i --portmask=0x3 --nb-cores=1 --no-flush-rx
314 EAL: Registered [pci] bus.
315 EAL: Registered [dpaa] bus.
316 EAL: Detected 4 lcore(s)
318 EAL: dpaa: Bus scan completed
320 Configuring Port 0 (socket 0)
321 Port 0: 00:00:00:00:00:01
322 Configuring Port 1 (socket 0)
323 Port 1: 00:00:00:00:00:02
325 Checking link statuses...
326 Port 0 Link Up - speed 10000 Mbps - full-duplex
327 Port 1 Link Up - speed 10000 Mbps - full-duplex
337 DPAA drivers for DPDK can only work on NXP SoCs as listed in the
338 ``Supported DPAA SoCs``.
340 Maximum packet length
341 ~~~~~~~~~~~~~~~~~~~~~
343 The DPAA SoC family support a maximum of a 10240 jumbo frame. The value
344 is fixed and cannot be changed. So, even when the ``rxmode.max_rx_pkt_len``
345 member of ``struct rte_eth_conf`` is set to a value lower than 10240, frames
346 up to 10240 bytes can still reach the host interface.
351 Current version of DPAA driver doesn't support multi-process applications
352 where I/O is performed using secondary processes. This feature would be
353 implemented in subsequent versions.