From patchwork Mon May 15 12:37:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24311 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 05E987CE5; Mon, 15 May 2017 14:38:46 +0200 (CEST) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0084.outbound.protection.outlook.com [104.47.38.84]) by dpdk.org (Postfix) with ESMTP id 030F87CAF for ; Mon, 15 May 2017 14:38:32 +0200 (CEST) Received: from BN3PR03CA0111.namprd03.prod.outlook.com (10.174.66.29) by BN3PR0301MB0897.namprd03.prod.outlook.com (10.160.156.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16; Mon, 15 May 2017 12:38:28 +0000 Received: from BN1AFFO11FD022.protection.gbl (2a01:111:f400:7c10::155) by BN3PR03CA0111.outlook.office365.com (2603:10b6:400:4::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16 via Frontend Transport; Mon, 15 May 2017 12:38:28 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD022.mail.protection.outlook.com (10.58.52.82) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Mon, 15 May 2017 12:38:28 +0000 Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.134.28]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v4FCbxO4003970; Mon, 15 May 2017 05:38:26 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 15 May 2017 18:07:39 +0530 Message-ID: <1494851864-26029-17-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> References: <1492607395-5922-1-git-send-email-hemant.agrawal@nxp.com> <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131393255083968267; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39850400002)(39450400003)(39860400002)(39840400002)(39380400002)(39410400002)(39400400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(2351001)(33646002)(85426001)(86362001)(106466001)(104016004)(105606002)(5003940100001)(4326008)(50226002)(38730400002)(110136004)(76176999)(47776003)(50986999)(305945005)(68736007)(8936002)(53936002)(36756003)(189998001)(5660300001)(54906002)(81166006)(8656002)(8676002)(6916009)(2950100002)(6666003)(2906002)(498600001)(50466002)(48376002)(77096006)(356003); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR0301MB0897; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD022; 1:y460EB87vC+Tk/6axod0CL5rkBiQXa2z85q8N/02sIn1RpP+ZEDnBPgfQROx/AEFhWQgw8k7+0gcibUdn2ea8+BG6AtfpKE2mtEj0KxcGGXeLGlQjMUAa/YHFkJGeLCCV3lmZRiTzEFa6QpI1ThK6Fsigj6vtpRSGbyBwQ8vJ3i46LEEH8/OJT3gl1p4RQuQ+DGE0kbth3QTX2Dr8EndU+BXzjAWFu8yux8CnUXD6p2Xu8dPhzYkdpgDVlrK5aZ8xUwQERML8qtOhyho+PCMDkp7nKzd69oSxfCQW374fVtkqPv9iUUXrsMXvWJoLbO0Ga49nfSXgrRwai/1B9S00WO/s1hdrEMce3DdHMklwSFov7SrECrjQeyvXbsW7VWpcfKAWFTO7crpb7DR2MdFbjv4aX14zLN5ak9h8QGMY6GAckpQokxNy5mIDH/GsOpl21rdhPK3eRjgfeYN1rr9eXs7BPIxs+BldwVOCd95KKyahUoVBm00x3kUbQy+/oY7YsJW9XjBQsBNGAvKo0D9mWRzDmuld0inBFZPevrNKy9JpqskHIpCZy83zjQBQMTPP0b/PqCXJV/W4J8AtinzfR2MtwY79A4sA8T/OqTDszDRMWZmkbsaZ6MbFVLWs1k4pS2D7+DkxRcBvfys5uIc5rfOFMAzDW42Txw6shwba4frE3PpVlUxUQ4scez0WyxhG/sPYvrp2or2Lgd2hSF9jNF62W5jsAH79hjPkZraQ/nNXvl38SSCW/F7oaUmQXMJcnUj9AX/d/EGNJuoTHiNhQ== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: da58ba3e-776f-41da-25ab-08d49b8f499e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BN3PR0301MB0897; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0897; 3:jFcpz0bzJo70Gf0+aN7Jaa/fjg4zzvbTyZ4hwB5v3alJX3+oteB/f+WRTENm/EwJONnS+5vIiCW0hk8hn1WvExlGGzl2+KnJun0hAlde3Mv81ATbQ2LTRXATFTBwbzFMD1Gnb3m99/RpA7OQEd9Uf/eJctD65cjyy8KXaQVE0uwE8Lzp5a59CNzPr0XSmfJeOi6dQDp3yydpF+vW6KXY+vhcA1ETslC8R81FT0phYeAMhsEHQ67yKHveGCoVKNBSIQzamWBj7U+6sJaqTxYjrDJ9aoTMTn47uBf6mEQGxqjQaaqu02Uup0b/33Q4hb9XhQ1RxFbAh1t7RDgKcQ98yoXwrfwN61izBG3ihHZHmUzVyddklTAkLPCwXiBXu7c2Srs4qHiQ/SfajeZdUB//j7gMIv3OJEXBKlm+T+RZ0WEMSolOLN4c3Rg768qdCom1; 25:v+efRb9wAf7s2aIlXmDNz2AgNnEzL/yVdfHLRFoUsedi/qZl5+QdwWn723eY2VVXAoeaa25HkN7BYwC7GtidZyudMv+Xl7Wga1jNQVkdkRTc82+6FSAzuHABxIXH6Rpi0xdb+5tXm1cKldvATvdpCIY1nMUA87HqFSAj69icNJ23s81cfZ9Yt9/XCAgT1IXAdmfolszEZj3IV9yBQ5wIUPY4ig554+0KuwlE4LRLmGCPbRc0hXdn4APN46yE5a5imPrXIe909/2ejuSzRVW4gl/WyEVX+j0DJSG+VduzU0MLZBxpcODONrAZAgZxl45oCZHpFMzy6wqoz4YaKQn7DgfBlimJ2QeqTsj3QZn9D1fYumcUTIPQ9oRW41l0EOFVM35FM6BS1yCVVYssHZT0/RUBNA/aSMl+NMk7P1ExJeZBqaeohaj9L6Wjoozim7wJtqYtcVFRUNdxGaK56QM+7g== X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0897; 31:1uYwzqwEXXLLHCNtXESl3bFpLrChZwDg1OstkgZCEZiu3SmgQn+q1DorAVoat/wbj04ewCMj1zusYAO2GLGxZIOU25UIWO0KNIHOmqO14PMEg4Ep7HeaQ6hVrEZhlKilwxiIJFGYEpf7RpJWwVtxknFovFHSug+lrv8fo/iHhkCDTd1p2CvOiJvc+KMWTe5Yas6MTMAG7XhgtKOXT88MwjTv5ENdyLVnBwobb7hGLJI4J5Ajj+mCh44ze60r4XKw75DP0wQQhYsGchdu9F4KGg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(8121501046)(5005006)(13017025)(13015025)(13023025)(13018025)(13024025)(10201501046)(93006095)(93001095)(3002001)(6055026)(6096035)(20161123563025)(20161123559100)(20161123556025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123561025)(20161123565025); SRVR:BN3PR0301MB0897; BCL:0; PCL:0; RULEID:(400006); SRVR:BN3PR0301MB0897; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB0897; 4:002MN8BL4G8T+/k6ueL9QwZigwIuITKPmw7D/5Jr?= 0X2dmTaQxZmMCLojH/DWyAe0NBTVs8tnxNeBSXEG03mvfhDgv0v7fBRtisCoihZpOlFQsra6DZOhMAM92BnyElwTLM5voICyZKWEqMHb+nvsGwTHmTNxdUBmzpk2Vsd6wpdlUJF6pfmdDYtpqJwI+rYvrE4K0fWHd0nQOq7fcwmVmYhgd2lWYyfLaz5TmpYOOgHkbsmLAYcIPK3dKh+nNoJyIm8iO7o8mhU3wZtJGjbkfB7PVJfF77YJ+EFMyY3c42KMYLRYKCLSCe6hN31/UQCmjj7Eny8qwQJBne+VkIOMZ+N2aDk/Nu1Qo9ScOOdXgp8tDdOUJMY6l2bHkxRhbNRrJ8EQBPpVXErdvSrF+eyBF/iHopJMlXVvYwmHVVO52SC71fdRYo08m/lsaoy3mNd6N4W37RfnRwkgWx+dMsPaj5PcgqvG/dxWtexaNtIIJfqo7qKdb9WsVeCSxg3PGdrybBA8tIWbFkRLwl1fN9GoJGbeAOK8rjz/Bqv3BwR3WzyNo6xeQEjyh1VzolK2TUn9vkBUTeS2YF5V3WfMc9vK8HOjaKump5BRWsL3Td2d0fA6nhxbXXpzVIvcp4XwFF2iaEbVug6e8LxWnF3AXYmVOoGDSFeuJG6237Cv4IRi2K/MgaFPM7tFKyyFGKLFye6oNdEhsBWtGyn90JRUE/vWannG3tZQPq9qvAXMYyXdehCk+bNy1dCI+cf3v+PtZ1Kvs5ixfjYUnm1tFiYmfbrjnuiIJSjS8Q1wr3qmfd9uy/6EBINhqCdnzjBgiSKlkGK4po34ygpN0/tERT9zZ+x0sTiKBkCN1GMdEsgiSxdYG+eoUtuM+CR8KcS3CtNBh+Ggq+vpWjNYsFwxPeICR2YFBINy53ScM8qQj2Z7QBz6hgZW7QhDuhO5fLSxYItLWo5z4F6j2QRZsBrdWHVBtXiJk+GCXxmVgZRs+tK0zbp4p5k= X-Forefront-PRVS: 0308EE423E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB0897; 23:TjmddOKiVnMSA4PnCGLc5UhUq4sziPYc4kTQMHg?= 1w6uP0RXnCnp4ngtAjeEU0MsFfWLkDcteVT38ptuguJgPXBm3z+8Kk+T2uf2ANrviN/OcAvUAwqNbEOafdHgmmrGfXfXlhU33UzpLfM27sSYjLx+QMPAZMBHnYIJXmwTaL58PTw2vSuYlBsNS66+NXabDkslbqf0GPzn5fmPYSuhqVfb3QIF8N43mz5pobsp/o+czgY8U1sLjzvmMJVMNKC2YE5D3wIO942bqJrv4EW4zzT0Lskd6l89fyNzChj2EVFGCDe6rnz39bV7c903ONN8IMfH7r46yh1UHwDR/QReCgx2+HbDjDRc5Qwf3sA3tSmhG96RkrkwkyowyeTmFEcP/KUadqVAnOYhsFfpxzLhwSwltNFjwHnF1ds29jXyZIxryUXwy0/na0uLyWu++1zAF9Fth1x7toGgnvi15RentHxWZqH4ulxvMz1x27TQZ9UHWeVItTABk/26VAdwH1Wr6F8RKctUXNkSffho65hmpKCbLJtrdHbl1R1WPPpdrZKq2e48huB+QO48/KUrRCNnhArFOWO/dIn2sfFY9D//EEdvcYgdwGKn5AU4ocEBeBaKXVGpgtyGsEfNwWQejicYJqvC1VLrNq7W00TAEFxeTmL4lWtz82zEd29Naa34C1WeRBeiUFDpwKVNE773/cT+wzjqv4b7Dwf9/f0QP66XS2cuhRi0pFuMAC4LEh1kyqaipjd7yN9od19fPWMOJcyLTkOT1GDBQvqHT0Fik4RFTYz4CRExA61F2IK/ijuzdkXFoJEI2wX5UPWoZMHVy1mR0re4Up8ovuhROTFStvhXfbeLpqDI67G/hl7jJElj+clceahbnXcSx6fUUoVXrGQSu33nozErJLS89Uf9rvGYTttOJ6SUpQbqzpINeN1oDdRPx4f2jeqnv8zktKevca/oa6yXOgj7KHB2rh1rWtmw0x92GdhaH3t+YjHHLzxxG0LrlmuLiws3mGDoFZUzTUbb2DzkRwFu5OKm9mPRrJHZJfAAjO2UENvotmhC/CZ81OFiwhsIt8IP3YOZztrqlZ9R0ima5WOiJhenhz6qMRuz5fVFEeiouEznY4m/tOMrBMurt1jLIQkVWZL9Pi7oj1VfxAUbo1yN6k22OKnpR8aIGyGynf7E+EFwgEq4lBW4s65n0tRXhcL+8ZEKNG+WqGycrHVJw8nJfKW4XB1DExYIfQShQzeawneopJsghIUmohN1JauXtikP/1g5gPTlszjXO X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0897; 6:hcNUjUmt3eejyu5vpGDg5CUW8268rmWVvJVMMWUPesN5Y9A8EAXkx/czqBpcp/nins7+fkxfG1h1wf6mnirQcvFcNAGf8c0umkb+aC4HkIQ0lF634KVntuxaVa30IQaDNlaGXb1WnjFh1Pj9R3A7OMfNWoZ3Hu/ev/IYhuDqqHjP/I+Bdv/vbICb/NF2e5pbcQzonv/EzioJEIIazxyxMh349MHr4lojizhd+xzfXzRDj+gjyTmQFLl8qPWRlBv0CAA9hDZ/sPd6hCUS9N6Mr8RuYvGuG0Ic58okFeJ6av3EElUAPKI4lY1SsX4HX63I5xUzyHQzDJpM8CqlyWhZXdI83nAk5Fm4HxhVxxwqdY415DQ+L9TObH+ENHKwUCOctpq2+L2C5jQ1whS43wCHHaPSefUDt9U9ydYRSxJSGBazLgOlzs0+n4JaNX/Udfs8c5sHpKEo49Br96xzcI1y3Pprut3W8PCvGtiGZ/1Qt2BtNalRzTqmy9lCL8PK9r8Awj2b1AASX5ymZ1JwLlkGtA==; 5:obgLQZAAPdtd2W4qE5yPBN845Rl8P7vBVYTB0LvDyAfktouW7uoSNmwiDXWi7GkSv+BlvKX9inLctbRyiPqVU28WA0lAs3eMA4VM7IjAsIgYzuHxFA2nzKkGWkTNs4jPXOpKvhDPw4xIMjsCZsY/S9VfUCHjio2NrZ9noJvcETJns15lAj9jHfm4nGnWGDye; 24:4U1ktq+dzehXH0dFCiZvW3FuGuI/qrRTkbKkdhzB+dzxhlpGleI3VVQyO8tU9h0M4jQTVcklWCdWUyWvmSrSu2ccC3JjkdKeyAXvUDP6vcg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0897; 7:ZqdBL5j5FYfmERA+TUtMz1IQErcdS37kF3DwmWXcVjqd45iyic2OmK2sRFGhIr1KaielruvN+j4aBQ/PJYZJ3AMyM8Ksgjiua+tW72zR9HPqjZ6Tb3B6kd7olUVd6iwBuLzS7voPo0ksxxOFVjnj+Y7yzg6jiPGC5/AwHCwkEr0ID5hfJ6t7yb/P2mTp860R08sBKQXWL/uWf82VLtoNS/Stwf0Dj0b/XMbC68ySC7v0AVCCONDZsrWHp8rUoXDY2qtjzqND/gwVX5n4u8fPQwyZnw/Osy49b37GRk5LoB5JmCr8OOWjXK7MHXTbOV0EDoyYEMSS6GkxLZXhvVJl2A== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2017 12:38:28.2252 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0301MB0897 Subject: [dpdk-dev] [PATCH v2 15/20] net/dpaa2: add link status config support 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" Signed-off-by: Hemant Agrawal --- drivers/net/dpaa2/dpaa2_ethdev.c | 118 +++++++++++++++++++++++++++++++++++++++ drivers/net/dpaa2/dpaa2_ethdev.h | 2 +- drivers/net/dpaa2/dpaa2_rxtx.c | 25 +++++++++ 3 files changed, 144 insertions(+), 1 deletion(-) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 46532b2..fa9db17 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -55,6 +55,8 @@ static struct rte_dpaa2_driver rte_dpaa2_pmd; static int dpaa2_dev_uninit(struct rte_eth_dev *eth_dev); +static int dpaa2_dev_set_link_up(struct rte_eth_dev *dev); +static int dpaa2_dev_set_link_down(struct rte_eth_dev *dev); /** * Atomically reads the link status information from global @@ -530,6 +532,9 @@ return ret; } + /* Power up the phy. Needed to make the link go Up */ + dpaa2_dev_set_link_up(dev); + ret = dpni_get_qdid(dpni, CMD_PRI_LOW, priv->token, DPNI_QUEUE_TX, &qdid); if (ret) { @@ -613,6 +618,8 @@ PMD_INIT_FUNC_TRACE(); + dpaa2_dev_set_link_down(dev); + ret = dpni_disable(dpni, CMD_PRI_LOW, priv->token); if (ret) { PMD_INIT_LOG(ERR, "Failure (ret %d) in disabling dpni %d dev\n", @@ -632,6 +639,7 @@ struct dpaa2_dev_priv *priv = dev->data->dev_private; struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw; int i, ret; + struct rte_eth_link link; struct dpaa2_queue *dpaa2_q; PMD_INIT_FUNC_TRACE(); @@ -651,6 +659,9 @@ " error code %d\n", ret); return; } + + memset(&link, 0, sizeof(link)); + dpaa2_dev_atomic_write_link_status(dev, &link); } static void @@ -989,6 +1000,111 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) return 0; } +/** + * Toggle the DPNI to enable, if not already enabled. + * This is not strictly PHY up/down - it is more of logical toggling. + */ +static int +dpaa2_dev_set_link_up(struct rte_eth_dev *dev) +{ + int ret = -EINVAL; + struct dpaa2_dev_priv *priv; + struct fsl_mc_io *dpni; + int en = 0; + + PMD_INIT_FUNC_TRACE(); + + priv = dev->data->dev_private; + dpni = (struct fsl_mc_io *)priv->hw; + + if (dpni == NULL) { + RTE_LOG(ERR, PMD, "Device has not yet been configured"); + return ret; + } + + /* Check if DPNI is currently enabled */ + ret = dpni_is_enabled(dpni, CMD_PRI_LOW, priv->token, &en); + if (ret) { + /* Unable to obtain dpni status; Not continuing */ + PMD_DRV_LOG(ERR, "Interface Link UP failed (%d)", ret); + return -EINVAL; + } + + /* Enable link if not already enabled */ + if (!en) { + ret = dpni_enable(dpni, CMD_PRI_LOW, priv->token); + if (ret) { + PMD_DRV_LOG(ERR, "Interface Link UP failed (%d)", ret); + return -EINVAL; + } + } + /* changing tx burst function to start enqueues */ + dev->tx_pkt_burst = dpaa2_dev_tx; + dev->data->dev_link.link_status = 1; + + PMD_DRV_LOG(INFO, "Port %d Link UP successful", dev->data->port_id); + return ret; +} + +/** + * Toggle the DPNI to disable, if not already disabled. + * This is not strictly PHY up/down - it is more of logical toggling. + */ +static int +dpaa2_dev_set_link_down(struct rte_eth_dev *dev) +{ + int ret = -EINVAL; + struct dpaa2_dev_priv *priv; + struct fsl_mc_io *dpni; + int dpni_enabled = 0; + int retries = 10; + + PMD_INIT_FUNC_TRACE(); + + priv = dev->data->dev_private; + dpni = (struct fsl_mc_io *)priv->hw; + + if (dpni == NULL) { + RTE_LOG(ERR, PMD, "Device has not yet been configured"); + return ret; + } + + /*changing tx burst function to avoid any more enqueues */ + dev->tx_pkt_burst = dummy_dev_tx; + + /* Loop while dpni_disable() attempts to drain the egress FQs + * and confirm them back to us. + */ + do { + ret = dpni_disable(dpni, 0, priv->token); + if (ret) { + PMD_DRV_LOG(ERR, "dpni disable failed (%d)", ret); + return ret; + } + ret = dpni_is_enabled(dpni, 0, priv->token, &dpni_enabled); + if (ret) { + PMD_DRV_LOG(ERR, "dpni_is_enabled failed (%d)", ret); + return ret; + } + if (dpni_enabled) + /* Allow the MC some slack */ + rte_delay_us(100 * 1000); + } while (dpni_enabled && --retries); + + if (!retries) { + PMD_DRV_LOG(WARNING, "Retry count exceeded disabling DPNI\n"); + /* todo- we may have to manually cleanup queues. + */ + } else { + PMD_DRV_LOG(INFO, "Port %d Link DOWN successful", + dev->data->port_id); + } + + dev->data->dev_link.link_status = 0; + + return ret; +} + static struct eth_dev_ops dpaa2_ethdev_ops = { .dev_configure = dpaa2_eth_dev_configure, .dev_start = dpaa2_dev_start, @@ -998,6 +1114,8 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) .promiscuous_disable = dpaa2_dev_promiscuous_disable, .allmulticast_enable = dpaa2_dev_allmulticast_enable, .allmulticast_disable = dpaa2_dev_allmulticast_disable, + .dev_set_link_up = dpaa2_dev_set_link_up, + .dev_set_link_down = dpaa2_dev_set_link_down, .link_update = dpaa2_dev_link_update, .stats_get = dpaa2_dev_stats_get, .stats_reset = dpaa2_dev_stats_reset, diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index 3254b99..6b37c00 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -102,5 +102,5 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev, uint16_t dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); uint16_t dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); - +uint16_t dummy_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); #endif /* _DPAA2_ETHDEV_H */ diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index d7e18ad..b2dfcce 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -458,3 +458,28 @@ static inline int __attribute__((hot)) skip_tx: return num_tx; } + +/** + * Dummy DPDK callback for TX. + * + * This function is used to temporarily replace the real callback during + * unsafe control operations on the queue, or in case of error. + * + * @param dpdk_txq + * Generic pointer to TX queue structure. + * @param[in] pkts + * Packets to transmit. + * @param pkts_n + * Number of packets in array. + * + * @return + * Number of packets successfully transmitted (<= pkts_n). + */ +uint16_t +dummy_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) +{ + (void)queue; + (void)bufs; + (void)nb_pkts; + return 0; +}