]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.14
authorSasha Levin <sashal@kernel.org>
Fri, 12 Mar 2021 23:04:44 +0000 (18:04 -0500)
committerSasha Levin <sashal@kernel.org>
Fri, 12 Mar 2021 23:04:44 +0000 (18:04 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.14/net-phy-fix-save-wrong-speed-and-duplex-problem-if-a.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/net-phy-fix-save-wrong-speed-and-duplex-problem-if-a.patch b/queue-4.14/net-phy-fix-save-wrong-speed-and-duplex-problem-if-a.patch
new file mode 100644 (file)
index 0000000..656fe1e
--- /dev/null
@@ -0,0 +1,58 @@
+From 0dcf1b9ea989f70f513bcb09a0c2fdd859d12e7d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 27 Feb 2021 11:05:58 +0800
+Subject: net: phy: fix save wrong speed and duplex problem if autoneg is on
+
+From: Guangbin Huang <huangguangbin2@huawei.com>
+
+[ Upstream commit d9032dba5a2b2bbf0fdce67c8795300ec9923b43 ]
+
+If phy uses generic driver and autoneg is on, enter command
+"ethtool -s eth0 speed 50" will not change phy speed actually, but
+command "ethtool eth0" shows speed is 50Mb/s because phydev->speed
+has been set to 50 and no update later.
+
+And duplex setting has same problem too.
+
+However, if autoneg is on, phy only changes speed and duplex according to
+phydev->advertising, but not phydev->speed and phydev->duplex. So in this
+case, phydev->speed and phydev->duplex don't need to be set in function
+phy_ethtool_ksettings_set() if autoneg is on.
+
+Fixes: 51e2a3846eab ("PHY: Avoid unnecessary aneg restarts")
+Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
+Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/phy/phy.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
+index 7989ae4b8387..e5b86f07f8fc 100644
+--- a/drivers/net/phy/phy.c
++++ b/drivers/net/phy/phy.c
+@@ -335,7 +335,10 @@ int phy_ethtool_ksettings_set(struct phy_device *phydev,
+       phydev->autoneg = autoneg;
+-      phydev->speed = speed;
++      if (autoneg == AUTONEG_DISABLE) {
++              phydev->speed = speed;
++              phydev->duplex = duplex;
++      }
+       phydev->advertising = advertising;
+@@ -344,8 +347,6 @@ int phy_ethtool_ksettings_set(struct phy_device *phydev,
+       else
+               phydev->advertising &= ~ADVERTISED_Autoneg;
+-      phydev->duplex = duplex;
+-
+       phydev->mdix_ctrl = cmd->base.eth_tp_mdix_ctrl;
+       /* Restart the PHY */
+-- 
+2.30.1
+
index 73ded868c2379266151ca4d1beddc6cc2595a36f..86e878b2a7563fc9c91bfa40729afd55716855a8 100644 (file)
@@ -28,3 +28,4 @@ drm-compat-clear-bounce-structures.patch
 drm-meson_drv-add-shutdown-function.patch
 s390-cio-return-efault-if-copy_to_user-fails-take-2.patch
 media-usbtv-fix-deadlock-on-suspend.patch
+net-phy-fix-save-wrong-speed-and-duplex-problem-if-a.patch