if (status && status != -EEXIST)
                return status;
 
+       netdev_dbg(vsi->netdev, "set promisc filter bits for VSI %i: 0x%x\n",
+                  vsi->vsi_num, promisc_m);
        return 0;
 }
 
                                                    promisc_m, 0);
        }
 
+       netdev_dbg(vsi->netdev, "clear promisc filter bits for VSI %i: 0x%x\n",
+                  vsi->vsi_num, promisc_m);
        return status;
 }
 
                                }
                                err = 0;
                                vlan_ops->dis_rx_filtering(vsi);
+
+                               /* promiscuous mode implies allmulticast so
+                                * that VSIs that are in promiscuous mode are
+                                * subscribed to multicast packets coming to
+                                * the port
+                                */
+                               err = ice_set_promisc(vsi,
+                                                     ICE_MCAST_PROMISC_BITS);
+                               if (err)
+                                       goto out_promisc;
                        }
                } else {
                        /* Clear Rx filter to remove traffic from wire */
                                    NETIF_F_HW_VLAN_CTAG_FILTER)
                                        vlan_ops->ena_rx_filtering(vsi);
                        }
+
+                       /* disable allmulti here, but only if allmulti is not
+                        * still enabled for the netdev
+                        */
+                       if (!(vsi->current_netdev_flags & IFF_ALLMULTI)) {
+                               err = ice_clear_promisc(vsi,
+                                                       ICE_MCAST_PROMISC_BITS);
+                               if (err) {
+                                       netdev_err(netdev, "Error %d clearing multicast promiscuous on VSI %i\n",
+                                                  err, vsi->vsi_num);
+                               }
+                       }
                }
        }
        goto exit;