diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/701-net-0347-staging-fsl-dpaa2-mac-do-not-call-dpmac_set_link_sta.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/701-net-0347-staging-fsl-dpaa2-mac-do-not-call-dpmac_set_link_sta.patch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/701-net-0347-staging-fsl-dpaa2-mac-do-not-call-dpmac_set_link_sta.patch b/target/linux/layerscape/patches-5.4/701-net-0347-staging-fsl-dpaa2-mac-do-not-call-dpmac_set_link_sta.patch new file mode 100644 index 0000000000..69202375ee --- /dev/null +++ b/target/linux/layerscape/patches-5.4/701-net-0347-staging-fsl-dpaa2-mac-do-not-call-dpmac_set_link_sta.patch @@ -0,0 +1,45 @@ +From 978b13baa79b68f3471cc2c5110a2e45aab9ca61 Mon Sep 17 00:00:00 2001 +From: Ioana Ciornei <ioana.ciornei@nxp.com> +Date: Tue, 10 Dec 2019 17:26:06 +0200 +Subject: [PATCH] staging: fsl-dpaa2/mac: do not call dpmac_set_link_state() + when nothing changed + +In case nothing changed in the link configuration do not call +dpmac_set_link_state(). +This is needed in case of the following sequence of commands. + +$ ip link set dev eth1 up; ip link set dev eth2 down + +Phylib brings the link down when the aneg is started on the phy which +translates in a link down from phy in MC and confuses the MC linkman. + +Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> +--- + drivers/staging/fsl-dpaa2/mac/mac.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +--- a/drivers/staging/fsl-dpaa2/mac/mac.c ++++ b/drivers/staging/fsl-dpaa2/mac/mac.c +@@ -158,12 +158,16 @@ static void dpaa2_mac_link_changed(struc + netif_carrier_off(netdev); + } + +- if (priv->old_state.up != state.up || +- priv->old_state.rate != state.rate || +- priv->old_state.options != state.options) { +- priv->old_state = state; +- phy_print_status(phydev); +- } ++ /* Call the dpmac_set_link_state() only if there is a change in the ++ * link configuration ++ */ ++ if (priv->old_state.up == state.up && ++ priv->old_state.rate == state.rate && ++ priv->old_state.options == state.options) ++ return; ++ ++ priv->old_state = state; ++ phy_print_status(phydev); + + if (cmp_dpmac_ver(priv, DPMAC_LINK_AUTONEG_VER_MAJOR, + DPMAC_LINK_AUTONEG_VER_MINOR) < 0) { |