From patchwork Thu Aug 24 16:20:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alejandro Lucero X-Patchwork-Id: 27896 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id A452090FC; Thu, 24 Aug 2017 18:20:51 +0200 (CEST) Received: from netronome.com (host-79-78-33-110.static.as9105.net [79.78.33.110]) by dpdk.org (Postfix) with ESMTP id 727F07D05 for ; Thu, 24 Aug 2017 18:20:35 +0200 (CEST) Received: from netronome.com (localhost [127.0.0.1]) by netronome.com (8.14.4/8.14.4/Debian-4.1ubuntu1) with ESMTP id v7OGKPtj016337 for ; Thu, 24 Aug 2017 17:20:25 +0100 Received: (from alucero@localhost) by netronome.com (8.14.4/8.14.4/Submit) id v7OGKP2W016336 for dev@dpdk.org; Thu, 24 Aug 2017 17:20:25 +0100 From: Alejandro Lucero To: dev@dpdk.org Date: Thu, 24 Aug 2017 17:20:17 +0100 Message-Id: <1503591622-16232-12-git-send-email-alejandro.lucero@netronome.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1503591622-16232-1-git-send-email-alejandro.lucero@netronome.com> References: <1503591622-16232-1-git-send-email-alejandro.lucero@netronome.com> Subject: [dpdk-dev] [PATCH 11/16] nfp: allocate eth_dev from pf probe function X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" NFP can support several physical ports per PF device. Depending on firmware info, one or more eth_dev objects will need to be created. This patch adds the call to create just one eth_dev by now with future commits supporting the multiport option. Once the eth_dev has been created, probe function invokes pmd initialization with the new eth_dev. Signed-off-by: Alejandro Lucero --- drivers/net/nfp/nfp_net.c | 50 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index 7c23b7a..6005e41 100644 --- a/drivers/net/nfp/nfp_net.c +++ b/drivers/net/nfp/nfp_net.c @@ -2677,13 +2677,16 @@ uint32_t nfp_net_txq_full(struct nfp_net_txq *txq) static int nfp_pf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *dev) { + struct rte_eth_dev *eth_dev; + struct nfp_net_hw *hw; nfpu_desc_t *nfpu_desc; nspu_desc_t *nspu_desc; uint64_t offset_symbol; int major, minor; + int ret = -ENODEV; if (!dev) - return -ENODEV; + return ret; nfpu_desc = rte_malloc("nfp nfpu", sizeof(nfpu_desc_t), 0); if (!nfpu_desc) @@ -2697,29 +2700,60 @@ static int nfp_pf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, nspu_desc = nfpu_desc->nspu; - /* Check NSP ABI version */ if (nfp_nsp_get_abi_version(nspu_desc, &major, &minor) < 0) { RTE_LOG(INFO, PMD, "NFP NSP not present\n"); - goto no_abi; + goto error; } PMD_INIT_LOG(INFO, "nspu ABI version: %d.%d\n", major, minor); if (minor < 20) { RTE_LOG(INFO, PMD, "NFP NSP ABI version too old. Required 0.20 or higher\n"); - goto no_abi; + goto error; } - nfp_nsp_fw_setup(nspu_desc, "nfd_cfg_pf0_num_ports", &offset_symbol); + ret = nfp_nsp_fw_setup(nspu_desc, "nfd_cfg_pf0_num_ports", + &offset_symbol); + if (ret) + goto error; - /* No port is created yet */ + eth_dev = rte_eth_dev_allocate(dev->device.name); + if (!eth_dev) { + ret = -ENODEV; + goto error; + } -no_abi: + eth_dev->data->dev_private = rte_zmalloc("nfp_pf_port", + sizeof(struct nfp_net_adapter), + RTE_CACHE_LINE_SIZE); + if (!eth_dev->data->dev_private) { + rte_eth_dev_release_port(eth_dev); + ret = -ENODEV; + goto error; + } + + hw = (struct nfp_net_hw *)(eth_dev->data->dev_private); + hw->nspu_desc = nspu_desc; + hw->nfpu_desc = nfpu_desc; + hw->is_pf = 1; + + eth_dev->device = &dev->device; + rte_eth_copy_pci_info(eth_dev, dev); + + ret = nfp_net_init(eth_dev); + + if (!ret) + return 0; + + /* something went wrong */ + rte_eth_dev_release_port(eth_dev); + +error: nfpu_close(nfpu_desc); nfpu_error: rte_free(nfpu_desc); - return -ENODEV; + return ret; } static const struct rte_pci_id pci_id_nfp_pf_net_map[] = {