From 6a925602a9cdd903a5ede52a10c6575e499e5b88 Mon Sep 17 00:00:00 2001 From: Jiawen Wu Date: Mon, 30 May 2022 17:30:15 +0800 Subject: [PATCH] net/txgbe: fix SGMII mode to link up Fix SGMII mode to link up. Fixes: 01c3cf5c85a7 ("net/txgbe: add autoneg control read and write") Cc: stable@dpdk.org Signed-off-by: Jiawen Wu --- drivers/net/txgbe/base/txgbe_phy.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/net/txgbe/base/txgbe_phy.c b/drivers/net/txgbe/base/txgbe_phy.c index da2bbc43e0..9f46d5bdb0 100644 --- a/drivers/net/txgbe/base/txgbe_phy.c +++ b/drivers/net/txgbe/base/txgbe_phy.c @@ -1367,9 +1367,17 @@ static void txgbe_set_sgmii_an37_ability(struct txgbe_hw *hw) { u32 value; + u8 device_type = hw->subsystem_device_id & 0xF0; wr32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1, 0x3002); - wr32_epcs(hw, SR_MII_MMD_AN_CTL, 0x0105); + /* for sgmii + external phy, set to 0x0105 (phy sgmii mode) */ + /* for sgmii direct link, set to 0x010c (mac sgmii mode) */ + if (device_type == TXGBE_DEV_ID_MAC_SGMII || + hw->phy.media_type == txgbe_media_type_fiber) + wr32_epcs(hw, SR_MII_MMD_AN_CTL, 0x010C); + else if (device_type == TXGBE_DEV_ID_SGMII || + device_type == TXGBE_DEV_ID_XAUI) + wr32_epcs(hw, SR_MII_MMD_AN_CTL, 0x0105); wr32_epcs(hw, SR_MII_MMD_DIGI_CTL, 0x0200); value = rd32_epcs(hw, SR_MII_MMD_CTL); value = (value & ~0x1200) | (0x1 << 12) | (0x1 << 9); @@ -2280,6 +2288,8 @@ void txgbe_autoc_write(struct txgbe_hw *hw, u64 autoc) } } else if (hw->phy.media_type == txgbe_media_type_fiber) { txgbe_set_link_to_sfi(hw, speed); + if (speed == TXGBE_LINK_SPEED_1GB_FULL) + txgbe_set_sgmii_an37_ability(hw); } if (speed == TXGBE_LINK_SPEED_10GB_FULL) -- 2.39.5