Fix SGMII mode to link up.

Fixes: 01c3cf5c85a7 ("net/txgbe: add autoneg control read and write")
Cc: sta...@dpdk.org

Signed-off-by: Jiawen Wu <jiawe...@trustnetic.com>
---
 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.27.0



Reply via email to