AML devices using NCSI require MAC Tx and Rx to remain enabled after the host link goes down. However, mac_link_down() disables both paths unconditionally. On AML 10G/25G devices, txgbe_down() also disables the TX laser when the host interface is closed, blocking BMC pass-through transmission even if MAC Tx remains enabled. Skip disabling MAC Tx and Rx in mac_link_down() when ncsi_enabled is set. Also keep the TX laser enabled for these devices in txgbe_down(). Fixes: 343929799ace ("net: txgbe: Support to handle GPIO IRQs for AML devices") Fixes: 6f8b4c01a8cd ("net: txgbe: Implement PHYLINK for AML 25G/10G devices") Signed-off-by: Jiawen Wu --- drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c | 6 ++++-- drivers/net/ethernet/wangxun/txgbe/txgbe_main.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c index 26d0cfc58ee2c..9f1ce3e2e3a4d 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_aml.c @@ -458,8 +458,10 @@ static void txgbe_mac_link_down_aml(struct phylink_config *config, { struct wx *wx = phylink_to_wx(config); - wr32m(wx, TXGBE_AML_MAC_TX_CFG, TXGBE_AML_MAC_TX_CFG_TE, 0); - wr32m(wx, WX_MAC_RX_CFG, WX_MAC_RX_CFG_RE, 0); + if (!wx->ncsi_enabled) { + wr32m(wx, TXGBE_AML_MAC_TX_CFG, TXGBE_AML_MAC_TX_CFG_TE, 0); + wr32m(wx, WX_MAC_RX_CFG, WX_MAC_RX_CFG_RE, 0); + } wx->speed = SPEED_UNKNOWN; if (test_bit(WX_STATE_PTP_RUNNING, wx->state)) diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c index a60a711e8e1b4..7f0cef24ec28b 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c @@ -295,8 +295,10 @@ void txgbe_down(struct wx *wx) break; case wx_mac_aml: phylink_stop(wx->phylink); - /* Disable TX laser */ - wr32m(wx, WX_GPIO_DR, TXGBE_GPIOBIT_1, TXGBE_GPIOBIT_1); + if (!wx->ncsi_enabled) { + /* Disable TX laser */ + wr32m(wx, WX_GPIO_DR, TXGBE_GPIOBIT_1, TXGBE_GPIOBIT_1); + } break; case wx_mac_sp: phylink_stop(wx->phylink); -- 2.51.0