New upstream version 18.02
[deb_dpdk.git] / doc / guides / nics / dpaa.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright 2017 NXP
3
4
5 DPAA Poll Mode Driver
6 =====================
7
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.
10
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>`_.
13
14 NXP DPAA (Data Path Acceleration Architecture - Gen 1)
15 ------------------------------------------------------
16
17 This section provides an overview of the NXP DPAA architecture
18 and how it is integrated into the DPDK.
19
20 Contents summary
21
22 - DPAA overview
23 - DPAA driver architecture overview
24
25 .. _dpaa_overview:
26
27 DPAA Overview
28 ~~~~~~~~~~~~~
29
30 Reference: `FSL DPAA Architecture <http://www.nxp.com/assets/documents/data/en/white-papers/QORIQDPAAWP.pdf>`_.
31
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
36 themselves.
37
38 DPAA includes:
39
40 - Cores
41 - Network and packet I/O
42 - Hardware offload accelerators
43 - Infrastructure required to facilitate flow of packets between the components above
44
45 Infrastructure components are:
46
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.
54
55 Hardware accelerators are:
56
57 - SEC - Cryptographic accelerator
58 - PME - Pattern matching engine
59
60 The Network and packet I/O component:
61
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.
67
68
69 DPAA DPDK - Poll Mode Driver Overview
70 -------------------------------------
71
72 This section provides an overview of the drivers for DPAA:
73
74 * Bus driver and associated "DPAA infrastructure" drivers
75 * Functional object drivers (such as Ethernet).
76
77 Brief description of each driver is provided in layout below as well as
78 in the following sections.
79
80 .. code-block:: console
81
82                                        +------------+
83                                        | DPDK DPAA  |
84                                        |    PMD     |
85                                        +-----+------+
86                                              |
87                                        +-----+------+       +---------------+
88                                        :  Ethernet  :.......| DPDK DPAA     |
89                     . . . . . . . . .  :   (FMAN)   :       | Mempool driver|
90                    .                   +---+---+----+       |  (BMAN)       |
91                   .                        ^   |            +-----+---------+
92                  .                         |   |<enqueue,         .
93                 .                          |   | dequeue>         .
94                .                           |   |                  .
95               .                        +---+---V----+             .
96              .      . . . . . . . . . .: Portal drv :             .
97             .      .                   :            :             .
98            .      .                    +-----+------+             .
99           .      .                     :   QMAN     :             .
100          .      .                      :  Driver    :             .
101     +----+------+-------+              +-----+------+             .
102     |   DPDK DPAA Bus   |                    |                    .
103     |   driver          |....................|.....................
104     |   /bus/dpaa       |                    |
105     +-------------------+                    |
106                                              |
107     ========================== HARDWARE =====|========================
108                                             PHY
109     =========================================|========================
110
111 In the above representation, solid lines represent components which interface
112 with DPDK RTE Framework and dotted lines represent DPAA internal components.
113
114 DPAA Bus driver
115 ~~~~~~~~~~~~~~~
116
117 The DPAA bus driver is a ``rte_bus`` driver which scans the platform like bus.
118 Key functions include:
119
120 - Scanning and parsing the various objects and adding them to their respective
121   device list.
122 - Performing probe for available drivers against each scanned device
123 - Creating necessary ethernet instance before passing control to the PMD
124
125 DPAA NIC Driver (PMD)
126 ~~~~~~~~~~~~~~~~~~~~~
127
128 DPAA PMD is traditional DPDK PMD which provides necessary interface between
129 RTE framework and DPAA internal components/drivers.
130
131 - Once devices have been identified by DPAA Bus, each device is associated
132   with the PMD
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.
138
139
140 Features
141 ^^^^^^^^
142
143   Features of the DPAA PMD are:
144
145   - Multiple queues for TX and RX
146   - Receive Side Scaling (RSS)
147   - Packet type information
148   - Checksum offload
149   - Promiscuous mode
150
151 DPAA Mempool Driver
152 ~~~~~~~~~~~~~~~~~~~
153
154 DPAA has a hardware offloaded buffer pool manager, called BMan, or Buffer
155 Manager.
156
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
162   this pool.
163
164
165 Supported DPAA SoCs
166 -------------------
167
168 - LS1043A/LS1023A
169 - LS1046A/LS1026A
170
171 Prerequisites
172 -------------
173
174 There are three main pre-requisities for executing DPAA PMD on a DPAA
175 compatible board:
176
177 1. **ARM 64 Tool Chain**
178
179    For example, the `*aarch64* Linaro Toolchain <https://releases.linaro.org/components/toolchain/binaries/6.4-2017.08/aarch64-linux-gnu/>`_.
180
181 2. **Linux Kernel**
182
183    It can be obtained from `NXP's Github hosting <https://github.com/qoriq-open-source/linux>`_.
184
185 3. **Rootfile system**
186
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>`_.
190
191 4. **FMC Tool**
192
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>`_.
197
198    This tool needs configuration files which are available in the
199    :ref:`DPDK Extra Scripts <extra_scripts>`, described below for DPDK usages.
200
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.
204
205 The following dependencies are not part of DPDK and must be installed
206 separately:
207
208 - **NXP Linux SDK**
209
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.
213
214   It includes the Linux board support packages (BSPs) for NXP SoCs,
215   a fully operational tool chain, kernel and board specific modules.
216
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>`_.
218
219
220 .. _extra_scripts:
221
222 - **DPDK Extra Scripts**
223
224   DPAA based resources can be configured easily with the help of ready scripts
225   as provided in the DPDK Extra repository.
226
227   `DPDK Extras Scripts <https://github.com/qoriq-open-source/dpdk-extras>`_.
228
229 Currently supported by DPDK:
230
231 - NXP SDK **2.0+**.
232 - Supported architectures:  **arm64 LE**.
233
234 - Follow the DPDK :ref:`Getting Started Guide for Linux <linux_gsg>`
235   to setup the basic DPDK environment.
236
237 .. note::
238
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.
241
242 Pre-Installation Configuration
243 ------------------------------
244
245 Config File Options
246 ~~~~~~~~~~~~~~~~~~~
247
248 The following options can be modified in the ``config`` file.
249 Please note that enabling debugging options may affect system performance.
250
251 - ``CONFIG_RTE_LIBRTE_DPAA_BUS`` (default ``n``)
252
253   By default it is enabled only for defconfig_arm64-dpaa-* config.
254   Toggle compilation of the ``librte_bus_dpaa`` driver.
255
256 - ``CONFIG_RTE_LIBRTE_DPAA_PMD`` (default ``n``)
257
258   By default it is enabled only for defconfig_arm64-dpaa-* config.
259   Toggle compilation of the ``librte_pmd_dpaa`` driver.
260
261 - ``CONFIG_RTE_LIBRTE_DPAA_DEBUG_DRIVER`` (default ``n``)
262
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.
266
267 - ``CONFIG_RTE_LIBRTE_DPAA_HWDEBUG`` (default ``n``)
268
269   Enables debugging of the Queue and Buffer Manager layer which interacts
270   with the DPAA hardware.
271
272 - ``CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS`` (default ``dpaa``)
273
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
277   enabled.
278
279 Environment Variables
280 ~~~~~~~~~~~~~~~~~~~~~
281
282 DPAA drivers uses the following environment variables to configure its
283 state during application initialization:
284
285 - ``DPAA_NUM_RX_QUEUES`` (default 1)
286
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
289   of packets.
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).
292
293 - ``DPAA_PUSH_QUEUES_NUMBER`` (default 4)
294
295   This defines the number of High performance queues to be used for ethdev Rx.
296   These queues use one private HW portal per queue configured, so they are
297   limited in the system. The first configured ethdev queues will be
298   automatically be assigned from the these high perf PUSH queues. Any queue
299   configuration beyond that will be standard Rx queues. The application can
300   choose to change their number if HW portals are limited.
301   The valid values are from '0' to '4'. The valuse shall be set to '0' if the
302   application want to use eventdev with DPAA device.
303
304
305 Driver compilation and testing
306 ------------------------------
307
308 Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
309 for details.
310
311 #. Running testpmd:
312
313    Follow instructions available in the document
314    :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
315    to run testpmd.
316
317    Example output:
318
319    .. code-block:: console
320
321       ./arm64-dpaa-linuxapp-gcc/testpmd -c 0xff -n 1 \
322         -- -i --portmask=0x3 --nb-cores=1 --no-flush-rx
323
324       .....
325       EAL: Registered [pci] bus.
326       EAL: Registered [dpaa] bus.
327       EAL: Detected 4 lcore(s)
328       .....
329       EAL: dpaa: Bus scan completed
330       .....
331       Configuring Port 0 (socket 0)
332       Port 0: 00:00:00:00:00:01
333       Configuring Port 1 (socket 0)
334       Port 1: 00:00:00:00:00:02
335       .....
336       Checking link statuses...
337       Port 0 Link Up - speed 10000 Mbps - full-duplex
338       Port 1 Link Up - speed 10000 Mbps - full-duplex
339       Done
340       testpmd>
341
342 Limitations
343 -----------
344
345 Platform Requirement
346 ~~~~~~~~~~~~~~~~~~~~
347
348 DPAA drivers for DPDK can only work on NXP SoCs as listed in the
349 ``Supported DPAA SoCs``.
350
351 Maximum packet length
352 ~~~~~~~~~~~~~~~~~~~~~
353
354 The DPAA SoC family support a maximum of a 10240 jumbo frame. The value
355 is fixed and cannot be changed. So, even when the ``rxmode.max_rx_pkt_len``
356 member of ``struct rte_eth_conf`` is set to a value lower than 10240, frames
357 up to 10240 bytes can still reach the host interface.
358
359 Multiprocess Support
360 ~~~~~~~~~~~~~~~~~~~~
361
362 Current version of DPAA driver doesn't support multi-process applications
363 where I/O is performed using secondary processes. This feature would be
364 implemented in subsequent versions.