diff options
Diffstat (limited to 'target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch')
-rw-r--r-- | target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch b/target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch deleted file mode 100644 index dddfcc2018..0000000000 --- a/target/linux/generic/backport-5.4/706-v5.1-net-phy-add-register-modifying-helpers-returning-1-o.patch +++ /dev/null @@ -1,217 +0,0 @@ -From c1e3f753f6b85d7636024159bb78f764e09492f1 Mon Sep 17 00:00:00 2001 -From: Heiner Kallweit <hkallweit1@gmail.com> -Date: Sun, 10 Feb 2019 19:57:56 +0100 -Subject: [PATCH 604/660] net: phy: add register modifying helpers returning 1 - on change - -When modifying registers there are scenarios where we need to know -whether the register content actually changed. This patch adds -new helpers to not break users of the current ones, phy_modify() etc. - -Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> -Reviewed-by: Andrew Lunn <andrew@lunn.ch> -Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/phy-core.c | 127 ++++++++++++++++++++++++++++++++++--- - include/linux/phy.h | 12 +++- - 2 files changed, 128 insertions(+), 11 deletions(-) - ---- a/drivers/net/phy/phy-core.c -+++ b/drivers/net/phy/phy-core.c -@@ -364,7 +364,7 @@ int phy_write_mmd(struct phy_device *phy - EXPORT_SYMBOL(phy_write_mmd); - - /** -- * __phy_modify() - Convenience function for modifying a PHY register -+ * __phy_modify_changed() - Convenience function for modifying a PHY register - * @phydev: a pointer to a &struct phy_device - * @regnum: register number - * @mask: bit mask of bits to clear -@@ -372,16 +372,69 @@ EXPORT_SYMBOL(phy_write_mmd); - * - * Unlocked helper function which allows a PHY register to be modified as - * new register value = (old register value & ~mask) | set -+ * -+ * Returns negative errno, 0 if there was no change, and 1 in case of change - */ --int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) -+int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, -+ u16 set) - { -- int ret; -+ int new, ret; - - ret = __phy_read(phydev, regnum); - if (ret < 0) - return ret; - -- ret = __phy_write(phydev, regnum, (ret & ~mask) | set); -+ new = (ret & ~mask) | set; -+ if (new == ret) -+ return 0; -+ -+ ret = __phy_write(phydev, regnum, new); -+ -+ return ret < 0 ? ret : 1; -+} -+EXPORT_SYMBOL_GPL(__phy_modify_changed); -+ -+/** -+ * phy_modify_changed - Function for modifying a PHY register -+ * @phydev: the phy_device struct -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ * -+ * Returns negative errno, 0 if there was no change, and 1 in case of change -+ */ -+int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) -+{ -+ int ret; -+ -+ mutex_lock(&phydev->mdio.bus->mdio_lock); -+ ret = __phy_modify_changed(phydev, regnum, mask, set); -+ mutex_unlock(&phydev->mdio.bus->mdio_lock); -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(phy_modify_changed); -+ -+/** -+ * __phy_modify - Convenience function for modifying a PHY register -+ * @phydev: the phy_device struct -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ */ -+int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) -+{ -+ int ret; -+ -+ ret = __phy_modify_changed(phydev, regnum, mask, set); - - return ret < 0 ? ret : 0; - } -@@ -411,7 +464,7 @@ int phy_modify(struct phy_device *phydev - EXPORT_SYMBOL_GPL(phy_modify); - - /** -- * __phy_modify_mmd - Convenience function for modifying a register on MMD -+ * __phy_modify_mmd_changed - Function for modifying a register on MMD - * @phydev: the phy_device struct - * @devad: the MMD containing register to modify - * @regnum: register number to modify -@@ -420,17 +473,73 @@ EXPORT_SYMBOL_GPL(phy_modify); - * - * Unlocked helper function which allows a MMD register to be modified as - * new register value = (old register value & ~mask) | set -+ * -+ * Returns negative errno, 0 if there was no change, and 1 in case of change - */ --int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -- u16 mask, u16 set) -+int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set) - { -- int ret; -+ int new, ret; - - ret = __phy_read_mmd(phydev, devad, regnum); - if (ret < 0) - return ret; - -- ret = __phy_write_mmd(phydev, devad, regnum, (ret & ~mask) | set); -+ new = (ret & ~mask) | set; -+ if (new == ret) -+ return 0; -+ -+ ret = __phy_write_mmd(phydev, devad, regnum, new); -+ -+ return ret < 0 ? ret : 1; -+} -+EXPORT_SYMBOL_GPL(__phy_modify_mmd_changed); -+ -+/** -+ * phy_modify_mmd_changed - Function for modifying a register on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ * -+ * Returns negative errno, 0 if there was no change, and 1 in case of change -+ */ -+int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set) -+{ -+ int ret; -+ -+ mutex_lock(&phydev->mdio.bus->mdio_lock); -+ ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); -+ mutex_unlock(&phydev->mdio.bus->mdio_lock); -+ -+ return ret; -+} -+EXPORT_SYMBOL_GPL(phy_modify_mmd_changed); -+ -+/** -+ * __phy_modify_mmd - Convenience function for modifying a register on MMD -+ * @phydev: the phy_device struct -+ * @devad: the MMD containing register to modify -+ * @regnum: register number to modify -+ * @mask: bit mask of bits to clear -+ * @set: new value of bits set in mask to write to @regnum -+ * -+ * NOTE: MUST NOT be called from interrupt context, -+ * because the bus read/write functions may wait for an interrupt -+ * to conclude the operation. -+ */ -+int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set) -+{ -+ int ret; -+ -+ ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); - - return ret < 0 ? ret : 0; - } ---- a/include/linux/phy.h -+++ b/include/linux/phy.h -@@ -795,13 +795,21 @@ int phy_write_mmd(struct phy_device *phy - */ - int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val); - -+int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, -+ u16 set); -+int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, -+ u16 set); - int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set); - int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set); - -+int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set); -+int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, -+ u16 mask, u16 set); - int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -- u16 mask, u16 set); -+ u16 mask, u16 set); - int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, -- u16 mask, u16 set); -+ u16 mask, u16 set); - - /** - * __phy_set_bits - Convenience function for setting bits in a PHY register |