aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorChuanhong Guo <gch981213@gmail.com>2020-04-09 15:50:21 +0800
committerChuanhong Guo <gch981213@gmail.com>2020-04-12 22:27:18 +0800
commit6fcba5eec3bb02ac32ff40db3be8ef450e30fe50 (patch)
treea5bd6693e731ba8485ae017292be4fe0eb3cb399 /target/linux
parent05dee5833a5f2d3d182dfa6de86b3e6b237940e3 (diff)
downloadupstream-6fcba5eec3bb02ac32ff40db3be8ef450e30fe50.tar.gz
upstream-6fcba5eec3bb02ac32ff40db3be8ef450e30fe50.tar.bz2
upstream-6fcba5eec3bb02ac32ff40db3be8ef450e30fe50.zip
ramips: port 0034-NET-multi-phy-support.patch to 5.4
This hack is needed for old ethernet driver: On mt7620, we have two exposed RGMII ports that connects to builtin switch. However, swconfig has no way to interact with phy subsystem. As a result, we have to register both PHYs to ethernet mac instead and this patch prevents main ethernet interface from going down due to phy link changes. Also rename the patch for its actual purpose. Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/ramips/patches-5.4/990-NET-no-auto-carrier-off-support.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/target/linux/ramips/patches-5.4/990-NET-no-auto-carrier-off-support.patch b/target/linux/ramips/patches-5.4/990-NET-no-auto-carrier-off-support.patch
new file mode 100644
index 0000000000..c15be64377
--- /dev/null
+++ b/target/linux/ramips/patches-5.4/990-NET-no-auto-carrier-off-support.patch
@@ -0,0 +1,47 @@
+From 0b6eb1e68290243d439ee330ea8d0b239a5aec69 Mon Sep 17 00:00:00 2001
+From: John Crispin <blogic@openwrt.org>
+Date: Sun, 27 Jul 2014 09:38:50 +0100
+Subject: [PATCH 34/53] NET: multi phy support
+
+Signed-off-by: John Crispin <blogic@openwrt.org>
+---
+ drivers/net/phy/phy.c | 9 ++++++---
+ include/linux/phy.h | 1 +
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/phy/phy.c
++++ b/drivers/net/phy/phy.c
+@@ -546,7 +546,10 @@ static int phy_check_link_status(struct
+ phy_link_up(phydev);
+ } else if (!phydev->link && phydev->state != PHY_NOLINK) {
+ phydev->state = PHY_NOLINK;
+- phy_link_down(phydev, true);
++ if (!phydev->no_auto_carrier_off)
++ phy_link_down(phydev, true);
++ else
++ phy_link_down(phydev, false);
+ }
+
+ return 0;
+@@ -926,7 +929,10 @@ void phy_state_machine(struct work_struc
+ case PHY_HALTED:
+ if (phydev->link) {
+ phydev->link = 0;
+- phy_link_down(phydev, true);
++ if (!phydev->no_auto_carrier_off)
++ phy_link_down(phydev, true);
++ else
++ phy_link_down(phydev, false);
+ }
+ do_suspend = true;
+ break;
+--- a/include/linux/phy.h
++++ b/include/linux/phy.h
+@@ -380,6 +380,7 @@ struct phy_device {
+ unsigned suspended_by_mdio_bus:1;
+ unsigned sysfs_links:1;
+ unsigned loopback_enabled:1;
++ unsigned no_auto_carrier_off:1;
+
+ unsigned autoneg:1;
+ /* The most recently read link state */