[SRU][F:linux-bluefield][PATCH v1 1/1] UBUNTU: SAUCE: mlxbf-gige: autonegotiation fails to complete on BF2

Asmaa Mnebhi asmaa at nvidia.com
Thu Apr 18 21:10:46 UTC 2024


BugLink: https://bugs.launchpad.net/bugs/2062384

During their reboot test, QA found an intermittent issue where the OOB link is down.
The link is down because the KSZ9031 PHY fails to complete autonegotiation.
Even under "normal" circumstances where autonegotiation completes,
it takes an abnormal time to do so (on average, at least 8 seconds).

Hence, the hardware team and Microchip are involved in this debug but the root cause is still unknown.
In the meantime, we need to provide a software workaround since customers are starting to see this issue as well.

Signed-off-by: Asmaa Mnebhi <asmaa at nvidia.com>
Reviewed-by: David Thompson <davthompson at nvidia.com>
---
 .../mellanox/mlxbf_gige/mlxbf_gige_main.c         | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
index d322d9fb06ba..635009a209d5 100644
--- a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
+++ b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
@@ -138,6 +138,7 @@ static int mlxbf_gige_open(struct net_device *netdev)
 {
 	struct mlxbf_gige *priv = netdev_priv(netdev);
 	struct phy_device *phydev = netdev->phydev;
+	u8 timeout = 10;
 	u64 control;
 	u64 int_en;
 	int err;
@@ -163,6 +164,20 @@ static int mlxbf_gige_open(struct net_device *netdev)
 
 	phy_start(phydev);
 
+	/* On BlueField-2 systems, the KSZ9031 PHY hardware could fail
+	 * to complete autonegotiation and so the link remains down.
+	 * The software workaround is to restart autonegotiation.
+	 */
+	while (timeout) {
+		if (phy_aneg_done(phydev))
+			break;
+		msleep(1000);
+		timeout--;
+	};
+
+	if (timeout == 0)
+		phy_restart_aneg(phydev);
+
 	err = mlxbf_gige_tx_init(priv);
 	if (err)
 		goto free_irqs;
-- 
2.30.1




More information about the kernel-team mailing list