From patchwork Mon May 22 09:39:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24440 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 298C07CD9; Mon, 22 May 2017 11:40:43 +0200 (CEST) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0078.outbound.protection.outlook.com [104.47.33.78]) by dpdk.org (Postfix) with ESMTP id C8E85326C for ; Mon, 22 May 2017 11:40:16 +0200 (CEST) Received: from DM5PR03CA0024.namprd03.prod.outlook.com (10.175.104.34) by BY1PR0301MB0903.namprd03.prod.outlook.com (10.160.195.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Mon, 22 May 2017 09:40:14 +0000 Received: from BN1AFFO11FD027.protection.gbl (2a01:111:f400:7c10::112) by DM5PR03CA0024.outlook.office365.com (2603:10b6:3:118::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14 via Frontend Transport; Mon, 22 May 2017 09:40:14 +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 BN1AFFO11FD027.mail.protection.outlook.com (10.58.52.87) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Mon, 22 May 2017 09:40:13 +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 v4M9dk4A031538; Mon, 22 May 2017 02:40:12 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 22 May 2017 15:09:24 +0530 Message-ID: <1495445969-29199-16-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com> References: <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> <1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131399196139669883; (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)(39400400002)(39410400002)(39450400003)(39850400002)(39840400002)(39380400002)(39860400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(81166006)(4326008)(5660300001)(8936002)(50226002)(6666003)(356003)(47776003)(86362001)(189998001)(2351001)(8676002)(105606002)(2950100002)(6916009)(76176999)(106466001)(77096006)(36756003)(2906002)(38730400002)(48376002)(53936002)(50466002)(305945005)(8656002)(110136004)(498600001)(54906002)(104016004)(85426001)(50986999)(5003940100001)(33646002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0301MB0903; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD027; 1:TEgAW8uB6B/a1oSEe2n5/6kY8jCaFXgwZ7vGuCenamMnYjWaKSQCE9GoyAKHOddtkWGDbsgZ1eSPeF822BRFQ1xH5S8oVGgLUb8VrAnYq5RlEW5n22PloJ00rafF/WQIN5hVaAyi+MSDHxiY9kvlj/Fz8zLCe1D7JtA1u6HXQXF3Bd5q+eas7jU2dBxMilZeTGZidFqNwh3pT8bukdpD1dZPt6mzamsTKLRyMsJ/ZFP7JNAjT3am3JxuSznO9g1uw0Ao8mrruVt3zxNHF2JrcXIh8jCZv9Oq3u40i8ai+lwXaa9K2F6LVHGV4pS3e8Nstl2q5DC/VFRkNahfAlgPEMYrruOkdXJy4zSNK2fKMudO6Yf7uv+ZeGbYvWBkn9F+H17oUdadPLOhSRvjYl9JWj1n/o0m2hBAf6ciKJVC2k67dd6HpASIyv32aiQeCBUVR9alBdqRMVf6+EVCf2zzn0dSt4SFBC/GBIzaPOig+2AXBI/P4z614sL/SlW79TLe+ocYo/BIdRv67SsuU7pPv4fVbrE/f/OcrIxtmOYroPs8HCeMjXZkoewjMci8BNL1GkzM+pFg+AFfZI95n3xnkS6+IDp4yL5Xa1GCT+D8MJhhvGdCWwjskPUuiQtPjhbdpmrMuId20v9bn4tjONl4/wOXAH2h7y0CjaijeA9d2HDyieI9AWOu0hW4lemXEUIifsR/sXp0uIROK1XonWWAnnCXDVtDG2pjIkiJKQZdT4Zoze3BKBUTC+LnNjwyCs0is6W49qe2A0Yldm7XTcT4cg== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR0301MB0903: X-MS-Office365-Filtering-Correlation-Id: b9546fd8-ecc2-4bca-e81b-08d4a0f68c21 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BY1PR0301MB0903; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB0903; 3:VoRBQ0xuAgC1SlftpRUBsgF3YmDqCG8oVPLk6ifITY3E3sSdXHlVBlfl3U631VyRRwRje/njqxCKVU1zrErFrbNNS64NPAwjT6ASdnFCvUZAFuuhhgf0s9pdDHYDBKVWlSwwDOpxm5t2jF5OS/e4aReo2ur9iREaVvAi83vCZDNmvdHrzqXmarlKOCG5aP9TqI1e8VBxBzzwzxUhx9l2iQtrkPLSnkB72/qerkUE8daJItGgCQwbNvxcbRTFpOmYXUjpXZUeXX2N2nZkTbDsG5TbIZ7XromUkiC/9d8I3z/TZI7ZSeA0XPOaEnQLeDHe4in7Ycu08/qoy3Nr3OByCWYO/R+nrqXaFMTQXGYfoFP1wRSxjVK8awruDUBEFrF1CM9l257aZtt3a7Jlrh/a8dow2jcUGe4PIKbDqzpYPzAZRlUj19hjpHm+23HJpY6T; 25:3etzIyApqHY1Ie8c6+SpwcXfF4AggZCkrhiXwDwqPY13za6rIc5KYYQPdcrT3XwA7k4fPpJEB+Xw0JtR724FAzd5GM9Ctr/2lx8Y7s6jNYW9kCKgAtUagPFTtIdKe2AgEmiwBr95L2ZxS775UrlBnfQAX3KDSWPBaZo24Wp5qHxPrvgrYhrv4lsh7Hz03hidZr+SmfN/KFconW3QgvfQFzYD2UBYP/lpzURFpnA7vdCuf7iqlnKOxtmXW9uisAo7oGP+ikg7D+lxzodu0akoPcdYX1MRMEsWZf3j0l+bPRFY2hiadw/KEnmxfv5mHxqiYvH6TMUjp1vTmjFajvQKFQSduTRKjAWPBBMydGlGWfaIK2sJ5JO+KcSRwn5Vt4niXASs+6Bky+ifFxAeKYPGB0HcG6ARCPJ5FrOHzplqlR3spnD72tYJofQHkoC9+AIOsTDjDiYIODlYYxd92BeeWHIyAC8i24FMxnvGR9x0tyU= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB0903; 31:8p0g+zUVQ4IIklnPjhJEQu9KfIQeZfRTRzIX/Dj4fJP+4oS9KOR9cPTgIoTuguKrfItPhfZayCNkVKmEx6xjtC94e8lFkp2X8JF3xWbCsOnPjaWomljXAVA9l6qcnfXNfclZPQiltLi2Dp16yQW0LtJp+xNjiIhtopJaCHzUbHg0rLWyhEB+s8IpmWeL0EvZK0whfPFe78E317gy4PnB5YFlKwb9dAiYkvqCctEl0bVwo1HWeZnAyCZ98fTuAIkUg4HIfBx/2aITYMXjBzuP7w== 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)(13023025)(13024025)(13015025)(13018025)(5005006)(13017025)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123563025)(20161123559100)(20161123556025)(20161123561025)(20161123565025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153); SRVR:BY1PR0301MB0903; BCL:0; PCL:0; RULEID:(400006); SRVR:BY1PR0301MB0903; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0301MB0903; 4:vSok48fECmRJB+fMVppcyko5hnvgv/nPHpxCFCek?= PcsLXL5O9mTEuNsP3gxEJTQL/9HURvIwyNAOFVOieVk1TDBaDEgV/sCyQp5m9CX57cxWaGaHAP5mp62g7T8GddKssxTvM9XCUtftt9AgJlKCFvFWwBesK6Hq+XEt27Nrx7zHR7dFfzh25EVJE7KPuwh12XWV19kM98+UeMn0LzYLbGYFsk+f9SXsW/cr6ALLU48lhsP24NYiVPwWZPpYChZr8goVJ4lmq1WX1uCQF1zWClEdXFkLtIVzdU0XJ/x1xeGBDW4mH+WiIDbFIcHP3zp2yxpqHde/bvuXxRBOhCG2eeI8AG8vwr61tA5ua8Q5l55I7LeSUM6M8dTXagPvKcpJfdlZPjx0Qkbz/otlI9B7Bv2qjX/ifGHsZKhX7e5a39MkrwrJWiRzLjA2tlUqfnB6SjynYx94qoE6W5skzaTkowVIlAmKgLUDd2hRGftNHS/k61KbOJz8GErSpJfpXN7oIjBO4u/p+aYGkwJ2ReZ0fSVuqg4/+4DHWYvhxwu1PqZ6bSMxdWtQHIudeVr6JHzLXBFQb8uTDiPBaweTBLSm6ihg8Lp0xWyLW+8j+zl5lrlT9cdULN5Hb4EWcGuHyddq3jBjk6oM8HnjssVBbSKA+khEvBO1tiYwljFvq1AkDs6WRYE6CbQe2qJ0soQGsN1S/Ozu/mgsIdAyWGtsgnKcSX9IMct3bC6RJY7D8ek6eWgfA2EHz82QxDYxD+looHqDk7DCO+uM2gKJknaGI7Hxdq6y5l3JKqO++nDO7vQ8r4132E2cRNGzpBTsCQC8Evnooe7zFySgUcyFAO/m9xf54dpdaZm1t9LT+FA2XTIhipeZEzRwescLvl6DtC8dXWxCAMGTQwEZfwsMI3MWLGyQzL00Yx4V/SuK4fha3ILHLlYMzPn2D1R+V3pZs62i/gtwo21RCiPkRQQOTo1sQxC6cjRMzjpSQ5AvdczsjJaWO38= X-Forefront-PRVS: 03152A99FF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0301MB0903; 23:P3llMw+44m/3QRURmJhAV1uSWUTaXGDOGHOc7B6?= MWqf/JP/acX+39s1CJB0bw+ldRwjMixmY54QtpmLz9YEaqslFSt/tHCEOggvVTEDf0rXMdba9t2Yqo4z85E7iswOJaMCRZzjStoQuRff2JZjGCdGWTr/GflUgPejaYWkm0y9S71YbcQGPQPkMvVIZU4OIvRZpCVTk5BH7Dlyood8uoJ0kMmaGY4ktFBtRRe05HF8VskL+cQJTBoXaqVozhvBlDJKZ26rLkan9y82ZooM9aVlt+cdWAPgCNBzsh9Xn7C1ovEjTI4pBiioTAaOnZf+sBd3DpWF7aufxLJRF2s4cGwcQokHTtBScMWg61nM5PVl5RzunvB5icMN2I1DCAafbXA0EdgqLQSKBuFqKOFqFT/RL4xZza+XFYgvGouXC91Z8mOmxw5eXFV7TeF0pPi+ZhMV6onE0CkRXau4bIWnelslHu8+RZ1IMaRwBKVjDIcIbWhBBOldQ6eSoLkKYFDeXkVOAQs7wiClD9AE/rgp3inoJbTQtHvB2q0l62JwdDOnkyHAj0TTYBXQ4NQhBzxsIDR00a2vKzYEAVyy7s8Up1bvDXYlyfOKkvT/vhiJ8o/UWJdr68pL3Y8ilPuNCGl10Z0V8RxwRjSwhsmEF08UZ9/KxtYhMM85vYv3ZsLiDNY/cU/WDBzxdLUE0W9vESeKcwc4Q4ormKXD94zb0A9bjE1BkTcIX0KPXYybrG8CoDTOdnVbiES/8fjHPAoHPi5Hp21O4pTCdhUueDxrC5pzeIloswrvZ5TXZn85FTaKrVEjT5gKutJE+TCFMRiTV9NmUs+e+HP8vQOjY4cqrUf8M9doT2CA7r1qi/afLuEFPEQB5Y9ZiuVf2WSRPRlMmfP/H//F4OLLdHCuHcWnM7MXVBB5jZxkcB01lg16r7S6carRP9N9UP79FT9e41oKFOK6JuRwNgQT6ixnq+XMsqyO1+tx5tse5QwqGHsGYmaO9tEoKTY7NeDNubel3t8tPATLMlGRBuOd61e2gYX04chQ0uxxcfJCdbLDx0ph6G+p/rBoVLUCkYzKYUyllW05M9HgzHCoPBrVB07QsqIO8MsEnGbxl1l1ZvtLDCgZ4Zcfx+ovilRC6F/VJIGq28+1AsdIfROpJSse5suIK8q0+4egkDWtKMgcScOPwv4UoB3WxfhSltendXILeuwLVE/DwhljTOyNaOEyZO9PJsq1FhDNqTUlVFi8bq+e+3V7bwYmj7oE= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB0903; 6:7aisua9PdJyXs3m/WtXZcuZ5MTJP2pOovjGbuWU+7FVzX3dqyMz8h5VIb9gbr9KQVLupOh4BtoX7oyy7sxGt4Kc9y5rz/g7F3bbaoQEisW2Im7hAgCbiwBJxoe4nk7FFop9+2YTDqs90Awov+2qxMT3B2Gj2+70fQ3Fti27CvnUg/zQBb0OuCBQqQIOhGAwgSCpZpE5+leG+ll9kJrxY0pMFUGYXSIZKYb6ynY7yZIyrGM8BBXXW7jmZr4qa5WFMnfISSqliBk7wSyHJ7qAQ7ofHBkNSoVBeNndDxQ0QacUM90Q7/GMNYcBtAgwjLGSzqDj/z95qZobFHZZxSce1OvpCv+WfSIQdtkWSZnyGurm/NJRGSoQTtNE2B9tzqOTIxmpsVjP+NjR0ANKhRmzlSHDhfwIb67B8Yay6yo5LJxKH2H66fq3q5IbUFD0Qs8HeaBV5Po3Rg/Gp18R5cnrV5vD+mkywx4CyvS6IobNPyZU3FIXMWlxok5JIHQA/kxpeXuCkJ6ysdimoInhMiDmNfw==; 5:BCRO4NjLbet14AKbqcrp5F7BkBcP7di8XmYqMObNySgkW7CiZYHenc/8LbdHluIUV0wHAGpbSNMFTho1plPoBPR6Q3VQ23tiq965MxZ61ncSQOsMJNwBFWlFEBSN5qwFOXEGt10SU4lAJAafol9weJuEx8qTPog8bw9TeQymhq37gXfhBU1n3sBrwCvHwXc8; 24:34N8D6YG6fqjnBeOa4QcuL332+70Hc9L3ApHwW7CcPfXtQIiEPiHyLc4KatdN4EZydvQeVMLXFfK54E0JtTN1YeOj/MfhAQ/CfN1M5zHV3w= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB0903; 7:xUE+zMKCCBYMohLYAVQIYpMDI9xPQwHGCDtFUmVQwRxbM7pdwB8rqg4+gGfqhHRI9Ia23gI4Edh+r2Pyvj+qU8S1NWZcRuYYNJy7B2K453/hRa7NcnF1cIcXoOVV4iYRAGyoYMKBumglOohX9VzggcYr+LiSiuZ49XD+OSk6n3dkdUMYjBYyjEtPBvJY5MgvbSUmZP9qYY/niSuaHpn4X8PNHVvCncS/wQIanpA4icP6LPrZeMVr/aiCdUuIFfs2bLsp2WprIVqxBo6nXSE3lYhoYCeeVdnRMZ2m23fJSPMaP7PQ/byH0BYsNKOWGyDDe5A24UfkHILDFVb8EvcTUg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2017 09:40:13.7797 (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: BY1PR0301MB0903 Subject: [dpdk-dev] [PATCH v3 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; +}