From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0059.outbound.protection.outlook.com [104.47.36.59]) by dpdk.org (Postfix) with ESMTP id D5571F95D for ; Wed, 15 Feb 2017 20:06:57 +0100 (CET) Received: from BN6PR03CA0007.namprd03.prod.outlook.com (10.168.230.145) by BN6PR03MB2945.namprd03.prod.outlook.com (10.175.126.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.16; Wed, 15 Feb 2017 19:06:56 +0000 Received: from BN1BFFO11FD017.protection.gbl (2a01:111:f400:7c10::1:131) by BN6PR03CA0007.outlook.office365.com (2603:10b6:404:23::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.919.13 via Frontend Transport; Wed, 15 Feb 2017 19:06:56 +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;caviumnetworks.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 BN1BFFO11FD017.mail.protection.outlook.com (10.58.144.80) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.904.16 via Frontend Transport; Wed, 15 Feb 2017 19:06:56 +0000 Received: from bf-netperf1.idc ([10.232.134.28]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v1FJ5fLs020023; Wed, 15 Feb 2017 12:06:53 -0700 From: Hemant Agrawal To: CC: , , , , , Date: Thu, 16 Feb 2017 06:09:23 +0530 Message-ID: <1487205586-6785-25-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1487205586-6785-1-git-send-email-hemant.agrawal@nxp.com> References: <1485172803-17288-1-git-send-email-hemant.agrawal@nxp.com> <1487205586-6785-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131316592163647837; (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)(39450400003)(39860400002)(39840400002)(39400400002)(39410400002)(39380400002)(39850400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(77096006)(104016004)(626004)(76176999)(50986999)(5660300001)(2351001)(33646002)(68736007)(85426001)(86362001)(2950100002)(81166006)(8676002)(81156014)(8656002)(54906002)(6916009)(6666003)(105606002)(50226002)(92566002)(106466001)(575784001)(8936002)(97736004)(5003940100001)(53936002)(36756003)(389900002)(189998001)(110136004)(38730400002)(50466002)(356003)(2906002)(305945005)(47776003)(48376002)(4326007); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR03MB2945; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD017; 1:3hQivXEY6Mh/WsFP9Wbi+WBzLmGLtAL2VrbXjrqhWwSnNPdcv9MD+H/VxY36OIUvqXMz3y8hUAR06J1QFlKSO9FZfZb59eno4gC410f9baSVd2G8AFCfMvalSQ2NWCQZLrICKfuJ1PBv7od1VnpEBtwttesudS85Ak4UPCEftI2lU45MvAlFehsOSOJXdyxTtZgtggEXxGkEuZtaSO/Ot45MLZOY9fs02DVQAivWUpOCazNMtBUnOQX9hXCTjmH4ps+Matkr9g3BRTr2LrHRc1S8LR3E8rgZEvF7KM176Mug69v+a+X7zmmbTURz2aAZc/UekH+msjD7a7DMl7bBbBJ/pZJZP4ptFqH7iZ7khV9hIvCYxLD0QmimmPT72wM5Bw/sEu9nRc6192I5TVZscebbiGbLm/TBhDoxS0rPN28xqoPznAlZAo1MOBm1VlW3OoD3fal6MhQK7PWDZX2vMpBtbIzNuFSNymRgxs3S1Qe6VsdsxYWVVGE+3p3MYtuOCTHXupgpIsH9rCEmhO/VVWsLaM89cCorH+6qwT2fPGjnUqujAMOMCvC51AZjN43Pp1fMFIcSf5AsothmPKs+qwIQX+DoCshl400zg+dFT0C2WVfenkmzWiTywRcM7GaiJxftjAAyfb2/lnMseMk3+Q== MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 345a812b-e9f1-4512-0fff-08d455d5cf7c X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:BN6PR03MB2945; X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2945; 3:o7NPhm1PdbIctSvzPTUmlerYA0cQpf6NpbIj6V2vJFrvShvE8SFOkX/idzyXlfdYXGtrw3TH7SYSvaqt6d7EClXdjDRL9/uQAV8VM+Gz/FZuWUvcMHd2iwdIsr4bep8ji4fqFfaY7YvMd6+s5XmHJW/n77uF5femF2tpojVF/7kJyV5BcqXZB4hDsFZ8MK0tDi8kjPKRBYfmCsqV0cwpvwqat9GcgT4ENidsZBbaXAvEtBl45HdO/cnCP34CXi98GEFaXliizhlHW83K5bpt+Z49gMoqvHF/so7dOFIbJlxyN7E3syGRHt9PMXrcZf7guc6j3Gkc2EK9I1/F06K7D9baqWHj03nyFnl79UeY/cQtX5iABmEfpNKccU9/+GDO; 25:bVau3yyzXrhRy9ibvPc5zQWVtbvqItQ7SwZZByP4lITuSgTtdLzHP6J5KLkZEymvPEfheDFBJJN5ZCt6PuYtAbhEL/hyO7MkRMZPWOqQSUTiOdUlQQ3TChEq8VFnMh41Mjl/AKDpqUnesGturNJkrV1Xnh1mKrc5IlJO7OPpGhN1EbF9M8oaXGfBMrN7kXzK6WFFPuBEZQ401YQ63WjmEr7ak6qaIklXHI/W5CSohVa9+gQjnoqm1LkpZu5bXOJUgWwmaFIiefxztTfz1zb0CDHZHatYjkEUwYiv05D36utEqB9/VbCBGgAQuqI19fpFC/08vPKt/GDsI2jkQ6cGxPUlNWu3dC0mBLWtEHkSddc2yd14NK4EstTJi+sUc5EXNUHz5dltiraf9YsyWGa7/pF6i7qK/IwtGK6iBkzDpEJmMiJtVwgRMhxjf/VofIyaImnl9JW6h38rYIOOHGBS1w== X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2945; 31:p7qOZ58ZC1di9IUF/5Br97lRnATdHdF2cbgtloti3WyjdBhj8K3xJe6AAtihrvU5DxhW1wF7Yw17pdELCrCIxgBOQqGjh2PNGyRdRjGt0e79yqjMIOQDfzRWmklRGd59S68/llDhK2ViNC2Lb53jG9jcMqWynB35kX5hK3CWAoftzyMgKPHX9l8wtBE++mgbp3yCWxNmRetp4SXtn7WJ9kVKiaGfNfrGcth2dVhSKCRWoWvw9OevbtXA8DyNel+uLXRIohEY8jokauBBElrkYrO/4aoswmus4rgLEFSSceQ= 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)(13023025)(13017025)(13015025)(13024025)(8121501046)(5005006)(13018025)(10201501046)(3002001)(6055026)(6096035)(20161123559025)(20161123563025)(20161123561025)(20161123565025)(20161123556025); SRVR:BN6PR03MB2945; BCL:0; PCL:0; RULEID:(400006); SRVR:BN6PR03MB2945; X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2945; 4:d6+7WZfX+Z+8foROKTmZOgB/x6SYCJT0404Pb+2NE5geWXsKGJFk27p2A0dF2Mxg/DSFKV9JwKUD3oapWQiOEj7uWzld00yQqaev1j7yhjuN9pgsBHnVybS+yfkK9hfKHOeSe2kZeV0qEU+n51onKHfODV2mQ1GZkcaYaBWR3caJ13gQ3q1Jd9kZL/csyd+W8t9ZRfMyJC++50vjBEcuyzs8YnHt/6jYKiABrAXrvK5lGMF0PMN6qrhHG1JQk3Uzu2VDIoneOA3MhDvgwreaOec5mTFStE+Qe2vaAsI6X2Vo37feG8DEf+V/Y/cvJL4VhQXcZzy57JrGKsi0qsw7SfB2EAxfHA55BUM776WFt9ib5lLq2AjpH0NvmcL8dGqUFErDsSEpiSOuHVrVJDnqZeWSY0BxC+y1aoSyKYh0Os8gtLaJqSnaQLhRdnUjYhWD7ZloG0/WBTl4SO/htDw782PwLcYX9zqr9a61V2NCSvghbOInfD1RTH5gSov5lJsZwezDxZIEPXaHqf7GSh+k7hYZB2OFPJtRun3i0K1li+/4F0O4sP/VBwHVgJs2+sXEtA03HXUmf8XgXqVbq5p8NDygAARdGVv2XVexpVT0BdTbcaCr7tcdXML5hCcQ/iL5KSPALYiaSS3vR3mnlvAqa9frmXzpIJ2Folf0oKhW1NYrFOg8DFQcvfTxuNjIgVX9WMo2b684wCgW3lfX3BJ4SIpuW81mgGpAMf9PowsEvuNOmj2LFF124EEGKV4vM4LN X-Forefront-PRVS: 021975AE46 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN6PR03MB2945; 23:kJSITYTjvcMQNQM1htt1DKHLhLbmZHoxP1F2CmLUA?= =?us-ascii?Q?WSS8DPum0Ap+hDBWwwaM7gulB48WzWe7jVkgAcIuRf92aexKtb+t6BSFv2iV?= =?us-ascii?Q?XifdMPlMViEdjseqVQ+nuENZmNsoPS/oW+BZDw095oZC3Qhj1FBbZVIDqKV9?= =?us-ascii?Q?5JH6AoaphgQkoih1jbwy/n8xC5Tn94ozJtpCaczTmFEaWOf3qJo/q3OYYIp9?= =?us-ascii?Q?zzXhOFZbHuF7MxWvMg3/ld8+q4tvsDNPldW3UtF2pI+qqxcXEHIrLu5LJ9qS?= =?us-ascii?Q?NTML/2foVaAFAfDiGuAQ01a/LmlLPJ/MSFcZ9vLrXayBrrx7d3uIn8BCRXby?= =?us-ascii?Q?6xVZH0hpN18av0Q292lohkzEpFAPCG+Oey+8iYvNj6XBPH7VDifnW3JXqJnJ?= =?us-ascii?Q?dzXXX7uV50ThgO0B2yloLyvgL+vFEPiHQeSZec29c32WzAaCifeAqP2ySuqg?= =?us-ascii?Q?dvxkvoUfe5ZGoQPL9OwI8meE1uzbmhHFdQ37ucQcwDWFPFyEgOOn9IgrvqHy?= =?us-ascii?Q?X+zmwrUN3l8PlGHsGj6R8ZqmleYCV3JGWxUGGQ0aFXQTqFw9ylrRuq+YMq/x?= =?us-ascii?Q?UOW9zTKptdhZ/Jkabj5i+pFC/gmBfJW0NrH43bABv9euuae3cQRB512YwvYC?= =?us-ascii?Q?6Lyg11IbmirQyLuu7uDr4+htqL9t8YE0lcSg/Vae9hhNb8fFtMx5WQqQfgZY?= =?us-ascii?Q?L0Ycf3Kk/lWmaRkdTpAm6NOhb1kO+4x7zdbXkbqD83TGa09R2eqAJmrgb4Z4?= =?us-ascii?Q?j+nOi5IEVUa1TMayDCg2sdCZBRnN4Jlm71VgU65HM7Z5uFVWcqO+tlb1zGOJ?= =?us-ascii?Q?Wm+KoMaz+hXiDxL0VfrWnmmmSNMX9bW2w8nsnpUfgwhtSeD99l4hhj3096g5?= =?us-ascii?Q?eV7pQDqzGgYTQNYponpKpQaOKCffvyNylCdgJDHKnr15KizL/DAICAgGOTVC?= =?us-ascii?Q?jWCjqBnWyE1F4j3YLlUE8R4+qOItSiyxlwC3gQCvTuPe90kf26wOjY5dTrQC?= =?us-ascii?Q?RFeONS1dv1VDreMSw/zyTAXbv3KYhQ6Fd1z/Voevx3iDB3bdM0Y8fsKiX41N?= =?us-ascii?Q?AoLO8q6K/k3ESeCTekObbtSbzSs/KpZOv4iI5jL1It2vR9ROyEfwpO4SAn6x?= =?us-ascii?Q?hlPFr8P6y81AFI71G9q53Kh48hMFZRl304yuzIioU2AlXPRkkNSobLL5ObJ+?= =?us-ascii?Q?A7eyikoIscTQvpYvQv3de20do5cGe+n/G+sMotAZI1NmjZsF1rvFXVR55W0c?= =?us-ascii?Q?OAAf7YzO3bGcHg9eFiK2dTm+x6DVAdoT5VXO3BMaMVqPQATq7ab1rAcJ91Zf?= =?us-ascii?Q?XFqFu3TcHhLklc/c9d43n/uitzF+lwqp6KfT4wpIldUBgJ3PcG1Q2y3PaPR7?= =?us-ascii?Q?UmebA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2945; 6:Pn2LlwNfy1lBuzTaYM9uG7joaTwDz6u8qFMX2MeSLfU1diQSoCGgQJhKoM9gw3cQPG9ALrXd1F6vdDrZ4w7dSD7+oUlHUrEy7FxhX5aF8ddYPZcRDfxOI1yjH3GofFrgAIVr4AawsPF4J5nTaGef3dwg6+L0dO/Ade2jxn4pCo1Pyq2yhLdToWGrD08oBDYymUSLWCU4l9gq6hKG1K0+mxWAY0W2+B2zVKI+7ELesTzsStI0UPUSGNjOLXIyTMFtbcoHUZ92mGB7mij2p01AMFwJlRhMF8aYEx+/ALZpbZfnYyYMkiPkNBSSrlFn4RgiHvZ70pisPFjfZg0SDuxE/OkfpegFK3hJEuzJUSn9qLBxA6ayMSbBxBiVBwtQbHNoT1tGDxqGoJN9eHUcWBvpIqDv68w+pzFQ4U04CgoqiPk=; 5:eF3w3yTxzhLaC0qGC/Dcvm14xX7tWf8YXa8k8PUA+31FBdOdyBUiK9n6AxOLFLmUvGw0/BZmV752fp4wpoDCE7Ct5L1Fb0qE/BrpGUFl7nrolhHdNu/zSkHZ1wT7e22DgviQcDJ9ewajEW5ArkPt1+9hT3rCeHnXxLjUBPQiQ0DkoY2ruqfDqICPoEVn2COc; 24:s/tH5qYEL0UtVOKiuADTt0SvoYdOjWhj6AXZN7+X6P/dEr6XnFYMykT1perc5gugjWZ2xNzv42fQtqRHy4izbyqC/NSIk+wCzekai9oV+hU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2945; 7:wMu5SXqLkb5gYW2bAxKB1bbn6zKHS2lafcODVm1/jes9QgqphCuev6a9sPkXNUqDEzMpo85Gr1URh4NyRWRCGe0cFBzWHfsGBdpFUT2JZWM/3UO5R9pxZmoatJOYSVGWBpnVVINKrZzxpe+9+2c3AL/aWIuL2Grc2qXUel0VXkE/JGVehcK/OV6pJ5rXw9LjHPbHbZ9FvWO0PZBWu0VcktaMM5OHcXWNJrAv93LCPUfJHjZOf06gYTEyv23UUCcUcs+q+2hb9wD3SQMC6spb3zhF48+pdGWqkrDlb/1YpU89GJyCjshJKJEQ2vrUGu7uTP/KvW6C7Ri5lTEdKcpp1w== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Feb 2017 19:06:56.1619 (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: BN6PR03MB2945 Subject: [dpdk-dev] [PATCHv7 24/47] 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: Wed, 15 Feb 2017 19:06:58 -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 6eb1e0b..abd1fc8 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 934755a..c14b4df 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -115,7 +115,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; @@ -141,6 +142,7 @@ { 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 @@ 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_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 @@ 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 @@ } 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 */ -- 1.9.1