From: Danylo Vodopianov <dvo-...@napatech.com> Add HIF clock test with write/read verification.
Signed-off-by: Danylo Vodopianov <dvo-...@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