diff --git a/doc/guides/nics/features/ice_dcf.ini b/doc/guides/nics/features/ice_dcf.ini
index be34ab4692..fe3ada8733 100644
--- a/doc/guides/nics/features/ice_dcf.ini
+++ b/doc/guides/nics/features/ice_dcf.ini
@@ -18,6 +18,8 @@ Inner L4 checksum    = P
 RSS reta update      = Y
 RSS key update       = Y
 MTU update           = Y
+Promiscuous mode     = Y
+Allmulticast mode    = Y
 Basic stats          = Y
 Linux                = Y
 x86-32               = Y
diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst
index 3c8412c82e..f23e5cafd1 100644
--- a/doc/guides/rel_notes/release_22_07.rst
+++ b/doc/guides/rel_notes/release_22_07.rst
@@ -65,6 +65,7 @@ New Features
  * Added support for RSS RETA configure in DCF mode.
  * Added support for RSS HASH configure in DCF mode.
  * Added support for MTU configure in DCF mode.
+ * Added support for promisc configuration in DCF mode.
 
 Removed Items
 -------------
diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c
index 6a577a6582..87d281ee93 100644
--- a/drivers/net/ice/ice_dcf_ethdev.c
+++ b/drivers/net/ice/ice_dcf_ethdev.c
@@ -727,27 +727,95 @@ ice_dcf_dev_info_get(struct rte_eth_dev *dev,
 }
 
 static int
-ice_dcf_dev_promiscuous_enable(__rte_unused struct rte_eth_dev *dev)
+dcf_config_promisc(struct ice_dcf_adapter *adapter,
+		   bool enable_unicast,
+		   bool enable_multicast)
 {
+	struct ice_dcf_hw *hw = &adapter->real_hw;
+	struct virtchnl_promisc_info promisc;
+	struct dcf_virtchnl_cmd args;
+	int err;
+
+	promisc.flags = 0;
+	promisc.vsi_id = hw->vsi_res->vsi_id;
+
+	if (enable_unicast)
+		promisc.flags |= FLAG_VF_UNICAST_PROMISC;
+
+	if (enable_multicast)
+		promisc.flags |= FLAG_VF_MULTICAST_PROMISC;
+
+	memset(&args, 0, sizeof(args));
+	args.v_op = VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE;
+	args.req_msg = (uint8_t *)&promisc;
+	args.req_msglen = sizeof(promisc);
+
+	err = ice_dcf_execute_virtchnl_cmd(hw, &args);
+	if (err) {
+		PMD_DRV_LOG(ERR,
+			    "fail to execute command VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE");
+		return err;
+	}
+
+	adapter->promisc_unicast_enabled = enable_unicast;
+	adapter->promisc_multicast_enabled = enable_multicast;
 	return 0;
 }
 
+static int
+ice_dcf_dev_promiscuous_enable(__rte_unused struct rte_eth_dev *dev)
+{
+	struct ice_dcf_adapter *adapter = dev->data->dev_private;
+
+	if (adapter->promisc_unicast_enabled) {
+		PMD_DRV_LOG(INFO, "promiscuous has been enabled");
+		return 0;
+	}
+
+	return dcf_config_promisc(adapter, true,
+				  adapter->promisc_multicast_enabled);
+}
+
 static int
 ice_dcf_dev_promiscuous_disable(__rte_unused struct rte_eth_dev *dev)
 {
-	return 0;
+	struct ice_dcf_adapter *adapter = dev->data->dev_private;
+
+	if (!adapter->promisc_unicast_enabled) {
+		PMD_DRV_LOG(INFO, "promiscuous has been disabled");
+		return 0;
+	}
+
+	return dcf_config_promisc(adapter, false,
+				  adapter->promisc_multicast_enabled);
 }
 
 static int
 ice_dcf_dev_allmulticast_enable(__rte_unused struct rte_eth_dev *dev)
 {
-	return 0;
+	struct ice_dcf_adapter *adapter = dev->data->dev_private;
+
+	if (adapter->promisc_multicast_enabled) {
+		PMD_DRV_LOG(INFO, "allmulticast has been enabled");
+		return 0;
+	}
+
+	return dcf_config_promisc(adapter, adapter->promisc_unicast_enabled,
+				  true);
 }
 
 static int
 ice_dcf_dev_allmulticast_disable(__rte_unused struct rte_eth_dev *dev)
 {
-	return 0;
+	struct ice_dcf_adapter *adapter = dev->data->dev_private;
+
+	if (!adapter->promisc_multicast_enabled) {
+		PMD_DRV_LOG(INFO, "allmulticast has been disabled");
+		return 0;
+	}
+
+	return dcf_config_promisc(adapter, adapter->promisc_unicast_enabled,
+				  false);
 }
 
 static int
@@ -1299,6 +1367,7 @@ ice_dcf_dev_init(struct rte_eth_dev *eth_dev)
 		return -1;
 	}
 
+	dcf_config_promisc(adapter, false, false);
 	return 0;
 }
 
diff --git a/drivers/net/ice/ice_dcf_ethdev.h b/drivers/net/ice/ice_dcf_ethdev.h
index f2faf26f58..22e450527b 100644
--- a/drivers/net/ice/ice_dcf_ethdev.h
+++ b/drivers/net/ice/ice_dcf_ethdev.h
@@ -33,6 +33,9 @@ struct ice_dcf_adapter {
 	struct ice_adapter parent; /* Must be first */
 	struct ice_dcf_hw real_hw;
 
+	bool promisc_unicast_enabled;
+	bool promisc_multicast_enabled;
+
 	int num_reprs;
 	struct ice_dcf_repr_info *repr_infos;
 };
