[PATCH v1 22/32] net/ntnic: add HIF clock test
Serhii Iliushyk
sil-plv at napatech.com
Thu Feb 20 23:03:46 CET 2025
From: Danylo Vodopianov <dvo-plv at napatech.com>
Add HIF clock test with write/read verification.
Signed-off-by: Danylo Vodopianov <dvo-plv at napatech.com>
---
.../net/ntnic/nthw/core/include/nthw_hif.h | 3 +
.../nt400dxx/reset/nthw_fpga_rst_nt400dxx.c | 20 +++++
drivers/net/ntnic/nthw/core/nthw_hif.c | 82 +++++++++++++++++++
3 files changed, 105 insertions(+)
diff --git a/drivers/net/ntnic/nthw/core/include/nthw_hif.h b/drivers/net/ntnic/nthw/core/include/nthw_hif.h
index c8f4669f83..deb9ed04e8 100644
--- a/drivers/net/ntnic/nthw/core/include/nthw_hif.h
+++ b/drivers/net/ntnic/nthw/core/include/nthw_hif.h
@@ -148,4 +148,7 @@ int nthw_hif_get_stat_rate(nthw_hif_t *p, uint64_t *p_pci_rx_rate, uint64_t *p_p
int nthw_hif_end_point_counters_sample(nthw_hif_t *p, struct nthw_hif_end_point_counters *epc);
+int nthw_hif_read_test_reg(nthw_hif_t *p, uint8_t test_reg, uint32_t *p_value);
+int nthw_hif_write_test_reg(nthw_hif_t *p, uint8_t test_reg, uint32_t value);
+
#endif /* __NTHW_HIF_H__ */
diff --git a/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c b/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c
index 1d93474cff..60e7714283 100644
--- a/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c
+++ b/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c
@@ -24,6 +24,26 @@ static int nthw_fpga_rst_nt400dxx_init(struct fpga_info_s *p_fpga_info)
if (res == 0)
NT_LOG(DBG, NTHW, "%s: Hif module found", p_fpga_info->mp_adapter_id_str);
+ /* (A) Test HIF clock is running by performing simple write/read test of HIF registers */
+ const uint32_t test_pattern[2] = { 0x11223344, 0x55667788 };
+
+ for (uint8_t i = 0; i < 2; ++i) {
+ uint32_t test_data = 0;
+ nthw_hif_write_test_reg(p_nthw_hif, i, test_pattern[i]);
+ nthw_hif_read_test_reg(p_nthw_hif, i, &test_data);
+
+ if (test_data != test_pattern[i]) {
+ NT_LOG(ERR,
+ NTHW,
+ "%s: %s: Test sys 250 clock failed",
+ p_fpga_info->mp_adapter_id_str,
+ __func__);
+ return -1;
+ }
+ }
+
+ nthw_hif_delete(p_nthw_hif);
+
/* Create PCM */
p_fpga_info->mp_nthw_agx.p_pcm = nthw_pcm_nt400dxx_new();
res = nthw_pcm_nt400dxx_init(p_fpga_info->mp_nthw_agx.p_pcm, p_fpga, 0);
diff --git a/drivers/net/ntnic/nthw/core/nthw_hif.c b/drivers/net/ntnic/nthw/core/nthw_hif.c
index 9f699e4f94..92a2348bbb 100644
--- a/drivers/net/ntnic/nthw/core/nthw_hif.c
+++ b/drivers/net/ntnic/nthw/core/nthw_hif.c
@@ -298,3 +298,85 @@ int nthw_hif_end_point_counters_sample(nthw_hif_t *p, struct nthw_hif_end_point_
return 0;
}
+
+int nthw_hif_read_test_reg(nthw_hif_t *p, uint8_t test_reg, uint32_t *p_value)
+{
+ uint32_t data;
+
+ switch (test_reg) {
+ case 0:
+ data = nthw_field_get_updated(p->mp_fld_pci_test0);
+ break;
+
+ case 1:
+ data = nthw_field_get_updated(p->mp_fld_pci_test1);
+ break;
+
+ case 2:
+ if (p->mp_fld_pci_test2)
+ data = nthw_field_get_updated(p->mp_fld_pci_test2);
+
+ else
+ return -1;
+
+ break;
+
+ case 3:
+ if (p->mp_fld_pci_test3)
+ data = nthw_field_get_updated(p->mp_fld_pci_test3);
+
+ else
+ return -1;
+
+ break;
+
+ default:
+ assert(false);
+ return -1;
+ }
+
+ if (p_value)
+ *p_value = data;
+
+ else
+ return -1;
+
+ return 0;
+}
+
+int nthw_hif_write_test_reg(nthw_hif_t *p, uint8_t test_reg, uint32_t value)
+{
+ switch (test_reg) {
+ case 0:
+ nthw_field_set_val_flush32(p->mp_fld_pci_test0, value);
+ break;
+
+ case 1:
+ nthw_field_set_val_flush32(p->mp_fld_pci_test1, value);
+ break;
+
+ case 2:
+ if (p->mp_fld_pci_test2)
+ nthw_field_set_val_flush32(p->mp_fld_pci_test2, value);
+
+ else
+ return -1;
+
+ break;
+
+ case 3:
+ if (p->mp_fld_pci_test3)
+ nthw_field_set_val_flush32(p->mp_fld_pci_test3, value);
+
+ else
+ return -1;
+
+ break;
+
+ default:
+ assert(false);
+ return -1;
+ }
+
+ return 0;
+}
--
2.45.0
More information about the dev
mailing list