From patchwork Fri May 26 06:51:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24619 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 387B29B55; Fri, 26 May 2017 08:52:01 +0200 (CEST) Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0050.outbound.protection.outlook.com [104.47.41.50]) by dpdk.org (Postfix) with ESMTP id C045F9A06 for ; Fri, 26 May 2017 08:51:47 +0200 (CEST) Received: from DM5PR03CA0023.namprd03.prod.outlook.com (10.175.104.33) by BLUPR03MB167.namprd03.prod.outlook.com (10.255.212.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9; Fri, 26 May 2017 06:51:46 +0000 Received: from BN1AFFO11FD012.protection.gbl (2a01:111:f400:7c10::145) by DM5PR03CA0023.outlook.office365.com (2603:10b6:3:118::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9 via Frontend Transport; Fri, 26 May 2017 06:51:45 +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; 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 BN1AFFO11FD012.mail.protection.outlook.com (10.58.52.72) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Fri, 26 May 2017 06:51:45 +0000 Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.134.28]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id v4Q6pQMY014894; Thu, 25 May 2017 23:51:42 -0700 From: Hemant Agrawal To: CC: , Date: Fri, 26 May 2017 12:21:14 +0530 Message-ID: <1495781485-2236-10-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1495781485-2236-1-git-send-email-hemant.agrawal@nxp.com> References: <1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com> <1495781485-2236-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131402551052628097; (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)(336005)(39840400002)(39860400002)(39450400003)(39850400002)(39410400002)(39380400002)(39400400002)(2980300002)(1110001)(1109001)(339900001)(51234002)(199003)(189002)(9170700003)(33646002)(8656002)(2906002)(54906002)(50986999)(76176999)(81166006)(86362001)(8936002)(5003940100001)(106466001)(105606002)(85426001)(50226002)(53936002)(36756003)(2351001)(81156014)(8676002)(110136004)(38730400002)(6666003)(2950100002)(6916009)(5660300001)(498600001)(47776003)(305945005)(4326008)(104016004)(48376002)(77096006)(50466002)(189998001)(356003)(69596002); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR03MB167; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD012; 1:BdfDwgvimVp2dSgySilwHXRy3HEh6Kq//QGeiPwVSH8PMBGu0q5XI2S+vxotkgP3c/ir8GAwrrSKpU3KjgBLarz+2oeAJ9etICMZQuGhLp76zj9qhDLxVY+BidnpOkbat1X8lFr5+I2hmQCDXEU8rzLn8xi/39rDuT/iaSF/fRqV7NdNkO/LOYcQlueC+ss+bQ35C5oRdfQqA8qPdXHqfpU4I7RfnILPnm0XFOjqLxqtE1o5QWt/OuI0b+zYxNl7w83mmj5S+ANTAMlNzOkchWQdgoAfrsAGLsMGC5P9T9eh7dtYSJp3TWWQ/XrwmESaww0GkjTDXX/0j5zxrA8Nhklc0LVF+OtieUWobKzavD6iyjL8qRMxYwgnWEXdOZHB/OKr9mfs3iJDvXjt/xC/kpYyr2fvkvsaMj2X8qmb/lwiBXZh7v3T+nb4lEE149bJoyLHfppB8Y+Vd0o2X+jnJxMSW1qyixZDOnRFyUsAisXM8m6VopzZfXoCPDp5hAkkRbRmCEsWIdWkFVv22VwJPmBTo0vKrdFg5RYJeqoKXN3PXEW6SQAdxMz0b2DzV+X3epAF/jelMMj8Zt7KYxpku2r+yBecw8LDKOWDGlnrvlFDfHScR1EhMdyFd7CrEdKbeV/pe1exV0zDabYe6A7qlfkiZgpbBxiDQva5WK9xPp81HpqLVnO4n3MGg67TPh6Y46iuQOuCsEzeZz90x/0OZw== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BLUPR03MB167: X-MS-Office365-Filtering-Correlation-Id: ae493d61-3239-45ef-0f22-08d4a403ac87 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BLUPR03MB167; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 3:qpcUshVLQlBsD77+zdwS+OW1FIObuFyprWSBJC1x2q26UidthDSpLGXDUlW7U9KYk9q+h+MM68h/+wdT3290NStGUmq5xuGUk6Pt7qQ4z3d186EwovP4YZYqBkjSC1SOVVERz8lo7vyVXte3Iwp91YrrP9mELrIOXjjazyp3fwERIP7LBvimQeRkpxSwIh+q6c2zJLLnfS4VpJJgttLlzYyhpqIls5gwNUMRYQe2W/ANhq13QEoeR15C7d8bW8Pd+rllFrh3lnET8tP8eJqHmL0EGIA7ryz1XosKpLFl/pIy+Fnsz72LSRNoQDYXsdbcm57DB0yFc6ggNEgXK1DyWetZz/AUdB014us7c+lWco5fbrlqmi8xGXsM46SrTAoAVptZMCch83Tk9CjJfTUQ36SlQpY+LRqP7hFeS4TtC8LMY+A+j9ZTXWDcj6PGGDW+; 25:L/zT2FEtQWgNmaBa9MlMCf3nN7OnmHkzOBBbEaSS7ucIrnbQZ4vFFhbRYJ4XiNcqCWBzMCM/gc5ML2D1R7fGqZeefO4439iFwyK9KpB2qqEYG0J8KCyBMkW4I7sc0K5xJGrQNsw2gta+C+rFXuTk3uEAEuXntuUBVyRXIX+ZgQGsZJ8TzSBPf7OdjBNwjqFhUr4fEBdxUlPfqbOBbIu20xn0Z3ee+SiWHc5xHNI5qB1JnOSOszwCWfMaTUMP+BTobNhVUZafhF2seHHovb+IIWkJhAUemesUFOJznk6hr2llnwrxvIaiEnFUQL+WO/iL4mggMrtVFsgsvYjqCt/cV4lUAp0GRHq10/qip5Ec0npRsiUv1f7GrKYNnUAimU14jhGt8f2cm7eevysJ2V6MO0HWd5HSpQ/VMKbPQY6KVrRUTfVYX29XN28j/NdLspQLRIwiuCgAi18GSMW9IF3B3nsPeI/oc3fKAJfs3cKWQ4Q= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 31:35jVyW6GcdvwMqkyyI5qCg+nSJx8uB2T7aJgLo8GXQ/taBEVMO7JW7jrx4Y403FisYqh0n6D19KZQJo3ZLDo2oAy3EaxIKVNZa3snYrEiW55x/Vfu6ioWzVvHOQoYmIwr6W1CxayXHzILYfRjlyp4ofrqCsZqqslq1pIRxhgfMD50+zu4MAkUfxEP52MCMAeghmjkmUAIliPKo2Gx9WbLhcyq6GW3wPuw6KA3cPuTnNEiO3mVxtmVkMg9ZEW+M5yittl6EUQbMTPjHR7gMVTZQ== 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)(13018025)(13016025)(5005006)(8121501046)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123565025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123559100)(20161123561025)(20161123556025)(20161123563025); SRVR:BLUPR03MB167; BCL:0; PCL:0; RULEID:(400006); SRVR:BLUPR03MB167; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 4:mj6C03bMWJ6h/XUd2I5LxSYUml/n59PnA5gXgn5Ue/6bTBuxBtr3R1gKqdE98Zor4b9y/wDJdVR7HhsQtb8517+V+bgrW9HAfVbIAeLxlMUQt72ulzKpxdaRBl7EM3K0ZmSf3hTVKMseVGhErYqaJkANf2XyCqvAm6EV0fZIsjOG1rsl53rWxNie5eEwjlXNPnaCpWFcicmwJXFUrSiy480Ls7rLoRN0z4tc32BhsyTAn6T3z8KBQi5ixa8k1fYF6jAk8Oj+nlrjIDxvuUbhroDB877bS8NQHUHZvkAV7GDyayvCizvWAyq3TmCbkXwc3FmtavntIt9TsNiMkcWy2uAGsoGG90dj63euE3XL3EZguRPMhTsKbiB3aadGSNwt4KbN/7O/niaokotSbWabmlMyg9Gq7PB2s0XJ9qxHLXxsPrZhPYtGpRCBwW6cbHSztUc+LMRD1n1DIW1VNVu0N4CP3GZPqabS3T317Gw96hKTdPBF6cRQ4FSz78tq7OjtQxceyUUv2OceiOkwzK2jvfznUQPvNewd2usSX2oItD12rzbUowYnPo5fJ2QdnkxCa9958qb9zdzvNXDpWR00YFTLaqhIdIZMERoWMmlXg2TEpL5Srhwt44aaBzycHczXjRob8QEsWhqF9cZaXCLdGVcpeGMzSHtPqGlblMPhhTWujz8XJATikc2Hdu01II502F46Bx5+UUEJvFQBVZlRzKpjzeirDuIqTDET5+5x+va2wJsVtN5MSxYsPS/e+kf4ZuwXufl5SRizTgFMv4hFzJi00dNEGspy2vd2ggviDaL3V6L4HdGAMaaPynTWM7fUjN3T3AMMlx7w9TTbfWHHBIpLAMydyyft/Vx8W3CPF1vJ8j1Y6iWgWG1YzDjNEOeweeb86J1PVdEIgtXlPEhzBi8Q2u9Hx4lg4jiszISO0LtNZjRgKn6IQY9OqhXRMwz7 X-Forefront-PRVS: 031996B7EF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB167; 23:CVqYIV3Vw4aYY/TsnmgO8wbN7L35xqiOdmNsbL9Rdj?= qWm6voI3PamRnHWmrw4y86UnmGO1ObU2a9/D0o8aA2CgjOo74QKU3R3XjkGGPlHRpgeyhBv4dhN1tg4DwnHas3+X8MURP6LqBt9zeJEPo5OgqIwsvOOt+TXWlPNiBsAdeOu4D8Cw9uX1hllqEOmcUih7znqxkFrhMHosTVtqEl1XQRdBXhSUmhnxjKrqMDzktqBkgknAIOS55yRMd/ZLoqsWN5x/RVb5pNHByG3I3q1Iw2RQWmsx1TOkyoAFs+1cGUakly25fJNQdiyNCm9JS8Fwef+jXOPAbZGR3O51ODsfKud99gm98FqD/2ef87E0w5Uc7vIrJ3pFWxG6CalTj3hDVQgplJfE5HY5+EFq6t4mfBqspw1MlaUzxC04qNsuCy9oaz0pqPHq1yfoJoMuRyS6p0RRTJG7pS2OlSezSrSc0w+YlSdxClaA0eqJL7A+fROFXy02170BGWnKUYl3WhahDuS3RsGqQL2edwLMI4aB/ZFNQnlWYc0gqghK8tvCREQUSjjEz5PqlgcEnaFxmZo3Y+WnobRuc9ZytQ2Z4bIC/sS3KHPI7mQ6CSWVVUZbQflinycGWZ4a/xV7XJKVVIBcuyUljGmqG9hd25gikas4QNTg0LNGxOhRf8L9pF5JPT4YQ0iYICpADw9FuMd0At+Ssd+Ne9HDKKb1QESc0BldNwgoZxyNm0+19UyIIodqUxSLQSTpm6NwRqhfHJjNCN93Au8BD8Cz854+k7JR//iYQqCJRE7UWp2QmJq0a6Isoz0fQN8GNTlsSwXzgxRdjN/0BTsJpBd5yHSR+bmryTFASU7DCQg+gggsHcyE5lJPCslVLFeIlIPVa682tgrLVfg5N/LJqVV0ruCvX1/1AERXwjR6lwF/kYzdE4DcnPfs95aqPegF929nfsfqBMl8CFXDAFwDOPdlFotAGsjsUTbhyPICztNmlau/leGRnavv9uZyUaBR8Sc1dHubtY4Ejc7Oedk9SoT3KchUM9r8BNaIfqWmhkwA1W3yaXnqKejvDB4yugWEkCs3n4m8pHQ4H3E+zuEx7kN3cxLYEcD12ooNpr2I0zyrRzOir8icDZhfISAYzX+dYFJ+OiBnF2jLQqDFNgtzqKKVD6krHilmKn/vLWSiuvJUFl/3MUZutf/B19Nss/M84O8x2YA564kcQ17vCplupzcKc8wEKJYZ7AvV89rp1ifdkOquVcfb6Pjw9EWGdldZc3bGWO8dgKY38vwCT8xyQvZkHX2CGxUKs1v9b3brNRSQJA+XNvx2gsjnw= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 6:wKL0Qi7IuqddxUhunqWpwPEClJZEPF7NPHZtP3WE7WH71fwrzhW5nq6TvZJ6jreLBJch51Rhw8VEemiReySxyGaoks7OS0OIqzaETMba+7CMZllM8Cc+YeypAtmzvVrCKaqfQa0pORSk6fr4wsNp6kEbeZcABmdQbdcN2R4ib9ZRqoE9cyN4LzUZfawQCc199MEZP99rJLXElmG8hxp4MP87GRMlJr32fQcUaMmg61i+am2X7npal14A4383qnrIMradwJHXuHAZJMNuxJeouMfdFLkA9R4/0zc9DhrnmvOPLY9LWk8Od4KE0ypMLjsnmIya5zCpQ/19BxBzWjrbfmPZlgQ+9bNQaQsTiTGH86k+J5fOLOrlJ29YbhbA8qYuh2tPFnB1zCwl4GpmTvPSo73TcNZ/45wfBurM3xYvpCHa1/E0QmPWQLbYdzmBf+4YldwEJfrwFCY5fZkhlqjNDBCUMw5TAhtQb5/0rDgdRcSqBlXPkpiZ5Oxt/nI3MDs44UbPGDQqVyhpWYgBpZ59Aw==; 5:r1xn88f9BRaUwyqkZpZxz+E/8lVaybWek1/acFgmEu9wcLz8Y3+8rwBEJgNdoNk1gw5IZenE9g8jgqZaSt/H8g2tXMDLoSuqw72qXyzJKjKMPYB+bDh+eSVvCnjZsDFeqZhflxGOQW1HyQFxKd6x3gL0ZFaXMKpojei6Te/BzlS9931AHEYzfwHzCt1weXiC; 24:cuGOhLkg/AfVDbxJjLTdW0OExho2n2pF3LyE2uvO7NlSBE/cb8lFw+SP5N90raae7k+9i3FktS8uzS1kc+ybkR8QH/tC7VA0uzfLQYQfvWM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 7:TndosBsFyTzO4CU6kZuqDy0RTYGg/cl5mvj2rQBF3QSush3yh1Vkt3yzXAtLnNyQZkiEu1oOhap2stwWxlrH01zx3d1EIps5OdL4ntXIjZnJ7JAJcrLCWTgKfRhHkTmw40wpGhmHR/XOTC39KA5scYwNlx9gJ/+FaX3xTgbiLCn9yF0qTt48MvbcKWCSKYudjJJxgCgu7KIQ61yudncJRC5Osx1ljwdhzNMwyno7UULyuKW/MqxJRF/sP2gTkP4q2n4Y/jFh/PS9hHGDtr/ITfYZ+5lyH1e3CSpSWXgTsmNzFFUdYe6U66K61oT4U/RMyPPaXWcgkaC7NxQLOijjpg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2017 06:51:45.0288 (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: BLUPR03MB167 Subject: [dpdk-dev] [PATCH v4 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 3d1f81b..21aedef 100644 --- a/drivers/net/dpaa2/mc/dpni.c +++ b/drivers/net/dpaa2/mc/dpni.c @@ -785,3 +785,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 2b6515a..8783af6 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni.h +++ b/drivers/net/dpaa2/mc/fsl_dpni.h @@ -1336,4 +1336,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)