Skip to content

Commit

Permalink
net/ipn3ke: add new driver
Browse files Browse the repository at this point in the history
Add Intel FPGA Acceleration NIC IPN3KE ethdev PMD driver.

Signed-off-by: Rosen Xu <rosen.xu@intel.com>
Signed-off-by: Andy Pei <andy.pei@intel.com>
Signed-off-by: Dan Wei <dan.wei@intel.com>
  • Loading branch information
rosen-xu authored and Ferruh Yigit committed Apr 19, 2019
1 parent dc384b5 commit c01c748
Show file tree
Hide file tree
Showing 17 changed files with 1,922 additions and 1 deletion.
7 changes: 7 additions & 0 deletions MAINTAINERS
Expand Up @@ -633,6 +633,13 @@ F: drivers/net/ice/
F: doc/guides/nics/ice.rst
F: doc/guides/nics/features/ice.ini

Intel ipn3ke
M: Rosen Xu <rosen.xu@intel.com>
T: git://dpdk.org/next/dpdk-next-net-intel
F: drivers/net/ipn3ke/
F: doc/guides/nics/ipn3ke.rst
F: doc/guides/nics/features/ipn3ke.ini

Marvell mvpp2
M: Tomasz Duszynski <tdu@semihalf.com>
M: Liron Himi <lironh@marvell.com>
Expand Down
4 changes: 4 additions & 0 deletions config/common_base
Expand Up @@ -328,6 +328,10 @@ CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX=n
CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX_FREE=n
CONFIG_RTE_LIBRTE_IAVF_DEBUG_RX=n
CONFIG_RTE_LIBRTE_IAVF_16BYTE_RX_DESC=n
#
# Compile burst-oriented IPN3KE PMD driver
#
CONFIG_RTE_LIBRTE_IPN3KE_PMD=y

#
# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
Expand Down
55 changes: 55 additions & 0 deletions doc/guides/nics/features/ipn3ke.ini
@@ -0,0 +1,55 @@
;
; Supported features of the 'ipn3ke' network poll mode driver.
;
; Refer to default.ini for the full list of available PMD features.
;
[Features]
Speed capabilities = Y
Link status = Y
Link status event = Y
Rx interrupt = Y
Queue start/stop = Y
Runtime Rx queue setup = Y
Runtime Tx queue setup = Y
Jumbo frame = Y
Scattered Rx = Y
TSO = Y
Promiscuous mode = Y
Allmulticast mode = Y
Unicast MAC filter = Y
Multicast MAC filter = Y
RSS hash = Y
RSS key update = Y
RSS reta update = Y
VMDq = Y
SR-IOV = Y
DCB = Y
VLAN filter = Y
Ethertype filter = Y
Tunnel filter = Y
Hash filter = Y
Flow director = Y
Flow control = Y
Flow API = Y
Traffic mirroring = Y
CRC offload = Y
VLAN offload = Y
QinQ offload = Y
L3 checksum offload = Y
L4 checksum offload = Y
Inner L3 checksum = Y
Inner L4 checksum = Y
Packet type parsing = Y
Timesync = Y
Rx descriptor status = Y
Tx descriptor status = Y
Basic stats = Y
Extended stats = Y
FW version = Y
Module EEPROM dump = Y
Multiprocess aware = Y
BSD nic_uio = Y
Linux UIO = Y
Linux VFIO = Y
x86-32 = Y
x86-64 = Y
1 change: 1 addition & 0 deletions doc/guides/nics/index.rst
Expand Up @@ -31,6 +31,7 @@ Network Interface Controller Drivers
ice
ifc
igb
ipn3ke
ixgbe
intel_vf
kni
Expand Down
107 changes: 107 additions & 0 deletions doc/guides/nics/ipn3ke.rst
@@ -0,0 +1,107 @@
.. SPDX-License-Identifier: BSD-3-Clause
Copyright(c) 2019 Intel Corporation.
IPN3KE Poll Mode Driver
=======================

The ipn3ke PMD (librte_pmd_ipn3ke) provides poll mode driver support
for Intel® FPGA PAC(Programmable Acceleration Card) N3000 based on
the Intel Ethernet Controller X710/XXV710 and Intel Arria 10 FPGA.

In this card, FPGA is an acceleration bridge between network interface
and the Intel Ethernet Controller. Although both FPGA and Ethernet
Controllers are connected to CPU with PCIe Gen3x16 Switch, all the
packet RX/TX is handled by Intel Ethernet Controller. So from application
point of view the data path is still the legacy Intel Ethernet Controller
X710/XXV710 PMD. Besides this, users can enable more acceleration
features by FPGA IP.

Prerequisites
-------------

- Identifying your adapter using `Intel Support
<http://www.intel.com/support>`_ and get the latest NVM/FW images.

- Follow the DPDK :ref:`Getting Started Guide for Linux <linux_gsg>` to setup the basic DPDK environment.

- To get better performance on Intel platforms, please follow the "How to get best performance with NICs on Intel platforms"
section of the :ref:`Getting Started Guide for Linux <linux_gsg>`.


Pre-Installation Configuration
------------------------------

Config File Options
~~~~~~~~~~~~~~~~~~~

The following options can be modified in the ``config`` file.

- ``CONFIG_RTE_LIBRTE_IPN3KE_PMD`` (default ``y``)

Toggle compilation of the ``librte_pmd_ipn3ke`` driver.

Runtime Config Options
~~~~~~~~~~~~~~~~~~~~~~

- ``AFU name``

AFU name identifies which AFU is used by IPN3KE. The AFU name format is "Port|BDF",
Each FPGA can be divided into four blocks at most. "Port" identifies which FPGA block
the AFU bitstream belongs to, but currently only 0 IPN3KE support. "BDF" means FPGA PCIe BDF.
For example::

--vdev 'ipn3ke_cfg0,afu=0|b3:00.0'

- ``FPGA Acceleration list``

For IPN3KE FPGA can provide different bitstream, different bitstream includes different
Acceleration, so users need to identify which Acceleration is used. Current IPN3KE can
support TM and Flow Acceleration, for example::

--vdev 'ipn3ke_cfg0,afu=0|b3:00.0,fpga_acc={tm|flow}'

- ``I40e PF name list``

Users need to bind FPGA LineSidePort to FVL PF. So I40e PF name list should be involved in
startup command. For example::

--vdev 'ipn3ke_cfg0,afu=0|b3:00.0,fpga_acc={tm|flow},i40e_pf={0000:b1:00.0|0000:b1:00.1|0000:b1:00.2|0000:b1:00.3|0000:b5:00.0|0000:b5:00.1|0000:b5:00.2|0000:b5:00.3}'

Driver compilation and testing
------------------------------

Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
for details.

Sample Application Notes
------------------------

Packet TX/RX with FPGA Pass-through image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FPGA Pass-through bitstream is original FPGA Image.

To start ``testpmd``, and add I40e PF to FPGA network port:

.. code-block:: console
./app/testpmd -l 0-15 -n 4 --vdev 'ifpga_rawdev_cfg0,ifpga=b3:00.0,port=0' --vdev 'ipn3ke_cfg0,afu=0|b3:00.0,i40e_pf={0000:b1:00.0|0000:b1:00.1|0000:b1:00.2|0000:b1:00.3|0000:b5:00.0|0000:b5:00.1|0000:b5:00.2|0000:b5:00.3}' -- -i --no-numa --port-topology=loop
HQoS and flow acceleration
~~~~~~~~~~~~~~~~~~~~~~~~~~

HQoS and flow acceleration bitstream is used to offloading HQoS and flow classifier.

To start ``testpmd``, and add I40e PF to FPGA network port, enable FPGA HQoS and Flow Acceleration:

.. code-block:: console
./app/testpmd -l 0-15 -n 4 --vdev 'ifpga_rawdev_cfg0,ifpga=b3:00.0,port=0' --vdev 'ipn3ke_cfg0,afu=0|b3:00.0,fpga_acc={tm|flow},i40e_pf={0000:b1:00.0|0000:b1:00.1|0000:b1:00.2|0000:b1:00.3|0000:b5:00.0|0000:b5:00.1|0000:b5:00.2|0000:b5:00.3}' -- -i --no-numa --forward-mode=macswap
Limitations or Known issues
---------------------------

19.05 limitation
~~~~~~~~~~~~~~~~

Ipn3ke code released in 19.05 is for evaluation only.
9 changes: 9 additions & 0 deletions doc/guides/rel_notes/release_19_05.rst
Expand Up @@ -89,6 +89,15 @@ New Features
Added the new ``nfb`` net driver for Netcope NFB cards. See
the :doc:`../nics/nfb` NIC guide for more details on this new driver.

* **Added IPN3KE net PMD.**

Added the new ``ipn3ke`` net driver for Intel® FPGA PAC(Programmable
Acceleration Card) N3000. See the :doc:`../nics/ipn3ke` NIC guide for more
details on this new driver.

Aside from this, ifpga_rawdev is also updated to support Intel® FPGA PAC
N3000 with SPI interface access, I2C Read/Write and Ethernet PHY configuration.

* **Updated Solarflare network PMD.**

Updated the sfc_efx driver including the following changes:
Expand Down
1 change: 1 addition & 0 deletions drivers/net/Makefile
Expand Up @@ -32,6 +32,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += fm10k
DIRS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += i40e
DIRS-$(CONFIG_RTE_LIBRTE_IAVF_PMD) += iavf
DIRS-$(CONFIG_RTE_LIBRTE_ICE_PMD) += ice
DIRS-$(CONFIG_RTE_LIBRTE_IPN3KE_PMD) += ipn3ke
DIRS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += ixgbe
DIRS-$(CONFIG_RTE_LIBRTE_LIO_PMD) += liquidio
DIRS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4
Expand Down
36 changes: 36 additions & 0 deletions drivers/net/ipn3ke/Makefile
@@ -0,0 +1,36 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2019 Intel Corporation

include $(RTE_SDK)/mk/rte.vars.mk

#
# library name
#
LIB = librte_pmd_ipn3ke.a

#
# Add the experimenatal APIs called from this PMD
# rte_eth_switch_domain_alloc()
# rte_eth_dev_create()
# rte_eth_dev_destroy()
# rte_eth_switch_domain_free()
#
CFLAGS += -DALLOW_EXPERIMENTAL_API
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -I$(RTE_SDK)/drivers/bus/ifpga
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs
LDLIBS += -lrte_bus_ifpga
LDLIBS += -lrte_bus_vdev

EXPORT_MAP := rte_pmd_ipn3ke_version.map

LIBABIVER := 1

#
# all source are stored in SRCS-y
#
SRCS-$(CONFIG_RTE_LIBRTE_IPN3KE_PMD) += ipn3ke_ethdev.c

include $(RTE_SDK)/mk/rte.lib.mk

0 comments on commit c01c748

Please sign in to comment.