[dpdk-dev] [PATCHv7 00/47] NXP DPAA2 PMD

Hemant Agrawal hemant.agrawal at nxp.com
Thu Feb 16 01:38:59 CET 2017


The patch series adds NXP’s QorIQ-Layerscape DPAA2 Architecture based
fsl-mc bus driver and network SoC PMD.  This version of the driver
supports NXP LS208xA, LS204xA and LS108x families Network SoCs.

DPAA2, or Data Path Acceleration Architecture, is a hardware architecture
designed for high-speed network packet processing. It uses a bus name
‘fsl-mc’, part of Linux Kernel Staging tree [1], for resource management.

A brief description of architecture is given below; detailed description
is part of the documentation in the patches itself.

DPAA2 contains hardware component called the Management Complex (or MC).
It manages the DPAA2 hardware resources.  The MC provides an object-based
abstraction for software drivers to use the DPAA2 hardware.

Some of the key objects are:
    - DPNI, which refers to the network interface object.
    - DPBP, which refers to HW based memory pool object
    - DPIO, refers to processing context for accessing QBMAN

Besides the MC, DPAA2 also includes a Hardware based Queue and Buffer Manager
called QBMAN. Prime responsibility of QBMAN is to allow lockless access to
software/user-space to the queues and buffers implemented in the hardware.

The patch series could be logically structured into following sub-areas:
1. Make file changes for crc in armv8 core machine type and driver dependency
2. Common dpaa2 hw accelerator drivers for QBMAN.
3. Indroducing fsl-mc bus as rte_bus, it's componenets.
4. Introducing dpaa2 pmd driver
5. Introducing dpaa2 mempool 
6. Support for DPAA2 Ethernet Device (ethdev)
7. Additional functionality in DPAA2 ethdev.

The following design decisions are made during development:

1. DPAA2 implements a new bus called "fsl-mc" and some common accelerator drivers.
   These drivers will be shared with dpaa2 based crypto drivers.

2. DPAA2 implements the HW mempool offload with DPBP object.
 - The new pool is being configured using compile time option and pool name
   as "dpaa2".

3. It maintains per lcore DPIO objects and affine the DPIO instance to the
   processing threads accessing the QBMAN HW.

Prerequisites:
 - For running the PMD, NXP's SoC (board) and SDK (software/BSP) is required.
   Information about obtaining relevant software is available in the docs
   as part of the patch.
 - At present the series has limited support for Ethernet functions. But,
   more functionality would be made available in a phased manner.

Future Changes/Caveats:

1. VFIO code for fsl-mc bus is different than eal-vfio code for pci bus.
   This need to be re-worked to make possible re-use of the existing code.

2. DPAA2 PMD has dependency on internal driver component and bus. The internal
   driver apis are not having "rte_" naming convention. 

References:
[1] https://www.kernel.org/doc/readme/drivers-staging-fsl-mc-README.txt

---
v7:
* rebased over master (17.02)
* fix the shared lib compilation
* re partitiion the patches as per Ferruh comments.
* handling Ferruh's comment for NXP dpaa2 driver

v6:
* rebased over master (61207d0)
* removing DPAA2_COMMON as configurable option
* renaming drivers bus, pool libraries removing 'pmd'
* Headers of Licenses
* exposed variable renaming with *rte_*  prefix
* handling Ferruh's comment for NXP dpaa2 driver
* moving around MAINTAINER and DOC file patches 

v5:
* rebased over master (6818a7f4)

v4:
* rebased over master (1feda4d8) and patches from Shreyansh [1] for Bus Arch.

v3:
* rebased over master (eac901ce2) and patches from Shreyansh [1] for Bus Arch.
* Fixed comment from John on Patch-0003 for documentation
* Removed Patch-0001 for rte_device in rte_eth_dev; Already upstreamed through
  another series

v2:
* separated the "fsl-mc" bus from the dpaa2 pmd driver - introduced drivers/bus
* separated the "dpaa2" hw mempool from dpaa2 pmd driver - introduced drivers/pool
* removed documentation warnings and missing information.
* removed arm64 part specific code from driver
* changed rte_panic to errors
* reduced checkpatch warnings

Hemant Agrawal (46):
  mk/dpaa2: add the crc support to the machine type
  common/dpaa2: adding qbman driver
  bus/fslmc: introducing fsl-mc bus driver
  bus/fslmc: introduce MC object functions
  bus/fslmc: add mc dpni object support
  bus/fslmc: add mc dpio object support
  bus/fslmc: add mc dpbp object support
  bus/fslmc: add mc dpseci object support
  eal/vfio: adding vfio utility functions in map file
  bus/fslmc: add vfio support
  bus/fslmc: scan for net and sec devices
  net/dpaa2: introducing NXP DPAA2 PMD driver
  doc: add DPAA2 NIC details
  bus/fslmc: add debug log support
  net/dpaa2: add debug log support
  common/dpaa2: add debug log support
  config: enable support for DPAA2 debug logging
  bus/fslmc: dpio portal driver
  pool/dpaa2: add DPAA2 hardware offloaded mempool
  bus/fslmc: affine dpio to crypto threads
  bus/fslmc: define queues for DPAA2 devices
  net/dpaa2: adding eth ops to dpaa2
  net/dpaa2: add RSS flow distribution
  net/dpaa2: configure MAC address at init
  bus/fslmc: define hardware annotation area size
  net/dpaa2: attach the buffer pool to dpni
  bus/fslmc: introduce true and false macros
  net/dpaa2: add support for L3 and L4 checksum offload
  net/dpaa2: add support for promiscuous mode
  bus/fslmc: define VLAN header length
  net/dpaa2: add MTU configuration support
  bus/fslmc: add packet FLE definitions
  net/dpaa2: enable packet Rx and Tx operations
  net/dpaa2: support for Rx packet parsing and packet type
  net/dpaa2: link status update
  net/dpaa2: basic stats support
  net/dpaa2: enable stashing for LS2088A devices
  net/dpaa2: handle non-hardware backed buffer pool
  bus/fslmc: add physical-virtual address translation helpers
  pool/dpaa2: enable physical addressing for pool buffers
  net/dpaa2: enable physical addressing for packet buffers
  config: add configuration for toggling physical addressing
  bus/fslmc: add support for DMA mapping for ARM SMMU
  net/dpaa2: enable DMA Mapping during device scanning
  bus/fslmc: frame queue based dq storage alloc
  net/dpaa2: enable frame queue based dequeuing

Shreyansh Jain (1):
  mk: handle intra drivers dependencies for shared build

 MAINTAINERS                                        |    8 +
 config/common_base                                 |   21 +
 config/defconfig_arm64-dpaa2-linuxapp-gcc          |   27 +-
 doc/guides/nics/dpaa2.rst                          |  593 ++++++++
 doc/guides/nics/features/dpaa2.ini                 |   18 +
 doc/guides/nics/index.rst                          |    1 +
 doc/guides/rel_notes/release_17_02.rst             |   12 +-
 drivers/Makefile                                   |    3 +
 drivers/bus/Makefile                               |   38 +
 drivers/bus/fslmc/Makefile                         |   81 ++
 drivers/bus/fslmc/fslmc_bus.c                      |  135 ++
 drivers/bus/fslmc/fslmc_logs.h                     |   76 +
 drivers/bus/fslmc/fslmc_vfio.c                     |  629 ++++++++
 drivers/bus/fslmc/fslmc_vfio.h                     |   82 ++
 drivers/bus/fslmc/mc/dpbp.c                        |  237 ++++
 drivers/bus/fslmc/mc/dpio.c                        |  279 ++++
 drivers/bus/fslmc/mc/dpni.c                        |  739 ++++++++++
 drivers/bus/fslmc/mc/dpseci.c                      |  534 +++++++
 drivers/bus/fslmc/mc/fsl_dpbp.h                    |  227 +++
 drivers/bus/fslmc/mc/fsl_dpbp_cmd.h                |   83 ++
 drivers/bus/fslmc/mc/fsl_dpio.h                    |  282 ++++
 drivers/bus/fslmc/mc/fsl_dpio_cmd.h                |  121 ++
 drivers/bus/fslmc/mc/fsl_dpkg.h                    |  184 +++
 drivers/bus/fslmc/mc/fsl_dpni.h                    | 1217 ++++++++++++++++
 drivers/bus/fslmc/mc/fsl_dpni_cmd.h                |  334 +++++
 drivers/bus/fslmc/mc/fsl_dpseci.h                  |  668 +++++++++
 drivers/bus/fslmc/mc/fsl_dpseci_cmd.h              |  255 ++++
 drivers/bus/fslmc/mc/fsl_mc_cmd.h                  |  238 ++++
 drivers/bus/fslmc/mc/fsl_mc_sys.h                  |  105 ++
 drivers/bus/fslmc/mc/fsl_net.h                     |  487 +++++++
 drivers/bus/fslmc/mc/mc_sys.c                      |  114 ++
 drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c           |  137 ++
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.c           |  441 ++++++
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h           |   70 +
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h            |  247 ++++
 drivers/bus/fslmc/rte_bus_fslmc_version.map        |   61 +
 drivers/bus/fslmc/rte_fslmc.h                      |  148 ++
 drivers/common/Makefile                            |   48 +
 drivers/common/dpaa2/Makefile                      |   48 +
 drivers/common/dpaa2/qbman/Makefile                |   70 +
 drivers/common/dpaa2/qbman/include/compat.h        |  406 ++++++
 .../common/dpaa2/qbman/include/fsl_qbman_base.h    |  160 +++
 .../common/dpaa2/qbman/include/fsl_qbman_portal.h  | 1093 ++++++++++++++
 drivers/common/dpaa2/qbman/qbman_portal.c          | 1496 ++++++++++++++++++++
 drivers/common/dpaa2/qbman/qbman_portal.h          |  277 ++++
 drivers/common/dpaa2/qbman/qbman_private.h         |  170 +++
 drivers/common/dpaa2/qbman/qbman_sys.h             |  385 +++++
 drivers/common/dpaa2/qbman/qbman_sys_decl.h        |   73 +
 .../dpaa2/qbman/rte_common_dpaa2_qbman_version.map |   27 +
 drivers/net/Makefile                               |    2 +-
 drivers/net/dpaa2/Makefile                         |   76 +
 drivers/net/dpaa2/base/dpaa2_hw_dpni.c             |  344 +++++
 drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h       |  257 ++++
 drivers/net/dpaa2/dpaa2_ethdev.c                   | 1040 ++++++++++++++
 drivers/net/dpaa2/dpaa2_ethdev.h                   |   83 ++
 drivers/net/dpaa2/dpaa2_rxtx.c                     |  422 ++++++
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map        |    4 +
 drivers/pool/Makefile                              |   40 +
 drivers/pool/dpaa2/Makefile                        |   74 +
 drivers/pool/dpaa2/dpaa2_hw_mempool.c              |  352 +++++
 drivers/pool/dpaa2/dpaa2_hw_mempool.h              |   95 ++
 drivers/pool/dpaa2/rte_pool_dpaa2_version.map      |    8 +
 lib/librte_eal/bsdapp/eal/rte_eal_version.map      |    3 +
 lib/librte_eal/linuxapp/eal/rte_eal_version.map    |    3 +
 mk/machine/dpaa2/rte.vars.mk                       |    5 +-
 mk/rte.app.mk                                      |    4 +
 mk/rte.lib.mk                                      |    2 +-
 67 files changed, 15993 insertions(+), 6 deletions(-)
 create mode 100644 doc/guides/nics/dpaa2.rst
 create mode 100644 doc/guides/nics/features/dpaa2.ini
 create mode 100644 drivers/bus/Makefile
 create mode 100644 drivers/bus/fslmc/Makefile
 create mode 100644 drivers/bus/fslmc/fslmc_bus.c
 create mode 100644 drivers/bus/fslmc/fslmc_logs.h
 create mode 100644 drivers/bus/fslmc/fslmc_vfio.c
 create mode 100644 drivers/bus/fslmc/fslmc_vfio.h
 create mode 100644 drivers/bus/fslmc/mc/dpbp.c
 create mode 100644 drivers/bus/fslmc/mc/dpio.c
 create mode 100644 drivers/bus/fslmc/mc/dpni.c
 create mode 100644 drivers/bus/fslmc/mc/dpseci.c
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpbp.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpbp_cmd.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpio.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpio_cmd.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpkg.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpni.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpni_cmd.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpseci.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_dpseci_cmd.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_mc_cmd.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_mc_sys.h
 create mode 100644 drivers/bus/fslmc/mc/fsl_net.h
 create mode 100644 drivers/bus/fslmc/mc/mc_sys.c
 create mode 100644 drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c
 create mode 100644 drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
 create mode 100644 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
 create mode 100644 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
 create mode 100644 drivers/bus/fslmc/rte_bus_fslmc_version.map
 create mode 100644 drivers/bus/fslmc/rte_fslmc.h
 create mode 100644 drivers/common/Makefile
 create mode 100644 drivers/common/dpaa2/Makefile
 create mode 100644 drivers/common/dpaa2/qbman/Makefile
 create mode 100644 drivers/common/dpaa2/qbman/include/compat.h
 create mode 100644 drivers/common/dpaa2/qbman/include/fsl_qbman_base.h
 create mode 100644 drivers/common/dpaa2/qbman/include/fsl_qbman_portal.h
 create mode 100644 drivers/common/dpaa2/qbman/qbman_portal.c
 create mode 100644 drivers/common/dpaa2/qbman/qbman_portal.h
 create mode 100644 drivers/common/dpaa2/qbman/qbman_private.h
 create mode 100644 drivers/common/dpaa2/qbman/qbman_sys.h
 create mode 100644 drivers/common/dpaa2/qbman/qbman_sys_decl.h
 create mode 100644 drivers/common/dpaa2/qbman/rte_common_dpaa2_qbman_version.map
 create mode 100644 drivers/net/dpaa2/Makefile
 create mode 100644 drivers/net/dpaa2/base/dpaa2_hw_dpni.c
 create mode 100644 drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h
 create mode 100644 drivers/net/dpaa2/dpaa2_ethdev.c
 create mode 100644 drivers/net/dpaa2/dpaa2_ethdev.h
 create mode 100644 drivers/net/dpaa2/dpaa2_rxtx.c
 create mode 100644 drivers/net/dpaa2/rte_pmd_dpaa2_version.map
 create mode 100644 drivers/pool/Makefile
 create mode 100644 drivers/pool/dpaa2/Makefile
 create mode 100644 drivers/pool/dpaa2/dpaa2_hw_mempool.c
 create mode 100644 drivers/pool/dpaa2/dpaa2_hw_mempool.h
 create mode 100644 drivers/pool/dpaa2/rte_pool_dpaa2_version.map

-- 
1.9.1



More information about the dev mailing list