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 3F12742CD8; Fri, 16 Jun 2023 10:14:56 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CBAA54021E; Fri, 16 Jun 2023 10:14:55 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2119.outbound.protection.outlook.com [40.107.92.119]) by mails.dpdk.org (Postfix) with ESMTP id 36E2A4003C for ; Fri, 16 Jun 2023 10:14:54 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gCqpQIKCJ/P3QIJnhm7EKXNJ3jp4yjxWueqELiZw0FBDwrqDvUzQwmFLsDGnb+R3Mg8LLwqxWucdZphID/s5+xK/zrHB1//JEfsWIMGqG4RthdbnotRkHAfi9BkkKcsZhLabj9T8NDYPQnt37BuajqvUazEo4Fq28nNKBGMDUwFhkqufx0jkbLMR75j4dr116Wxvww9D4sGWvWnWlSnuTma4oE9ucdzrU/D8lkqjO3GRZED1UVsDSw+HPQ0VL/niWjqJ9uXGCLLwZO3Z3Hmpe+mnHfR/6ZkyZrNr945wxekt0poI2KRouKMs658rU+sM32gFBEHNLgzwKPGfbWhF/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=n5HiUndFr7QZkdfTEkBJfqezrWmuTUOWdLMJ+XyRvfU=; b=BbhobhdeD7vJn88Z64PQoFHYbYKTa3mzptJejqYfS5TmTg1OinzZmqfv2P7gJOBcg3LihAPmT3dlFFwPSpngaQcgzB0VIaRdr2+5For2Ct6pJbr4K2BwCxcJVC8ulDqHuNkojb0EKGMnzK61vT6rfs30RVOwrewvFoON/trpU+Y5tBkI9gDb453of66xdORE7OHArELTitOmJceUTlye84Th4cgMXYgbMWlzrmkucUGc1QdLgNRoAu61Oqtto+UDwr7dtKkt+4ar96YJorV5tjWYsHqxQjhUjns4Meeoo3xbWT+eyVhLR1LIHOKhV07aTG3mh1jwTwEeXMglyFqSbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n5HiUndFr7QZkdfTEkBJfqezrWmuTUOWdLMJ+XyRvfU=; b=afpPjEFRljcImxwFW5IUCBMEsHix+EMltWil1OeXKfZWtDS63KyPXP+69nw+w1/r+3QluSv8PSr/R8/nGL4wFNll5pnO3oIBlhFxMSieYBTLOX1f3ZEd2FaVhwDZRNOP0o2eu/a+gZAqQ0p3ykc2uHdhu4NychcYw8YRqgvxWXc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by DM8PR13MB5111.namprd13.prod.outlook.com (2603:10b6:8:10::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.29; Fri, 16 Jun 2023 08:14:50 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::d2cb:a650:e1ce:2174]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::d2cb:a650:e1ce:2174%4]) with mapi id 15.20.6500.029; Fri, 16 Jun 2023 08:14:50 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Peng Zhang , Chaoyong He Subject: [PATCH] net/nfp: break out function to initialize device information Date: Fri, 16 Jun 2023 16:14:27 +0800 Message-Id: <20230616081427.1306869-1-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SI1PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:1f5::7) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM8PR13MB5111:EE_ X-MS-Office365-Filtering-Correlation-Id: 1660b937-950d-4e69-ffc0-08db6e41c12c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3q2Nbh/6+/77U78nU63HRQXAgvnWTHyM474RRg+fpbIolwaCpEzn2Bxam+3g872JnItZ4m8SKHs6txjrxIhnCkMrLT11GjcM1cHcwRhb6PlFrG3JQzTWGMe+P2OB++6dRNYUwhlBY2YcCrJavAocdyoTTIN+Tl1+o/u/erprfIZ8iCuWu7b2KpExGtI6pnSH36quJF4/WQ0rRCgqVroP1/gkjo0j/8mDsD6HyDEu7ZZLkhaa8HCQADMRkraKZoLPEFhAkjBNN3XxUNPr4N5U6y4pi3LrxcnsQ8s0oiuorDDKoP5AovOW4k2D+qvatycbBhEgzid8TnmkOirgyqP3qeU2tX9naglHn8T07uF/TLWEB9rQQCqnyPfWiUpdzAPer0sWzYGPypRqJ2b6bpwwbjHxSxMoz1R8yaf851hBH4V42jEdoQhqLDd3npgPkmZnfNMAV5txVrpQHSUNPR3KaZsSpvLVnGf3E5j2G32SO7Wf/M7zsYH0IWf/9Yl+DnZSHbdvZcQkLTEUy0Ed8wxWXVl6GXSM+NGz+/nExdn5dQIbkq1nD5jE9eH5KM3JGzUmHHHauFNph3/W54zzYwD+ApDtwy2PYLO/ma/p4Y09B/ca9A5D/CU5sWAKMwb/k33ET7XpdcFn1vok6KosATRHnJF9AliqYJnmR1dyd8KKqC4= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(39840400004)(396003)(366004)(376002)(346002)(136003)(451199021)(38100700002)(2616005)(38350700002)(83380400001)(2906002)(36756003)(8936002)(41300700001)(6486002)(8676002)(316002)(6666004)(52116002)(5660300002)(54906003)(4326008)(6916009)(66556008)(66946007)(66476007)(478600001)(1076003)(86362001)(44832011)(6506007)(186003)(107886003)(30864003)(6512007)(26005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?v/XEkruagQj/2Cf7gD6lPKpXoHdJkJr/g0OPiRqS0Fn2c9VqbRYWBs+K6LFG?= =?us-ascii?Q?exAJp8r4hawKmtqe+4aJV05ROGzi6Lm/4lsAYaaARpnPSEWtQEsI5M29gQgH?= =?us-ascii?Q?qzodPLEkognS3vspCPQMLrmtWQK2wbCZBkImZ6+8cB9Kh7d/V1Tk2rRzEEaW?= =?us-ascii?Q?h+nKcNTw2rk8/HfepnzONjjHGe2PWvzAGNAiyYy6go1bw6OExvQFa/GZyCGE?= =?us-ascii?Q?flC6A9ct9h2MxccZjmdYBwMlhcFP1ILiX8tTrZrxq5Xv8zj4MwXYgBbtawrg?= =?us-ascii?Q?ogZRqDY86mP3M9WsSCs1qFsR31SxIVeJ250DThFiIbavP4wYbIADi7IA798H?= =?us-ascii?Q?jRGTgyQI5ROtPYD4mdDsQgBzpVNPq4k/l8MIcv5NWPcXJPfFIZ2ZcDdqv0+j?= =?us-ascii?Q?QoWBeSbKKLR1AEy9RmoWh1m72qEUbPQ6UqubpFUcKf5e4GGgM3q2r+NK3gqE?= =?us-ascii?Q?JEIUy1kEcP3ARVqkcWXZw6FhoIv4cPJCzZYOcwsgz1RGEiSlmxdTfwvX8+5k?= =?us-ascii?Q?2NwKWa4DG+bhPVzGDKCFofvAfc9cuSjBuz/qF3x+eQeXxJrdEFnChdx9CDU0?= =?us-ascii?Q?ncMG5LRiqR1tRFiFPTqMxAaSSNewVsIt/uKI9H4hNSxr8ZEDdbsf6PqUinlq?= =?us-ascii?Q?5faJ5tTxq0QO/CeR0ObgZ1suZ0obRwPulGIVtobYCodObm8VJclxTG6f7SOp?= =?us-ascii?Q?AVHmPNJQMkuuODD44+ao8b8ymQpA16w+zKGoUDXqbdasacn6OM8T/i0kkR3w?= =?us-ascii?Q?WkTaburx323GqpOATSufM8ml+UNAjQw6iIH5UhmiPiwDk1MdRvirtjlbLEG7?= =?us-ascii?Q?lH/330S5pipV5l85cecAkAKxywpogf691LWJb0RmWW5oBoBiWBBAuI6uVaNY?= =?us-ascii?Q?IE+0/ql0ZEblKi8AA1kAyTrq7HoiOSsRT8lZb9fFO1YOvkfZHxZPI4FcNXuy?= =?us-ascii?Q?5+ToVpY7k0cYnu8Olj3EzsBML/TIPYzHasYg6AC99riLsh1YZKjQhI71NMZD?= =?us-ascii?Q?UbGBjzLpRlTvkOh1IV53e5bbC1ySCXvHcflpwv/I4bNLd+ViBTsqqaA6176X?= =?us-ascii?Q?QmTyDNpnRUshwdM4eWTqRcL5asNVrI9twcSgxSN+ulV+J4iU9UwHeXQEW3xT?= =?us-ascii?Q?eYevZ09oUjp7N44Ygq7wuMdv9/8G0tszbY2+jp491RXPw5jbPyhNgdEBrg47?= =?us-ascii?Q?vOsgwigsQNyjWe+YL5RYOTCZkNZfJWFGQbPevEw89phGYu2SuAf9tp+POnQB?= =?us-ascii?Q?w0nZaBxLVvgSjNS684UQc+GJapd86ZEQPYMUUjXvI6GZP8KY/tFTNEGy3LsM?= =?us-ascii?Q?CBRepNATF/edJ3XVSrlcZlRIQGtw4NfKrS5HtVj2stODYIBj6UpjLl8eXBl8?= =?us-ascii?Q?ZjTQSQ1F7yIKrOkEZTfUUQTb8MzPl4pIYhEZ/114H/bjUZK47sYTBCHUDl3D?= =?us-ascii?Q?btMFkqtujTYJINzEcxolqMC81uvvTcvQSqFPvGikGB9Uc2yHEi4fkQayLPz8?= =?us-ascii?Q?1H9srI3Ry+xG7pSo/7/36JUlbBuOlJe4ETqW2/qXu5tmdO8uiAn2ePmdFhtB?= =?us-ascii?Q?PuNcsgquzsV+asfsdRVXSMpJP8EPiUmcpJ6YJd4OCG0Q/E5sqVz03i290Ari?= =?us-ascii?Q?IQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1660b937-950d-4e69-ffc0-08db6e41c12c X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2023 08:14:49.9587 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jJZI+miYWzt/TBkXz8FCmlxNH/PfYdQBAZnOvRctGr1VX/Pr8E3BzoXUl+ZfJ+wTPTOuLGdLGDFKf9NRrFSCvCtQjrDUL8QqL9SiQERUNjw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM8PR13MB5111 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: Peng Zhang The basic logic is the same for PF, VF and representor port. Split out the initializing device information logics into a helper function to reduce code duplication. Signed-off-by: Peng Zhang Reviewed-by: Chaoyong He Reviewed by: Long Wu --- drivers/net/nfp/flower/nfp_flower.c | 36 +++------------------- drivers/net/nfp/nfp_common.c | 46 ++++++++++++++++++++++++++++ drivers/net/nfp/nfp_common.h | 1 + drivers/net/nfp/nfp_ethdev.c | 39 +++--------------------- drivers/net/nfp/nfp_ethdev_vf.c | 47 ++--------------------------- 5 files changed, 58 insertions(+), 111 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 53ee936f4c..11783ef273 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -338,26 +338,21 @@ nfp_flower_pf_xmit_pkts(void *tx_queue, static int nfp_flower_init_vnic_common(struct nfp_net_hw *hw, const char *vnic_type) { + int err; uint32_t start_q; uint64_t rx_bar_off; uint64_t tx_bar_off; - const int stride = 4; struct nfp_pf_dev *pf_dev; struct rte_pci_device *pci_dev; pf_dev = hw->pf_dev; pci_dev = hw->pf_dev->pci_dev; - hw->device_id = pci_dev->id.device_id; - hw->vendor_id = pci_dev->id.vendor_id; - hw->subsystem_device_id = pci_dev->id.subsystem_device_id; - hw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id; - PMD_INIT_LOG(DEBUG, "%s vNIC ctrl bar: %p", vnic_type, hw->ctrl_bar); - /* Read the number of available rx/tx queues from hardware */ - hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); - hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); + err = nfp_net_common_init(pci_dev, hw); + if (err != 0) + return err; /* Work out where in the BAR the queues start */ start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ); @@ -368,31 +363,8 @@ nfp_flower_init_vnic_common(struct nfp_net_hw *hw, const char *vnic_type) hw->tx_bar = pf_dev->hw_queues + tx_bar_off; hw->rx_bar = pf_dev->hw_queues + rx_bar_off; - /* Get some of the read-only fields from the config BAR */ - nfp_net_cfg_read_version(hw); - if (!nfp_net_is_valid_nfd_version(hw->ver)) - return -EINVAL; - - hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); - nfp_net_init_metadata_format(hw); - - hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); /* Set the current MTU to the maximum supported */ hw->mtu = hw->max_mtu; - hw->flbufsz = DEFAULT_FLBUF_SIZE; - - if (nfp_net_check_dma_mask(hw, pci_dev->name) != 0) - return -ENODEV; - - /* read the Rx offset configured from firmware */ - if (hw->ver.major < 2) - hw->rx_offset = NFP_NET_RX_OFFSET; - else - hw->rx_offset = nn_cfg_readl(hw, NFP_NET_CFG_RX_OFFSET_ADDR); - - hw->ctrl = 0; - hw->stride_rx = stride; - hw->stride_tx = stride; /* Reuse cfg queue setup function */ nfp_net_cfg_queue_setup(hw); diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index 18f974d0e4..5092e5869d 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -1321,6 +1321,52 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) return 0; } +int +nfp_net_common_init(struct rte_pci_device *pci_dev, + struct nfp_net_hw *hw) +{ + const int stride = 4; + + hw->device_id = pci_dev->id.device_id; + hw->vendor_id = pci_dev->id.vendor_id; + hw->subsystem_device_id = pci_dev->id.subsystem_device_id; + hw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id; + + hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); + hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); + if (hw->max_rx_queues == 0 || hw->max_tx_queues == 0) { + PMD_INIT_LOG(ERR, "Device %s can not be used, there are no valid queue " + "pairs for use", pci_dev->name); + return -ENODEV; + } + + nfp_net_cfg_read_version(hw); + if (!nfp_net_is_valid_nfd_version(hw->ver)) + return -EINVAL; + + if (nfp_net_check_dma_mask(hw, pci_dev->name) != 0) + return -ENODEV; + + /* Get some of the read-only fields from the config BAR */ + hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); + hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); + hw->flbufsz = DEFAULT_FLBUF_SIZE; + + nfp_net_init_metadata_format(hw); + + /* read the Rx offset configured from firmware */ + if (hw->ver.major < 2) + hw->rx_offset = NFP_NET_RX_OFFSET; + else + hw->rx_offset = nn_cfg_readl(hw, NFP_NET_CFG_RX_OFFSET_ADDR); + + hw->ctrl = 0; + hw->stride_rx = stride; + hw->stride_tx = stride; + + return 0; +} + const uint32_t * nfp_net_supported_ptypes_get(struct rte_eth_dev *dev) { diff --git a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h index acb34535c5..1ce51d44d4 100644 --- a/drivers/net/nfp/nfp_common.h +++ b/drivers/net/nfp/nfp_common.h @@ -375,6 +375,7 @@ nfp_pci_queue(struct rte_pci_device *pdev, uint16_t queue) int nfp_net_reconfig(struct nfp_net_hw *hw, uint32_t ctrl, uint32_t update); int nfp_net_ext_reconfig(struct nfp_net_hw *hw, uint32_t ctrl_ext, uint32_t update); int nfp_net_configure(struct rte_eth_dev *dev); +int nfp_net_common_init(struct rte_pci_device *pci_dev, struct nfp_net_hw *hw); void nfp_net_log_device_information(const struct nfp_net_hw *hw); void nfp_net_enable_queues(struct rte_eth_dev *dev); void nfp_net_disable_queues(struct rte_eth_dev *dev); diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 0ccb543f14..e3ff3d8087 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -499,8 +499,8 @@ nfp_net_init(struct rte_eth_dev *eth_dev) uint64_t rx_bar_off = 0; uint64_t tx_bar_off = 0; uint32_t start_q; - int stride = 4; int port = 0; + int err; PMD_INIT_FUNC_TRACE(); @@ -529,15 +529,6 @@ nfp_net_init(struct rte_eth_dev *eth_dev) rte_eth_copy_pci_info(eth_dev, pci_dev); - hw->device_id = pci_dev->id.device_id; - hw->vendor_id = pci_dev->id.vendor_id; - hw->subsystem_device_id = pci_dev->id.subsystem_device_id; - hw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id; - - PMD_INIT_LOG(DEBUG, "nfp_net: device (%u:%u) %u:%u:%u:%u", - pci_dev->id.vendor_id, pci_dev->id.device_id, - pci_dev->addr.domain, pci_dev->addr.bus, - pci_dev->addr.devid, pci_dev->addr.function); hw->ctrl_bar = pci_dev->mem_resource[0].addr; if (hw->ctrl_bar == NULL) { @@ -569,17 +560,12 @@ nfp_net_init(struct rte_eth_dev *eth_dev) PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); PMD_INIT_LOG(DEBUG, "MAC stats: %p", hw->mac_stats); - nfp_net_cfg_read_version(hw); - if (!nfp_net_is_valid_nfd_version(hw->ver)) - return -EINVAL; - - if (nfp_net_check_dma_mask(hw, pci_dev->name) != 0) - return -ENODEV; + err = nfp_net_common_init(pci_dev, hw); + if (err != 0) + return err; nfp_net_ethdev_ops_mount(hw, eth_dev); - hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); - hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); hw->eth_xstats_base = rte_malloc("rte_eth_xstat", sizeof(struct rte_eth_xstat) * nfp_net_xstats_size(eth_dev), 0); if (hw->eth_xstats_base == NULL) { @@ -615,29 +601,12 @@ nfp_net_init(struct rte_eth_dev *eth_dev) hw->ctrl_bar, hw->tx_bar, hw->rx_bar); nfp_net_cfg_queue_setup(hw); - - /* Get some of the read-only fields from the config BAR */ - hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); - hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); hw->mtu = RTE_ETHER_MTU; - hw->flbufsz = DEFAULT_FLBUF_SIZE; /* VLAN insertion is incompatible with LSOv2 */ if (hw->cap & NFP_NET_CFG_CTRL_LSO2) hw->cap &= ~NFP_NET_CFG_CTRL_TXVLAN; - nfp_net_init_metadata_format(hw); - - if (hw->ver.major < 2) - hw->rx_offset = NFP_NET_RX_OFFSET; - else - hw->rx_offset = nn_cfg_readl(hw, NFP_NET_CFG_RX_OFFSET_ADDR); - - hw->ctrl = 0; - - hw->stride_rx = stride; - hw->stride_tx = stride; - nfp_net_log_device_information(hw); /* Initializing spinlock for reconfigs */ diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index f971bb8903..019bc3b9be 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -267,7 +267,6 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) uint64_t tx_bar_off = 0, rx_bar_off = 0; uint32_t start_q; - int stride = 4; int port = 0; int err; @@ -286,12 +285,9 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); - nfp_net_cfg_read_version(hw); - if (!nfp_net_is_valid_nfd_version(hw->ver)) - return -EINVAL; - - if (nfp_net_check_dma_mask(hw, pci_dev->name) != 0) - return -ENODEV; + err = nfp_net_common_init(pci_dev, hw); + if (err != 0) + return err; nfp_netvf_ethdev_ops_mount(hw, eth_dev); @@ -301,26 +297,6 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) rte_eth_copy_pci_info(eth_dev, pci_dev); - hw->device_id = pci_dev->id.device_id; - hw->vendor_id = pci_dev->id.vendor_id; - hw->subsystem_device_id = pci_dev->id.subsystem_device_id; - hw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id; - - PMD_INIT_LOG(DEBUG, "nfp_net: device (%u:%u) %u:%u:%u:%u", - pci_dev->id.vendor_id, pci_dev->id.device_id, - pci_dev->addr.domain, pci_dev->addr.bus, - pci_dev->addr.devid, pci_dev->addr.function); - - hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); - hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); - if (hw->max_rx_queues == 0 || hw->max_tx_queues == 0) { - PMD_DRV_LOG(ERR, - "Device %s can not be used, there are no valid queue " - "pairs for use, please try to generate less VFs", - pci_dev->name); - return -ENODEV; - } - hw->eth_xstats_base = rte_malloc("rte_eth_xstat", sizeof(struct rte_eth_xstat) * nfp_net_xstats_size(eth_dev), 0); if (hw->eth_xstats_base == NULL) { @@ -356,29 +332,12 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) hw->ctrl_bar, hw->tx_bar, hw->rx_bar); nfp_net_cfg_queue_setup(hw); - - /* Get some of the read-only fields from the config BAR */ - hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); - hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); hw->mtu = RTE_ETHER_MTU; - hw->flbufsz = DEFAULT_FLBUF_SIZE; /* VLAN insertion is incompatible with LSOv2 */ if (hw->cap & NFP_NET_CFG_CTRL_LSO2) hw->cap &= ~NFP_NET_CFG_CTRL_TXVLAN; - nfp_net_init_metadata_format(hw); - - if (hw->ver.major < 2) - hw->rx_offset = NFP_NET_RX_OFFSET; - else - hw->rx_offset = nn_cfg_readl(hw, NFP_NET_CFG_RX_OFFSET_ADDR); - - hw->ctrl = 0; - - hw->stride_rx = stride; - hw->stride_tx = stride; - nfp_net_log_device_information(hw); /* Initializing spinlock for reconfigs */ -- 2.39.1