aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorGerhard Engleder <gerhard@engleder-embedded.com>2025-03-12 21:30:10 +0100
committerPaolo Abeni <pabeni@redhat.com>2025-03-20 08:45:08 +0100
commit163d744d020e0d2106b5560f67557ffbbacd86ef (patch)
treece7a84b057d82a146c0b23db76ecfe5f79850dbb
parentnet: phy: marvell: Align set_loopback() implementation (diff)
downloadwireguard-linux-163d744d020e0d2106b5560f67557ffbbacd86ef.tar.xz
wireguard-linux-163d744d020e0d2106b5560f67557ffbbacd86ef.zip
tsnep: Select speed for loopback
Use 100 Mbps only if the PHY is configured to this speed. Otherwise use always the maximum speed of 1000 Mbps. Also remove explicit setting of carrier on and link mode after loopback. This is not needed anymore, because phy_loopback() with selected speed signals the link and the speed to the MAC. Signed-off-by: Gerhard Engleder <gerhard@engleder-embedded.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/20250312203010.47429-6-gerhard@engleder-embedded.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-rw-r--r--drivers/net/ethernet/engleder/tsnep_main.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/net/ethernet/engleder/tsnep_main.c b/drivers/net/ethernet/engleder/tsnep_main.c
index 7a9fe0719f8c..625245b0845c 100644
--- a/drivers/net/ethernet/engleder/tsnep_main.c
+++ b/drivers/net/ethernet/engleder/tsnep_main.c
@@ -221,20 +221,19 @@ static void tsnep_phy_link_status_change(struct net_device *netdev)
static int tsnep_phy_loopback(struct tsnep_adapter *adapter, bool enable)
{
- int retval;
-
- retval = phy_loopback(adapter->phydev, enable, 0);
+ int speed;
- /* PHY link state change is not signaled if loopback is enabled, it
- * would delay a working loopback anyway, let's ensure that loopback
- * is working immediately by setting link mode directly
- */
- if (!retval && enable) {
- netif_carrier_on(adapter->netdev);
- tsnep_set_link_mode(adapter);
+ if (enable) {
+ if (adapter->phydev->autoneg == AUTONEG_DISABLE &&
+ adapter->phydev->speed == SPEED_100)
+ speed = SPEED_100;
+ else
+ speed = SPEED_1000;
+ } else {
+ speed = 0;
}
- return retval;
+ return phy_loopback(adapter->phydev, enable, speed);
}
static int tsnep_phy_open(struct tsnep_adapter *adapter)