[v3,3/7] net/ice: acquire and disable the DCF capability

Message ID 20200316055255.19685-4-haiyue.wang@intel.com (mailing list archive)
State Superseded, archived
Delegated to: xiaolong ye
Headers
Series add Intel DCF PMD support |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Wang, Haiyue March 16, 2020, 5:52 a.m. UTC
  Since the DCF (Device Config Function) controls the flow setting of
other VFs by the mailbox with PF, for security, it needs to acquire
the DCF capability from PF when starts, and disable it when exits.

Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
---
 drivers/net/ice/ice_dcf.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)
  

Patch

diff --git a/drivers/net/ice/ice_dcf.c b/drivers/net/ice/ice_dcf.c
index 0a99cceb1..ab5bc7424 100644
--- a/drivers/net/ice/ice_dcf.c
+++ b/drivers/net/ice/ice_dcf.c
@@ -227,7 +227,7 @@  ice_dcf_get_vf_resource(struct ice_dcf_hw *hw)
 	int err, i;
 
 	caps = VIRTCHNL_VF_OFFLOAD_WB_ON_ITR | VIRTCHNL_VF_OFFLOAD_RX_POLLING |
-	       VIRTCHNL_VF_CAP_ADV_LINK_SPEED |
+	       VIRTCHNL_VF_CAP_ADV_LINK_SPEED | VIRTCHNL_VF_CAP_DCF |
 	       VF_BASE_MODE_OFFLOADS;
 
 	err = ice_dcf_send_cmd_req_no_irq(hw, VIRTCHNL_OP_GET_VF_RESOURCES,
@@ -264,6 +264,30 @@  ice_dcf_get_vf_resource(struct ice_dcf_hw *hw)
 	return 0;
 }
 
+static int
+ice_dcf_mode_disable(struct ice_dcf_hw *hw)
+{
+	int err;
+
+	err = ice_dcf_send_cmd_req_no_irq(hw, VIRTCHNL_OP_DCF_DISABLE,
+					  NULL, 0);
+	if (err) {
+		PMD_DRV_LOG(ERR, "Fail to send msg OP_DCF_DISABLE");
+		return err;
+	}
+
+	err = ice_dcf_recv_cmd_rsp_no_irq(hw, VIRTCHNL_OP_DCF_DISABLE,
+					  hw->arq_buf, ICE_DCF_AQ_BUF_SZ, NULL);
+	if (err) {
+		PMD_DRV_LOG(ERR,
+			    "Fail to get response of OP_DCF_DISABLE %d",
+			    err);
+		return -1;
+	}
+
+	return 0;
+}
+
 static int
 ice_dcf_check_reset_done(struct ice_dcf_hw *hw)
 {
@@ -467,6 +491,7 @@  ice_dcf_uninit_hw(struct rte_eth_dev *eth_dev, struct ice_dcf_hw *hw)
 	rte_intr_callback_unregister(intr_handle,
 				     ice_dcf_dev_interrupt_handler, hw);
 
+	ice_dcf_mode_disable(hw);
 	iavf_shutdown_adminq(&hw->avf);
 
 	rte_free(hw->arq_buf);