From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@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 <dev@dpdk.org>; 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 <jin.liu@corigine.com>
To: dev@dpdk.org
Cc: niklas.soderlund@corigine.com, Jin Liu <jin.liu@corigine.com>,
 Diana Wang <na.wang@corigine.com>, Peng Zhang <peng.zhang@corigine.com>,
 Chaoyong He <chaoyong.he@corigine.com>
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>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
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: <DM4PR13MB5858C29328C7DBCC2A064A3394DE9@DM4PR13MB5858.namprd13.prod.outlook.com>
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?B?MkRLbm5hR0ptc1VzMXAyTlhaSHFKbnJqdlJrSjdkZWpQTG0wcEN1OUlxQUhn?=
 =?utf-8?B?TjRrMVBSUDF2cEFyN0tnbGJKR050Szk2UlZ2NExQblUrSnR3YjBDdVRkclpp?=
 =?utf-8?B?NjRvcG5va21xV29CbkRYKzdmRS9wNTF0L1pZdWUrWXNOcUFQdnlQMU5UYTZh?=
 =?utf-8?B?U25xQlYvb1ZJNE1hS2Nob3VHeHFxUjFYNUpxWjdWUVNwREsyd3QvdUpDejMz?=
 =?utf-8?B?OEp5NXRUNzJNZFkyRHdzUEZ2dmI0SDVvTHpjMVFYT0lHZFRiQnBjNUZRS3pI?=
 =?utf-8?B?SS9WTk41RXJ0NGdDdFl1R1p6d3QwZXZib3VBdFJNY29PaTkycUZYVDVwTjJq?=
 =?utf-8?B?L1hjQ1EwMDNGMXdtZE1WNzIwUm5qc2tBN3ZYdEVCdUZsaXQ0d0Z2Uk9vYU4w?=
 =?utf-8?B?ajhMaThUVmY4Q0hBbXhNYXRqRlpZeXUvVS8wY25pLzNIQy9BdEtScFVZczZz?=
 =?utf-8?B?SVpnT3JOVHU1ci90ZUo5T0xDbzd4VlhNVTh5V1RUdjYxMU9OcWxUa2pLUWFt?=
 =?utf-8?B?MmgxTEptNzhMdlhERm50OUpDVmhRakJiZ0kwT29QSVZyZnJCendxbkdUMUE3?=
 =?utf-8?B?NExKL3NLMC9JeUJaSHNFNHpHZUJocDVpWVRqTytBcStYUWpaT1J5RmRNS1Zl?=
 =?utf-8?B?YlcweGRra0FRV2kzODIxMjZpYU1JM25sZXR3cXYva3Q0ejlhZDRQd2VSL2hu?=
 =?utf-8?B?R1RIY2RuQnY0dXBBQlVKeDhTQkZ2RExFci8rZ1lOYTFHWWR3czM1MS9OeTVW?=
 =?utf-8?B?RE9IeHRXclpGKzVmdURjRXZOZzhDTmxXejNjYVFJR1VaWXE0Q2h2K3AzSDZp?=
 =?utf-8?B?cTBtWUhrYlNOL2UxUWJ1OUt3U0NYVGlzclVRWjQ0ZHN3YlczUzRGTTRBNDcx?=
 =?utf-8?B?Wi9XRWo3NHpLZVR0djdLb2ZBZ3pwRHdKVUUzZWFUanF0ODFwUEp3aDU3RUQr?=
 =?utf-8?B?OEd6Z2JSWWRpcGtBYjdSK1Q2NzJMbmpibnVWMEFMS3p2OEQ4dHUvVUtjazk5?=
 =?utf-8?B?dFpIVEkwMXpZVFRYT3hZSStYcUFUbllqNXM5K1ZHQ2ZXQkxDby9mbWd2RmhZ?=
 =?utf-8?B?elAyS1Y2a1NmalZWMDhYRGVJdkRXZXJqaXhaMG9DZ2M0NlY5SDF3ak14NG5B?=
 =?utf-8?B?Ukw2RXIvWGhZUjNLWEtPdU1ySS85VjVzRXBHcXNKRUFhWkhzZkM3TlZ4Tzgx?=
 =?utf-8?B?aVd0MjI1T3V4dWd0TzhZUjRkdVpOcmtIaFFCd1ZpZFVDOTBVUXBWbHRqYW9l?=
 =?utf-8?B?bWN0Z213VGFQWHh6cEx4RW1Sa21Od3QyQ0lmTWxrNEQyZnZIZ2RjS2g1RkRM?=
 =?utf-8?B?OW5SSDdoTThRUXZiMHhZNEZTQkkwOGc3S1pRZG9YN1dEbENyREhiOThFeXJn?=
 =?utf-8?B?eEprazhCeUtkeWFYQXZYUUUzZE9xeE9FUVEwNE4yTmJUSGE2c25UOTVZb1lM?=
 =?utf-8?B?MUNCd2NTdUVTcGdveUZmNzlTZ2xMM2h5ZkNSM3M0NldNcnI4SktQY2tXUzha?=
 =?utf-8?B?blhUNEVVQlUzNThlcFU0ZkcwWlE5cXZGOUNMbGwxNnVLK016REIwRnRIdXN2?=
 =?utf-8?B?azR4YmxRMUxTVkNpdWVrVkFhOER2V2xIV21OWG93WlRORXIzSTh4SnYzTUZC?=
 =?utf-8?B?ampiUTlPZGlXTCtCQ1dNMGVLRXF4M1N1aWZMUC9leGRJKy9iRDdDSWdRUDF5?=
 =?utf-8?B?dEZadkZyZkgrZXcvNFZnNmZ4Q0JJbFBxL2RvaHlkVFdpMEdFazNwZktZUlJD?=
 =?utf-8?B?dHV2ZkNzaVhQekQzSE9MVFJMNmZDbnNqVGZYQnlvR3g4VUZOTTQ1d0R4eU5s?=
 =?utf-8?B?STRSNExWenBJaUJrcmprRUk0cWM4WjdZZWZwNTJPWTVxcS93NGlDZUk3OER5?=
 =?utf-8?B?WjhPUE9oSmg5MEh4N2d4S1c5WjI2NE1nNTlocnJKVEx2UmZyZnF5VFpzb2oy?=
 =?utf-8?B?ZDczZ0dQWDFkbXBveDE2dTFSMnFvUGV6ellPNm9GeUN1cEY0TERydEpTZjhm?=
 =?utf-8?B?Z1J5Nm1QRjNpNjhLVzlnOHBIK1pxSTE4VDRveHpzdVZtNUswblRUT01nQTQz?=
 =?utf-8?B?ZnpTVVNlZ1FaK0Q0UTVhempBcnlleS9NeFBMYVRFSGMzZGxIcE16RmNpRStH?=
 =?utf-8?B?R2pOZFlVbjYrVEVObU40cytHdjVkM0NSMnhqQlpxSnpkMkdGMnpLblhsbnEz?=
 =?utf-8?B?NlN5T3M2L3lSN2Q0RHZUZGc5Z0ZVeFpBM2U0cXJya3RYd1BXY29hbnd0WUhG?=
 =?utf-8?B?MzNQVE15YitacTQ1b3RBTllVa3hhaDBzSVJJbUJodnB2MWQ3YzRERytJczRK?=
 =?utf-8?B?Nk1oMVRLeGF1eGhRcllGN1lKRngzUVBFekl3L1FscGhGRExPTDdhQT09?=
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 <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

Implement NIC stop and close function for NFDK firmware.

Signed-off-by: Jin Liu <jin.liu@corigine.com>
Signed-off-by: Diana Wang <na.wang@corigine.com>
Signed-off-by: Peng Zhang <peng.zhang@corigine.com>
Signed-off-by: Chaoyong He <chaoyong.he@corigine.com>
Signed-off-by: Niklas Söderlund <niklas.soderlund@corigine.com>
---
 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,
-- 
2.27.0