From 6fcba5eec3bb02ac32ff40db3be8ef450e30fe50 Mon Sep 17 00:00:00 2001 From: Chuanhong Guo Date: Thu, 9 Apr 2020 15:50:21 +0800 Subject: [PATCH] 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 --- .../990-NET-no-auto-carrier-off-support.patch | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 target/linux/ramips/patches-5.4/990-NET-no-auto-carrier-off-support.patch 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 +Date: Sun, 27 Jul 2014 09:38:50 +0100 +Subject: [PATCH 34/53] NET: multi phy support + +Signed-off-by: John Crispin +--- + 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 */