From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0046.outbound.protection.outlook.com [104.47.40.46]) by dpdk.org (Postfix) with ESMTP id 573BD5911 for ; Sun, 9 Apr 2017 10:09:40 +0200 (CEST) Received: from BLUPR0301CA0042.namprd03.prod.outlook.com (10.162.113.180) by BLUPR03MB389.namprd03.prod.outlook.com (10.141.78.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1019.17; Sun, 9 Apr 2017 08:09:38 +0000 Received: from BL2FFO11OLC012.protection.gbl (2a01:111:f400:7c09::187) by BLUPR0301CA0042.outlook.office365.com (2a01:111:e400:5259::52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1019.17 via Frontend Transport; Sun, 9 Apr 2017 08:09:38 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; caviumnetworks.com; dkim=none (message not signed) header.d=none; caviumnetworks.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 BL2FFO11OLC012.mail.protection.outlook.com (10.173.160.159) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1019.14 via Frontend Transport; Sun, 9 Apr 2017 08:09:38 +0000 Received: from DTS-02.ap.freescale.net (DTS-02.ap.freescale.net [10.232.132.223]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v3989Aok015502; Sun, 9 Apr 2017 01:09:35 -0700 From: Hemant Agrawal To: CC: , , , , , Date: Sun, 9 Apr 2017 13:41:08 +0530 Message-ID: <1491725483-6619-8-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1491725483-6619-1-git-send-email-hemant.agrawal@nxp.com> References: <1490362538-20854-1-git-send-email-hemant.agrawal@nxp.com> <1491725483-6619-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131361989782840255; (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)(39840400002)(39860400002)(39380400002)(39450400003)(39400400002)(39410400002)(39850400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(9170700003)(356003)(104016004)(5660300001)(86362001)(6666003)(6916009)(50226002)(47776003)(8676002)(81166006)(8936002)(2950100002)(5003940100001)(189998001)(33646002)(48376002)(50466002)(76176999)(36756003)(50986999)(53936002)(106466001)(4326008)(110136004)(38730400002)(305945005)(54906002)(2906002)(8656002)(85426001)(105606002)(2351001)(77096006); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR03MB389; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11OLC012; 1:vFHRFGGxba22YvN8KB68HkGyUA5kOB0rYT6FXl6qcrrE4KMUi/37cThdy+IsYu0GiVdAurmjHGjQklP+ybb+B3jPqSgkL472f/DQkZGemLJx9dOV4dRUZ86Wyd+U2dMTq75PSRmWeFm3EXmhqk1yWbF4K77h8pPD4VQCqp5vtwbyJurpoc86OLdf0uQot5LWsFcJWTkz/h5ERw/hh8WdHXBilkwi3qKC8T5xbUDhGPRUJXzTfB+R88qgUpHOh94ysBN4ft2aj7ru6od6M9bo7yrIZFfFUUZcerkZt1KYPpwCLKjfD7eyGU9BHq7H4BABJgtibkagawHE0q9tPTS/cnQpZgqvofJPvqyuhdxw9gxQjSMOeZODIgZ8DSB1EG23LiB5jKWY7v1sqUBKe7XgWHk9n5f6mXXKurPIqBUbf/85w22PIXIaYHUO67AXL3uekLPexboM2NyvC7iYibVqN0Co3U820cxtPqwCbyyoAJ8LJPfCn1QEelB59vFy6FzSKDhY8jIGpEdDRZO6VdS3Ps1VCQGrTxoVN1D2z1hBwVz9YgdLyp77Wr+PSAxSxvzvs8cXyw4kjbHk6M8Jnl4FhSsi3soAyUZRzroYhYptDllLKdkckl8pQzoTtQg1kTicnw8TlECHFIOnwbs/lzuY2QfZP8QJLEtvHq119gOpn+k= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 8fb2a55a-e563-4d5f-4262-08d47f1fc473 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BLUPR03MB389; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB389; 3:QHrJtOs7LZhsz9ZBJIupfOpjUeSVZTo6LQfBeLBhKTmrRgxXdxAxZtd72rH3FSLL9cOvBZBbjbTMrPpcrE5pquTO6/6GQqdKK2OfzmX5q6iFivTW+yrmQlQ0ocrQWz3sVe33Qnh3jUHFgU9EtwXpizZe55hC8iwO70BqAhjegYLTcRvTH1VTyHAAci4PBRZVBbOoPzJjsCMrOVxESCxwOmDRq9YiIIl/oZZPoSFrsVvHkDmZ5c8zLTdP9FJYjHvLNteXnBFcTKWPwZwnHYTw5o2slsv02NM1xk8OBpZ7w846XZN4pFp4WKc9LhG1I/uxREXvBJq5DEdTROuARR+J7RN9bNubPSEtK4n+uNNp5MeNgmOe3HiL7kUKJMNpb2fq3kuIDe0ky2KxZl/tZAe+OSv7f0ehrXhd/jbkXHGxcS30I9bQYKDDiPJaY29xI9iZ; 25:DPluHbepKsno1NlfDWMiidKAUEzNtbaL5ZYAG8QOMWrcxweysmNXG71GwTPv2IWG5dOp5aaukDhLVYVUW6CmjcRHPVXLSIJo1EbN7XMhMK6SaXL5j2ZDXsqYLPQzyoKdGy5p4PTTv/PSxGQ+y6qONlXGHzpshdL01eME04do1OmDz43OO6LoDG4uDTIRkAe8dkooK+BpJWCTCkV4wZqvYG1BfHEBEOhsmzPJ5E71X6fi5toEGBTSI9vfIhIrHvnrq2vkJB9Z/lV3VQU5IB77mwh5X/4co/8o60BNWO9dIWXdbIljndf8OraHazTbU3lnPDd4dYFtK5TO9lmTvXgcPtAKrWtNM7XS8U/qtFO5IiCXZbVMoKhSmyUUNL4vEMtGaqMEldgRugx8XNuE0HZIaoM1cUiSo6mz8BTIXfx/Zg1GwElIU6GlJm0TdKicTpt+CmgkQuFEDEylgskyBMgjGg== X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB389; 31:Gtx6ff87cO++BKIz53vL+a5BRFEdgZydEjFJrAgTUTkIZKDchxfTmJPkfqBs7g0Pb2oduYa7ozCkFFjiPAHx9UByqWiKWIqy7MscUBIst8M0OGUGbswBTU7jThaZgY/n+Fi7i1AMiATpRVnG/ME43mETomgyATS6kWfBx/X39PNMHGfYm6zXsbwOvt51/mXNNXGjhj7LBte7XcFxVNIM11JaqlPKk/1ge+cHsOpkfedhxbKWDw+hFgHkt1VSgGi7flwmiEMoUUONfm6/jS3+zA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13017025)(13018025)(13024025)(13023025)(8121501046)(13015025)(5005006)(3002001)(10201501046)(93006095)(93001095)(6055026)(6096035)(20161123563025)(201703131430075)(201703131448075)(201703131433075)(201703161259075)(20161123556025)(20161123565025)(20161123561025); SRVR:BLUPR03MB389; BCL:0; PCL:0; RULEID:(400006); SRVR:BLUPR03MB389; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB389; 4:Hc4odk98DjAp/kAfJwGbcpVPtqroIc7B5yfrCPrl1B9g+TEfeWGQF57XnGpm5xHuZ7we9ftd73Cez0HomIAfvGjxgEmiNtYlQMqcVS5WYO2B0Y/qFKqMyYpl9QUzd/PSOpbwQmigIXkRfjVKCvG0tZPMAKbmB/BzKOM1T/ID8XRLnHuTFKE7D3snveqLmFnGGc75ejvETTmUOz+9BoJQXAr0FSTNZ3bsM0Aa7eVWA+HPoRPnSeqrTZ8IeEc244yN1LAB19QAAKHWcZYB+M7qSU3Ee8Iv7slTkW7UYRZwf/MHSCysjpUoZZqEO5bHyK2QcVwPfPlF0gQizuZVePVRG2xKob22xlsL2qllbKhoMgqXtZkXZCEh0N76lJtdVzXMSr98MEEil3P3YCG5/6HQK0GvzZQEWlQtkResLTJGYWSHjG45Z1WHZdQ8+GYGnKYhlATYhHWBRCZw9JQf4A6pF1P1PMnDW+eLWj+FIYpkypmudKKEhVnNGcNwNDlEVPV+f2cBQb4SaRn9udrhgsBFAbJc44AX9fEpIbUdsQ2VfdkTXalTTxycC49WHmSpcFvpy9l1A12dve4WkQ0sns+/5c7wo4CdeE9B40RAPYp5ry3IRqelN3hLRJd482wTYbSqU5nl7QUIf+xrxaTePuWg0M3I2A13Y576tG/ztTI4gHc6fUPHNmjqRTvylDrtWLsq50lc137I+1Gviq3b98xYHcJY+8gc1AlaWv3Ze5fzeyetD6IpzpQrz70jcQb2TxvNKOda1tDRIap05CHrcNwIT7vNUi6yuXLa8F7hCWI5ZMN7hLQXGu9r+j9cTHlilFtAsNkoSDmtGasqKMQBpV1S9ZrFz5bz9TkRLrOHEBzi3hjDcZ1QXhvgH3prLZdqmRG8LJrmrfdKBYnnUn/s/3mhWg== X-Forefront-PRVS: 02723F29C4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB389; 23:A8EYqgXNv9Sv84W+Oi+jqdjg7OQTWpZk3p2FKrWt6g?= =?us-ascii?Q?6Jl6ABTaHrFbPjZ/Ss5wlRXaBn4r9mLSZyw1IFW/sDOeb/Rxgs/LnV6e5R9X?= =?us-ascii?Q?pbCesLmTQ0pKU4KxFfj+MEkDm0DKOfFaVa51RWrcScbb3Mk0dRiwUJc8Ex06?= =?us-ascii?Q?pv+oAmZm0JeWRbbL6KZEFT+9oN8ScRQUOq+vJ6dOMjPFuWuFxz7RytmfC8Ax?= =?us-ascii?Q?zMltt3i6CF/bb4YpTswNOqbouNfdqXEiAuJQfXKNsraQCMHH3i/pkaTd6JE8?= =?us-ascii?Q?Lk3KQbvwoxWvUN/NMxbfiKwbA+dhc33xPYhag0FinJ47K/p7W7drrWEjne+o?= =?us-ascii?Q?6xkBY8YCF0xTUx4eZ+ELyjZRxtyxvMNcpSFyki66QsrD3G2mVKIraZnpOBOp?= =?us-ascii?Q?SpcVc+jFlzk9PDSa+458QQodftnTBiy2lEugsiEWk0rGFM+JT+sGeETth8/g?= =?us-ascii?Q?02ruFjGKOOMLSPkYVENzdA+sqg7DUrIXyHOZaG3ZXDF1UhiKpCdndI+vYxKs?= =?us-ascii?Q?Dghw7BGfI54p8zeEd48RwGySBIwdnkHya4yeSRrvRxgWeqBlAfk9kqqIAMsH?= =?us-ascii?Q?u3w2mCqgyD6NzGR5yHushGnk3I6f7GrDqUT3vgYmPe35FE1scFOjgYBa7hcZ?= =?us-ascii?Q?Ch25blfp15UyAI15cI2Cer7qkhMDZEvq6gLncFm/GT3zJqQKLmEQ/gnvCDGx?= =?us-ascii?Q?jYV1/24eTJ9yjkrvBw66/r12RsTCGwuSkYoHmuRm+K9++a3hM2u2hP8/aAug?= =?us-ascii?Q?1f+BH8bFBYiost/101QHbqYqGBeZ7NoXjWo17awmzqqfV50K941bKHYxm+Gg?= =?us-ascii?Q?7IT81UXNuTFVYKxQJbF110IyMEt56vqcfNvy9q6EWNb2GPV3k5Km06lLcS0l?= =?us-ascii?Q?dRUOOpVG+1X8aE7GfG11B2V+BzkwJ3FFqMI6t0dfaMLmDnenel1kG4Oy33aS?= =?us-ascii?Q?OsKgMTGLYjjCRMQtev39BPkQIKGS41sMd30y1GIlm3O7S1MUvvDUYJBZcHM+?= =?us-ascii?Q?vaLWrW2qEE1LE89p8K7uTjP5MeJ3wV8ZiW7mhYo/ZgRiumGdr3uVITl0Zy+S?= =?us-ascii?Q?NHdM8YBifYnqdLfSoSzxHgNjLHYkJTW3agrSUGt1HP6A9WdxHbi8hlGub7qh?= =?us-ascii?Q?AjbjouBvAcqm7WJqNDU6VZsOde7ZxxDyP5hs9/vhb2sbrGUncGhV4zcp4USQ?= =?us-ascii?Q?fmFysYPTvd6LdS+Xmebhv6SIcSwt+1A/i3?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB389; 6:gx88saVhOevxG1y49LvPUGrtrxsJuoBfOUpHRVpsCTwzK0TfeJ3TcUPXv/cnLNTDUOCnF2Pv9HtLhwF/MTrRAgEVgxBqlZAGLmsDNi7N8jvHB+SrDd6x6rRVGBVJPd5UWexWe5n9pgmFhfg96kcjDndoCGIwwQAVoJMmUyymshX4RgsdXynVk7JvdznY4+DEc32gYFafKfS1yVAlqe2kdlPc2+94imrurwTNAWWeZ7VfWej2VwE/YgqQDMCd0fRDmgx0qJBrlNYxRFn4n5W2WSk6Vuk6mhMTTTXWxL4GDfFHyMc/hRPeBrfpebjyCJELfW4t7kAvwYdJYEN93lk9DwbNCtOTh6otKJrBhNaz7QjW8SWXECAAxu7OLAZ4xDjktAxtidfdr8zs6oxJBSepvWyaJ3webLraVJHCqbBJR6PV8fDes0PqAn+bikuiDtp6lmelcn0QiuqIXadFor2uzg==; 5:5LR8Bz0MqPMVbJcUM3cel/x3mPUiTCwF88Zs12bND4063vb8V62BhAqy7zot3kcX3WKCVvZ2/ydcMi8AZ3TRyHOOcq5ld88Xvw8o+JCqeEeFedgBU97PhCvuOCqBtTCEdZ7SZrQHnjIVHKdzyuO2M+pv1gpMoMqaHMVpb2HSuAg8/CNsHRHEFYR1T347nzP+; 24:AXa7xIPDz3OujXsGrnGgK6LMn/OxPPjHM4/k6FZPGrK6A+qyqFXulov6Y4NIr9G1Cn7PdBBa7me4ObbDojrjr4H+yP9r/tRFdBqghJIYXO4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB389; 7:KZ4gNRr8C3Jvne8cxmfyT/AqKXezg7avtJAIx3tb6fhqmdOey8/T1P3l2KxjctcD0GTbVaPBP8GWeVDEwvVXVhDKD7P5aH3TF7U0R7OcKY+J84rDRXKUYA3tDo8Lnv5ImH+PO8eTggmkUlXCX+TyukPfSLwbqzlgYAHhRvHO9p/6wXcSMOp8cXatFcLY5gQlKa0Tlc6m0g6IvkI6Rzgp6arZ4ZmSGTBTzVoDx8KNh/hwRID892EMrtdKRSalPE/V1iknzqOpoVbJK0mqklHarYnlPCW0FLjXtbdXAcGY2xKM8roBBai3thV/+qtIS/Kow9WCe7MacQ9AAL9lP+WHOg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2017 08:09:38.0968 (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: BLUPR03MB389 Subject: [dpdk-dev] [PATCH v11 07/22] 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: , X-List-Received-Date: Sun, 09 Apr 2017 08:09:41 -0000 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 4350f45..7f88e9b 100644 --- a/drivers/net/dpaa2/Makefile +++ b/drivers/net/dpaa2/Makefile @@ -58,6 +58,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 SRCS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += mc/dpni.c 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 030919a..92d334c 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -115,7 +115,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; @@ -141,6 +142,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(); @@ -152,6 +154,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; } @@ -183,7 +197,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; @@ -373,7 +387,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(); @@ -415,7 +429,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; priv->hw = dpni_dev; 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 */ -- 2.1.4