From: Chuanhong Guo Date: Thu, 9 Apr 2020 07:50:21 +0000 (+0800) Subject: ramips: port 0034-NET-multi-phy-support.patch to 5.4 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=6fcba5eec3bb02ac32ff40db3be8ef450e30fe50;p=openwrt%2Fstaging%2Fldir.git 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 --- 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 */