From patchwork Thu Dec 29 05:16:38 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shreyansh Jain X-Patchwork-Id: 18644 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 03906F95B; Thu, 29 Dec 2016 06:16:05 +0100 (CET) Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0045.outbound.protection.outlook.com [104.47.40.45]) by dpdk.org (Postfix) with ESMTP id B7D2BF921 for ; Thu, 29 Dec 2016 06:15:20 +0100 (CET) Received: from BN6PR03CA0012.namprd03.prod.outlook.com (10.168.230.150) by CY4PR03MB2471.namprd03.prod.outlook.com (10.168.165.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.11; Thu, 29 Dec 2016 05:15:18 +0000 Received: from BL2FFO11FD031.protection.gbl (2a01:111:f400:7c09::102) by BN6PR03CA0012.outlook.office365.com (2603:10b6:404:23::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.817.10 via Frontend Transport; Thu, 29 Dec 2016 05:15:18 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD031.mail.protection.outlook.com (10.173.160.71) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.789.10 via Frontend Transport; Thu, 29 Dec 2016 05:15:18 +0000 Received: from Tophie.ap.freescale.net ([10.232.14.87]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id uBT5DOI1010218; Wed, 28 Dec 2016 22:15:15 -0700 From: Shreyansh Jain To: CC: , , , , , Hemant Agrawal Date: Thu, 29 Dec 2016 10:46:38 +0530 Message-ID: <1482988612-6638-20-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1482988612-6638-1-git-send-email-shreyansh.jain@nxp.com> References: <1482180853-18823-1-git-send-email-hemant.agrawal@nxp.com> <1482988612-6638-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131274621187638282; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(336005)(39860400002)(39450400003)(39840400002)(39410400002)(39380400002)(39400400002)(39850400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(2351001)(69596002)(2906002)(50986999)(4326007)(105606002)(86362001)(48376002)(50466002)(77096006)(5003940100001)(106466001)(68736007)(104016004)(6916009)(6666003)(97736004)(189998001)(81166006)(38730400001)(110136003)(5660300001)(2950100002)(76176999)(47776003)(81156014)(8936002)(85426001)(36756003)(33646002)(8676002)(50226002)(356003)(8656002)(305945005)(92566002)(626004)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR03MB2471; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD031; 1:SWzkWn29yz6CvViwQ6TCIkseepsd2E8ek5e/dUcE+U4c5AbFTP+hkLMS8LbLAAcgnUa/J5hYSWSf3gGEDyEPJ0EOGIiLzKclYdMvrtywFe9JMdqHk6Hs4DgKx1WxXt7pSeaXK1cKFE/NqNf03XtsacaKWV58BYEAbNaO7Hd9MyLIrTA0HbX39T6CBzksHITPqh77HKyyTju6Lpzj8lExW4eV68lBzUsp31/Z3h4eIRFqTpNGACmvnUS9rCS7knF9wQMRwLPweTeQQ13kb54oQedRtfTyCHp7mJVingLFivOlr9wPzkEozYPwfjMx/RpF+7CJFiw/+YocBInDgkr8848tuDDTn03I4W0WXHk5Fx7lQIlWZhbt0p5bWhcPlZ6YvAUEtZkc69At6rHqLqWERJEE/O4BwNwFGkS3X89vqQNNkUDKa0R/h364riiBl75W0dMp2gu66X78cFtJn1uTMvH8C9BjE+tmwC0mQDmp4y36kOHpAa8F8KkqvkknTFcbFqfrbecGcd2DZpUh1ZTb25U0cWE/cfBiJSW8wtUNlNUgLZJoZpxCrvkXiJEmLzKXRGChDbGJ/q2jz5cqV6K+CEVxRr98Oulcrec8SAz6zQKrpeJUqLy0HSnp4WxGQJruR3albzd2dgiVX2V7ebc2lGoXyg5TkaDlXkAfY5EmSeLrwU9ScbiwBmBaw/zv91KcJOQA/qycVozznyCPXyiAsv/6RVOIlZ7OJ19v92hW3V/rpHkIc26+DqXlJNgJ5Cm13W7expJzbtAVCC7G/Sfx9g== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 944bef75-68d1-4e63-62a9-08d42fa9ae5e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY4PR03MB2471; X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2471; 3:YYSEwAGFF9hH1T20ICVvtCuhn5H/opagbWg020ThaO8xPr8dj4jOe0aNeOsEJONE80Q11C4TvLAlWjFt6rEPeJ90jqJMl71XCanKCz9y5+YGHw/JOsT16UnqHIIMBieFIu8Jp2Ynkg//DqLJowwNx9exjVucL/CGNFsUF32AwR5FZwraH/rOHbWkQX8z1qZ9Wqj/7BaEbYrOtiWcFwLcI2x+TySKHTLycTw2+Ijp4OwPq6fOu7cx6lZ/8onGo6GRjQznhWy0PDo/KF+EsOGi9rgkcZUKBkxhd/YEfF+s52SjfaaWW/RT5EIbcngXWdBZ8+nMjHDMk4UQXgTg3b8jpFry+dtq+mtDZM1occSZZ/o=; 25:GgNHpyCwn8va95POsbrvIEXIFgkTyuvam1fh5c6E4L0a07l68pfnMxXMyyqLXm3wYhcUPF3yR3cfEKPvZkD0Jg8aNiBy10fuzrpXhXvT4JCjGbbIOSZOl/CMHyDstNXSxyOeQtF/s7Keg/In0DbJERNW3sGP9NxudZTS1inw32T9u2DUUN4Vt0Zhi4J9bs0B529g9Jdq0E7y/cXef5HragAIpDtNzsIc2CYDj0TYL2B+/A9p/dUam+wmxzXaXuOSi2XvWZkL4jCj5l4DjhWkOktbDUnXLVSUzbdEPc8ps13bbiSVPxJ+Lm/xBZqtbM+LSpwyu4EODxYwOx3/YpYYzhn2qNsfMfuv3Vt2lWbrpDiVSP3uZol7kIQz6vFKpQa6wT9KwJg9VGnJcwltZUBatwI56ZWuO/ZHtGbQXvW/1cZIExnKpOcVSca82rOMOW/x3lDKfbH1VYbGKOmhrHPq8A== X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2471; 31:71TB8oFf1lkLFgd660e3yZlTQ6TZJjA/tGa6K71Z0cc9r+XBSQgfG/L8wWDpEsxkEpYhp1xyjRuzg+wCNqG+VuZ6TiQ527mHpotZmp8uFoyGfQOBYLi5vOyNE8JFI/ezHYSLGx+cXAcJidXrOM95AQnNSSPQnyaumZBE2arWH1NfwCeqQByon69CnSFyyC+Qyzc30DHOYDtJY8d3haNR/v8cHbt5ej6QKWo4FmKaDcVI2Lgs1uy/T6uQ1nv9dXVAE3p0FTzF+ZNhHq2sDmERvA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(13017025)(13024025)(13023025)(13015025)(13018025)(5005006)(8121501046)(10201501046)(3002001)(6055026)(6096035)(20161123561025)(20161123559025)(20161123556025)(20161123563025)(20161123565025); SRVR:CY4PR03MB2471; BCL:0; PCL:0; RULEID:(400006); SRVR:CY4PR03MB2471; X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2471; 4:CaeLw5JJYpF8QRBA9Zl1ut2IUXevLaue20wDoXEYJVxAnvR7LdEL7Jo4vx4B9Xig24n3xtaBcf6Zbz23fX9zh35zR4dVQ2UiLu1kuFDTTUTQqZsmcDOdxaG7XRwgH3eNPfjBgWgVQAGYX52Vo+2KvQn0iEp0HUfhFTlaAcZKXmY7n9bCEZCXDMupGBTR2jkVJqs1l6iwva9SsfwCmhE6m2uikLn8qfai9MjTc+cIf+del6+DGupERFvaCxWM0TtjL6cEloG23CXE0DcNQVGna48j2Pr7/SDeSYVcIEE32hTk54Rx79jPWKYkJErAaL7/uGWguCcymhd77Hr4iqcDjVrnMvVyLvnnQIV0HT0lyz4FRP9GvxhXRut+RL4lZsJ+HgCAZTqxI+oNMo2vqHVBiE6qYUb6bs2ipKsDt7+h7l/6PyOlO0AkEq78O8Mg/3u1ZxKyZXAYLZIhnVdaA3wDs9uKcul9rn69msXyP6hwCfsDXb/Xi71scA+fNYpvHfFK8afvGKSCVgFU0IP/xy7HNI/P2XSvA8rLuaakzH1WZfyDVey1YOBNH0UQsNrHCfTQpjfSZlyP2+b+1bJEFTRiQNbnuZORNMuN6cTYCoBOcL/QpSXc/KarPGrm9CeK0CKirqysnt1hf5E3BU7j1IYZoQ4DaA2Ux60iLGeo9bBQ8lzVG4dEtbM30JbU7R+gRhPLcyKOjv0llmSD0Di/8CNDyPZoC60uEObbQ3QoCmjJrQWfuYmxuOguABIniyRLu7b4 X-Forefront-PRVS: 01713B2841 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR03MB2471; 23:b3t02WKVq3v3b0+tGpnW41DwT3Ivir01kwKkaGb11?= BrpOHPkotxklhPHyM+e2LXIOdiOl829ODymQlLQfB12s3lcudQ3FDFGnb8j5UdLPibeP7XbffclOUpHaS8VFBmIOOH5QGAZkt5nqIexhGeiQowxWBjYL8WAMz4Z2aqASJ0IoImGNftR5C8d2ac57MVdSqSJCyzdEJ25QyQ1HxGnMlLWR6pdpVqmuew4Phg8xXYqIf0aP5DfizaLguLhEqoGtohEgNA+ceB0ry2Fccc2LhY55BkdCF9iloC4Xu6dLRJQJ/droytGw2JbUH+LjEJIPRjvJWs+Cix45QrizSEBCCAkY3IgdZbqZLMf1Mj6BqXMERhA8YwzbRhXaWELZ3nS+k1I8azx6fhgoyKT22+fm8yExLLNYIIsR8vdUa8nQkzGud6EddfjYGZHlMvGrcTXyUKma68exHRllx8S9GHsX1nWuZfzwRF+QytgGvRYDg+3+9CmmWvm/9uz4o6HCPs696JrmhcaSy6dAS9ELCk2jbr8YFNawDuXSlbj7w1b4E+U2iwqQvfU42nr0dakFlf88ThSru8epyeq3pMVihlT+fB3Bq3D7OWMxjKEMw9yLjD+nYFcB+hcEdnI7hvIfDETEk1Y+H1/9++IHjHqGsCt0OAYSR1VdopA8RCulNbAsjIqDQCuMbptE5r+Ze7CFLwrpgF0qSSD7KecDNgpZFdqfHWJd8i0Dh8HBA8TZZlC4sM0yFZgntmSZ+dyjfBY4VIkLP2ikAguHW/DPIWFptee31dZTNlFtoS0vQWpLWBwbzEsU3t17uggOW3d1j3fm3PFlCkEOW/pLe8IOw3zWQ9w/GI/A81MUvwFKnLsSuWea1YbZbD+Uw+lDjCvCpNjRjW5TlF2J0DcCmGWBtRDArjiCNyp/22KUC8LFGjEHns3dGJp2FXWibMbVbV6POrmVFCuJpBkgBmr0Y7KbY/6oew1033h9KbgZVdp1S8ZHYz3xZoW6nvmYH4h9k2UtRAMSwAE4SqXBZM18TClLaxIJR9W7mStEH3IwqRUFRLd5ReZnjz6C7w1RY5ldaNW4Mb1mwU2MrfF7+N3HMqvdtShndArJ3j3xiFJeeScI270OOjToID4TKLy3oA4Yhcpc4Z118YVQGXDiVKNKq672kpAMSEd2A8aZGBS1lCiQIWV5RydHEL+iDhHCcwplJT5dH5ftZcwaJJ4fBollEqZICWHHpRVkXEb0d3twd+AegemFncbaaDwaTlqzeYyxplJNgeGr8luKsfI9EVDsmkT2OGDFU3c8XgRnIxSYkIkeCi87bG8WBI= X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2471; 6:0tH8spoO8YVvr+tCHpST1o4P9qiQsUJGBKWdCtsOUUKIKHdXm5DyYuTyNVi4RYqzsq+HtRk0HGmZD96DVasDqcznS2O3Kmhp5AFPsCs8DAtIycWZoqc5z2B/I0vZiVKK6KpHk7F7CPfMjirVUVNG4jh7dVSE35s1p7sJiU0mat98vu2Z+CfKAFMgDe49n0Cdhr27oWZbyrFLb4SepUeacPJk3FQUMyk4hro/J4gvfdHcxykrF2cxh/noZ8RNrWjRcimNMKaFRayALgVA/Cw8qOpBx6T3+q13D7Rh6U6Vlf42wRKilUiz4aiX6rSEs7489hQ26BPeSs+XEZ0lGG09YuPzVJCh2G14/ot9fJ3mkyzbUvfZWykfmyTMi3Y7cgHpg4wfqNNSIhwKIf386ktSLqUUwG7lnczhWdgGG6ceteiFSzQGYdvpxXtjpO8KHs0H; 5:sz+WKDRLVS12xyoNWYN4Moysxds26YAz+9Y+m1vPfBh2lJrIFZbRbgN11m3+RZ6NgwkcJ7lHssiQaQF40ACXGm8sFHKbzw4yGt51b9WnhZd9UREwE3MRgVwt3DMEglnBJSEV8I2fWLihuPGHi1uYrWRsAXOt5H8YwNY+7D0L2SILU94bZ4Vsvu+0Cp3CeWdp; 24:w7PSjHbxyHtPWiuE4d/98C5oMqIcJblw9AaFwSbvfPj/bMw9bcSEbDHzbK08zZOuBscLXSPIjPVg1aLNx30Di1+drgViYB5zSxEUh2+26ko= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2471; 7:cfVIJsxWcBveJKW4pqHpRYFP1aWkIsP2NtzVUTNHi+L9u2httPLdw0q8YztjHY7OmO8WkLcOs/7US0yOOOeXKnyXMyzMHeupR7BF80K8kRnVXpU6EIF/bt/VlNqhe7Z1laVKPYYHeca4DP7R3vqX17QY5NRvgAlxMHHnMXotgFiU9TkXMiZjzQkbO17Z5fwpc1U6nUmuSDA2OX5JHx6bigno92QgJGhCzbmZIGFaJyOAlyJg08xDwXz4gYgB/mCke1S8sE4VEWLJ1lQxnVjv/I9CP1mKe6TXSpe0fALsUXOeWMyOhYcg6DQ4ARK7VBzwEOitPrPgb9WfGQ3oox8JGtqLeffv91bBLBqkeZ3kT9aRvnbSBRPTWXLgwt1WijlwJmJhPqOhsAon2dKvkYQMd94iunAyRy/5X5ld0NM1pl85JYdJBa7UgZzLbkuD7/GFa58q2i2DY6+tq2vV3iSHLA== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Dec 2016 05:15:18.5142 (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.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR03MB2471 Subject: [dpdk-dev] [PATCH v3 19/33] net/dpaa2: add rss flow distribution 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" From: Hemant Agrawal Signed-off-by: Hemant Agrawal --- doc/guides/nics/features/dpaa2.ini | 1 + drivers/net/dpaa2/Makefile | 1 + drivers/net/dpaa2/base/dpaa2_hw_dpni.c | 287 +++++++++++++++++++++++++++++++++ drivers/net/dpaa2/dpaa2_ethdev.c | 31 +++- drivers/net/dpaa2/dpaa2_ethdev.h | 12 ++ 5 files changed, 328 insertions(+), 4 deletions(-) create mode 100644 drivers/net/dpaa2/base/dpaa2_hw_dpni.c diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini index 0b59725..20152a0 100644 --- a/doc/guides/nics/features/dpaa2.ini +++ b/doc/guides/nics/features/dpaa2.ini @@ -5,6 +5,7 @@ ; [Features] Queue start/stop = Y +RSS hash = Y Linux VFIO = Y ARMv8 = Y Usage doc = Y diff --git a/drivers/net/dpaa2/Makefile b/drivers/net/dpaa2/Makefile index 61831cc..657ee2a 100644 --- a/drivers/net/dpaa2/Makefile +++ b/drivers/net/dpaa2/Makefile @@ -57,6 +57,7 @@ EXPORT_MAP := rte_pmd_dpaa2_version.map # library version LIBABIVER := 1 +SRCS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += base/dpaa2_hw_dpni.c SRCS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += dpaa2_ethdev.c # library dependencies diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c new file mode 100644 index 0000000..c95c083 --- /dev/null +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c @@ -0,0 +1,287 @@ +/*- + * BSD LICENSE + * + * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. + * Copyright (c) 2016 NXP. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Freescale Semiconductor, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../dpaa2_ethdev.h" + +static void +dpaa2_distset_to_dpkg_profile_cfg( + uint32_t req_dist_set, + struct dpkg_profile_cfg *kg_cfg); + +int +dpaa2_setup_flow_dist(struct rte_eth_dev *eth_dev, + uint32_t req_dist_set) +{ + struct dpaa2_dev_priv *priv = eth_dev->data->dev_private; + struct fsl_mc_io *dpni = priv->hw; + struct dpni_rx_tc_dist_cfg tc_cfg; + struct dpkg_profile_cfg kg_cfg; + void *p_params; + int ret, tc_index = 0; + + p_params = rte_malloc( + NULL, DIST_PARAM_IOVA_SIZE, RTE_CACHE_LINE_SIZE); + if (!p_params) { + RTE_LOG(ERR, PMD, "Memory unavaialble\n"); + return -ENOMEM; + } + memset(p_params, 0, DIST_PARAM_IOVA_SIZE); + memset(&tc_cfg, 0, sizeof(struct dpni_rx_tc_dist_cfg)); + + dpaa2_distset_to_dpkg_profile_cfg(req_dist_set, &kg_cfg); + tc_cfg.key_cfg_iova = (uint64_t)(p_params); + tc_cfg.dist_size = eth_dev->data->nb_rx_queues; + tc_cfg.dist_mode = DPNI_DIST_MODE_HASH; + + ret = dpni_prepare_key_cfg(&kg_cfg, p_params); + if (ret) { + RTE_LOG(ERR, PMD, "Unable to prepare extract parameters\n"); + rte_free(p_params); + return ret; + } + + ret = dpni_set_rx_tc_dist(dpni, CMD_PRI_LOW, priv->token, tc_index, + &tc_cfg); + rte_free(p_params); + if (ret) { + RTE_LOG(ERR, PMD, "Setting distribution for Rx failed with" + " err code: %d\n", ret); + return ret; + } + + return 0; +} + +int dpaa2_remove_flow_dist( + struct rte_eth_dev *eth_dev, + uint8_t tc_index) +{ + struct dpaa2_dev_priv *priv = eth_dev->data->dev_private; + struct fsl_mc_io *dpni = priv->hw; + struct dpni_rx_tc_dist_cfg tc_cfg; + struct dpkg_profile_cfg kg_cfg; + void *p_params; + int ret; + + p_params = rte_malloc( + NULL, DIST_PARAM_IOVA_SIZE, RTE_CACHE_LINE_SIZE); + if (!p_params) { + RTE_LOG(ERR, PMD, "Memory unavaialble\n"); + return -ENOMEM; + } + memset(p_params, 0, DIST_PARAM_IOVA_SIZE); + memset(&tc_cfg, 0, sizeof(struct dpni_rx_tc_dist_cfg)); + + tc_cfg.key_cfg_iova = (uint64_t)(p_params); + tc_cfg.dist_size = 0; + tc_cfg.dist_mode = DPNI_DIST_MODE_NONE; + + ret = dpni_prepare_key_cfg(&kg_cfg, p_params); + if (ret) { + RTE_LOG(ERR, PMD, "Unable to prepare extract parameters\n"); + rte_free(p_params); + return ret; + } + + ret = dpni_set_rx_tc_dist(dpni, CMD_PRI_LOW, priv->token, tc_index, + &tc_cfg); + rte_free(p_params); + if (ret) { + RTE_LOG(ERR, PMD, "Setting distribution for Rx failed with" + " err code: %d\n", ret); + return ret; + } + return ret; +} + +static void +dpaa2_distset_to_dpkg_profile_cfg( + uint32_t req_dist_set, + struct dpkg_profile_cfg *kg_cfg) +{ + uint32_t loop = 0, i = 0, dist_field = 0; + int l2_configured = 0, l3_configured = 0; + int l4_configured = 0, sctp_configured = 0; + + memset(kg_cfg, 0, sizeof(struct dpkg_profile_cfg)); + while (req_dist_set) { + if (req_dist_set % 2 != 0) { + dist_field = 1U << loop; + switch (dist_field) { + case ETH_RSS_L2_PAYLOAD: + + if (l2_configured) + break; + l2_configured = 1; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_ETH; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_ETH_TYPE; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + break; + + case ETH_RSS_IPV4: + case ETH_RSS_FRAG_IPV4: + case ETH_RSS_NONFRAG_IPV4_OTHER: + case ETH_RSS_IPV6: + case ETH_RSS_FRAG_IPV6: + case ETH_RSS_NONFRAG_IPV6_OTHER: + case ETH_RSS_IPV6_EX: + + if (l3_configured) + break; + l3_configured = 1; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_IP; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_IP_SRC; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_IP; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_IP_DST; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_IP; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_IP_PROTO; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + kg_cfg->num_extracts++; + i++; + break; + + case ETH_RSS_NONFRAG_IPV4_TCP: + case ETH_RSS_NONFRAG_IPV6_TCP: + case ETH_RSS_NONFRAG_IPV4_UDP: + case ETH_RSS_NONFRAG_IPV6_UDP: + case ETH_RSS_IPV6_TCP_EX: + case ETH_RSS_IPV6_UDP_EX: + + if (l4_configured) + break; + l4_configured = 1; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_TCP; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_TCP_PORT_SRC; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_TCP; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_TCP_PORT_SRC; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + break; + + case ETH_RSS_NONFRAG_IPV4_SCTP: + case ETH_RSS_NONFRAG_IPV6_SCTP: + + if (sctp_configured) + break; + sctp_configured = 1; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_SCTP; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_SCTP_PORT_SRC; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + + kg_cfg->extracts[i].extract.from_hdr.prot = + NET_PROT_SCTP; + kg_cfg->extracts[i].extract.from_hdr.field = + NH_FLD_SCTP_PORT_DST; + kg_cfg->extracts[i].type = + DPKG_EXTRACT_FROM_HDR; + kg_cfg->extracts[i].extract.from_hdr.type = + DPKG_FULL_FIELD; + i++; + break; + + default: + PMD_DRV_LOG(WARNING, "Bad flow distribution" + " option %x\n", dist_field); + } + } + req_dist_set = req_dist_set >> 1; + loop++; + } + kg_cfg->num_extracts = i; +} diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index d511d7b..9066aa5 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -116,7 +116,8 @@ dpaa2_alloc_rx_tx_queues(struct rte_eth_dev *dev) } vq_id = 0; - for (dist_idx = 0; dist_idx < priv->nb_rx_queues; dist_idx++) { + for (dist_idx = 0; dist_idx < priv->num_dist_per_tc[DPAA2_DEF_TC]; + dist_idx++) { mcq = (struct dpaa2_queue *)priv->rx_vq[vq_id]; mcq->tc_index = DPAA2_DEF_TC; mcq->flow_id = dist_idx; @@ -142,6 +143,7 @@ dpaa2_eth_dev_configure(struct rte_eth_dev *dev) { struct rte_eth_dev_data *data = dev->data; struct rte_eth_conf *eth_conf = &data->dev_conf; + int ret; PMD_INIT_FUNC_TRACE(); @@ -153,6 +155,18 @@ dpaa2_eth_dev_configure(struct rte_eth_dev *dev) return -1; } + if (eth_conf->rxmode.mq_mode == ETH_MQ_RX_RSS) { + /* Return in case number of Rx queues is 1 */ + if (data->nb_rx_queues == 1) + return 0; + ret = dpaa2_setup_flow_dist(dev, + eth_conf->rx_adv_conf.rss_conf.rss_hf); + if (ret) { + PMD_INIT_LOG(ERR, "unable to set flow distribution." + "please check queue config\n"); + return ret; + } + } return 0; } @@ -184,7 +198,7 @@ dpaa2_dev_rx_queue_setup(struct rte_eth_dev *dev, dpaa2_q->mb_pool = mb_pool; /**< mbuf pool to populate RX ring. */ /*Get the tc id and flow id from given VQ id*/ - flow_id = rx_queue_id; + flow_id = rx_queue_id % priv->num_dist_per_tc[dpaa2_q->tc_index]; memset(&cfg, 0, sizeof(struct dpni_queue)); options = options | DPNI_QUEUE_OPT_USER_CTX; @@ -374,7 +388,7 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev) struct fsl_mc_io *dpni_dev; struct dpni_attr attr; struct dpaa2_dev_priv *priv = eth_dev->data->dev_private; - int ret, hw_id; + int i, ret, hw_id; PMD_INIT_FUNC_TRACE(); @@ -416,7 +430,16 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev) } priv->num_tc = attr.num_tcs; - priv->nb_rx_queues = attr.num_queues; + for (i = 0; i < attr.num_tcs; i++) { + priv->num_dist_per_tc[i] = attr.num_queues; + break; + } + + /* Distribution is per Tc only, + * so choosing RX queues from default TC only + */ + priv->nb_rx_queues = priv->num_dist_per_tc[DPAA2_DEF_TC]; + priv->nb_tx_queues = attr.num_queues; eth_dev->data->nb_rx_queues = priv->nb_rx_queues; diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index 5f599a7..d24fcc6 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -37,12 +37,16 @@ #include #include +#define MAX_TCS DPNI_MAX_TC #define MAX_RX_QUEUES 16 #define MAX_TX_QUEUES 16 /*default tc to be used for ,congestion, distribution etc configuration. */ #define DPAA2_DEF_TC 0 +/* Size of the input SMMU mapped memory required by MC */ +#define DIST_PARAM_IOVA_SIZE 256 + struct dpaa2_dev_priv { void *hw; int32_t hw_id; @@ -53,7 +57,15 @@ struct dpaa2_dev_priv { void *rx_vq[MAX_RX_QUEUES]; void *tx_vq[MAX_TX_QUEUES]; + uint16_t num_dist_per_tc[MAX_TCS]; uint8_t num_tc; uint8_t flags; /*dpaa2 config flags */ }; + +int dpaa2_setup_flow_dist(struct rte_eth_dev *eth_dev, + uint32_t req_dist_set); + +int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev, + uint8_t tc_index); + #endif /* _DPAA2_ETHDEV_H */