]> Git Repo - linux.git/commitdiff
amd-xgbe: handle corner-case during sfp hotplug
authorRaju Rangoju <[email protected]>
Tue, 21 Nov 2023 19:14:33 +0000 (00:44 +0530)
committerPaolo Abeni <[email protected]>
Thu, 23 Nov 2023 12:47:23 +0000 (13:47 +0100)
Force the mode change for SFI in Fixed PHY configurations. Fixed PHY
configurations needs PLL to be enabled while doing mode set. When the
SFP module isn't connected during boot, driver assumes AN is ON and
attempts auto-negotiation. However, if the connected SFP comes up in
Fixed PHY configuration the link will not come up as PLL isn't enabled
while the initial mode set command is issued. So, force the mode change
for SFI in Fixed PHY configuration to fix link issues.

Fixes: e57f7a3feaef ("amd-xgbe: Prepare for working with more than one type of phy")
Acked-by: Shyam Sundar S K <[email protected]>
Signed-off-by: Raju Rangoju <[email protected]>
Reviewed-by: Wojciech Drewek <[email protected]>
Signed-off-by: Paolo Abeni <[email protected]>
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c

index 32d2c6fac65266baee9bc36477f21418b50f67e0..4a2dc705b52801792652c3ba6a9c945b306c3198 100644 (file)
@@ -1193,7 +1193,19 @@ static int xgbe_phy_config_fixed(struct xgbe_prv_data *pdata)
        if (pdata->phy.duplex != DUPLEX_FULL)
                return -EINVAL;
 
-       xgbe_set_mode(pdata, mode);
+       /* Force the mode change for SFI in Fixed PHY config.
+        * Fixed PHY configs needs PLL to be enabled while doing mode set.
+        * When the SFP module isn't connected during boot, driver assumes
+        * AN is ON and attempts autonegotiation. However, if the connected
+        * SFP comes up in Fixed PHY config, the link will not come up as
+        * PLL isn't enabled while the initial mode set command is issued.
+        * So, force the mode change for SFI in Fixed PHY configuration to
+        * fix link issues.
+        */
+       if (mode == XGBE_MODE_SFI)
+               xgbe_change_mode(pdata, mode);
+       else
+               xgbe_set_mode(pdata, mode);
 
        return 0;
 }
This page took 0.090253 seconds and 4 git commands to generate.