[v8,01/21] net/ntnic: add ethdev and makes PMD available

Message ID 20240712154737.1339646-1-sil-plv@napatech.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series [v8,01/21] net/ntnic: add ethdev and makes PMD available |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation warning apply patch failure

Commit Message

Serhii Iliushyk July 12, 2024, 3:47 p.m. UTC
Add initial ntnic ethdev skeleton and register PCI probe functions
Update documentation: Device description and feature list

Signed-off-by: Serhii Iliushyk <sil-plv@napatech.com>
---
v6
* Remove unused includes
* Remove EOF markers
* Remove unnecesarry commpiller flags
* Update documentation INI and RST files
        * Remove uncovered features
        * Add features according to DPDK reqirements
        * Add link on NT200A02 description
* Rename res(short for result) to ret(short for return)
* Fix unnecessary set of the driver name
        * The driver name is set by macro RTE_PMD_REGISTER_PCI
* Set sentinel value for PCI id_table
        * NULL value can lead to the crush on function rte_pci_match
* Remove unnecessary comments
v7
* Move features list to the dedicated patches
* Update release note file
---
 .mailmap                               |  1 +
 MAINTAINERS                            |  7 ++++
 doc/guides/nics/features/ntnic.ini     |  8 +++++
 doc/guides/nics/index.rst              |  1 +
 doc/guides/nics/ntnic.rst              | 39 ++++++++++++++++++++
 doc/guides/rel_notes/release_24_07.rst | 10 ++++++
 drivers/net/meson.build                |  1 +
 drivers/net/ntnic/meson.build          | 18 ++++++++++
 drivers/net/ntnic/ntnic_ethdev.c       | 49 ++++++++++++++++++++++++++
 9 files changed, 134 insertions(+)
 create mode 100644 doc/guides/nics/features/ntnic.ini
 create mode 100644 doc/guides/nics/ntnic.rst
 create mode 100644 drivers/net/ntnic/meson.build
 create mode 100644 drivers/net/ntnic/ntnic_ethdev.c
  

Comments

Ferruh Yigit July 13, 2024, 12:15 a.m. UTC | #1
On 7/12/2024 4:47 PM, Serhii Iliushyk wrote:
> Add initial ntnic ethdev skeleton and register PCI probe functions
> Update documentation: Device description and feature list
> 
> Signed-off-by: Serhii Iliushyk <sil-plv@napatech.com>
> ---
> v6
> * Remove unused includes
> * Remove EOF markers
> * Remove unnecesarry commpiller flags
> * Update documentation INI and RST files
>         * Remove uncovered features
>         * Add features according to DPDK reqirements
>         * Add link on NT200A02 description
> * Rename res(short for result) to ret(short for return)
> * Fix unnecessary set of the driver name
>         * The driver name is set by macro RTE_PMD_REGISTER_PCI
> * Set sentinel value for PCI id_table
>         * NULL value can lead to the crush on function rte_pci_match
> * Remove unnecessary comments
> v7
> * Move features list to the dedicated patches
> * Update release note file
> ---
>  .mailmap                               |  1 +
>  MAINTAINERS                            |  7 ++++
>  doc/guides/nics/features/ntnic.ini     |  8 +++++
>  doc/guides/nics/index.rst              |  1 +
>  doc/guides/nics/ntnic.rst              | 39 ++++++++++++++++++++
>  doc/guides/rel_notes/release_24_07.rst | 10 ++++++
>  drivers/net/meson.build                |  1 +
>  drivers/net/ntnic/meson.build          | 18 ++++++++++
>  drivers/net/ntnic/ntnic_ethdev.c       | 49 ++++++++++++++++++++++++++
>  9 files changed, 134 insertions(+)
>  create mode 100644 doc/guides/nics/features/ntnic.ini
>  create mode 100644 doc/guides/nics/ntnic.rst
>  create mode 100644 drivers/net/ntnic/meson.build
>  create mode 100644 drivers/net/ntnic/ntnic_ethdev.c
> 

<...>

> diff --git a/MAINTAINERS b/MAINTAINERS
> index 533f707d5f..0359368981 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -855,6 +855,13 @@ F: drivers/net/octeon_ep/
>  F: doc/guides/nics/features/octeon_ep.ini
>  F: doc/guides/nics/octeon_ep.rst
>  
> +Napatech ntnic
> +M: Christian Koue Muf <ckm@napatech.com>
> +M: Serhii Iliushyk <sil-plv@napatech.com>
> +F: drivers/net/ntnic/
> +F: doc/guides/nics/ntnic.rst
> +F: doc/guides/nics/features/ntnic.ini
> +
>

What about updating as "Napatech ntnic - EXPERIMENTAL", when basic
functionality is upstreamed and tested, experimental tag can be removed.

<...>

> diff --git a/doc/guides/rel_notes/release_24_07.rst b/doc/guides/rel_notes/release_24_07.rst
> index e50afed0d5..332a959618 100644
> --- a/doc/guides/rel_notes/release_24_07.rst
> +++ b/doc/guides/rel_notes/release_24_07.rst
> @@ -154,6 +154,16 @@ New Features
>  
>    Added an API that allows the user to reclaim the defer queue with RCU.
>  
> +* **Added Napatech ntnic experimental PMD driver.**
>

What do you think "Added Napatech ntnic net driver."?

> +
> +  * Added the experimental PMD driver
> +
> +    - Ability to initialize the NIC (NT200A02)
> +    - Supporting only one FPGA firmware (9563.55.39)
> +    - Ability to bring up the 100G link
> +    - Supporting QSFP/QSFP+/QSFP28 NIM
> +    - Does not support datapath
> +    - Does not support RTE flow API
>

May drop flow API, as datapath being missing implies it.

Also release notes updates are grouped per device group, and
alphabetically sorted withing group. For this can you please move above
update just below "Marvell cnxk net driver"?
  
Ferruh Yigit July 13, 2024, 12:21 a.m. UTC | #2
On 7/12/2024 4:47 PM, Serhii Iliushyk wrote:
> Add initial ntnic ethdev skeleton and register PCI probe functions
> Update documentation: Device description and feature list
> 
> Signed-off-by: Serhii Iliushyk <sil-plv@napatech.com>
>

Hi Serhii,

I put some comments but main issue is build failure after each patch,
can you please check?

Btw, -rc2 released today, before sending a new version please wait for
next-net to be rebased on it, probably I will do it today. And driver
can target -rc3.

Thanks,
ferruh
  

Patch

diff --git a/.mailmap b/.mailmap
index 552d79eaa6..aad8c552f6 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1307,6 +1307,7 @@  Sergey Madaminov <sergey.madaminov@gmail.com>
 Sergey Mironov <grrwlf@gmail.com>
 Sergey Temerkhanov <sergey.temerkhanov@intel.com>
 Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
+Serhii Iliushyk <sil-plv@napatech.com>
 Seth Arnold <seth.arnold@canonical.com>
 Seth Howell <seth.howell@intel.com>
 Shachar Beiser <shacharbe@mellanox.com>
diff --git a/MAINTAINERS b/MAINTAINERS
index 533f707d5f..0359368981 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -855,6 +855,13 @@  F: drivers/net/octeon_ep/
 F: doc/guides/nics/features/octeon_ep.ini
 F: doc/guides/nics/octeon_ep.rst
 
+Napatech ntnic
+M: Christian Koue Muf <ckm@napatech.com>
+M: Serhii Iliushyk <sil-plv@napatech.com>
+F: drivers/net/ntnic/
+F: doc/guides/nics/ntnic.rst
+F: doc/guides/nics/features/ntnic.ini
+
 NVIDIA mlx4
 M: Matan Azrad <matan@nvidia.com>
 M: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
diff --git a/doc/guides/nics/features/ntnic.ini b/doc/guides/nics/features/ntnic.ini
new file mode 100644
index 0000000000..9ceb75a03b
--- /dev/null
+++ b/doc/guides/nics/features/ntnic.ini
@@ -0,0 +1,8 @@ 
+;
+; Supported features of the 'ntnic' network poll mode driver.
+;
+; Refer to default.ini for the full list of available PMD features.
+;
+[Features]
+Linux                = Y
+x86-64               = Y
diff --git a/doc/guides/nics/index.rst b/doc/guides/nics/index.rst
index 7bfcac880f..c14bc7988a 100644
--- a/doc/guides/nics/index.rst
+++ b/doc/guides/nics/index.rst
@@ -53,6 +53,7 @@  Network Interface Controller Drivers
     nfb
     nfp
     ngbe
+    ntnic
     null
     octeon_ep
     octeontx
diff --git a/doc/guides/nics/ntnic.rst b/doc/guides/nics/ntnic.rst
new file mode 100644
index 0000000000..249d83d511
--- /dev/null
+++ b/doc/guides/nics/ntnic.rst
@@ -0,0 +1,39 @@ 
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2023 Napatech A/S
+
+NTNIC Poll Mode Driver
+======================
+
+The NTNIC PMD provides poll mode driver support for Napatech smartNICs.
+
+
+Design
+------
+
+The NTNIC PMD is designed as a pure user-space driver, and requires no special
+Napatech kernel modules.
+
+The Napatech smartNIC presents one control PCI device (PF0). NTNIC PMD accesses
+smartNIC PF0 via vfio-pci kernel driver. Access to PF0 for all purposes is
+exclusive, so only one process should access it. The physical ports are located
+behind PF0 as DPDK port 0 and 1.
+
+
+Supported NICs
+--------------
+
+- NT200A02 2x100G SmartNIC
+
+    - FPGA ID 9563 (Inline Flow Management)
+
+All information about NT200A02 can be found by link below:
+https://www.napatech.com/products/nt200a02-smartnic-inline/
+
+Limitations
+~~~~~~~~~~~
+
+Kernel versions before 5.7 are not supported. Kernel version 5.7 added vfio-pci
+support for creating VFs from the PF which is required for the PMD to use
+vfio-pci on the PF. This support has been back-ported to older Linux
+distributions and they are also supported. If vfio-pci is not required kernel
+version 4.18 is supported.
diff --git a/doc/guides/rel_notes/release_24_07.rst b/doc/guides/rel_notes/release_24_07.rst
index e50afed0d5..332a959618 100644
--- a/doc/guides/rel_notes/release_24_07.rst
+++ b/doc/guides/rel_notes/release_24_07.rst
@@ -154,6 +154,16 @@  New Features
 
   Added an API that allows the user to reclaim the defer queue with RCU.
 
+* **Added Napatech ntnic experimental PMD driver.**
+
+  * Added the experimental PMD driver
+
+    - Ability to initialize the NIC (NT200A02)
+    - Supporting only one FPGA firmware (9563.55.39)
+    - Ability to bring up the 100G link
+    - Supporting QSFP/QSFP+/QSFP28 NIM
+    - Does not support datapath
+    - Does not support RTE flow API
 
 Removed Items
 -------------
diff --git a/drivers/net/meson.build b/drivers/net/meson.build
index bd38b533c5..fb6d34b782 100644
--- a/drivers/net/meson.build
+++ b/drivers/net/meson.build
@@ -45,6 +45,7 @@  drivers = [
         'nfb',
         'nfp',
         'ngbe',
+        'ntnic',
         'null',
         'octeontx',
         'octeon_ep',
diff --git a/drivers/net/ntnic/meson.build b/drivers/net/ntnic/meson.build
new file mode 100644
index 0000000000..194353230b
--- /dev/null
+++ b/drivers/net/ntnic/meson.build
@@ -0,0 +1,18 @@ 
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2020-2023 Napatech A/S
+
+if not is_linux or not dpdk_conf.has('RTE_ARCH_X86_64')
+    build = false
+    reason = 'only supported on x86_64 Linux'
+    subdir_done()
+endif
+
+# includes
+includes = [
+    include_directories('.'),
+]
+
+# all sources
+sources = files(
+    'ntnic_ethdev.c',
+)
diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c
new file mode 100644
index 0000000000..7e5231d2c1
--- /dev/null
+++ b/drivers/net/ntnic/ntnic_ethdev.c
@@ -0,0 +1,49 @@ 
+/*
+ * SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2023 Napatech A/S
+ */
+
+#include <rte_ethdev.h>
+#include <rte_bus_pci.h>
+#include <ethdev_pci.h>
+
+static const struct rte_pci_id nthw_pci_id_map[] = {
+	{
+		.vendor_id = 0,
+	},	/* sentinel */
+};
+
+static int
+nthw_pci_dev_init(struct rte_pci_device *pci_dev __rte_unused)
+{
+	return 0;
+}
+
+static int
+nthw_pci_dev_deinit(struct rte_eth_dev *eth_dev __rte_unused)
+{
+	return 0;
+}
+
+static int
+nthw_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
+	struct rte_pci_device *pci_dev)
+{
+	int ret;
+	ret = nthw_pci_dev_init(pci_dev);
+	return ret;
+}
+
+static int
+nthw_pci_remove(struct rte_pci_device *pci_dev)
+{
+	return rte_eth_dev_pci_generic_remove(pci_dev, nthw_pci_dev_deinit);
+}
+
+static struct rte_pci_driver rte_nthw_pmd = {
+	.id_table = nthw_pci_id_map,
+	.probe = nthw_pci_probe,
+	.remove = nthw_pci_remove,
+};
+
+RTE_PMD_REGISTER_PCI(net_ntnic, rte_nthw_pmd);