From patchwork Tue Jan 17 18:52:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 19590 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 D0ACAFA54; Tue, 17 Jan 2017 14:20:28 +0100 (CET) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0083.outbound.protection.outlook.com [104.47.38.83]) by dpdk.org (Postfix) with ESMTP id 83B7CFA4B for ; Tue, 17 Jan 2017 14:20:20 +0100 (CET) Received: from CY4PR03CA0024.namprd03.prod.outlook.com (10.168.162.34) by CY1PR0301MB0745.namprd03.prod.outlook.com (10.160.159.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Tue, 17 Jan 2017 13:20:17 +0000 Received: from BY2FFO11OLC009.protection.gbl (2a01:111:f400:7c0c::172) by CY4PR03CA0024.outlook.office365.com (2603:10b6:903:33::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13 via Frontend Transport; Tue, 17 Jan 2017 13:20:17 +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; 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.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 BY2FFO11OLC009.mail.protection.outlook.com (10.1.15.0) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Tue, 17 Jan 2017 13:20:16 +0000 Received: from bf-netperf1.idc ([10.232.134.28]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v0HDJ8mQ021741; Tue, 17 Jan 2017 06:20:13 -0700 From: Hemant Agrawal To: CC: , , , , , , Hemant Agrawal Date: Wed, 18 Jan 2017 00:22:40 +0530 Message-ID: <1484679174-4174-20-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1484679174-4174-1-git-send-email-hemant.agrawal@nxp.com> References: <1482988612-6638-1-git-send-email-shreyansh.jain@nxp.com> <1484679174-4174-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131291328168291033; (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)(7916002)(336005)(39400400002)(39840400002)(39410400002)(39850400002)(39380400002)(39860400002)(39450400003)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(189998001)(626004)(86362001)(97736004)(5660300001)(6666003)(85426001)(54906002)(6916009)(110136003)(2950100002)(33646002)(81156014)(4326007)(50466002)(81166006)(8676002)(92566002)(68736007)(76176999)(106466001)(50986999)(8936002)(36756003)(48376002)(47776003)(50226002)(105606002)(77096006)(104016004)(5003940100001)(2906002)(356003)(2351001)(30001)(305945005)(8656002)(38730400001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB0745; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC009; 1:0q1mUhs4suMQY0+JAvvGLZb9PKRd+fm8MubEwQcIPrGGLlQwhFbbcajD4SIjrWSqSQlGe8I8/e1e5fzttWuyzk2WWP/JLFHtNgtDI2V3241LgIiBLtWhzCvDOv4Oy7EGZ787Q8vKFFVVTdlodS+3HWJ5SRy12USfA+HNllbqySThytG2LJH5JzdS/j37zUZhxo9yL43uRdy03r91zr0kWWwSHzYtxN6Nsw38H7QuIf6eReKSyxIesIoiBzVVBhcndC6wlR8k/TYtlC0dJ/9ID7UsxLx67K6mkv9HFFD8fw9hgchlahEQ0Ih5ie+TN8u03QGGY4t9gITKZX9u0ZjxP69weVgcEzTXgcbEYJ5km476iTu/dNmP/ho+tjjX8Jf/YXxc63UXJCg0FjPDAdDYn5XFOCn/Gv8JEg/kXVgQkDTnJqkwEIpAUMvVKQ8TavB0xnbPnV8p4xmv/FYP53nOFnQMVWxyG5diNWpnKuCSAt5r9URcaRBnpnDDgmkJYCGOmyLmkU5T5M7VK2G9BsiAA/eWd4vIFgCNGaU7gryVqhztKFBDocZRKPajNa5zs4Y9Ne8f3IrZGa1by+hWGGuqiBewlekDz76dvyZ98BkgGjdkD1+s5dInZHUN2hC862Js3/awSRhpZ4P65ROPaGwZOVugE1zUK2H5agk8blkVIT7PJeD6vwyfQD94fmeyLJxlrvJ2G0ufSei//juEx4n0qXs2tkqiL6XV6dCx6c0LtnS73dHDFQp38tYM/C4C/+xQ MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 04d64b2f-86c9-400e-6011-08d43edb93f3 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY1PR0301MB0745; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0745; 3:NGPN1AWvJ7HJa4Q+o0E0/gUNs+MLXyYVrURLTry4Pd47rEnMMClzH8DgV8afRyvQNhkEGk6ZjGbrEvI70iZs1yR5scPexZ0I6vKMlXmp/jmIknCmo769Lqm8yhyxgmbRYL7ICm0fWiPccuIGEKTilDYf6ysd8o64f8YmyIm3AsJ3e4RNH3XIxJfqXt2pFP6soTY5dCGkOmAhSN1x+akMFwtRxKFoe5XrPdGzd1bXHksQS2GvY/NYYR9JVQKmTb3TIopcgBgzF1PjCJvrHuiZcCQk6x+DPlGZTJPppzpxYN4c6/UQXXHXCUAx/todnOv/Wm5PLUdeKP5bNo/yhcXvY2SCT3+iy887pA/kWUZXdH5iD6+EvFpyNk+khltYMD4E X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0745; 25:90Xntqyp8gx226+ItUNOZrsNKB0JYfN5Al7gjl3kMLgK4s9r1WUfHPnbl5EJe7sD4BIGp/ya4wfkhGhyCwXs04cNih8F9gi7NPESOiGmE+MKmYCKzyb/9yXebHimJ9VMZb7ReDgGxbZ8HOVQDL2d4piyYgV6T81Kli5AiECB3LzYjexUaw7mBw3hOAWnexaTiSHxaHLTvIVm55e6OhPkhh0vFfDMQmny1ceQ+FmQUdKNCZexlRVPWboTgGzPfN+u6sAbz1RTM7XeVcDDyO0hI2iTF8OlQ7t6uL2pSc6LnTh4dBlV0r4cuTSn75WfaAM0i9cHXqa/r09iLWSoUoDh131R9LjJISoQSvCgHfdYz56It3XfrhzP8gEXXqVXjj9Sg7scS6YbZePp5yQ7RxncqLdEcJZ/z+J/CwNqh86qpCma87Ni1Y1qVXpfT8YS/PH5lWwwSMF3zEPY8qvlfLzhUUmCJzM4eEYkT0Xk+X3DKe6t4BLXMtYIl3gfkSwwT5rz0dAg9wCpxRhSaqWHV+sh/YbjiTdBLaowKaGZqQfBO2/W7R5WZIoap4yLhxbbtCNYaU7ZLwIOtYEm74YtfhSzFft3UNGCD0aoy8q7U7dKvf5AjNM/KU1S8v0Nt/fWMTHKCwNMP0P5pHMP7AlN48rSW/nW3L1DCJI+nVm2yfz0DakuQ10ALxtxTz5vMPGSTkQl0PdWRxUA2GJrIvRM0PU0d9sHBHFagdVWkscS65Fu+Y8DFLB+zfoRoicqKmGbsNvm2y+a6RrCFwszr3SOinGfzeRVZ5jnzp/+8adwVD3M3ME= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0745; 31:oKSDlO8eQR8YC5MLtQ+aUAxaGBBqzKJQjFRB5VRMBPJKvARg563qW3gnpCcKhTjOUOHI8TKHfPHFJAwVFdYbbKD1Jg8533DqZnGZjTYu1wBe+C65I3y1ge1Pug5Gq0eCH69+CNbM3U+SVeU6u0JNHbld3xt3YMeDh+S5xPJ0IAAuRuv9M7BSCMpgQ/mV5KTKVXnoJrFYd/rEXWXAlSmwwSiZ2xKAkgMkfadnACzUY+dv/rWxgDZ8podvs3AqdJ+SWx7GBON9QsajyObXKobDUr6TMPn4IKnNkbq5NXp8cog= 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)(5005006)(8121501046)(13017025)(13023025)(13024025)(13015025)(13018025)(10201501046)(3002001)(6055026)(6096035)(20161123565025)(20161123563025)(20161123556025)(20161123561025)(20161123559025); SRVR:CY1PR0301MB0745; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB0745; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0745; 4:JkTiBDHPPOnlcojPy7agniFYxJ4d209P8UpGzoDqK7k6/WIvXcw95wtlJaEursdjfP50lQyD4vuTrpt+srUNuG38SA43N1UmUQeGFdJVaXnBAq2Dl/QgB03kH8XnOMjl2kGdtOS0dPXqVCLeZDE4cWctwmb5xnv/SPqD5Z7WpL14c1y8SZiylmIZotn9U9qKgXEFBXc1/nBE9mZxDwjswaPvFQp9ar35dMgkmoy8MA7+KzrKiU0DbZ3XTyDnipX/7LrH2rpr08503pXs/zWImXr3zosF65I0d188Urqh3bXc7wWOzkgDvH7Fqvrn3lKG1JbN/vOAZx0QM9XcMG8Wg64G4eAMz5uZAr5NMNAH0PKlA5Y53ZR1oVarSl1DFfmLkwRF/yBAn7AdChaoOaGYgVOTlUjXf9btOAKwpad+N0hy2susNqJTyPYjanvGZS6Q+Va98wfeUgKzluKtCVOXH1cPs5OTtLHjZv9fnH7MCoLvyNN3tdt56uCgUQg/416cvGaRpR2J9osHCKYpdJsTGxH7ahlFJyWOqzXfQTFD246LWmmtYAeN4F6Ab4sSxbdCWwQfagaOvnjWPfC60kdhXW/cCvvLSizi0RBlG4FPYNNO3Rq3J5FF5aTe/zTibkzwEaXuDygP5mOROqqO68/n1lpZ0h1Kr2PAPomNUVR39dlXI5EzqNTwrbe6VkMit/cuumfreQyfVDNHlenuIs8abyWs40YQFP8r9OlxQyt5K8w5JRpn69dwzXrp2PvRrC/Z X-Forefront-PRVS: 01901B3451 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB0745; 23:VIhwNThurinRoZqqt3zjCNmx7G1VJ9HrHu7q/Do?= BX9k4r2ARnYL3FxGirVISszAkVAkFZ172xwh413u3T5UukoMgRS+t4VMKYxqQozlq+o3GD3ycF9ncrdU3fvjJo5HWJCMkqC005vDF1zxX674jiitmBXU8T+fQRgo9U56tZqGeJmVwbHueeW+wg5OhaiKSMxBLOJAOxXrhi9wRSKLmKDa1XvtFIpXcgvOCougJjUmngBg33pe75dGEb/do7PpKVNfE3L7Plpl6k0Ma+PIE6Fg7G8fnSyY50goyo1nMh7kWOQKJU3oPAlFxxN4fdSBG/MowMVqLYaBZqyka1EGwTbNwaDyM8H2O5yhZe4LPQiwnDVGbH40kTXl/WOPEZrA8yOo49z+uJUuanzKY6OP+ndEG+8tPw6iiKCRD9ecdxoaH6574jWV+PQfhHACZqPXSQx7zwU99/rb5IWsEo2uQo2MCBqpqgLPuL73Ubir9k01tLiTC3HQ+vwwO5a+t+0W3L2tXNPpcGVvLOvPVz3AQ0CmGL4X22a1gHM/6ojB3ZZYKYlUgLWF6r3Fb0QCOy+Wx8aRT+aXLPhFCD4b29gQNZHmAtpXoSJ52TIzdPj53G8N+akSCN3TbORV6aPweV44QyOeKthLlpLweslMYrD1mT/ETvJhVdC23w5h/NE93ZzS2Ot2JnNXMD4IaJrMFF11uM3EanmqFE3rC/7Tc72djdvdtX2RPCN1ryN6nTMi3vfCx3tmy4sp1kG6ve4Aqlgk9jhHhZ7xKYlzfaftXvRsytuIfip7YX8FsofGKby3M/l4nFLyhZp9yWqtx7/delrke16Sds80f/Kj/gmpK0rz2GVJq/bwMlqH2pVDYK7rbCewUhqsQujVQLmgoE1bLIseWz1Ja7JCDtk7A2011WuBZF2vmexjQigSDc3ydYVetgVPwHK62rfWPmjJCWXzTwwDMmjrfYL0jkoUOqlSvArUy/aEhmxEv7lEgpXXru+HCLqfPADr8n6YZwkuC+VmTICpGueSWBPvIVBPdyx5fAHMHOeCY4/Wg4n/zx805cMkcT/hNY2yv9n+noAmLA6EF9js7/2Qrs060dTzFLpcXQW9xZSjljmqg+pljyRkPXgffJpZhw1pATWY0g2Qv9dOM4kuknVSju9T/g03VsrS1qkHa7e80VjmSTEjn4MkTrPZfn7sCt8TPRsGZINp6St6gJZfUmeYOB4kNud/sLjCCASKkG95r4LU7dw/pmLrnAziJf8mNjwQIwA1aA57GdzIPYlXQw2UdCSArTOl9p8rXRncyAQ== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0745; 6:WueOjHkcHtVblHCb86CF3odjbIPyq3lucNELIEWJZKZGRdaz5Zvo48K0+YczMG5roVli0SfxGP6WiB3uSEaPPW1TgKA5oyZtACf7FyOjNFkU4Q/wv/teEl5fj3AJCyo3+qZ5y0pI6G297ZuQMiopxLlmotpNtqqyyLSojltNxmt1aZx+dBzGYZdXzuX6oGGvsiBm5SjWqd/I0oq5pZELXFap2BjkuRKL3wYgOb75/PvUhzHlrVIIGQBKpwm1G0pixCBSHimPgAoehiv4qOzpZm1RtAIy0H1BlRfm6/o2oBzPdFabBL1biw3OD09pyKs+2JxDsHC7VB4xf3eQf6HQ3cXu+ATeC2TCT0fKqnSHE+TGdTFelPCbG2mB+s0BAj/l937vBZEz0z3U4gEEUVyqDn0DNVWadPF5nkHqn6OQVqNrvg1+frJwPHQxuV2EKJcv; 5:rWUP8MTd7jzhHlSOo9AtbDtCoBy4WwjjfrTISI37iZ/mJ3PBvrZCu6YJMttanagmJI88LToChQKBPegIe82BFQa1UGPNOaYQ6K2zXNMiIAOuds8PvAypBUBaGqUDqTFIbtZQo7NFqwgLp3fWZaCwzmY5AET2PnCPkICHEFEA1hTDIG9jWoXUFyzLJfod7rBT; 24:3Z30IkVPz00KfwGdeeHH7fXARNhdvxj0o55ZyEdELYwZ3LpDaLah6KE7KmoWPR72TajMpLxbyGE7/L5zIduQqz3nqdCRkfWKlfkeBKfv+Fg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0745; 7:qTQ6FnF8MZ3vuI5PyH99aVAASmWCvDUVKR4oY0sbp03IYFspixuxJvRhPTzdWp3+TkloxZAfDit7NoxN0OHmnCaA+FY6V+6GQLmsCv0c+DGWU6n3mujJHo4B4kSt+vjECpdJFZQhxEiR83pC3k26jpj+K6UzB/4DYRiq9bcjcJw+RuPGpooPc3VjRiMLU33kV8cKSxZMFQ/nPN0ruQRH3ZmEX3MHxDaScpak0vtib3vDMNdBxoz5K/k/VPsfb+iP0BNXyGYXdA5bQln1gcYI938Sku9VLyWEHzyQEFeBxHx6B5LLDO7sKhdVQhLoJLIw2LcbIQvpGFfIXYRc9YFll+SpGQc9snOhqNiBgJ+QtyudgT2sMFhaMOGpQrRNkJK2B0sjG8tqnFwFnLbxSKlIv4dtXQsNfcVyXtlE+5mgadqlWJglYNcZFnJOG3Bv9F5zS5WQ6IcsB+yEuORik84gjQ== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2017 13:20:16.4703 (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: CY1PR0301MB0745 Subject: [dpdk-dev] [PATCHv4 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" 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 484add4..1d7ca66 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -116,7 +116,8 @@ } 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 @@ { 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 @@ 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_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 @@ 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 @@ } 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 */