aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/marvell/mvpp2.c')
-rw-r--r--drivers/net/ethernet/marvell/mvpp2.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 4f34e1b79705..ac92685dd4e5 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -5666,6 +5666,7 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
5666 int id = port->id; 5666 int id = port->id;
5667 bool allmulti = dev->flags & IFF_ALLMULTI; 5667 bool allmulti = dev->flags & IFF_ALLMULTI;
5668 5668
5669retry:
5669 mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC); 5670 mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);
5670 mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti); 5671 mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);
5671 mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti); 5672 mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti);
@@ -5673,9 +5674,13 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
5673 /* Remove all port->id's mcast enries */ 5674 /* Remove all port->id's mcast enries */
5674 mvpp2_prs_mcast_del_all(priv, id); 5675 mvpp2_prs_mcast_del_all(priv, id);
5675 5676
5676 if (allmulti && !netdev_mc_empty(dev)) { 5677 if (!allmulti) {
5677 netdev_for_each_mc_addr(ha, dev) 5678 netdev_for_each_mc_addr(ha, dev) {
5678 mvpp2_prs_mac_da_accept(priv, id, ha->addr, true); 5679 if (mvpp2_prs_mac_da_accept(priv, id, ha->addr, true)) {
5680 allmulti = true;
5681 goto retry;
5682 }
5683 }
5679 } 5684 }
5680} 5685}
5681 5686