|
@@ -7137,6 +7137,7 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
|
|
|
int id = port->id;
|
|
|
bool allmulti = dev->flags & IFF_ALLMULTI;
|
|
|
|
|
|
+retry:
|
|
|
mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);
|
|
|
mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);
|
|
|
mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti);
|
|
@@ -7144,9 +7145,13 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
|
|
|
/* Remove all port->id's mcast enries */
|
|
|
mvpp2_prs_mcast_del_all(priv, id);
|
|
|
|
|
|
- if (allmulti && !netdev_mc_empty(dev)) {
|
|
|
- netdev_for_each_mc_addr(ha, dev)
|
|
|
- mvpp2_prs_mac_da_accept(priv, id, ha->addr, true);
|
|
|
+ if (!allmulti) {
|
|
|
+ netdev_for_each_mc_addr(ha, dev) {
|
|
|
+ if (mvpp2_prs_mac_da_accept(priv, id, ha->addr, true)) {
|
|
|
+ allmulti = true;
|
|
|
+ goto retry;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|