dpaa_eth: fix pause capability advertisement logic
authorJake Moroni <mail@jakemoroni.com>
Sun, 18 Feb 2018 20:26:04 +0000 (15:26 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 May 2018 05:52:39 +0000 (07:52 +0200)
[ Upstream commit 3021efb440d02bf5b952b6d151c7ffee9bdd49fe ]

The ADVERTISED_Asym_Pause bit was being improperly set when both
rx and tx pause were enabled. When rx and tx are both enabled, only
the ADVERTISED_Pause bit is supposed to be set.

Signed-off-by: Jake Moroni <mail@jakemoroni.com>
Acked-by: Madalin Bucur <madalin.bucur@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c

index faea674..85306d1 100644 (file)
@@ -211,7 +211,7 @@ static int dpaa_set_pauseparam(struct net_device *net_dev,
        if (epause->rx_pause)
                newadv = ADVERTISED_Pause | ADVERTISED_Asym_Pause;
        if (epause->tx_pause)
-               newadv |= ADVERTISED_Asym_Pause;
+               newadv ^= ADVERTISED_Asym_Pause;
 
        oldadv = phydev->advertising &
                        (ADVERTISED_Pause | ADVERTISED_Asym_Pause);