Skip to content

Commit c01c748

Browse files
rosen-xuFerruh Yigit
authored and
Ferruh Yigit
committed
net/ipn3ke: add new driver
Add Intel FPGA Acceleration NIC IPN3KE ethdev PMD driver. Signed-off-by: Rosen Xu <[email protected]> Signed-off-by: Andy Pei <[email protected]> Signed-off-by: Dan Wei <[email protected]>
1 parent dc384b5 commit c01c748

17 files changed

+1922
-1
lines changed

MAINTAINERS

+7
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,13 @@ F: drivers/net/ice/
633633
F: doc/guides/nics/ice.rst
634634
F: doc/guides/nics/features/ice.ini
635635

636+
Intel ipn3ke
637+
M: Rosen Xu <[email protected]>
638+
T: git://dpdk.org/next/dpdk-next-net-intel
639+
F: drivers/net/ipn3ke/
640+
F: doc/guides/nics/ipn3ke.rst
641+
F: doc/guides/nics/features/ipn3ke.ini
642+
636643
Marvell mvpp2
637644
M: Tomasz Duszynski <[email protected]>
638645
M: Liron Himi <[email protected]>

config/common_base

+4
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,10 @@ CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX=n
328328
CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX_FREE=n
329329
CONFIG_RTE_LIBRTE_IAVF_DEBUG_RX=n
330330
CONFIG_RTE_LIBRTE_IAVF_16BYTE_RX_DESC=n
331+
#
332+
# Compile burst-oriented IPN3KE PMD driver
333+
#
334+
CONFIG_RTE_LIBRTE_IPN3KE_PMD=y
331335

332336
#
333337
# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD

doc/guides/nics/features/ipn3ke.ini

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
;
2+
; Supported features of the 'ipn3ke' network poll mode driver.
3+
;
4+
; Refer to default.ini for the full list of available PMD features.
5+
;
6+
[Features]
7+
Speed capabilities = Y
8+
Link status = Y
9+
Link status event = Y
10+
Rx interrupt = Y
11+
Queue start/stop = Y
12+
Runtime Rx queue setup = Y
13+
Runtime Tx queue setup = Y
14+
Jumbo frame = Y
15+
Scattered Rx = Y
16+
TSO = Y
17+
Promiscuous mode = Y
18+
Allmulticast mode = Y
19+
Unicast MAC filter = Y
20+
Multicast MAC filter = Y
21+
RSS hash = Y
22+
RSS key update = Y
23+
RSS reta update = Y
24+
VMDq = Y
25+
SR-IOV = Y
26+
DCB = Y
27+
VLAN filter = Y
28+
Ethertype filter = Y
29+
Tunnel filter = Y
30+
Hash filter = Y
31+
Flow director = Y
32+
Flow control = Y
33+
Flow API = Y
34+
Traffic mirroring = Y
35+
CRC offload = Y
36+
VLAN offload = Y
37+
QinQ offload = Y
38+
L3 checksum offload = Y
39+
L4 checksum offload = Y
40+
Inner L3 checksum = Y
41+
Inner L4 checksum = Y
42+
Packet type parsing = Y
43+
Timesync = Y
44+
Rx descriptor status = Y
45+
Tx descriptor status = Y
46+
Basic stats = Y
47+
Extended stats = Y
48+
FW version = Y
49+
Module EEPROM dump = Y
50+
Multiprocess aware = Y
51+
BSD nic_uio = Y
52+
Linux UIO = Y
53+
Linux VFIO = Y
54+
x86-32 = Y
55+
x86-64 = Y

doc/guides/nics/index.rst

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Network Interface Controller Drivers
3131
ice
3232
ifc
3333
igb
34+
ipn3ke
3435
ixgbe
3536
intel_vf
3637
kni

doc/guides/nics/ipn3ke.rst

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
.. SPDX-License-Identifier: BSD-3-Clause
2+
Copyright(c) 2019 Intel Corporation.
3+
4+
IPN3KE Poll Mode Driver
5+
=======================
6+
7+
The ipn3ke PMD (librte_pmd_ipn3ke) provides poll mode driver support
8+
for Intel® FPGA PAC(Programmable Acceleration Card) N3000 based on
9+
the Intel Ethernet Controller X710/XXV710 and Intel Arria 10 FPGA.
10+
11+
In this card, FPGA is an acceleration bridge between network interface
12+
and the Intel Ethernet Controller. Although both FPGA and Ethernet
13+
Controllers are connected to CPU with PCIe Gen3x16 Switch, all the
14+
packet RX/TX is handled by Intel Ethernet Controller. So from application
15+
point of view the data path is still the legacy Intel Ethernet Controller
16+
X710/XXV710 PMD. Besides this, users can enable more acceleration
17+
features by FPGA IP.
18+
19+
Prerequisites
20+
-------------
21+
22+
- Identifying your adapter using `Intel Support
23+
<http://www.intel.com/support>`_ and get the latest NVM/FW images.
24+
25+
- Follow the DPDK :ref:`Getting Started Guide for Linux <linux_gsg>` to setup the basic DPDK environment.
26+
27+
- To get better performance on Intel platforms, please follow the "How to get best performance with NICs on Intel platforms"
28+
section of the :ref:`Getting Started Guide for Linux <linux_gsg>`.
29+
30+
31+
Pre-Installation Configuration
32+
------------------------------
33+
34+
Config File Options
35+
~~~~~~~~~~~~~~~~~~~
36+
37+
The following options can be modified in the ``config`` file.
38+
39+
- ``CONFIG_RTE_LIBRTE_IPN3KE_PMD`` (default ``y``)
40+
41+
Toggle compilation of the ``librte_pmd_ipn3ke`` driver.
42+
43+
Runtime Config Options
44+
~~~~~~~~~~~~~~~~~~~~~~
45+
46+
- ``AFU name``
47+
48+
AFU name identifies which AFU is used by IPN3KE. The AFU name format is "Port|BDF",
49+
Each FPGA can be divided into four blocks at most. "Port" identifies which FPGA block
50+
the AFU bitstream belongs to, but currently only 0 IPN3KE support. "BDF" means FPGA PCIe BDF.
51+
For example::
52+
53+
--vdev 'ipn3ke_cfg0,afu=0|b3:00.0'
54+
55+
- ``FPGA Acceleration list``
56+
57+
For IPN3KE FPGA can provide different bitstream, different bitstream includes different
58+
Acceleration, so users need to identify which Acceleration is used. Current IPN3KE can
59+
support TM and Flow Acceleration, for example::
60+
61+
--vdev 'ipn3ke_cfg0,afu=0|b3:00.0,fpga_acc={tm|flow}'
62+
63+
- ``I40e PF name list``
64+
65+
Users need to bind FPGA LineSidePort to FVL PF. So I40e PF name list should be involved in
66+
startup command. For example::
67+
68+
--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}'
69+
70+
Driver compilation and testing
71+
------------------------------
72+
73+
Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
74+
for details.
75+
76+
Sample Application Notes
77+
------------------------
78+
79+
Packet TX/RX with FPGA Pass-through image
80+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81+
82+
FPGA Pass-through bitstream is original FPGA Image.
83+
84+
To start ``testpmd``, and add I40e PF to FPGA network port:
85+
86+
.. code-block:: console
87+
88+
./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
89+
90+
HQoS and flow acceleration
91+
~~~~~~~~~~~~~~~~~~~~~~~~~~
92+
93+
HQoS and flow acceleration bitstream is used to offloading HQoS and flow classifier.
94+
95+
To start ``testpmd``, and add I40e PF to FPGA network port, enable FPGA HQoS and Flow Acceleration:
96+
97+
.. code-block:: console
98+
99+
./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
100+
101+
Limitations or Known issues
102+
---------------------------
103+
104+
19.05 limitation
105+
~~~~~~~~~~~~~~~~
106+
107+
Ipn3ke code released in 19.05 is for evaluation only.

doc/guides/rel_notes/release_19_05.rst

+9
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,15 @@ New Features
8989
Added the new ``nfb`` net driver for Netcope NFB cards. See
9090
the :doc:`../nics/nfb` NIC guide for more details on this new driver.
9191

92+
* **Added IPN3KE net PMD.**
93+
94+
Added the new ``ipn3ke`` net driver for Intel® FPGA PAC(Programmable
95+
Acceleration Card) N3000. See the :doc:`../nics/ipn3ke` NIC guide for more
96+
details on this new driver.
97+
98+
Aside from this, ifpga_rawdev is also updated to support Intel® FPGA PAC
99+
N3000 with SPI interface access, I2C Read/Write and Ethernet PHY configuration.
100+
92101
* **Updated Solarflare network PMD.**
93102

94103
Updated the sfc_efx driver including the following changes:

drivers/net/Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += fm10k
3232
DIRS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += i40e
3333
DIRS-$(CONFIG_RTE_LIBRTE_IAVF_PMD) += iavf
3434
DIRS-$(CONFIG_RTE_LIBRTE_ICE_PMD) += ice
35+
DIRS-$(CONFIG_RTE_LIBRTE_IPN3KE_PMD) += ipn3ke
3536
DIRS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += ixgbe
3637
DIRS-$(CONFIG_RTE_LIBRTE_LIO_PMD) += liquidio
3738
DIRS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4

drivers/net/ipn3ke/Makefile

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# SPDX-License-Identifier: BSD-3-Clause
2+
# Copyright(c) 2019 Intel Corporation
3+
4+
include $(RTE_SDK)/mk/rte.vars.mk
5+
6+
#
7+
# library name
8+
#
9+
LIB = librte_pmd_ipn3ke.a
10+
11+
#
12+
# Add the experimenatal APIs called from this PMD
13+
# rte_eth_switch_domain_alloc()
14+
# rte_eth_dev_create()
15+
# rte_eth_dev_destroy()
16+
# rte_eth_switch_domain_free()
17+
#
18+
CFLAGS += -DALLOW_EXPERIMENTAL_API
19+
CFLAGS += -O3
20+
CFLAGS += $(WERROR_FLAGS)
21+
CFLAGS += -I$(RTE_SDK)/drivers/bus/ifpga
22+
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
23+
LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs
24+
LDLIBS += -lrte_bus_ifpga
25+
LDLIBS += -lrte_bus_vdev
26+
27+
EXPORT_MAP := rte_pmd_ipn3ke_version.map
28+
29+
LIBABIVER := 1
30+
31+
#
32+
# all source are stored in SRCS-y
33+
#
34+
SRCS-$(CONFIG_RTE_LIBRTE_IPN3KE_PMD) += ipn3ke_ethdev.c
35+
36+
include $(RTE_SDK)/mk/rte.lib.mk

0 commit comments

Comments
 (0)