diff mbox series

[SRU,F,PULL,v2,17/23] Revert "UBUNTU: SAUCE: mlxbf_gige_main.c: Fix OOB's ethtool command"

Message ID 20210709190830.5405-18-asmaa@nvidia.com
State New
Headers show
Series Cherry-pick the upstreamed mlxbf-gige driver | expand

Commit Message

Asmaa Mnebhi July 9, 2021, 7:08 p.m. UTC
BugLink: https://bugs.launchpad.net/bugs/1934923

This reverts commit a9139cd0033706cfc4610009f61035ec2c155a16.

Signed-off-by: Asmaa Mnebhi <asmaa@nvidia.com>
---
 .../mellanox/mlxbf_gige/mlxbf_gige_main.c     | 46 ++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)
diff mbox series

Patch

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 75263fcd542e..b267d473f978 100644
--- a/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
+++ b/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c
@@ -481,6 +481,50 @@  static void mlxbf_gige_get_pauseparam(struct net_device *netdev,
 	pause->tx_pause = 1;
 }
 
+static int mlxbf_gige_get_link_ksettings(struct net_device *netdev,
+					 struct ethtool_link_ksettings *link_ksettings)
+{
+	struct phy_device *phydev = netdev->phydev;
+	u32 supported, advertising;
+	u32 lp_advertising = 0;
+	int status;
+
+	supported = SUPPORTED_TP | SUPPORTED_1000baseT_Full |
+		    SUPPORTED_Autoneg | SUPPORTED_Pause;
+
+	advertising = ADVERTISED_1000baseT_Full | ADVERTISED_Autoneg |
+		     ADVERTISED_Pause;
+
+	status = phy_read(phydev, MII_LPA);
+	if (status >= 0) {
+		lp_advertising = mii_lpa_to_ethtool_lpa_t(status & 0xffff);
+	}
+
+	status = phy_read(phydev, MII_STAT1000);
+	if (status >= 0) {
+		lp_advertising |= mii_stat1000_to_ethtool_lpa_t(status & 0xffff);
+	}
+
+	ethtool_convert_legacy_u32_to_link_mode(link_ksettings->link_modes.supported,
+						supported);
+	ethtool_convert_legacy_u32_to_link_mode(link_ksettings->link_modes.advertising,
+						advertising);
+	ethtool_convert_legacy_u32_to_link_mode(link_ksettings->link_modes.lp_advertising,
+						lp_advertising);
+
+	link_ksettings->base.autoneg = AUTONEG_ENABLE;
+	link_ksettings->base.speed = SPEED_1000;
+	link_ksettings->base.duplex = DUPLEX_FULL;
+	link_ksettings->base.port = PORT_TP;
+	link_ksettings->base.phy_address = MLXBF_GIGE_DEFAULT_PHY_ADDR;
+	link_ksettings->base.transceiver = XCVR_INTERNAL;
+	link_ksettings->base.mdio_support = ETH_MDIO_SUPPORTS_C22;
+	link_ksettings->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
+	link_ksettings->base.eth_tp_mdix_ctrl = ETH_TP_MDI_INVALID;
+
+	return 0;
+}
+
 static const struct ethtool_ops mlxbf_gige_ethtool_ops = {
 	.get_drvinfo		= mlxbf_gige_get_drvinfo,
 	.get_link		= ethtool_op_get_link,
@@ -493,7 +537,7 @@  static const struct ethtool_ops mlxbf_gige_ethtool_ops = {
 	.get_ethtool_stats      = mlxbf_gige_get_ethtool_stats,
 	.nway_reset		= phy_ethtool_nway_reset,
 	.get_pauseparam		= mlxbf_gige_get_pauseparam,
-	.get_link_ksettings	= phy_ethtool_get_link_ksettings,
+	.get_link_ksettings	= mlxbf_gige_get_link_ksettings,
 };
 
 static void mlxbf_gige_handle_link_change(struct net_device *netdev)