Align the package file search sequence with PF only for DCF mode. Get the DSN through the virtual channel firstly to check the package file accessible.
Signed-off-by: Haiyue Wang <haiyue.w...@intel.com> --- drivers/net/ice/ice_dcf_parent.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/drivers/net/ice/ice_dcf_parent.c b/drivers/net/ice/ice_dcf_parent.c index e05b6b3e5..d4b4ededb 100644 --- a/drivers/net/ice/ice_dcf_parent.c +++ b/drivers/net/ice/ice_dcf_parent.c @@ -226,12 +226,34 @@ ice_dcf_request_pkg_name(struct ice_hw *hw, char *pkg_name) { struct ice_dcf_adapter *dcf_adapter = container_of(hw, struct ice_dcf_adapter, parent.hw); + struct virtchnl_pkg_info pkg_info; + struct dcf_virtchnl_cmd vc_cmd; + uint64_t dsn; - /* TODO: check with DSN firstly by iAVF */ - PMD_INIT_LOG(DEBUG, - "DCF VSI_ID = %u", - dcf_adapter->real_hw.vsi_id); + vc_cmd.v_op = VIRTCHNL_OP_DCF_GET_PKG_INFO; + vc_cmd.req_msglen = 0; + vc_cmd.req_msg = NULL; + vc_cmd.rsp_buflen = sizeof(pkg_info); + vc_cmd.rsp_msgbuf = (uint8_t *)&pkg_info; + if (ice_dcf_execute_virtchnl_cmd(&dcf_adapter->real_hw, &vc_cmd)) + goto pkg_file_direct; + + rte_memcpy(&dsn, pkg_info.dsn, sizeof(dsn)); + + snprintf(pkg_name, ICE_MAX_PKG_FILENAME_SIZE, + ICE_PKG_FILE_SEARCH_PATH_UPDATES "ice-%016llX.pkg", + (unsigned long long)dsn); + if (!access(pkg_name, 0)) + return 0; + + snprintf(pkg_name, ICE_MAX_PKG_FILENAME_SIZE, + ICE_PKG_FILE_SEARCH_PATH_DEFAULT "ice-%016llX.pkg", + (unsigned long long)dsn); + if (!access(pkg_name, 0)) + return 0; + +pkg_file_direct: snprintf(pkg_name, ICE_MAX_PKG_FILENAME_SIZE, "%s", ICE_PKG_FILE_UPDATES); if (!access(pkg_name, 0)) -- 2.26.1