diff options
Diffstat (limited to 'target/linux/generic/backport-4.19/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch')
-rw-r--r-- | target/linux/generic/backport-4.19/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/target/linux/generic/backport-4.19/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch b/target/linux/generic/backport-4.19/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch new file mode 100644 index 0000000000..6d47fa9634 --- /dev/null +++ b/target/linux/generic/backport-4.19/707-v5.1-net-phy-add-genphy_c45_check_and_restart_aneg.patch @@ -0,0 +1,64 @@ +From 2c3db705737cf52d7d24c993f0889b25b956c718 Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit <hkallweit1@gmail.com> +Date: Mon, 18 Feb 2019 21:27:18 +0100 +Subject: [PATCH 605/660] net: phy: add genphy_c45_check_and_restart_aneg + +This function will be used by config_aneg callback implementations of +PHY drivers and allows to reduce boilerplate code. + +Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> +Signed-off-by: David S. Miller <davem@davemloft.net> +--- + drivers/net/phy/phy-c45.c | 30 ++++++++++++++++++++++++++++++ + include/linux/phy.h | 1 + + 2 files changed, 31 insertions(+) + +--- a/drivers/net/phy/phy-c45.c ++++ b/drivers/net/phy/phy-c45.c +@@ -110,6 +110,36 @@ int genphy_c45_restart_aneg(struct phy_d + EXPORT_SYMBOL_GPL(genphy_c45_restart_aneg); + + /** ++ * genphy_c45_check_and_restart_aneg - Enable and restart auto-negotiation ++ * @phydev: target phy_device struct ++ * @restart: whether aneg restart is requested ++ * ++ * This assumes that the auto-negotiation MMD is present. ++ * ++ * Check, and restart auto-negotiation if needed. ++ */ ++int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart) ++{ ++ int ret = 0; ++ ++ if (!restart) { ++ /* Configure and restart aneg if it wasn't set before */ ++ ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); ++ if (ret < 0) ++ return ret; ++ ++ if (!(ret & MDIO_AN_CTRL1_ENABLE)) ++ restart = true; ++ } ++ ++ if (restart) ++ ret = genphy_c45_restart_aneg(phydev); ++ ++ return ret; ++} ++EXPORT_SYMBOL_GPL(genphy_c45_check_and_restart_aneg); ++ ++/** + * genphy_c45_aneg_done - return auto-negotiation complete status + * @phydev: target phy_device struct + * +--- a/include/linux/phy.h ++++ b/include/linux/phy.h +@@ -1098,6 +1098,7 @@ int genphy_write_mmd_unsupported(struct + + /* Clause 45 PHY */ + int genphy_c45_restart_aneg(struct phy_device *phydev); ++int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart); + int genphy_c45_aneg_done(struct phy_device *phydev); + int genphy_c45_read_link(struct phy_device *phydev, u32 mmd_mask); + int genphy_c45_read_lpa(struct phy_device *phydev); |