From patchwork Thu Jun 2 01:53:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jin Liu X-Patchwork-Id: 112250 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 07675A0548; Thu, 2 Jun 2022 03:55:33 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 24D3C42B85; Thu, 2 Jun 2022 03:55:05 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2106.outbound.protection.outlook.com [40.107.220.106]) by mails.dpdk.org (Postfix) with ESMTP id D9B1442B6E for ; Thu, 2 Jun 2022 03:55:03 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hI5UwCZSNNMEbeM+TmzDoxYqJ+HwUDWFzYf8wuI4UciMKrOCfWu7OZnL6IFfJIQulM8m3VRtt+fQboRR66KoM9Gbf8P4oFd4p4XfIJ05ZiTpbEuMf5ZwfDN40PC3FtiYgIeAlxRvJMYGptbjmEg/PIWnymWznetDUJ3FoQsKjDw++C8K5kEHhgbFi6gxCKqiLsoFKCYpdAkx7n95WUdOY0cmdZVEHZAAhT7hSx+8C6IdtH6xEiEImUBIQ3cUENtB/AMGMGIWcT7gKwoAfupx9HjGNKNV/QDZIrSYpeQ5WsVfBFeaaGMqdl4IA46t0OgM1xV3nZHIOc/pCInpz9/kfA== 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=L/UUeZmvBrxntf4SHCWo+DtJOwVW6aRvFfE056LN4bc=; b=RUlF3sWyo0f5DOoXetYNC4SYk6KeYAxO5BAbVFSJFdlbj9Ya2YKT2tgz0Ppz9ts6PWxJxZNa7kV19UQSOm9tuJLwzwPCsf0lZq3G89dK1niDiixMIeWUvFh66MBJMcs2/d8XD7zuvHu72AbFKCGtanq0EGvKQQFtQBfljRIZ359O8jGEohe48ZOOpChvBxK1wkrIqAsZEiQ5SRXZ/1Isgd1sgcsH5PUBcCCT1ZBQjnkbOyhNgK/c0tdmi5ecJuLiilDnJAwr7U3R541mJl8KheoifuJqJXyLAworwjWPy4WssqBe06ecoSmISxNmyaZdDEjyE5nAIcFsGW53HXtKfg== 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=L/UUeZmvBrxntf4SHCWo+DtJOwVW6aRvFfE056LN4bc=; b=gwEifRJNqNNUPn2ZnipUbnyFfo0JwcoL/2njw+8KJQT0HYalHCgNF+nNJi7PwANR6vfTbplF8zawG6zFchH4xwdmQgDPWi+X8/Ur8GPKx4RZRUpzAxZiJgVcuxXJkOEBHv0gTK9p95PrCgQ0NAEIhz76WxpPfK6VTOZEao17OEo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from DM6PR13MB3004.namprd13.prod.outlook.com (2603:10b6:5:191::21) by DM4PR13MB5858.namprd13.prod.outlook.com (2603:10b6:8:46::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.11; Thu, 2 Jun 2022 01:55:02 +0000 Received: from DM6PR13MB3004.namprd13.prod.outlook.com ([fe80::d902:ed7d:82bb:c753]) by DM6PR13MB3004.namprd13.prod.outlook.com ([fe80::d902:ed7d:82bb:c753%4]) with mapi id 15.20.5314.013; Thu, 2 Jun 2022 01:55:02 +0000 From: Jin Liu To: dev@dpdk.org Cc: niklas.soderlund@corigine.com, Jin Liu , Diana Wang , Peng Zhang , Chaoyong He Subject: [PATCH 11/14] net/nfp: nfdk stop and close function Date: Thu, 2 Jun 2022 03:53:01 +0200 Message-Id: <20220602015304.710197-12-jin.liu@corigine.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220602015304.710197-1-jin.liu@corigine.com> References: <20220602015304.710197-1-jin.liu@corigine.com> X-ClientProxiedBy: LO4P123CA0457.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1aa::12) To DM6PR13MB3004.namprd13.prod.outlook.com (2603:10b6:5:191::21) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d6d00f54-7362-44cb-d2eb-08da443ae83f X-MS-TrafficTypeDiagnostic: DM4PR13MB5858:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 26/7EON0YxQGKFwww52mXq4+5CQhyrn0/n0gAaGjRP9Dj1Dvi4BM8bqKqmE4KqZJYjCmkEKLJJrn2OLqqK+eZaZsAo8ll4tmaoAmlyEa9mTChjWviCyRQdWjyut53WR3iKh1DhbHruTLBUpvaQe7Ac5nkG4VJVsgnKnIf3+HK+Fq5F8glZ++K9uNm+ZeF+tfWS8G76yi/n96IfCR5T1Wtu8hJ8CevKykT6aih2kuEaAXoXY0JTvPNs5/c6+I+sK18YT3BiwIDI7AxuNRWo/xkI977qpWabux4X/0h/T52DYxbF0C4ibwqXAJUs3JCjBZiyf8Lq5jAiMnNu+3qWPcqAsVbbi42fK04p/klp7dv2x8y1dGno2GG1BX3oKLdZLABKEfzNOE8Adu6toizlZwchS6La9r9RJNmfuLGwC5sWw5StxZglfbeCsjL+s393Qyk0JUtz+2qVrTnJYJl+EVl4k7V8EN/SiY6+Zc4ApmBST1LBuUeXD236Dl7Nwfy6PfJr+evd9WmONMIgSgUAbblhmHgEGgNFw1pUjlvZwBWt0i7igZuRrUiyEefKCoGgyRNtyJoTOft3ddlNQxuyyhPhE1rk8N1I9mEBg5ZB2hnybh5tr1SdMYSx0HfXqbXvlOKlyDZl2ACA23nAXJH2cuT4uSSyhFs7Lye2EaFU3Lrkwbnfhk/C+LRcLxeDWKMtiORslGfPVmt5c/RumymNvzAA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR13MB3004.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(346002)(366004)(396003)(136003)(376002)(39840400004)(36756003)(186003)(66574015)(83380400001)(5660300002)(4326008)(44832011)(8936002)(2906002)(6916009)(54906003)(1076003)(107886003)(6506007)(316002)(2616005)(41300700001)(8676002)(66946007)(66476007)(66556008)(26005)(6512007)(52116002)(38100700002)(38350700002)(86362001)(6486002)(508600001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?2DKnnaGJmsUs1p2NXZHqJnrjvRkJ?= =?utf-8?q?7dejPLm0pCu9IqAHgN4k1PRP1vpAr7KglbJGNtK96RVv4LPnU+Jtwb0CuTdrZi64o?= =?utf-8?q?pnokmqWoBnDX+7fE/p51t/ZYue+YsNqAPvyP1NTa6aSnqBV/oVI4MaKchouGxqqR1?= =?utf-8?q?X5JqZ7VQSpDK2wt/uJCz338Jy5tT72MdY2DwsPFvvb4H5oLzc1QXOIGdTbBpc5FQK?= =?utf-8?q?zHI/VNN5Ert4gCtYuGZzwt0evbouAtRMcoOi92qFXT5pN2j/XcCQ003F1wmdMV720?= =?utf-8?q?RnjskA7vXtEBuFlit4wFvROoaN0j8Li8TVf8CHAmxMatjFZYyu/U/0cni/3HC/AtK?= =?utf-8?q?RpUYs6sIZgOrNTu5r/teJ9OLCo7xVXMU8yWTTv611ONqlTkjKQam2h1LJm78LvXDF?= =?utf-8?q?nt9JCVhQjBbgI0OoPIVrfrBzwqnGT1A74LJ/sK0/IyBZHsE4zGeBhp5iYTjO+Aq+X?= =?utf-8?q?QjZORyFdMKVebW0xdkkAQWi382126iaMI3nletwqv/kt4z9ad4PweR/hnGTHcdnBv?= =?utf-8?q?4upABUJx8SBFvDLEr/+gYNa1GYdws351/Ny5VDOHxtWrZF+5fuDcEvNg8CNlWz3ca?= =?utf-8?q?QIGUZYq4Chv+p3H6iq0mYHkbSN/e1Qbu9KwSCXTisrUQZ44dswbW3S4FM4A471Z/W?= =?utf-8?q?Ej74zKeTtv7KofAgzpDwJUE3eaTjqt81pPJwh57ED+8GzgbRYdipkAb7R+T672Lnj?= =?utf-8?q?bnuV0ALKzv8D8tu/UKck99tZHTI01zYTTXOxYI+XqATnYj5s9+VGCfWBLCo/fmgvF?= =?utf-8?q?hYzP2KV6kSfjVV08XDeIvDWerjixZ0oCgc46V9H1wjMx4nARL6Er/XhYR3KXKOuMr?= =?utf-8?q?I/9V5sEpGqsJEAaZHsfC7NVxO81iWt225OuxugtO8YR4duZNrkHhQBwVidUC90UQp?= =?utf-8?q?VltjaoemctgmwTaPXxzpLxEmRkmNwt2CIfMlk4D2fvHgdcKh5FDL9nRH7hM8QQvb0?= =?utf-8?q?xY4FSBI08g7KZQdoX7WDlCrDHb98EyrgxJkk8ByKdyaXAvXQE3dOqxOEQQ04N2NbT?= =?utf-8?q?Ha6snT95YoYL1CBwcSuESpgoyFf79SglL3hyfCR3s46WMrr8JKPckWS8ZnXT4EUBU?= =?utf-8?q?358epU4fG0ZQ9qvF9CLll16uK+MzDB0FtHusvk4xblQ1LSVCiuekVAa8DvWlHWmNX?= =?utf-8?q?owZTNEr3I8xJv3MFBjjbQ9OdiWL+BCWM0eKEqx3SuifLP/exdI+/bD7CIgQP1ytFZ?= =?utf-8?q?vFrfH+ew/4Vg6fxCBIlPq/dohydTWi0GEk3pfKYRRCtuvfCsiXPzD3HOLTRL6fCns?= =?utf-8?q?jTfXByoGx8UFNM45wDxyNlI4R4LVzpIiBkrjkEI4qc8Z7Yefp52OY5qq/w4iCeI78?= =?utf-8?q?DyZ8OPOhJh90Hx7gxKW9Z264Mg59hrrJTLvRfrfqyTZsoj2d73gGPX1dmpox16u1R?= =?utf-8?q?2qoPezzYO6oFyCupF4LDrtJSf8fgRy6mPF3i68KW9g8pH+ZqI18T4oxzsuVm5K0nT?= =?utf-8?q?TOMgA43fzSUSegQZ+D4Q5azjAryey/MxPLaTEHc3dlHpMzFciE+GGjNdYUn6+TENm?= =?utf-8?q?N4s+Gv5d3CR2xjBZqJzd2GF2zKnXlnq36SyOs6/yR7d4DvTdg9gFUxZA3e4qrrktX?= =?utf-8?q?wPWcoanwtYHF33PTMyb+Zq45otANYUkxah0sIRImBhvpv1d7c4DG+Is4J6Mh1TKxa?= =?utf-8?q?uxhQrYF7YJFx3QPEzIw/QlphFDLOL7aA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: d6d00f54-7362-44cb-d2eb-08da443ae83f X-MS-Exchange-CrossTenant-AuthSource: DM6PR13MB3004.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2022 01:55:02.4291 (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: yW8TegUD0TZLgDJi8Q2M3eHTRhdtqquCv9Ja0GiXK17bWwtObRujIXEnmqTtBPW/ZbCK57GnpcBZ1kk4Up62yw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR13MB5858 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 Implement NIC stop and close function for NFDK firmware. Signed-off-by: Jin Liu Signed-off-by: Diana Wang Signed-off-by: Peng Zhang Signed-off-by: Chaoyong He Signed-off-by: Niklas Söderlund --- drivers/net/nfp/nfp_ethdev.c | 92 ++++++++++++++++++++++++++++++++- drivers/net/nfp/nfp_ethdev_vf.c | 64 +++++++++++++++++++++-- 2 files changed, 151 insertions(+), 5 deletions(-) diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 0a5c703190..4e3a6a964d 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -309,6 +309,94 @@ nfp_net_nfd3_close(struct rte_eth_dev *dev) return 0; } +static int +nfp_net_nfdk_stop(struct rte_eth_dev *dev) +{ + struct nfp_net_hw *hw; + + PMD_INIT_LOG(DEBUG, "Stop"); + + hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); + + nfp_net_disable_queues(dev); + + /* Clear queues */ + nfp_net_nfdk_stop_tx_queue(dev); + + nfp_net_stop_rx_queue(dev); + + if (rte_eal_process_type() == RTE_PROC_PRIMARY) + /* Configure the physical port down */ + nfp_eth_set_configured(hw->cpp, hw->nfp_idx, 0); + else + nfp_eth_set_configured(dev->process_private, hw->nfp_idx, 0); + + return 0; +} + +static int +nfp_net_nfdk_close(struct rte_eth_dev *dev) +{ + int i; + struct nfp_net_hw *hw; + struct rte_pci_device *pci_dev; + struct nfp_pf_dev *pf_dev; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + PMD_INIT_LOG(DEBUG, "Close"); + + pf_dev = NFP_NET_DEV_PRIVATE_TO_PF(dev->data->dev_private); + hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); + pci_dev = RTE_ETH_DEV_TO_PCI(dev); + + /* + * We assume that the DPDK application is stopping all the + * threads/queues before calling the device close function. + */ + + nfp_net_disable_queues(dev); + + /* Clear queues */ + nfp_net_nfdk_close_tx_queue(dev); + + nfp_net_close_rx_queue(dev); + + /* Cancel possible impending LSC work here before releasing the port*/ + rte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, (void *)dev); + + /* Only free PF resources after all physical ports have been closed */ + /* Mark this port as unused and free device priv resources*/ + nn_cfg_writeb(hw, NFP_NET_CFG_LSC, 0xff); + pf_dev->ports[hw->idx] = NULL; + rte_eth_dev_release_port(dev); + + for (i = 0; i < pf_dev->total_phyports; i++) { + /* Check to see if ports are still in use */ + if (pf_dev->ports[i]) + return 0; + } + + /* Now it is safe to free all PF resources */ + PMD_INIT_LOG(INFO, "Freeing PF resources"); + nfp_cpp_area_free(pf_dev->ctrl_area); + nfp_cpp_area_free(pf_dev->hwqueues_area); + free(pf_dev->hwinfo); + free(pf_dev->sym_tbl); + nfp_cpp_free(pf_dev->cpp); + rte_free(pf_dev); + + rte_intr_disable(pci_dev->intr_handle); + + /* unregister callback func from eal lib */ + rte_intr_callback_unregister(pci_dev->intr_handle, + nfp_net_dev_interrupt_handler, + (void *)dev); + + return 0; +} + /* Initialise and register driver with DPDK Application */ static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = { .dev_configure = nfp_net_configure, @@ -342,10 +430,10 @@ static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = { static const struct eth_dev_ops nfp_net_nfdk_eth_dev_ops = { .dev_configure = nfp_net_configure, .dev_start = nfp_net_start, - .dev_stop = nfp_net_nfd3_stop, + .dev_stop = nfp_net_nfdk_stop, .dev_set_link_up = nfp_net_set_link_up, .dev_set_link_down = nfp_net_set_link_down, - .dev_close = nfp_net_nfd3_close, + .dev_close = nfp_net_nfdk_close, .promiscuous_enable = nfp_net_promisc_enable, .promiscuous_disable = nfp_net_promisc_disable, .link_update = nfp_net_link_update, diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index d347c98134..a5c6aceb32 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -214,6 +214,58 @@ nfp_netvf_nfd3_close(struct rte_eth_dev *dev) return 0; } +static int +nfp_netvf_nfdk_stop(struct rte_eth_dev *dev) +{ + PMD_INIT_LOG(DEBUG, "Stop"); + + nfp_net_disable_queues(dev); + + /* Clear queues */ + nfp_net_nfdk_stop_tx_queue(dev); + + nfp_net_stop_rx_queue(dev); + + return 0; +} + +static int +nfp_netvf_nfdk_close(struct rte_eth_dev *dev) +{ + struct rte_pci_device *pci_dev; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + PMD_INIT_LOG(DEBUG, "Close"); + + pci_dev = RTE_ETH_DEV_TO_PCI(dev); + + /* + * We assume that the DPDK application is stopping all the + * threads/queues before calling the device close function. + */ + + nfp_net_disable_queues(dev); + + /* Clear queues */ + nfp_net_nfdk_close_tx_queue(dev); + + nfp_net_close_rx_queue(dev); + + rte_intr_disable(pci_dev->intr_handle); + + /* unregister callback func from eal lib */ + rte_intr_callback_unregister(pci_dev->intr_handle, + nfp_net_dev_interrupt_handler, + (void *)dev); + + /* Cancel possible impending LSC work here before releasing the port*/ + rte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, (void *)dev); + + return 0; +} + /* Initialise and register VF driver with DPDK Application */ static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = { .dev_configure = nfp_net_configure, @@ -247,10 +299,10 @@ static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = { static const struct eth_dev_ops nfp_netvf_nfdk_eth_dev_ops = { .dev_configure = nfp_net_configure, .dev_start = nfp_netvf_start, - .dev_stop = nfp_netvf_nfd3_stop, + .dev_stop = nfp_netvf_nfdk_stop, .dev_set_link_up = nfp_netvf_set_link_up, .dev_set_link_down = nfp_netvf_set_link_down, - .dev_close = nfp_netvf_nfd3_close, + .dev_close = nfp_netvf_nfdk_close, .promiscuous_enable = nfp_net_promisc_enable, .promiscuous_disable = nfp_net_promisc_disable, .link_update = nfp_net_link_update, @@ -498,7 +550,13 @@ static const struct rte_pci_id pci_id_nfp_vf_net_map[] = { static int nfp_vf_pci_uninit(struct rte_eth_dev *eth_dev) { /* VF cleanup, just free private port data */ - return nfp_netvf_nfd3_close(eth_dev); + struct nfp_net_hw *hw; + + hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); + if (NFD_CFG_CLASS_VER_of(hw->ver) == NFP_NET_CFG_VERSION_DP_NFD3) + return nfp_netvf_nfd3_close(eth_dev); + else + return nfp_netvf_nfdk_close(eth_dev); } static int eth_nfp_vf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,