diff options
author | Felix Fietkau <nbd@nbd.name> | 2017-02-06 11:46:48 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2017-02-16 17:17:15 +0100 |
commit | 2bf9ea6a31736db059aa97addce3a34b933dacc1 (patch) | |
tree | ecfe628aabaf38e6bd40ca841443d19079105a83 /target/linux/mvebu/patches-4.9/437-phylink-ensure-link-drops-are-reported.patch | |
parent | 237454991618e0e8b7ceb8a8a2a43fca12c1a454 (diff) | |
download | upstream-2bf9ea6a31736db059aa97addce3a34b933dacc1.tar.gz upstream-2bf9ea6a31736db059aa97addce3a34b933dacc1.tar.bz2 upstream-2bf9ea6a31736db059aa97addce3a34b933dacc1.zip |
mvebu: add linux 4.9 support
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Diffstat (limited to 'target/linux/mvebu/patches-4.9/437-phylink-ensure-link-drops-are-reported.patch')
-rw-r--r-- | target/linux/mvebu/patches-4.9/437-phylink-ensure-link-drops-are-reported.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-4.9/437-phylink-ensure-link-drops-are-reported.patch b/target/linux/mvebu/patches-4.9/437-phylink-ensure-link-drops-are-reported.patch new file mode 100644 index 0000000000..8544197478 --- /dev/null +++ b/target/linux/mvebu/patches-4.9/437-phylink-ensure-link-drops-are-reported.patch @@ -0,0 +1,52 @@ +From: Russell King <rmk+kernel@armlinux.org.uk> +Date: Mon, 19 Dec 2016 12:17:57 +0000 +Subject: [PATCH] phylink: ensure link drops are reported + +When the MAC reports a link failure, it can be momentary. Ensure +that the event is reported by latching the loss of link, so that the +worker reports link down. + +Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> +--- + +--- a/drivers/net/phy/phylink.c ++++ b/drivers/net/phy/phylink.c +@@ -60,6 +60,8 @@ struct phylink { + struct phylink_link_state phy_state; + struct work_struct resolve; + ++ bool mac_link_dropped; ++ + const struct phylink_module_ops *module_ops; + void *module_data; + }; +@@ -340,6 +342,9 @@ static void phylink_resolve(struct work_ + + mutex_lock(&pl->state_mutex); + if (pl->phylink_disable_state) { ++ pl->mac_link_dropped = false; ++ link_state.link = false; ++ } else if (pl->mac_link_dropped) { + link_state.link = false; + } else { + switch (pl->link_an_mode) { +@@ -405,6 +410,10 @@ static void phylink_resolve(struct work_ + phylink_pause_to_str(link_state.pause)); + } + } ++ if (!link_state.link && pl->mac_link_dropped) { ++ pl->mac_link_dropped = false; ++ queue_work(system_power_efficient_wq, &pl->resolve); ++ } + mutex_unlock(&pl->state_mutex); + } + +@@ -641,6 +650,8 @@ EXPORT_SYMBOL_GPL(phylink_disconnect_phy + + void phylink_mac_change(struct phylink *pl, bool up) + { ++ if (!up) ++ pl->mac_link_dropped = true; + phylink_run_resolve(pl); + netdev_dbg(pl->netdev, "mac link %s\n", up ? "up" : "down"); + } |