From: Danylo Vodopianov <dvo-...@napatech.com> Added logic to check if the administrative port state has changed.
Signed-off-by: Danylo Vodopianov <dvo-...@napatech.com> --- .../link_agx_100g/nt4ga_agx_link_100g.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/net/ntnic/link_mgmt/link_agx_100g/nt4ga_agx_link_100g.c b/drivers/net/ntnic/link_mgmt/link_agx_100g/nt4ga_agx_link_100g.c index 33d39ce62f..3f59c4a6b8 100644 --- a/drivers/net/ntnic/link_mgmt/link_agx_100g/nt4ga_agx_link_100g.c +++ b/drivers/net/ntnic/link_mgmt/link_agx_100g/nt4ga_agx_link_100g.c @@ -501,6 +501,14 @@ set_loopback(struct adapter_info_s *p_adapter_info, int port, uint32_t mode, uin nt_os_wait_usec(10000); /* 10ms - arbitrary choice */ } +static void port_disable(adapter_info_t *drv, int port) +{ + nim_i2c_ctx_t *nim_ctx = &drv->nt4ga_link.u.nim_ctx[port]; + phy_reset_rx(drv, port); + phy_reset_tx(drv, port); + set_nim_low_power(nim_ctx, port, true); +} + /* * Initialize NIM, Code based on nt400d1x.cpp: MyPort::createNim() */ @@ -822,6 +830,17 @@ static void *_common_ptp_nim_state_machine(void *data) */ assert(!(disable_port && enable_port)); + if (disable_port) { + memset(&link_state[i], 0, sizeof(link_state[i])); + link_state[i].link_disabled = true; + link_state[i].lh_nim_absent = true; + reported_link[i] = false; + port_disable(drv, i); + NT_LOG(INF, NTNIC, "%s: Port %i is disabled", + drv->mp_port_id_str[i], i); + continue; + } + if (enable_port) { link_state[i].link_disabled = false; NT_LOG(DBG, NTNIC, "%s: Port %i is enabled", -- 2.45.0