From patchwork Mon May 22 09:39:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24434 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 622595398; Mon, 22 May 2017 11:40:20 +0200 (CEST) Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0077.outbound.protection.outlook.com [104.47.42.77]) by dpdk.org (Postfix) with ESMTP id 77424377A for ; Mon, 22 May 2017 11:40:06 +0200 (CEST) Received: from DM5PR03CA0019.namprd03.prod.outlook.com (10.175.104.29) by DM2PR0301MB0909.namprd03.prod.outlook.com (10.160.217.14) 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:04 +0000 Received: from BN1BFFO11FD030.protection.gbl (2a01:111:f400:7c10::1:151) by DM5PR03CA0019.outlook.office365.com (2603:10b6:3:118::29) 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:04 +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 BN1BFFO11FD030.mail.protection.outlook.com (10.58.144.93) 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:04 +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 v4M9dk44031538; Mon, 22 May 2017 02:40:02 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 22 May 2017 15:09:18 +0530 Message-ID: <1495445969-29199-10-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: 131399196042461721; (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)(39850400002)(39380400002)(39410400002)(39840400002)(39450400003)(39400400002)(39860400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(51234002)(9170700003)(76176999)(356003)(6916009)(2950100002)(5660300001)(50986999)(8656002)(5003940100001)(6666003)(53936002)(54906002)(81166006)(36756003)(50226002)(189998001)(8936002)(8676002)(2906002)(48376002)(50466002)(104016004)(47776003)(2351001)(105606002)(85426001)(110136004)(106466001)(305945005)(498600001)(86362001)(77096006)(38730400002)(4326008)(33646002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0909; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD030; 1:6uYAd7oiVv+KIcMnDayvcWu84eWyhK9NNk67OH9faV0oI8+WQ+bWsFM8NtLZOrC5GfgqNRA+xYqXQxBFRf0JBpe9j/jHWxcOhxCXUJJTOyrh41GPLOwKsVpMWuQ8YmsAyyKyvw3TcRvdtibNbKdfU/CkyZbjO7+TdPpg5xjOIXAsnRM/8sXtC6kn3VOP/P4oHxHgj1P8ih42xQ9u8iZ8GLvXP51S0G0Dj4rzFqA0V4eP8UpIPtdyMuYK6cXx8Mq82Nf/9RBsh/TAch9668xs4iBWW36lFaYKTeSCebMg1v/11vTzySSzkU33MroPs3Tlxh38UNq5hyBkkLIm7racj39NQycWGdujhH+WbaJ+bIS82zm94BIyrcfAdaeZ0cPIiRTrUZtBOh7XNFLuCqW8P4rp9QoUW6eP9K65+Y7K3uexTodgs3AsnKjKv/WciZVWsNsSKJW2pBg+6Ct5UWzYrwheTL/nv2Z+qwCA87Lw1Ywl7n82jZPhf0aiTMViJSzopdVz4VVmoOAziIwqlVTlqUZQn68cVs+eE8aFVuI9smfQaPSLfK0E8DmHanzMcHUGxaGHwcyanNriTQzjBOZyZWvs6c5qBQVgFa+FJyXTCnXS7Jf37DknmOtKLxNG8qrj3LCB7osKixHhq6EoIh08lsezD006CKC4GbwCx7GTBIA4rhDXPGGMqqJw7HnS2alTbAxYtb7wLSAWQpy9zAGIy+5n3cDRz/zt0PDSQtZr/Enj5SOAReKPaKz3wzF9fsXogE+5vVdU/MiZuUgz5lUhQg== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM2PR0301MB0909: X-MS-Office365-Filtering-Correlation-Id: 9f6f3f51-6bee-4022-0219-08d4a0f68659 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:DM2PR0301MB0909; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0909; 3:IGNPhXnGl3T8dlOfkmoP0+8/8YQ2FVukogOg9vyfUw5PEwltm4FdasNuuS3z3adMjsdNTB5TseQjEFe4jWQzdB2CRGtlbcIanPqFVobBbIpGJ0LJgRjhda/FfpSZiUTMIdXGngrFyO9lh8q2vJdL8oIpRaGIjGRTmqdJKwxh3PDemCex4HoDaxV44OH38qnui4C+td9yDYQCNjTsB3Cyoc5PeMEZhwTVQ1lL+09cTfo16Vto4So7d+aekzcsSyrSSEE68SCHfdYWZDlaSlGbW7TVvPLiqxS35j0qTHhEmLweGCIe4ESyoh4ypHYWMxQ8OTu0Q2S7OTHi5JgeMmASJtP4IKTzaQRmFcYMNcUB0XgG2mv0Z0bnPuMHdSo7Pl5Z3csDnw3QCJymzOnA//qgNZR6HKPJOB4EtcPmfTwFMNzqN+XZMK4najWqfvvMy14q; 25:vRQvRhOyrjsUMY5A/SFty6nwXplQN4kKYAIWCQbsHk3MZIsDEi3rLT3HA+KxLmwp07yvxGwOr65lqmrhgDl+W6ta0iAolzFRd2MfRPGVCwGXSy/wykAqiLr6+5+3zcOQRlzb9t1SuPSfk+Xed3dWjZMA9CPZRDitsAVRlwDqmOwz68m0bJVodSTFBMj+jyEyfKJgfD9JVKV70fMsOZB8aRmJwRWp7Hi+cOqhNfM1Nwao7bzNI2rFB+TkAZlhmxX7aBFPvqv2R51V1Yuzsa9OEjHM/NCgON5gwHpwkUA+y9qHw0iaFcAaXyvAuJ6y6VWdLen2zcpr+N3/LeTC4P1/9Je2k9yszcAHHc9/55F9bLAmj5gXUPLGRtlwlU+cYm7LYJB5cavSzo6uMusFFG21h32PZhQ+wDVA+DjXD1F4y2ROfI20YkS0cag/KmlscCM4Uc+xJVxBvor69CGcRbQQEojFO0g0gJMHdJjFmy/muIs= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0909; 31:uI+GklLxNNp5n0Zvr5xr7E3FhEgQOWHHI81qRnIU2xYBUPp2M8w3IqRfs0atMwfndYyrIl6yTlAMEi4dsim6d/v95TZnth606WOASyg+hFbe2NnByKgr5oAzGexyfsLZvrNlLq+bjGxLWRvzjuEM1dl3bC4psUzYLmCVO1gW82WuevBczh/7NWNZn8o0CM4IOwnIqqKwd603CgqV3FMsbKxPbWXQWtxx+nWb1iX4GoJeo9wGePzSY8CHgT54n69Hy0i2Jwzoglh/SDHJJKKmqw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(275809806118684); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13023025)(13017025)(5005006)(13024025)(8121501046)(13015025)(13018025)(3002001)(10201501046)(93006095)(93001095)(6055026)(6096035)(20161123561025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123565025)(20161123559100)(20161123556025)(20161123563025); SRVR:DM2PR0301MB0909; BCL:0; PCL:0; RULEID:(400006); SRVR:DM2PR0301MB0909; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0909; 4:UHWciiiQqe72AQVNF+0Fz3HfaBwOrDzrw9Z4iCQz?= rCs3dOPFVpb3LhGdSHAgM8e7QRpb8Qu3ThCKWU8cLWFQh71sBRvKYRQkb9WNOHvXlIx7CpVqUs3xZhY9TIr7tRoAWK+5ShP5KwpHtxLeqqEf73QSInLDB1KkTUiJdYN07t+wUMNEM3bD8GGhhGGRo1vTvCaVcWJ6N5aj5tzjD92Tu6ZeHpWxVLzFNkXJo1OoltSDevfajAQQNaLRWqgSN2uQdOcE1pM2LK3f+TT+E6b3BtGY13qNRE7XWkq9vKrSfbujdubwsj5e5N+4CISrxt+gCREDTSwUJzhNWOsBeaz+ltyYV1w1qdv8fOfqU8vzylRvwy9jX0K1y96Xs817XOn/HX3FCc2WH5myQXLIdixgZ/sgnisI+px+D2l+tmhBhm3eBGwwco3A0iYl9x70Gv9eqWutIiRDDUnmSYbn09Er2BxMh8VONtN14cN3xUS2fHw3K7DDe7ceu/jnmYFmppZN/fBtdsuJJU3S8M78Vt0vpIYbeIplVYvNfyKWsNiQWa5vz25N5WRt8bcuGW6EMT5WCHeNxNT03f4QB1eSCFkpsNVuqlHyO7j6XURUx3hfRQyffmr9cWPClRYJOnUxwlHFPdhp2RMGtPRlKug7+Rqf6G3GHrOSs1V8eJjJNllyV43b+/o0xAetGMF1Ww9mW0NR7CSPAoGh67aRffTzlW41/PoE2cmvZq+pJcdAERAeuaUhvvpTmx/xDhfVIfFDXr++ErIAECEQ29JYzieK/0BXCPCZ7kq5ZBNBrIUfVEEV0ZAKWJg/bNpfU0/jnSE1KT4DhCO26m/psk4E8MuzfINli8aDK7OCllj9XF/hjAGTz2c03Z25wk7tg6c1c4Q5EizzAjFXHDqR/Qq+nC4DON9Ikfm18aRDqT6gjMaB5+qLKEPRfcn60E57WAag2lUxyFxwvg7g0HU5IERCuaPG4Q1rgtCZ5xhuGXVG/IrUFmDP4kw= X-Forefront-PRVS: 03152A99FF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0909; 23:utzr4LNkUA73rdSWr3/7aSMpV/3B1h466p/S41S?= oEEmlNNg6fjz8nZ7NLE2wo9vza4yaEy761teCpYIzKjhuCoEtSs+VBr8ZZy+CmCSwv17rPA2TZiUEN41ep2cxKRKSPIlPmXHTNx7T5oJYtMPoPQqjE6Darj/w7h9dMQ5CgddppdlgbJzSlcvBQi44OV1R7Q6Q6ONk0vu0XecPlirQo4P3kc5x1QOmEnlf8DrwArU/O/eIXRMr1KnCpF1HeOs7BSsLguQbuo8V3dvud+Aj4ox+jrgr/3GYY7OPVmf9h1/Jyhw196Oaztg2nv3b38Qdk3OEGEgwh35pIf8Zv0N3mssad8CtoeSgRJuxp//4iCwEMP+7PBCZLr9bCTz9b1CXMv21EnqHLQMsi4+OGWlJyGPwRVKCwWr9XS2jDSEQJvWO3q1bn8dK9PXZvJq3fjmyxV/Nbx+xNYcx4iVrjKX+UBi7J7Xx3yJ9Fc7ApwNssnc3lTpz2efc8vTc8tRszT9TLpe1tOsBeYvb8S0sEk6aUCiHdM9Z3Iayd5Yow8eP+LK4sPKeDIlxlwyivrQ3Lyl4dYMXxmacUhcOvJMsGFkDj7TBVzqD3fZBN4SzjPequ7SMxL7q5/IbCVE36y9Utin2svmBBs8r2W4X1hTDxBXgAX0A61Mk2Dy/dZsI1h3KiyS0sJKyFieAXbz2sSNJbiQt4Ui2YCYt0vx5V5HvMFFdd2ykmb3h+PDSThtte4/ywprEhFz1Ls6PNmAwYq8Sde0j0GreK526Dk0CLALAk7fBgfuqwDzt019P3m22D+SHVW1JL72+izHpZYJg6hppWJuSZSKX0vViELBeVH0mvc1uKbDPtvvX2z7RhMaahcmn+dPTEX4CHqfUV/xmtJusoCv/HpyS5+046WJagss8TCwugYB5EHKx19KamE0baW+H+QWQ4l8coI3h4UDLrqLjcWPBg/w7w0EfPi/jEQYHltvcda3ZofCc9vaFZ0vTlzZE90dWzaF7y/ABEMkKbwrOiZvcX5ShDbz8ZDM6X+4H1i2A3YXUzRCVK990SrTWBAHa/cWrnOHBxgeAPgTZZkOfoLY8bNHPPIdRPxhS04cWF1Tm2FDDIOtkSgMr996o6r0ASDOh6OZFRk5D5WCvlIOGGHyudJH1Ow27UX99RQq+FUS7VnvgN7YsCvBg2yRb6yJqyku+gud6iAZF0u9+/4uYj+vgDvKY5jZHJ6W/PcPG8YCVcHa+ARcMuQP56HA3eahihekgX90XGagUYBTBC0TKW76D X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0909; 6:8KPngjZxrm4PXVzqkm5MgQfqsO4/JJu8pElD+A9E4zGFTt+SrrmYx856IjU8OAoTmPVPbG28q+GGqRjVNJFCVA2AJI33/sQgCpfNldvYK8Co7c0iM8fCoVKSpu/4HZvXSgpYhPG2l6vASyaTgwXgF0LxgPtFvTv2xnlEaQ9tw76dKyPyR2kLut+jZXiFtWYyTFF9KqEbn+K0u4tPHgHEahzaK4FGnrCQd6gwjg3xZNiTK0JLtSqigYGYUv52VejodDrKCIWBakFQIa4hklrO3NshatDE5y4YD55SLPo99c/GU6UayUxDC+Mz/nbksY+d41Fm9LmlCeomOlPyC/Py48f9svMAHMuGk40r2LK/3cVnC4XkNmDxT60saiPt4T67hN6sAzWFmU727jHjGu1H0n9u+PJSpi2godkyoW13MyD/yYf6ndunKb/98Y5CLCVE+PFWmgEaUMSa/yLJjr4FwRIXCUYSVEJl6MKpfRlpaIvewxy89sFfupPy0VUVgW13fb0AU5atRUUeIFhuO95k8A==; 5:1Ut9LnWr2eFbjAX22WEfAmd31XOpW1MNUPSywZj2Qc8q7u7meCspiMvhjAaUM1rEM2hYeERZ6n+T6yPrNrWH67u6B9DjqMwH9T+Vh7yUNiLnTINlBaQxgSXMi2DBxMMaIwg0xRlts8b2a/0J8iLhocqDh7fqOfUGAKrgLHXtCQ8V1qWd7s4rCjBTSud8mv/3; 24:YHEUu8ZFGyqufRDiknH/NlkZOEOqH8YOtJ/OzOgcs/4RouZblpGfz0T3mjRFVV+1/SdNDHHSEuQoCjyAij+y3j8zIdxicH3+IdaWahea+iA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0909; 7:DkBmLhPB7vst3UX6qcHCXwJ8EiHFDm8MrB+x8K0QDHRvRjqQBZFvU23kgLQ8JaeOyPwZSKrX2Q9M1wFUh6cyuZ4rCvzkY1sr/8jOT6+/dZ+g8cApW+5w1+4dJN6h/IZ699jRGrnkgqg4NatFWzOYp9QaPoFAcH2UfeYB5kh2M1qHcsXRI7A6EqCL149Db0B/LI8maUx1YDgGuwb7MlNn5qpQUBiCQgcDLhh5xhiF9JoM0sz2QzAyfbpw0c1VRLNZMx3X0Ob4JJK4w3sqM5xRbOMsVVOnofN3zFRki3FRoD9ezFUj4JEgC4uokjKTZ+aliMp0iW1Mrk/0ks8JrhTwzQ== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2017 09:40:04.0745 (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: DM2PR0301MB0909 Subject: [dpdk-dev] [PATCH v3 09/20] net/dpaa2: add support for tail drop on queue 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" This will help in limiting the size of queues and avoid them growing practically infinite. Signed-off-by: Hemant Agrawal --- drivers/net/dpaa2/dpaa2_ethdev.c | 19 +++++++++ drivers/net/dpaa2/dpaa2_ethdev.h | 8 ++++ drivers/net/dpaa2/mc/dpni.c | 50 ++++++++++++++++++++++ drivers/net/dpaa2/mc/fsl_dpni.h | 85 +++++++++++++++++++++++++++++++++++++ drivers/net/dpaa2/mc/fsl_dpni_cmd.h | 29 +++++++++++++ 5 files changed, 191 insertions(+) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 80f1cd7..0526e26 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -309,6 +309,25 @@ return -1; } + if (!(priv->flags & DPAA2_RX_TAILDROP_OFF)) { + struct dpni_taildrop taildrop; + + taildrop.enable = 1; + /*enabling per rx queue congestion control */ + taildrop.threshold = CONG_THRESHOLD_RX_Q; + taildrop.units = DPNI_CONGESTION_UNIT_BYTES; + PMD_INIT_LOG(DEBUG, "Enabling Early Drop on queue = %d", + rx_queue_id); + ret = dpni_set_taildrop(dpni, CMD_PRI_LOW, priv->token, + DPNI_CP_QUEUE, DPNI_QUEUE_RX, + dpaa2_q->tc_index, flow_id, &taildrop); + if (ret) { + PMD_INIT_LOG(ERR, "Error in setting the rx flow" + " err : = %d\n", ret); + return -1; + } + } + dev->data->rx_queues[rx_queue_id] = dpaa2_q; return 0; } diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index e7728ba..3254b99 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -56,6 +56,11 @@ */ #define CONG_EXIT_TX_THRESHOLD (24 * 1024) +/* RX queue tail drop threshold + * currently considering 32 KB packets + */ +#define CONG_THRESHOLD_RX_Q (32 * 1024) + /* Size of the input SMMU mapped memory required by MC */ #define DIST_PARAM_IOVA_SIZE 256 @@ -64,6 +69,9 @@ */ #define DPAA2_TX_CGR_SUPPORT 0x01 +/* Disable RX tail drop, default is enable */ +#define DPAA2_RX_TAILDROP_OFF 0x04 + struct dpaa2_dev_priv { void *hw; int32_t hw_id; diff --git a/drivers/net/dpaa2/mc/dpni.c b/drivers/net/dpaa2/mc/dpni.c index 145336d..ad33282 100644 --- a/drivers/net/dpaa2/mc/dpni.c +++ b/drivers/net/dpaa2/mc/dpni.c @@ -784,3 +784,53 @@ int dpni_reset_statistics(struct fsl_mc_io *mc_io, /* send command to mc*/ return mc_send_command(mc_io, &cmd); } + +int dpni_set_taildrop(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + enum dpni_congestion_point cg_point, + enum dpni_queue_type q_type, + uint8_t tc, + uint8_t q_index, + struct dpni_taildrop *taildrop) +{ + struct mc_command cmd = { 0 }; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_TAILDROP, + cmd_flags, + token); + DPNI_CMD_SET_TAILDROP(cmd, cg_point, q_type, tc, q_index, taildrop); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +} + +int dpni_get_taildrop(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + enum dpni_congestion_point cg_point, + enum dpni_queue_type q_type, + uint8_t tc, + uint8_t q_index, + struct dpni_taildrop *taildrop) +{ + struct mc_command cmd = { 0 }; + int err; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_TAILDROP, + cmd_flags, + token); + DPNI_CMD_GET_TAILDROP(cmd, cg_point, q_type, tc, q_index); + + /* send command to mc*/ + err = mc_send_command(mc_io, &cmd); + if (err) + return err; + + /* retrieve response parameters */ + DPNI_RSP_GET_TAILDROP(cmd, taildrop); + + return 0; +} diff --git a/drivers/net/dpaa2/mc/fsl_dpni.h b/drivers/net/dpaa2/mc/fsl_dpni.h index 10dccc7..68e30df 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni.h +++ b/drivers/net/dpaa2/mc/fsl_dpni.h @@ -1335,4 +1335,89 @@ int dpni_reset_statistics(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token); +/** + * enum dpni_congestion_point - Structure representing congestion point + * @DPNI_CP_QUEUE: Set taildrop per queue, identified by QUEUE_TYPE, TC and + * QUEUE_INDEX + * @DPNI_CP_GROUP: Set taildrop per queue group. Depending on options used + * to define the DPNI this can be either per + * TC (default) or per interface + * (DPNI_OPT_SHARED_CONGESTION set at DPNI create). + * QUEUE_INDEX is ignored if this type is used. + */ +enum dpni_congestion_point { + DPNI_CP_QUEUE, + DPNI_CP_GROUP, +}; + +/** + * struct dpni_taildrop - Structure representing the taildrop + * @enable: Indicates whether the taildrop is active or not. + * @units: Indicates the unit of THRESHOLD. Queue taildrop only + * supports byte units, this field is ignored and + * assumed = 0 if CONGESTION_POINT is 0. + * @threshold: Threshold value, in units identified by UNITS field. Value 0 + * cannot be used as a valid taildrop threshold, + * THRESHOLD must be > 0 if the taildrop is + * enabled. + */ +struct dpni_taildrop { + char enable; + enum dpni_congestion_unit units; + uint32_t threshold; +}; + +/** + * dpni_set_taildrop() - Set taildrop per queue or TC + * + * Setting a per-TC taildrop (cg_point = DPNI_CP_GROUP) will reset any current + * congestion notification or early drop (WRED) configuration previously applied + * to the same TC. + * + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @cg_point: Congestion point. DPNI_CP_QUEUE is only supported in + * combination with DPNI_QUEUE_RX. + * @q_type: Queue type, can be DPNI_QUEUE_RX or DPNI_QUEUE_TX. + * @tc: Traffic class to apply this taildrop to + * @q_index: Index of the queue if the DPNI supports multiple queues for + * traffic distribution. + * Ignored if CONGESTION_POINT is not DPNI_CP_QUEUE. + * @taildrop: Taildrop structure + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_set_taildrop(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + enum dpni_congestion_point cg_point, + enum dpni_queue_type q_type, + uint8_t tc, + uint8_t q_index, + struct dpni_taildrop *taildrop); + +/** + * dpni_get_taildrop() - Get taildrop information + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @cg_point: Congestion point + * @q_type: + * @tc: Traffic class to apply this taildrop to + * @q_index: Index of the queue if the DPNI supports multiple queues for + * traffic distribution. Ignored if CONGESTION_POINT + * is not 0. + * @taildrop: Taildrop structure + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_get_taildrop(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + enum dpni_congestion_point cg_point, + enum dpni_queue_type q_type, + uint8_t tc, + uint8_t q_index, + struct dpni_taildrop *taildrop); #endif /* __FSL_DPNI_H */ diff --git a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h index 383649e..41a4d54 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h +++ b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h @@ -76,6 +76,8 @@ #define DPNI_CMDID_RESET_STATISTICS ((0x25E << 4) | (0x1)) #define DPNI_CMDID_GET_QUEUE ((0x25F << 4) | (0x1)) #define DPNI_CMDID_SET_QUEUE ((0x260 << 4) | (0x1)) +#define DPNI_CMDID_GET_TAILDROP ((0x261 << 4) | (0x1)) +#define DPNI_CMDID_SET_TAILDROP ((0x262 << 4) | (0x1)) #define DPNI_CMDID_GET_PORT_MAC_ADDR ((0x263 << 4) | (0x1)) @@ -326,6 +328,33 @@ MC_RSP_OP(cmd, 0, 16, 16, uint16_t, minor);\ } while (0) +#define DPNI_CMD_GET_TAILDROP(cmd, cp, q_type, tc, q_index) \ +do { \ + MC_CMD_OP(cmd, 0, 0, 8, enum dpni_congestion_point, cp); \ + MC_CMD_OP(cmd, 0, 8, 8, enum dpni_queue_type, q_type); \ + MC_CMD_OP(cmd, 0, 16, 8, uint8_t, tc); \ + MC_CMD_OP(cmd, 0, 24, 8, uint8_t, q_index); \ +} while (0) + +#define DPNI_RSP_GET_TAILDROP(cmd, taildrop) \ +do { \ + MC_RSP_OP(cmd, 1, 0, 1, char, (taildrop)->enable); \ + MC_RSP_OP(cmd, 1, 16, 8, enum dpni_congestion_unit, \ + (taildrop)->units); \ + MC_RSP_OP(cmd, 1, 32, 32, uint32_t, (taildrop)->threshold); \ +} while (0) + +#define DPNI_CMD_SET_TAILDROP(cmd, cp, q_type, tc, q_index, taildrop) \ +do { \ + MC_CMD_OP(cmd, 0, 0, 8, enum dpni_congestion_point, cp); \ + MC_CMD_OP(cmd, 0, 8, 8, enum dpni_queue_type, q_type); \ + MC_CMD_OP(cmd, 0, 16, 8, uint8_t, tc); \ + MC_CMD_OP(cmd, 0, 24, 8, uint8_t, q_index); \ + MC_CMD_OP(cmd, 1, 0, 1, char, (taildrop)->enable); \ + MC_CMD_OP(cmd, 1, 16, 8, enum dpni_congestion_unit, \ + (taildrop)->units); \ + MC_CMD_OP(cmd, 1, 32, 32, uint32_t, (taildrop)->threshold); \ +} while (0) #define DPNI_CMD_SET_TX_CONFIRMATION_MODE(cmd, mode) \ MC_CMD_OP(cmd, 0, 32, 8, enum dpni_confirmation_mode, mode)