mutex_unlock(&mbox->lock);
 }
 
+static bool otx2_promisc_use_mce_list(struct otx2_nic *pfvf)
+{
+       int vf;
+
+       /* The AF driver will determine whether to allow the VF netdev or not */
+       if (is_otx2_vf(pfvf->pcifunc))
+               return true;
+
+       /* check if there are any trusted VFs associated with the PF netdev */
+       for (vf = 0; vf < pci_num_vf(pfvf->pdev); vf++)
+               if (pfvf->vf_configs[vf].trusted)
+                       return true;
+       return false;
+}
+
 static void otx2_do_set_rx_mode(struct otx2_nic *pf)
 {
        struct net_device *netdev = pf->netdev;
        if (netdev->flags & (IFF_ALLMULTI | IFF_MULTICAST))
                req->mode |= NIX_RX_MODE_ALLMULTI;
 
-       req->mode |= NIX_RX_MODE_USE_MCE;
+       if (otx2_promisc_use_mce_list(pf))
+               req->mode |= NIX_RX_MODE_USE_MCE;
 
        otx2_sync_mbox_msg(&pf->mbox);
        mutex_unlock(&pf->mbox.lock);
        pf->vf_configs[vf].trusted = enable;
        rc = otx2_set_vf_permissions(pf, vf, OTX2_TRUSTED_VF);
 
-       if (rc)
+       if (rc) {
                pf->vf_configs[vf].trusted = !enable;
-       else
+       } else {
                netdev_info(pf->netdev, "VF %d is %strusted\n",
                            vf, enable ? "" : "not ");
+               otx2_set_rx_mode(netdev);
+       }
+
        return rc;
 }