OCP mezzanine cards are NCSI capable by design, so the NCSI semantics do apply to them, and they need the MAC receiver to keep running for out-of-band management. The inline test does not cover the OCP card type, so on such a card that does not have the NCSI bit set the receiver was turned off on every path reaching wx_disable_rx(), and management traffic was dropped. 'wx->ncsi_enabled' is the correct value for NGBE to determine whether MAC RX/TX should be kept enabled. But it is not assigned in TXGBE, so we use an explicit subsystem device ID mask in libwx now. We will merge TXGBE and NGBE into unified 'wx->ncsi_enabled' as soon as possible. Fixes: 02338c484ab6 ("net: ngbe: Initialize sw info and register netdev") Signed-off-by: Jiawen Wu --- drivers/net/ethernet/wangxun/libwx/wx_hw.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/wangxun/libwx/wx_hw.c b/drivers/net/ethernet/wangxun/libwx/wx_hw.c index 122c4952d203f..3a48380ace439 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_hw.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_hw.c @@ -1314,7 +1314,8 @@ void wx_disable_rx(struct wx *wx) wr32(wx, WX_RDB_PB_CTL, rxctrl); if (!(((wx->subsystem_device_id & WX_NCSI_MASK) == WX_NCSI_SUP) || - ((wx->subsystem_device_id & WX_WOL_MASK) == WX_WOL_SUP))) { + ((wx->subsystem_device_id & WX_WOL_MASK) == WX_WOL_SUP) || + (wx->mac.type == wx_mac_em && (wx->subsystem_device_id & 0xFF) == 0x40))) { /* disable mac receiver */ wr32m(wx, WX_MAC_RX_CFG, WX_MAC_RX_CFG_RE, 0); -- 2.51.0