aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ath79/patches-5.4/202-ag71xx-Run-ag71xx_link_adjust-only-when-needed.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2020-02-18 00:36:28 +0100
committerKoen Vandeputte <koen.vandeputte@ncentric.com>2020-02-28 17:50:46 +0100
commit1e95f9b3ea8375931bf82b8d102b9410d6eafcfa (patch)
tree41f419aadf177b18011f3f76cca4acc013130799 /target/linux/ath79/patches-5.4/202-ag71xx-Run-ag71xx_link_adjust-only-when-needed.patch
parent53ab9865c2b91bc6a239b2adee800dc52875b6bc (diff)
downloadupstream-1e95f9b3ea8375931bf82b8d102b9410d6eafcfa.tar.gz
upstream-1e95f9b3ea8375931bf82b8d102b9410d6eafcfa.tar.bz2
upstream-1e95f9b3ea8375931bf82b8d102b9410d6eafcfa.zip
ath79: Make upstream ag71xx driver work
* Fix some bugs in the driver * Add missing clock and reset references in dts * Rename mdio-bus to mdio so the driver find it Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'target/linux/ath79/patches-5.4/202-ag71xx-Run-ag71xx_link_adjust-only-when-needed.patch')
-rw-r--r--target/linux/ath79/patches-5.4/202-ag71xx-Run-ag71xx_link_adjust-only-when-needed.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/target/linux/ath79/patches-5.4/202-ag71xx-Run-ag71xx_link_adjust-only-when-needed.patch b/target/linux/ath79/patches-5.4/202-ag71xx-Run-ag71xx_link_adjust-only-when-needed.patch
new file mode 100644
index 0000000000..00f34dffa1
--- /dev/null
+++ b/target/linux/ath79/patches-5.4/202-ag71xx-Run-ag71xx_link_adjust-only-when-needed.patch
@@ -0,0 +1,69 @@
+From d42c6bf2752a46bdf3931bd6e56db419742fbb20 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Mon, 17 Feb 2020 23:55:22 +0100
+Subject: [PATCH 3/3] ag71xx: Run ag71xx_link_adjust() only when needed
+
+My system printed this line every second:
+ ag71xx 19000000.eth eth0: Link is Up - 1Gbps/Full - flow control off
+The function ag71xx_phy_link_adjust() was called by the PHY layer every
+second even when nothing changed.
+
+With this patch the old status is stored and the real
+ag71xx_link_adjust() function is only called when when something really
+changed. This way the update and also this print is only done once any
+more.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+Fixes: d51b6ce441d3 ("net: ethernet: add ag71xx driver")
+---
+ drivers/net/ethernet/atheros/ag71xx.c | 24 +++++++++++++++++++++++-
+ 1 file changed, 23 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/ethernet/atheros/ag71xx.c
++++ b/drivers/net/ethernet/atheros/ag71xx.c
+@@ -307,6 +307,10 @@ struct ag71xx {
+ u32 msg_enable;
+ const struct ag71xx_dcfg *dcfg;
+
++ unsigned int link;
++ unsigned int speed;
++ int duplex;
++
+ /* From this point onwards we're not looking at per-packet fields. */
+ void __iomem *mac_base;
+
+@@ -854,6 +858,7 @@ static void ag71xx_link_adjust(struct ag
+
+ if (!phydev->link && update) {
+ ag71xx_hw_stop(ag);
++ phy_print_status(phydev);
+ return;
+ }
+
+@@ -907,8 +912,25 @@ static void ag71xx_link_adjust(struct ag
+ static void ag71xx_phy_link_adjust(struct net_device *ndev)
+ {
+ struct ag71xx *ag = netdev_priv(ndev);
++ struct phy_device *phydev = ndev->phydev;
++ int status_change = 0;
++
++ if (phydev->link) {
++ if (ag->duplex != phydev->duplex
++ || ag->speed != phydev->speed) {
++ status_change = 1;
++ }
++ }
++
++ if (phydev->link != ag->link)
++ status_change = 1;
++
++ ag->link = phydev->link;
++ ag->duplex = phydev->duplex;
++ ag->speed = phydev->speed;
+
+- ag71xx_link_adjust(ag, true);
++ if (status_change)
++ ag71xx_link_adjust(ag, true);
+ }
+
+ static int ag71xx_phy_connect(struct ag71xx *ag)