forked from openwrt/openwrt
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
kernel: add backported phy/phylink/sfp patches
Backport the phy/phylink/sfp patches currently queued in netdev or in mainline necessary to support GPON popular modules, specifically to support Huawei and Nokia GPON modules. Signed-off-by: Russell King <linux@armlinux.org.uk> [jonas.gorski: include kernel version in file names, refresh patches] Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
- Loading branch information
1 parent
a07638e
commit 1c16b57
Showing
43 changed files
with
4,575 additions
and
0 deletions.
There are no files selected for viewing
49 changes: 49 additions & 0 deletions
49
...eneric/backport-4.19/702-v4.20-net-ethernet-Add-helper-for-MACs-which-support-asym-.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
From 1da223db3a0c522300b519ecbe1dc45927e28088 Mon Sep 17 00:00:00 2001 | ||
From: Andrew Lunn <andrew@lunn.ch> | ||
Date: Wed, 12 Sep 2018 01:53:15 +0200 | ||
Subject: [PATCH 600/660] net: ethernet: Add helper for MACs which support asym | ||
pause | ||
|
||
Rather than have the MAC drivers manipulate phydev members to indicate | ||
they support Asym Pause, add a helper function. | ||
|
||
Signed-off-by: Andrew Lunn <andrew@lunn.ch> | ||
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | ||
Signed-off-by: David S. Miller <davem@davemloft.net> | ||
--- | ||
drivers/net/phy/phy_device.c | 13 +++++++++++++ | ||
include/linux/phy.h | 1 + | ||
2 files changed, 14 insertions(+) | ||
|
||
--- a/drivers/net/phy/phy_device.c | ||
+++ b/drivers/net/phy/phy_device.c | ||
@@ -1776,6 +1776,19 @@ int phy_set_max_speed(struct phy_device | ||
} | ||
EXPORT_SYMBOL(phy_set_max_speed); | ||
|
||
+/** | ||
+ * phy_support_asym_pause - Enable support of asym pause | ||
+ * @phydev: target phy_device struct | ||
+ * | ||
+ * Description: Called by the MAC to indicate is supports Asym Pause. | ||
+ */ | ||
+void phy_support_asym_pause(struct phy_device *phydev) | ||
+{ | ||
+ phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | ||
+ phydev->advertising = phydev->supported; | ||
+} | ||
+EXPORT_SYMBOL(phy_support_asym_pause); | ||
+ | ||
static void of_set_phy_supported(struct phy_device *phydev) | ||
{ | ||
struct device_node *node = phydev->mdio.dev.of_node; | ||
--- a/include/linux/phy.h | ||
+++ b/include/linux/phy.h | ||
@@ -1049,6 +1049,7 @@ int phy_mii_ioctl(struct phy_device *phy | ||
int phy_start_interrupts(struct phy_device *phydev); | ||
void phy_print_status(struct phy_device *phydev); | ||
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); | ||
+void phy_support_asym_pause(struct phy_device *phydev); | ||
|
||
int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, | ||
int (*run)(struct phy_device *)); |
66 changes: 66 additions & 0 deletions
66
...eneric/backport-4.19/703-v4.20-net-ethernet-Add-helper-for-set_pauseparam-for-Asym-.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
From ce825df56e0480a2cbb296e38976babafb57e503 Mon Sep 17 00:00:00 2001 | ||
From: Andrew Lunn <andrew@lunn.ch> | ||
Date: Wed, 12 Sep 2018 01:53:17 +0200 | ||
Subject: [PATCH 601/660] net: ethernet: Add helper for set_pauseparam for Asym | ||
Pause | ||
|
||
ethtool can be used to enable/disable pause. Add a helper to configure | ||
the PHY when asym pause is supported. | ||
|
||
Signed-off-by: Andrew Lunn <andrew@lunn.ch> | ||
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | ||
Signed-off-by: David S. Miller <davem@davemloft.net> | ||
--- | ||
drivers/net/phy/phy_device.c | 30 ++++++++++++++++++++++++++++++ | ||
include/linux/phy.h | 1 + | ||
2 files changed, 31 insertions(+) | ||
|
||
--- a/drivers/net/phy/phy_device.c | ||
+++ b/drivers/net/phy/phy_device.c | ||
@@ -1789,6 +1789,36 @@ void phy_support_asym_pause(struct phy_d | ||
} | ||
EXPORT_SYMBOL(phy_support_asym_pause); | ||
|
||
+/** | ||
+ * phy_set_asym_pause - Configure Pause and Asym Pause | ||
+ * @phydev: target phy_device struct | ||
+ * @rx: Receiver Pause is supported | ||
+ * @tx: Transmit Pause is supported | ||
+ * | ||
+ * Description: Configure advertised Pause support depending on if | ||
+ * transmit and receiver pause is supported. If there has been a | ||
+ * change in adverting, trigger a new autoneg. Generally called from | ||
+ * the set_pauseparam .ndo. | ||
+ */ | ||
+void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx) | ||
+{ | ||
+ u16 oldadv = phydev->advertising; | ||
+ u16 newadv = oldadv &= ~(SUPPORTED_Pause | SUPPORTED_Asym_Pause); | ||
+ | ||
+ if (rx) | ||
+ newadv |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | ||
+ if (tx) | ||
+ newadv ^= SUPPORTED_Asym_Pause; | ||
+ | ||
+ if (oldadv != newadv) { | ||
+ phydev->advertising = newadv; | ||
+ | ||
+ if (phydev->autoneg) | ||
+ phy_start_aneg(phydev); | ||
+ } | ||
+} | ||
+EXPORT_SYMBOL(phy_set_asym_pause); | ||
+ | ||
static void of_set_phy_supported(struct phy_device *phydev) | ||
{ | ||
struct device_node *node = phydev->mdio.dev.of_node; | ||
--- a/include/linux/phy.h | ||
+++ b/include/linux/phy.h | ||
@@ -1050,6 +1050,7 @@ int phy_start_interrupts(struct phy_devi | ||
void phy_print_status(struct phy_device *phydev); | ||
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); | ||
void phy_support_asym_pause(struct phy_device *phydev); | ||
+void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx); | ||
|
||
int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, | ||
int (*run)(struct phy_device *)); |
40 changes: 40 additions & 0 deletions
40
target/linux/generic/backport-4.19/704-v4.20-net-phy-Stop-with-excessive-soft-reset.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
From 1541649a9dd79e9b941d399de564475e426a2d0b Mon Sep 17 00:00:00 2001 | ||
From: Florian Fainelli <f.fainelli@gmail.com> | ||
Date: Tue, 25 Sep 2018 11:28:45 -0700 | ||
Subject: [PATCH 602/660] net: phy: Stop with excessive soft reset | ||
|
||
While consolidating the PHY reset in phy_init_hw() an unconditionaly | ||
BMCR soft-reset I became quite trigger happy with those. This was later | ||
on deactivated for the Generic PHY driver on the premise that a prior | ||
software entity (e.g: bootloader) might have applied workarounds in | ||
commit 0878fff1f42c ("net: phy: Do not perform software reset for | ||
Generic PHY"). | ||
|
||
Since we have a hook to wire-up a soft_reset callback, just use that and | ||
get rid of the call to genphy_soft_reset() entirely. This speeds up | ||
initialization and link establishment for most PHYs out there that do | ||
not require a reset. | ||
|
||
Fixes: 87aa9f9c61ad ("net: phy: consolidate PHY reset in phy_init_hw()") | ||
Tested-by: Wang, Dongsheng <dongsheng.wang@hxt-semitech.com> | ||
Tested-by: Chris Healy <cphealy@gmail.com> | ||
Tested-by: Andrew Lunn <andrew@lunn.ch> | ||
Tested-by: Clemens Gruber <clemens.gruber@pqgruber.com> | ||
Signed-off-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_device.c | 2 -- | ||
1 file changed, 2 deletions(-) | ||
|
||
--- a/drivers/net/phy/phy_device.c | ||
+++ b/drivers/net/phy/phy_device.c | ||
@@ -885,8 +885,6 @@ int phy_init_hw(struct phy_device *phyde | ||
|
||
if (phydev->drv->soft_reset) | ||
ret = phydev->drv->soft_reset(phydev); | ||
- else | ||
- ret = genphy_soft_reset(phydev); | ||
|
||
if (ret < 0) | ||
return ret; |
Oops, something went wrong.