From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B9EBF428CD; Tue, 4 Apr 2023 15:03:49 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1E71C427F2; Tue, 4 Apr 2023 15:03:46 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id CFDD340A7E for ; Tue, 4 Apr 2023 15:03:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1680613425; x=1712149425; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=T3KfUbuVZVH/Yy+y+S3AiVjFNPgP/n00jvr6rJJI/ew=; b=AB5BWLJGXfw/GM8tvC0CHQyXWOLK/nON/6uAafWjLHGjTHW0L08Yf4t4 UJnecpjAQxad/tTFSYjiRB8JMxFQDPxa383TuEbVD/XvHtjw8gyACQ7Eu 4oJKYE2HPJ3Ep3YcfKDhjyuQBj5oxnwUWNiCcHPYmWia9vWRKBD6ikxu5 9hf8KykrXq+mFbbYDQOBO5GRhcWU9awIdzUFJXJKqOFOOA2BLlUXvenC+ w08lUUsMSDQUhnlJmaSejHIywSc/f6C4qbBeSPueVKP+E+pGDE1qey7t+ CkJoNYnndZm263X+D2yexI9kxydRW/WWw9bc7lCnpnMmGA6IRwJz4OF/p A==; X-IronPort-AV: E=McAfee;i="6600,9927,10670"; a="344739412" X-IronPort-AV: E=Sophos;i="5.98,317,1673942400"; d="scan'208";a="344739412" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Apr 2023 06:03:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10670"; a="810229628" X-IronPort-AV: E=Sophos;i="5.98,317,1673942400"; d="scan'208";a="810229628" Received: from dpdk-beileix-3.sh.intel.com ([10.67.110.253]) by orsmga004.jf.intel.com with ESMTP; 04 Apr 2023 06:03:42 -0700 From: beilei.xing@intel.com To: jingjing.wu@intel.com Cc: dev@dpdk.org, Beilei Xing Subject: [PATCH v3 1/2] common/idpf: move PF specific functions from common init Date: Tue, 4 Apr 2023 12:41:11 +0000 Message-Id: <20230404124112.71703-2-beilei.xing@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20230404124112.71703-1-beilei.xing@intel.com> References: <20230321070703.80689-1-beilei.xing@intel.com> <20230404124112.71703-1-beilei.xing@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Beilei Xing Move PF reset and PF mailbox initialization functions from idpf_adapter_init function to xxxx_adapter_ext_init function, since they're different between PF and VF support. Signed-off-by: Beilei Xing --- drivers/common/idpf/idpf_common_device.c | 72 +++++------------------- drivers/common/idpf/idpf_common_device.h | 11 ++++ drivers/common/idpf/version.map | 5 ++ drivers/net/cpfl/cpfl_ethdev.c | 51 +++++++++++++++++ drivers/net/idpf/idpf_ethdev.c | 51 +++++++++++++++++ 5 files changed, 131 insertions(+), 59 deletions(-) diff --git a/drivers/common/idpf/idpf_common_device.c b/drivers/common/idpf/idpf_common_device.c index c5e7bbf66c..3b58bdd41e 100644 --- a/drivers/common/idpf/idpf_common_device.c +++ b/drivers/common/idpf/idpf_common_device.c @@ -6,8 +6,8 @@ #include #include -static void -idpf_reset_pf(struct idpf_hw *hw) +void +idpf_hw_pf_reset(struct idpf_hw *hw) { uint32_t reg; @@ -15,9 +15,8 @@ idpf_reset_pf(struct idpf_hw *hw) IDPF_WRITE_REG(hw, PFGEN_CTRL, (reg | PFGEN_CTRL_PFSWR)); } -#define IDPF_RESET_WAIT_CNT 100 -static int -idpf_check_pf_reset_done(struct idpf_hw *hw) +int +idpf_hw_pf_reset_check(struct idpf_hw *hw) { uint32_t reg; int i; @@ -33,48 +32,13 @@ idpf_check_pf_reset_done(struct idpf_hw *hw) return -EBUSY; } -#define CTLQ_NUM 2 -static int -idpf_init_mbx(struct idpf_hw *hw) +int +idpf_hw_mbx_init(struct idpf_hw *hw, struct idpf_ctlq_create_info *ctlq_info) { - struct idpf_ctlq_create_info ctlq_info[CTLQ_NUM] = { - { - .type = IDPF_CTLQ_TYPE_MAILBOX_TX, - .id = IDPF_CTLQ_ID, - .len = IDPF_CTLQ_LEN, - .buf_size = IDPF_DFLT_MBX_BUF_SIZE, - .reg = { - .head = PF_FW_ATQH, - .tail = PF_FW_ATQT, - .len = PF_FW_ATQLEN, - .bah = PF_FW_ATQBAH, - .bal = PF_FW_ATQBAL, - .len_mask = PF_FW_ATQLEN_ATQLEN_M, - .len_ena_mask = PF_FW_ATQLEN_ATQENABLE_M, - .head_mask = PF_FW_ATQH_ATQH_M, - } - }, - { - .type = IDPF_CTLQ_TYPE_MAILBOX_RX, - .id = IDPF_CTLQ_ID, - .len = IDPF_CTLQ_LEN, - .buf_size = IDPF_DFLT_MBX_BUF_SIZE, - .reg = { - .head = PF_FW_ARQH, - .tail = PF_FW_ARQT, - .len = PF_FW_ARQLEN, - .bah = PF_FW_ARQBAH, - .bal = PF_FW_ARQBAL, - .len_mask = PF_FW_ARQLEN_ARQLEN_M, - .len_ena_mask = PF_FW_ARQLEN_ARQENABLE_M, - .head_mask = PF_FW_ARQH_ARQH_M, - } - } - }; struct idpf_ctlq_info *ctlq; int ret; - ret = idpf_ctlq_init(hw, CTLQ_NUM, ctlq_info); + ret = idpf_ctlq_init(hw, IDPF_CTLQ_NUM, ctlq_info); if (ret != 0) return ret; @@ -96,6 +60,12 @@ idpf_init_mbx(struct idpf_hw *hw) return ret; } +void +idpf_hw_mbx_deinit(struct idpf_hw *hw) +{ + idpf_ctlq_deinit(hw); +} + static int idpf_get_pkt_type(struct idpf_adapter *adapter) { @@ -312,19 +282,6 @@ idpf_adapter_init(struct idpf_adapter *adapter) struct idpf_hw *hw = &adapter->hw; int ret; - idpf_reset_pf(hw); - ret = idpf_check_pf_reset_done(hw); - if (ret != 0) { - DRV_LOG(ERR, "IDPF is still resetting"); - goto err_check_reset; - } - - ret = idpf_init_mbx(hw); - if (ret != 0) { - DRV_LOG(ERR, "Failed to init mailbox"); - goto err_check_reset; - } - adapter->mbx_resp = rte_zmalloc("idpf_adapter_mbx_resp", IDPF_DFLT_MBX_BUF_SIZE, 0); if (adapter->mbx_resp == NULL) { @@ -357,8 +314,6 @@ idpf_adapter_init(struct idpf_adapter *adapter) rte_free(adapter->mbx_resp); adapter->mbx_resp = NULL; err_mbx_resp: - idpf_ctlq_deinit(hw); -err_check_reset: return ret; } @@ -367,7 +322,6 @@ idpf_adapter_deinit(struct idpf_adapter *adapter) { struct idpf_hw *hw = &adapter->hw; - idpf_ctlq_deinit(hw); rte_free(adapter->mbx_resp); adapter->mbx_resp = NULL; diff --git a/drivers/common/idpf/idpf_common_device.h b/drivers/common/idpf/idpf_common_device.h index c2dc2f16b9..7cf2355bc9 100644 --- a/drivers/common/idpf/idpf_common_device.h +++ b/drivers/common/idpf/idpf_common_device.h @@ -10,8 +10,11 @@ #include #include +#define IDPF_RESET_WAIT_CNT 100 + #define IDPF_RSS_KEY_LEN 52 +#define IDPF_CTLQ_NUM 2 #define IDPF_CTLQ_ID -1 #define IDPF_CTLQ_LEN 64 #define IDPF_DFLT_MBX_BUF_SIZE 4096 @@ -180,6 +183,14 @@ atomic_set_cmd(struct idpf_adapter *adapter, uint32_t ops) return !ret; } +__rte_internal +void idpf_hw_pf_reset(struct idpf_hw *hw); +__rte_internal +int idpf_hw_pf_reset_check(struct idpf_hw *hw); +__rte_internal +int idpf_hw_mbx_init(struct idpf_hw *hw, struct idpf_ctlq_create_info *ctlq_info); +__rte_internal +void idpf_hw_mbx_deinit(struct idpf_hw *hw); __rte_internal int idpf_adapter_init(struct idpf_adapter *adapter); __rte_internal diff --git a/drivers/common/idpf/version.map b/drivers/common/idpf/version.map index 70334a1b03..7076759024 100644 --- a/drivers/common/idpf/version.map +++ b/drivers/common/idpf/version.map @@ -15,6 +15,11 @@ INTERNAL { idpf_dp_splitq_xmit_pkts; idpf_dp_splitq_xmit_pkts_avx512; + idpf_hw_mbx_deinit; + idpf_hw_mbx_init; + idpf_hw_pf_reset; + idpf_hw_pf_reset_check; + idpf_qc_rx_thresh_check; idpf_qc_rx_queue_release; idpf_qc_rxq_mbufs_release; diff --git a/drivers/net/cpfl/cpfl_ethdev.c b/drivers/net/cpfl/cpfl_ethdev.c index ede730fd50..d3c50619ea 100644 --- a/drivers/net/cpfl/cpfl_ethdev.c +++ b/drivers/net/cpfl/cpfl_ethdev.c @@ -1165,6 +1165,41 @@ cpfl_dev_alarm_handler(void *param) rte_eal_alarm_set(CPFL_ALARM_INTERVAL, cpfl_dev_alarm_handler, adapter); } +static struct idpf_ctlq_create_info ctlq_info[IDPF_CTLQ_NUM] = { + { + .type = IDPF_CTLQ_TYPE_MAILBOX_TX, + .id = IDPF_CTLQ_ID, + .len = IDPF_CTLQ_LEN, + .buf_size = IDPF_DFLT_MBX_BUF_SIZE, + .reg = { + .head = PF_FW_ATQH, + .tail = PF_FW_ATQT, + .len = PF_FW_ATQLEN, + .bah = PF_FW_ATQBAH, + .bal = PF_FW_ATQBAL, + .len_mask = PF_FW_ATQLEN_ATQLEN_M, + .len_ena_mask = PF_FW_ATQLEN_ATQENABLE_M, + .head_mask = PF_FW_ATQH_ATQH_M, + } + }, + { + .type = IDPF_CTLQ_TYPE_MAILBOX_RX, + .id = IDPF_CTLQ_ID, + .len = IDPF_CTLQ_LEN, + .buf_size = IDPF_DFLT_MBX_BUF_SIZE, + .reg = { + .head = PF_FW_ARQH, + .tail = PF_FW_ARQT, + .len = PF_FW_ARQLEN, + .bah = PF_FW_ARQBAH, + .bal = PF_FW_ARQBAL, + .len_mask = PF_FW_ARQLEN_ARQLEN_M, + .len_ena_mask = PF_FW_ARQLEN_ARQENABLE_M, + .head_mask = PF_FW_ARQH_ARQH_M, + } + } +}; + static int cpfl_adapter_ext_init(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter) { @@ -1181,6 +1216,19 @@ cpfl_adapter_ext_init(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *a strncpy(adapter->name, pci_dev->device.name, PCI_PRI_STR_SIZE); + idpf_hw_pf_reset(hw); + ret = idpf_hw_pf_reset_check(hw); + if (ret != 0) { + PMD_INIT_LOG(ERR, "PF is still resetting"); + goto err_reset_check; + } + + ret = idpf_hw_mbx_init(hw, ctlq_info); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Failed to init mailbox"); + goto err_reset_check; + } + ret = idpf_adapter_init(base); if (ret != 0) { PMD_INIT_LOG(ERR, "Failed to init adapter"); @@ -1213,6 +1261,8 @@ cpfl_adapter_ext_init(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *a rte_eal_alarm_cancel(cpfl_dev_alarm_handler, adapter); idpf_adapter_deinit(base); err_adapter_init: + idpf_hw_mbx_deinit(hw); +err_reset_check: return ret; } @@ -1323,6 +1373,7 @@ cpfl_adapter_ext_deinit(struct cpfl_adapter_ext *adapter) { rte_eal_alarm_cancel(cpfl_dev_alarm_handler, adapter); idpf_adapter_deinit(&adapter->base); + idpf_hw_mbx_deinit(&adapter->base.hw); rte_free(adapter->vports); adapter->vports = NULL; diff --git a/drivers/net/idpf/idpf_ethdev.c b/drivers/net/idpf/idpf_ethdev.c index e02ec2ec5a..662a8a806a 100644 --- a/drivers/net/idpf/idpf_ethdev.c +++ b/drivers/net/idpf/idpf_ethdev.c @@ -1128,6 +1128,41 @@ idpf_dev_alarm_handler(void *param) rte_eal_alarm_set(IDPF_ALARM_INTERVAL, idpf_dev_alarm_handler, adapter); } +static struct idpf_ctlq_create_info idpf_ctlq_info[IDPF_CTLQ_NUM] = { + { + .type = IDPF_CTLQ_TYPE_MAILBOX_TX, + .id = IDPF_CTLQ_ID, + .len = IDPF_CTLQ_LEN, + .buf_size = IDPF_DFLT_MBX_BUF_SIZE, + .reg = { + .head = PF_FW_ATQH, + .tail = PF_FW_ATQT, + .len = PF_FW_ATQLEN, + .bah = PF_FW_ATQBAH, + .bal = PF_FW_ATQBAL, + .len_mask = PF_FW_ATQLEN_ATQLEN_M, + .len_ena_mask = PF_FW_ATQLEN_ATQENABLE_M, + .head_mask = PF_FW_ATQH_ATQH_M, + } + }, + { + .type = IDPF_CTLQ_TYPE_MAILBOX_RX, + .id = IDPF_CTLQ_ID, + .len = IDPF_CTLQ_LEN, + .buf_size = IDPF_DFLT_MBX_BUF_SIZE, + .reg = { + .head = PF_FW_ARQH, + .tail = PF_FW_ARQT, + .len = PF_FW_ARQLEN, + .bah = PF_FW_ARQBAH, + .bal = PF_FW_ARQBAL, + .len_mask = PF_FW_ARQLEN_ARQLEN_M, + .len_ena_mask = PF_FW_ARQLEN_ARQENABLE_M, + .head_mask = PF_FW_ARQH_ARQH_M, + } + } +}; + static int idpf_adapter_ext_init(struct rte_pci_device *pci_dev, struct idpf_adapter_ext *adapter) { @@ -1144,6 +1179,19 @@ idpf_adapter_ext_init(struct rte_pci_device *pci_dev, struct idpf_adapter_ext *a strncpy(adapter->name, pci_dev->device.name, PCI_PRI_STR_SIZE); + idpf_hw_pf_reset(hw); + ret = idpf_hw_pf_reset_check(hw); + if (ret != 0) { + PMD_INIT_LOG(ERR, "PF is still resetting"); + goto err_reset_check; + } + + ret = idpf_hw_mbx_init(hw, idpf_ctlq_info); + if (ret != 0) { + PMD_INIT_LOG(ERR, "Failed to init mailbox"); + goto err_reset_check; + } + ret = idpf_adapter_init(base); if (ret != 0) { PMD_INIT_LOG(ERR, "Failed to init adapter"); @@ -1175,6 +1223,8 @@ idpf_adapter_ext_init(struct rte_pci_device *pci_dev, struct idpf_adapter_ext *a rte_eal_alarm_cancel(idpf_dev_alarm_handler, adapter); idpf_adapter_deinit(base); err_adapter_init: + idpf_hw_mbx_deinit(hw); +err_reset_check: return ret; } @@ -1311,6 +1361,7 @@ idpf_adapter_ext_deinit(struct idpf_adapter_ext *adapter) { rte_eal_alarm_cancel(idpf_dev_alarm_handler, adapter); idpf_adapter_deinit(&adapter->base); + idpf_hw_mbx_deinit(&adapter->base.hw); rte_free(adapter->vports); adapter->vports = NULL; -- 2.26.2