static int ice_vc_cfg_promiscuous_mode_msg(struct ice_vf *vf, u8 *msg)
 {
        enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
+       enum ice_status mcast_status = 0, ucast_status = 0;
        bool rm_promisc, alluni = false, allmulti = false;
        struct virtchnl_promisc_info *info =
            (struct virtchnl_promisc_info *)msg;
                        goto error_param;
                }
        } else {
-               enum ice_status status;
-               u8 promisc_m;
-
-               if (alluni) {
-                       if (vf->port_vlan_info || vsi->num_vlan)
-                               promisc_m = ICE_UCAST_VLAN_PROMISC_BITS;
-                       else
-                               promisc_m = ICE_UCAST_PROMISC_BITS;
-               } else if (allmulti) {
-                       if (vf->port_vlan_info || vsi->num_vlan)
-                               promisc_m = ICE_MCAST_VLAN_PROMISC_BITS;
-                       else
-                               promisc_m = ICE_MCAST_PROMISC_BITS;
+               u8 mcast_m, ucast_m;
+
+               if (vf->port_vlan_info || vsi->num_vlan > 1) {
+                       mcast_m = ICE_MCAST_VLAN_PROMISC_BITS;
+                       ucast_m = ICE_UCAST_VLAN_PROMISC_BITS;
                } else {
-                       if (vf->port_vlan_info || vsi->num_vlan)
-                               promisc_m = ICE_UCAST_VLAN_PROMISC_BITS;
-                       else
-                               promisc_m = ICE_UCAST_PROMISC_BITS;
+                       mcast_m = ICE_MCAST_PROMISC_BITS;
+                       ucast_m = ICE_UCAST_PROMISC_BITS;
                }
 
-               /* Configure multicast/unicast with or without VLAN promiscuous
-                * mode
-                */
-               status = ice_vf_set_vsi_promisc(vf, vsi, promisc_m, rm_promisc);
-               if (status) {
-                       dev_err(dev, "%sable Tx/Rx filter promiscuous mode on VF-%d failed, error: %s\n",
-                               rm_promisc ? "dis" : "en", vf->vf_id,
-                               ice_stat_str(status));
-                       v_ret = ice_err_to_virt_err(status);
-                       goto error_param;
-               } else {
-                       dev_dbg(dev, "%sable Tx/Rx filter promiscuous mode on VF-%d succeeded\n",
-                               rm_promisc ? "dis" : "en", vf->vf_id);
+               ucast_status = ice_vf_set_vsi_promisc(vf, vsi, ucast_m,
+                                                     !alluni);
+               if (ucast_status) {
+                       dev_err(dev, "%sable Tx/Rx filter promiscuous mode on VF-%d failed\n",
+                               alluni ? "en" : "dis", vf->vf_id);
+                       v_ret = ice_err_to_virt_err(ucast_status);
+               }
+
+               mcast_status = ice_vf_set_vsi_promisc(vf, vsi, mcast_m,
+                                                     !allmulti);
+               if (mcast_status) {
+                       dev_err(dev, "%sable Tx/Rx filter promiscuous mode on VF-%d failed\n",
+                               allmulti ? "en" : "dis", vf->vf_id);
+                       v_ret = ice_err_to_virt_err(mcast_status);
                }
        }
 
-       if (allmulti &&
-           !test_and_set_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states))
-               dev_info(dev, "VF %u successfully set multicast promiscuous mode\n", vf->vf_id);
-       else if (!allmulti && test_and_clear_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states))
-               dev_info(dev, "VF %u successfully unset multicast promiscuous mode\n", vf->vf_id);
+       if (!mcast_status) {
+               if (allmulti &&
+                   !test_and_set_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states))
+                       dev_info(dev, "VF %u successfully set multicast promiscuous mode\n",
+                                vf->vf_id);
+               else if (!allmulti && test_and_clear_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states))
+                       dev_info(dev, "VF %u successfully unset multicast promiscuous mode\n",
+                                vf->vf_id);
+       }
 
-       if (alluni && !test_and_set_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states))
-               dev_info(dev, "VF %u successfully set unicast promiscuous mode\n", vf->vf_id);
-       else if (!alluni && test_and_clear_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states))
-               dev_info(dev, "VF %u successfully unset unicast promiscuous mode\n", vf->vf_id);
+       if (!ucast_status) {
+               if (alluni && !test_and_set_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states))
+                       dev_info(dev, "VF %u successfully set unicast promiscuous mode\n",
+                                vf->vf_id);
+               else if (!alluni && test_and_clear_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states))
+                       dev_info(dev, "VF %u successfully unset unicast promiscuous mode\n",
+                                vf->vf_id);
+       }
 
 error_param:
        return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE,