[SRU][J:linux-bluefield][PATCH v1 1/1] UBUNTU: SAUCE: mlxbf_gige: Ethtool speed does not update based on link status
Chris Babroski
cbabroski at nvidia.com
Wed Jul 9 19:44:16 UTC 2025
BugLink: https://bugs.launchpad.net/bugs/2116284
The "Speed" and "Duplex" fields displayed by ethtool should report
"Unknown" when the link is down. Create a mlxbf_gige ethtool_ops
get_link_ksettings operation that updates the speed and duplex value
reported to ethtool as expected.
Signed-off-by: Chris Babroski <cbabroski at nvidia.com>
Reviewed-by: David Thompson <davthompson at nvidia.com>
Reviewed-by: Asmaa Mnebhi <asmaa at nvidia.com>
---
.../mellanox/mlxbf_gige/mlxbf_gige_ethtool.c | 26 ++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_ethtool.c b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_ethtool.c
index 05d338d479dc..4d6dfc495bc2 100644
--- a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_ethtool.c
@@ -193,6 +193,30 @@ static void mlxbf_gige_get_pause_stats(struct net_device *netdev,
}
}
+static int mlxbf_gige_get_link_ksettings(struct net_device *ndev,
+ struct ethtool_link_ksettings *cmd)
+{
+ struct phy_device *phydev;
+ int ret;
+
+ ret = phy_ethtool_get_link_ksettings(ndev, cmd);
+ if (ret)
+ return ret;
+
+ phydev = ndev->phydev;
+ if (!phydev)
+ return -ENODEV;
+
+ mutex_lock(&phydev->lock);
+ if (!phydev->link) {
+ cmd->base.speed = SPEED_UNKNOWN;
+ cmd->base.duplex = DUPLEX_UNKNOWN;
+ }
+ mutex_unlock(&phydev->lock);
+
+ return 0;
+}
+
static u32 mlxbf_gige_get_msglevel(struct net_device *netdev)
{
struct mlxbf_gige *priv = netdev_priv(netdev);
@@ -217,7 +241,7 @@ const struct ethtool_ops mlxbf_gige_ethtool_ops = {
.nway_reset = phy_ethtool_nway_reset,
.get_pauseparam = mlxbf_gige_get_pauseparam,
.get_pause_stats = mlxbf_gige_get_pause_stats,
- .get_link_ksettings = phy_ethtool_get_link_ksettings,
+ .get_link_ksettings = mlxbf_gige_get_link_ksettings,
.set_link_ksettings = phy_ethtool_set_link_ksettings,
.get_msglevel = mlxbf_gige_get_msglevel,
.set_msglevel = mlxbf_gige_set_msglevel,
--
2.34.1
More information about the kernel-team
mailing list