[PATCH v1 01/20] net/ntnic: add stubs for init NT400D11

Serhii Iliushyk sil-plv at napatech.com
Wed Oct 1 17:09:43 CEST 2025


Add stubs for NT400D11 init functions.
These stubs will be replaced with actual implementations in future commits.

Signed-off-by: Serhii Iliushyk <sil-plv at napatech.com>
---
 doc/guides/nics/ntnic.rst                     |  6 +++
 drivers/net/ntnic/adapter/nt4ga_adapter.c     |  3 +-
 drivers/net/ntnic/meson.build                 |  1 +
 .../nthw/core/nt400dxx/nthw_fpga_nt400dxx.c   | 41 +++++++++++++++++++
 .../core/nt400dxx/reset/nthw_fpga_rst9569.c   | 27 ++++++++++++
 drivers/net/ntnic/nthw/core/nthw_fpga.c       |  1 +
 drivers/net/ntnic/nthw/nthw_platform.c        |  3 ++
 drivers/net/ntnic/nthw/nthw_platform_drv.h    |  2 +
 drivers/net/ntnic/ntnic_ethdev.c              |  1 +
 drivers/net/ntnic/ntnic_mod_reg.c             | 15 +++++++
 drivers/net/ntnic/ntnic_mod_reg.h             |  9 ++++
 11 files changed, 108 insertions(+), 1 deletion(-)
 create mode 100644 drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst9569.c

diff --git a/doc/guides/nics/ntnic.rst b/doc/guides/nics/ntnic.rst
index a173eaa2ac..5375d89a2d 100644
--- a/doc/guides/nics/ntnic.rst
+++ b/doc/guides/nics/ntnic.rst
@@ -27,6 +27,10 @@ Supported NICs
 
     - FPGA ID 9563 (Inline Flow Management)
 
+- NT400D11 2x100G SmartNIC
+
+    - FPGA ID 9569 (Inline Flow Management)
+
 - NT400D13 2x100G SmartNIC
 
     - FPGA ID 9574 (Inline Flow Management)
@@ -34,6 +38,8 @@ Supported NICs
 All information about NT200A02 and NT400D13 can be found by links below:
 
 - https://www.napatech.com/products/nt200a02-smartnic-inline/
+- https://www.napatech.com/products/nt400d11-smartnic-programmable/
+- https://www.napatech.com/products/nt400d13-smartnic-programmable/
 - https://www.napatech.com/support/resources/data-sheets/link-inline-software-for-napatech/
 
 
diff --git a/drivers/net/ntnic/adapter/nt4ga_adapter.c b/drivers/net/ntnic/adapter/nt4ga_adapter.c
index 6d8547483f..4599f78e3f 100644
--- a/drivers/net/ntnic/adapter/nt4ga_adapter.c
+++ b/drivers/net/ntnic/adapter/nt4ga_adapter.c
@@ -172,10 +172,11 @@ static int nt4ga_adapter_init(struct adapter_info_s *p_adapter_info)
 
 			res = link_ops->link_init(p_adapter_info, p_fpga);
 			break;
+		case 9569: /* NT400D11 (Intel Agilex FPGA) */
 		case 9574: /* NT400D13 (Intel Agilex FPGA) */
 			link_ops = nthw_get_agx_100g_link_ops();
 			if (link_ops == NULL) {
-				NT_LOG(ERR, NTNIC, "NT400D11 100G link module uninitialized");
+				NT_LOG(ERR, NTNIC, "NT400Dxx 100G link module uninitialized");
 				res = -1;
 				break;
 			}
diff --git a/drivers/net/ntnic/meson.build b/drivers/net/ntnic/meson.build
index 785ac4836d..038c7d90f6 100644
--- a/drivers/net/ntnic/meson.build
+++ b/drivers/net/ntnic/meson.build
@@ -47,6 +47,7 @@ sources = files(
         'nthw/core/nt400dxx/nthw_fpga_nt400dxx.c',
         'nthw/core/nt200a0x/reset/nthw_fpga_rst9563.c',
         'nthw/core/nt400dxx/reset/nthw_fpga_rst9574.c',
+        'nthw/core/nt400dxx/reset/nthw_fpga_rst9569.c',
         'nthw/core/nt200a0x/reset/nthw_fpga_rst_nt200a0x.c',
         'nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c',
         'nthw/core/nthw_fpga.c',
diff --git a/drivers/net/ntnic/nthw/core/nt400dxx/nthw_fpga_nt400dxx.c b/drivers/net/ntnic/nthw/core/nt400dxx/nthw_fpga_nt400dxx.c
index cc4bee9d4d..99b317d916 100644
--- a/drivers/net/ntnic/nthw/core/nt400dxx/nthw_fpga_nt400dxx.c
+++ b/drivers/net/ntnic/nthw/core/nt400dxx/nthw_fpga_nt400dxx.c
@@ -113,6 +113,7 @@ static int nthw_fpga_nt400dxx_init_sub_systems(struct fpga_info_s *p_fpga_info)
 static int nthw_fpga_nt400dxx_init(struct fpga_info_s *p_fpga_info)
 {
 	RTE_ASSERT(p_fpga_info);
+	struct rst9569_ops *rst9569_ops = NULL;
 	struct rst9574_ops *rst9574_ops = NULL;
 
 	const char *const p_adapter_id_str = p_fpga_info->mp_adapter_id_str;
@@ -123,6 +124,29 @@ static int nthw_fpga_nt400dxx_init(struct fpga_info_s *p_fpga_info)
 	RTE_ASSERT(p_fpga);
 
 	switch (p_fpga_info->n_fpga_prod_id) {
+	case 9569:
+		rst9569_ops = nthw_get_rst9569_ops();
+
+		if (rst9569_ops == NULL) {
+			NT_LOG(ERR, NTHW, "%s: RST 9569 NOT INCLUDED", p_adapter_id_str);
+			return -1;
+		}
+
+		res = rst9569_ops->nthw_fpga_rst9569_setup();
+
+		if (res) {
+			NT_LOG(ERR,
+				NTHW,
+				"%s: %s: FPGA=%04d Failed to create reset module res=%d",
+				p_adapter_id_str,
+				__func__,
+				p_fpga_info->n_fpga_prod_id,
+				res);
+			return res;
+		}
+
+		break;
+
 	case 9574:
 		rst9574_ops = nthw_get_rst9574_ops();
 
@@ -183,6 +207,23 @@ static int nthw_fpga_nt400dxx_init(struct fpga_info_s *p_fpga_info)
 
 		/* reset specific */
 	switch (p_fpga_info->n_fpga_prod_id) {
+	case 9569:
+		if (rst9569_ops)
+			res = rst9569_ops->nthw_fpga_rst9569_init();
+
+		if (res) {
+			NT_LOG(ERR,
+				NTHW,
+				"%s: %s: FPGA=%04d - Failed to reset 9569 modules res=%d",
+				p_adapter_id_str,
+				__func__,
+				p_fpga_info->n_fpga_prod_id,
+				res);
+			return res;
+		}
+
+		break;
+
 	case 9574:
 		res = rst9574_ops->nthw_fpga_rst9574_init(p_fpga_info, &rst);
 
diff --git a/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst9569.c b/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst9569.c
new file mode 100644
index 0000000000..3d1c09fe2d
--- /dev/null
+++ b/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst9569.c
@@ -0,0 +1,27 @@
+/*
+ * SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2025 Napatech A/S
+ */
+
+#include "ntnic_mod_reg.h"
+
+
+static int nthw_fpga_rst9569_setup(void)
+{
+	return 0;
+};
+
+static int nthw_fpga_rst9569_init(void)
+{
+	return 0;
+}
+
+static struct rst9569_ops rst9569_ops = {
+	.nthw_fpga_rst9569_init = nthw_fpga_rst9569_init,
+	.nthw_fpga_rst9569_setup = nthw_fpga_rst9569_setup,
+};
+
+void nthw_rst9569_ops_init(void)
+{
+	nthw_reg_rst9569_ops(&rst9569_ops);
+}
diff --git a/drivers/net/ntnic/nthw/core/nthw_fpga.c b/drivers/net/ntnic/nthw/core/nthw_fpga.c
index 24cfb6c284..7ec33aff2d 100644
--- a/drivers/net/ntnic/nthw/core/nthw_fpga.c
+++ b/drivers/net/ntnic/nthw/core/nthw_fpga.c
@@ -440,6 +440,7 @@ int nthw_fpga_init(struct fpga_info_s *p_fpga_info)
 			res = nt200a0x_ops->nthw_fpga_nt200a0x_init(p_fpga_info);
 		break;
 
+	case NT_HW_ADAPTER_ID_NT400D11:
 	case NT_HW_ADAPTER_ID_NT400D13:
 		if (nt400dxx_ops != NULL)
 			res = nt400dxx_ops->nthw_fpga_nt400dxx_init(p_fpga_info);
diff --git a/drivers/net/ntnic/nthw/nthw_platform.c b/drivers/net/ntnic/nthw/nthw_platform.c
index 6f2582d6fe..83e1b38563 100644
--- a/drivers/net/ntnic/nthw/nthw_platform.c
+++ b/drivers/net/ntnic/nthw/nthw_platform.c
@@ -11,6 +11,9 @@ nthw_adapter_id_t nthw_platform_get_adapter_id(const uint16_t n_pci_device_id)
 	case NT_HW_PCI_DEVICE_ID_NT200A02:
 		return NT_HW_ADAPTER_ID_NT200A02;
 
+	case NT_HW_PCI_DEVICE_ID_NT400D11:
+		return NT_HW_ADAPTER_ID_NT400D11;
+
 	case NT_HW_PCI_DEVICE_ID_NT400D13:
 		return NT_HW_ADAPTER_ID_NT400D13;
 
diff --git a/drivers/net/ntnic/nthw/nthw_platform_drv.h b/drivers/net/ntnic/nthw/nthw_platform_drv.h
index db2bc05180..a861c8dd7b 100644
--- a/drivers/net/ntnic/nthw/nthw_platform_drv.h
+++ b/drivers/net/ntnic/nthw/nthw_platform_drv.h
@@ -10,11 +10,13 @@
 
 #define NT_HW_PCI_VENDOR_ID (0x18f4)
 #define NT_HW_PCI_DEVICE_ID_NT200A02 (0x1C5)
+#define NT_HW_PCI_DEVICE_ID_NT400D11 (0x215)
 #define NT_HW_PCI_DEVICE_ID_NT400D13 (0x295)
 
 enum nthw_adapter_id_e {
 	NT_HW_ADAPTER_ID_UNKNOWN = 0,
 	NT_HW_ADAPTER_ID_NT200A02,
+	NT_HW_ADAPTER_ID_NT400D11,
 	NT_HW_ADAPTER_ID_NT400D13,
 };
 
diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c
index 42aa2d4095..01b3fe00ef 100644
--- a/drivers/net/ntnic/ntnic_ethdev.c
+++ b/drivers/net/ntnic/ntnic_ethdev.c
@@ -84,6 +84,7 @@ static const char *const valid_arguments[] = {
 
 static const struct rte_pci_id nthw_pci_id_map[] = {
 	{ RTE_PCI_DEVICE(NT_HW_PCI_VENDOR_ID, NT_HW_PCI_DEVICE_ID_NT200A02) },
+	{ RTE_PCI_DEVICE(NT_HW_PCI_VENDOR_ID, NT_HW_PCI_DEVICE_ID_NT400D11) },
 	{ RTE_PCI_DEVICE(NT_HW_PCI_VENDOR_ID, NT_HW_PCI_DEVICE_ID_NT400D13) },
 	{
 		.vendor_id = 0,
diff --git a/drivers/net/ntnic/ntnic_mod_reg.c b/drivers/net/ntnic/ntnic_mod_reg.c
index 00eb07f848..ab29a2d816 100644
--- a/drivers/net/ntnic/ntnic_mod_reg.c
+++ b/drivers/net/ntnic/ntnic_mod_reg.c
@@ -193,6 +193,21 @@ struct rst9574_ops *nthw_get_rst9574_ops(void)
 	return rst9574_ops;
 }
 
+static struct rst9569_ops *rst9569_ops;
+
+void nthw_reg_rst9569_ops(struct rst9569_ops *ops)
+{
+	rst9569_ops = ops;
+}
+
+struct rst9569_ops *nthw_get_rst9569_ops(void)
+{
+	if (rst9569_ops == NULL)
+		nthw_rst9569_ops_init();
+
+	return rst9569_ops;
+}
+
 static struct rst_nt400dxx_ops *rst_nt400dxx_ops;
 
 void nthw_reg_rst_nt400dxx_ops(struct rst_nt400dxx_ops *ops)
diff --git a/drivers/net/ntnic/ntnic_mod_reg.h b/drivers/net/ntnic/ntnic_mod_reg.h
index b534b09234..62f69d239d 100644
--- a/drivers/net/ntnic/ntnic_mod_reg.h
+++ b/drivers/net/ntnic/ntnic_mod_reg.h
@@ -269,6 +269,15 @@ struct rst9574_ops {
 		struct nthw_fpga_rst_nt400dxx *const p);
 };
 
+struct rst9569_ops {
+	int (*nthw_fpga_rst9569_init)(void);
+	int (*nthw_fpga_rst9569_setup)(void);
+};
+
+void nthw_reg_rst9569_ops(struct rst9569_ops *ops);
+struct rst9569_ops *nthw_get_rst9569_ops(void);
+void nthw_rst9569_ops_init(void);
+
 void nthw_reg_rst9574_ops(struct rst9574_ops *ops);
 struct rst9574_ops *nthw_get_rst9574_ops(void);
 void nthw_rst9574_ops_init(void);
-- 
2.45.0



More information about the dev mailing list