]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
net: phy: don't clear BMCR in genphy_soft_reset
authorHeiner Kallweit <hkallweit1@gmail.com>
Fri, 22 Mar 2019 19:00:20 +0000 (20:00 +0100)
committerSeth Forshee <seth.forshee@canonical.com>
Wed, 3 Apr 2019 18:11:41 +0000 (13:11 -0500)
BugLink: https://bugs.launchpad.net/bugs/1823060
[ Upstream commit d29f5aa0bc0c321e1b9e4658a2a7e08e885da52a ]

So far we effectively clear the BMCR register. Some PHY's can deal
with this (e.g. because they reset BMCR to a default as part of a
soft-reset) whilst on others this causes issues because e.g. the
autoneg bit is cleared. Marvell is an example, see also thread [0].
So let's be a little bit more gentle and leave all bits we're not
interested in as-is. This change is needed for PHY drivers to
properly deal with the original patch.

[0] https://marc.info/?t=155264050700001&r=1&w=2

Fixes: 6e2d85ec0559 ("net: phy: Stop with excessive soft reset")
Tested-by: Phil Reid <preid@electromag.com.au>
Tested-by: liweihang <liweihang@hisilicon.com>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
drivers/net/phy/phy_device.c

index 46c86725a693a84084f03b12cbf807661b78e65f..739434fe04fa30a24ebb5c702c2f22f73f3bf3af 100644 (file)
@@ -1827,7 +1827,7 @@ int genphy_soft_reset(struct phy_device *phydev)
 {
        int ret;
 
-       ret = phy_write(phydev, MII_BMCR, BMCR_RESET);
+       ret = phy_set_bits(phydev, MII_BMCR, BMCR_RESET);
        if (ret < 0)
                return ret;