From patchwork Mon May 15 12:37:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24305 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 3BEC95424; Mon, 15 May 2017 14:38:30 +0200 (CEST) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0074.outbound.protection.outlook.com [104.47.32.74]) by dpdk.org (Postfix) with ESMTP id 3D3163257 for ; Mon, 15 May 2017 14:38:21 +0200 (CEST) Received: from DM5PR03CA0057.namprd03.prod.outlook.com (10.174.189.174) by BN3PR0301MB0898.namprd03.prod.outlook.com (10.160.156.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16; Mon, 15 May 2017 12:38:19 +0000 Received: from BL2FFO11FD007.protection.gbl (2a01:111:f400:7c09::134) by DM5PR03CA0057.outlook.office365.com (2603:10b6:4:3b::46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16 via Frontend Transport; Mon, 15 May 2017 12:38:18 +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 BL2FFO11FD007.mail.protection.outlook.com (10.173.161.3) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Mon, 15 May 2017 12:38:18 +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 v4FCbxNw003970; Mon, 15 May 2017 05:38:17 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 15 May 2017 18:07:33 +0530 Message-ID: <1494851864-26029-11-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> References: <1492607395-5922-1-git-send-email-hemant.agrawal@nxp.com> <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131393254986346336; (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)(39450400003)(39860400002)(39380400002)(39840400002)(39400400002)(39410400002)(39850400002)(2980300002)(1109001)(1110001)(339900001)(189002)(51234002)(199003)(9170700003)(8656002)(110136004)(498600001)(38730400002)(53936002)(2906002)(33646002)(50466002)(54906002)(48376002)(50226002)(189998001)(68736007)(6916009)(85426001)(2950100002)(356003)(81166006)(8936002)(8676002)(86362001)(4326008)(106466001)(50986999)(6666003)(76176999)(2351001)(36756003)(104016004)(47776003)(305945005)(105606002)(5660300001)(77096006)(5003940100001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR0301MB0898; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD007; 1:UgBkKLOOmpWN/mV26S8GVJrsJoToaEwmRva9qDPflNFfW7cAh5UOxV8Q7g+sAJjsWDoPdHJp3BGt1vsc0SSWT/Q3Wy5SNPd3xbl9uSK/tZ37O/AlbQyTdIwNwEKRUTvNqnNCxdu6nRweOulu42nPjczswWUClCKhfxBscE7fhnY9HsSeEEBxxj2w9xQplmzlcE70NFnbPO2nFRY0x/1yoZM26HFZH5/IIpE20sang/iIcGRD/Hc9QgwDjsUNReb08U+1u/Sb4oMMZP84DLs9QX52krSLu6KCLKCNbU5DTSuE4Vl77K+VibKsmtfS16OQyAFpdghFuJ3+o/1r+e6OgXy6oYsYHUg/TNzNCDhKgwvmdU4h9BlgM8JA770QeKTrQAbVHknT2zVHq20a7Zzd6FoiPSAhbrvYgV4Ax8nbpt5GSeNuKhbrX8A+u93dIzyeXCjn4lT4TmDvupJ5vkj2B220zeEKfc9MqtTIob++wf6e9Wzl7x46FZGEQx5gpBa63tku8TxkHYWV9X62vPBs2Ct9NvMx/EBP2UHCbXNG/saq4/THcuvmAtekgz6V/0eISxrKsKPlPmobkJ+CTyELIPLqLc7ilW4fdN5AUutN7Yw1Ij5eppiiCjTytWZZJZn59eVccHBWSzwW/DvOsZsIcrOin9FR1yVDViWEEJsmPKuWI/vbhw0FSZmhdmujv3m4RZ2kCkUEi9J+bLCSHM0wO6k0hS4LhqHd4TQKvKoJATCFnuWfAijAO3SFYo9TyUpUyUFIPLLCSKxEcNTkZNcGHA== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e3dba0f-47f0-45a0-8dff-08d49b8f43cc X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BN3PR0301MB0898; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0898; 3:eSp2gJCi3SHNsCq9hlOk8NIoOyK0HsiImhTKszAasPUsDCSxODJxJFV2nMu0tRqYvpMS6OMipGKK7gzV7+Rvx5CyQE3VFcVRMOUAXSvegbb/Cxw6sJ2GozzzW14jfKbTaEBA6Xup/oz6ei1bUhOfR2bmyqYGDJNyeysCmPUvqFyewPhvVBtZDgwAd5H9M0Mr3QJzaUuGJwWPc7vCl/tsA412sqBfzQ8S+mLsG4cQuK7slGvPDMKHE/Om3LN1eu2yjKE6Yk9oesq8TvTyoxDW/j6lY5gmocwRJws8Og8Os43jv5yALp232YGgSPCapFFHhZTMDqG0yeP8lUrCoKVf9qmnjUYL3qML54KLwQN4BYU/dXP3RQ6vC9Yq+Th1vNpH2r8LsmVtGBxVBWgmIBcI1Lb3bMUKA9qIZY7gpqvv36dMpYEJFVBOz/2Bw6NCtPgR; 25:jDBgSCjjYT7deMcqcYeogoGugTlQ7e5mOHd1r8pgGce+kKooWzc0us4ypNCWCRn8ANLhlwwmg6FxuaQOmqBfa4AisQjNCyigOrWbAOQPtkXUp493BCqd2EfAzSKLWkxLTBbwhIH9rXHBzNZMfk/sYxZhBh0nU6MC8007aWBbItqpQB0mFPj3m3kdzFyQuxmJJmQns0x60AfsJvFeDyuXpW0aZ+2w+7W9IhczNUSu7BwuPFuCTJy2EL0pNADV+LfzFYXo5bYMgguoNexXQMFU/oznNYK00aqUp/71nbfghV/aVYVz04E/VhnBwEvRUp4xVyHAJ5ifutokKD7EXMhMGFTaXAn3kGAvRya921HE+EG45i5S088B2yAm5reRZZNM3uWwlZBvQ2SiZVzPsrMIGbIlKewCJtoCeuCeQUTP9DIVfQ8tIKtfodZYiT/uugAUS2To3ahS0aZE8swnghYikw== X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0898; 31:tlqUk+GAw6GQifC0DAiCQSiHONqzw5EL0xtqnMDMmAvP/GaonnK2j9L/CK1uu/QTIMEoVdVANmz5ywqRkK/n6xtdsSx8VfioyRZayGpdyoNUbb/3zkCV8yLRFf0N3kXMEmBNU7VIZrMj5Xz+/petokH5Td/bTVeEV58GbzJzh6mwsAowE3lsHwH2kfVCYqzUJfj7LsWMaQeeghrh3JUog/gX9l7ZBj1NKgyxiWcnGK/a7XZB7jSKwuf2z55oeFwYnIGshCkpqBEFnWyrQInUAA== 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)(13023025)(13024025)(8121501046)(5005006)(13015025)(13017025)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123565025)(20161123561025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123559100)(20161123563025)(20161123556025); SRVR:BN3PR0301MB0898; BCL:0; PCL:0; RULEID:(400006); SRVR:BN3PR0301MB0898; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB0898; 4:RI3887we8z5+7AsD+sefgtCqoCLK2IwCMxdvI5qm?= MAbZt4+map7170dDtnhGvQSjkzAg7yRpEbOPJycPM1KwIfi1Uqmdd7wBmAmDuQC1hKp0WHEqylpRB7fgZV1WixXcqartuj1U6Bm7osUKhF8dUJKCMFQ0urfJRyfx2DM0/CFIHBuNjGdfJzCHL3p15l7Wb+6cGrWZqsObmXjMqyAnve2IUktqW8h1+l9Lq1NIoJyNSq857rXSC0sW7Z5AHljMrWKBWbN6n7CRKobCqGVSMvW+pz0HkK5I76UGrLAujA/kYsyt7HCRtVdf1ne08Ipr8qjwzsr8fl3VGJ1X+PhApJ8N1aHvMR5Wys4HCP4FqfMJIAtjEO4Of3EAvMje9VXJq4NEcNKU34Vg+g7xl0tmVu87dTaWTHVnVeWUurv2t8MyhDnCA96OpsDS3NYVcwb/DaAbBlodAiofb+mHYrh8f0Rlx0sopurYPEmXEvLrDx2yz/tzu6h9Ov03wtJagefGiC3tub8R1ptwXQe0xzy9xz+m/E1z64ruhCCVhjwiqKi5o/0hJgbaPG2SJy2DiSe8kkJ6//8byR0xU6gJz4RKg65CZH7+9hCGaJJ6kjsRsKBKuXWv2A8liLk5+TjwC7W6F4xCsN8ybG7j6pWs9wQGTnV8MMpWG14H4JJktAf9BIlwr70lY/G5m5SuaCJp2Xhn+H4a4bFs8PQlifMTD9DzwbPHr5pKsJvfTz+bvw2NZZ181E7mdUlIo9bUGpQSP0NlDFwgHQxUHDiaVOoPTr7ZVXR434ZV0iwCbW3iD8nP+vpXkNov/0EItDmM0qZD7Q4o1G0rs3AXYc8+4VbBOhPF5yLQdYL/KmslGGEKJEPmQK2IOx/tIIOLWVwKubIqieMpcncnFPy3eeMsHvm/1OoXHkE8azlvaKSR/ssJmtk79skHTJuVfRpLJuesGA/3vlVQZex0FeYJXyvGKw744UXEMP9/RYFINgSh7dwkdmNgYQE= X-Forefront-PRVS: 0308EE423E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB0898; 23:/PNeMuzBQLMwx9Wu35NIRg3vCLg77iYVj0l5zCb?= Qj40AM7Xxrzek+J1Mko5GT0esCQTMT2IiNjqIaLLRMsjlSCKOMNq+7OwCbhUbSAnm6kbWeyF7Sd68cqsDPbwgVoaoavFpJjYJ9TL/O0qZVzs4gv3aslG/ice/C7tK+2G2HmS7nueZ1KEfluIzg/haEIDsDUmvNzhlEEQ+eVfEe0hAV/DJ5voE127BR1nUL3dev0eCFvNO8NZhQxohP2LPTTa25FSppK/zgSGdeEBM2CoI/Ur41ereOSz+UH7QZJI8AFisiakGwmM4YPgExYg8UPjPVX9N3i/PebI9736KYiWBgsslkQpz3x2YRgLTbrXD+EHCwMW4mFCcEwRjEcnyv2AS/+g0i2eS2B1mUv9M1w7THN3ifABGBcusKYzHL7Tvkgj3dZLyhlzoVNbpl3gQRk+ZlExIoZXQvTfJ6Pr2OPLBu4S35MhR6Deud+V4ZyvXwjRpdldlYrdTk1kd7+5gaPgH5c7gZKg/Hr1ONt8C7kfG5odIPKr7Yv+8jxU2nb2uER12S2eNldlkapqhpIsgQ9zdTVfer6VKBgxI7r3NIQDif/M7h4266R1V+VwuvOWOKhgOMMnebVMui0xMGtpQBb1+r0DSyCqGg+hq2ob+MFETWFWKKVSUNmyASzDZFQLGG2fpKTkQfRG9BwQm4VuwcXpxEREg8u9fzBETsyrz0Sofggtk6YNBB0SyNUEPyvyhUD+xqfPHXOMfbLR2c5n3hNb8i5dhheBB3EFJKHUdnSSqJdPDy+fqjkR5DIP3zXpFt7vUIVJzG7n7jx8rNfp0SzNf6nk/L4YdOypYOENgOHed/icBFGAnsPfwENhAWLo8/Cwc+v6Ouzw0XTldPlCdsvjI7bJkzEeE4D1ccd0FR2C8hIHQHm+1z45vb5KDgQVpG55MhHiwWGr8kwJZeNZATbOFEcFk5osgUIe0E/ZIJqDB2rMZjVCjOtFNLRulYm4bGAzeW1EfhYB65Iq/n/eJMXxjd7kn5Yv0x/K+t7alAZmeKTu9p4bmZNaJMJcdqAwHVMp0yF9e5K8cids+YhJnVb31T6QJAwRQGEBgh0EJZLKNTBAiuSxJXEdW/MQ4qfn18PlnktPYb5DSTlf7uikL171Bnx2mXzsgl6QfxQx32qs9bpkUujLK5Q5Xr1k436/Ro4NY91frhnW4b+Jj7Wv7vNi+tMKDpMxdhjoroQ6pM1N1rfUdGlku7H7xgZd9ocxQp1tQSF5elISAK3iNVK28taHmj6nC8OUZGgvMHiyPH/3L0g== X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0898; 6:ddnqvvaWFBkXNn/VrE1mzrgPDbooQAa8PkNlnVe5qVYfNmzH3Kn+bWCc7cQXR5bHM4cv/Z5Cwzcl89a9cgssnESDhdEyp0EyhPVOsrFxo5Mz1h2oJRmUFIYZ1d94vucaa3GZDfyULG8wmbHDVl/Uzicde+j+o1TY1NAah6SAtriHiW6rP+lvOY2pA64aeS5Li3FHTq1uYgD+XmxtDPqZg3dqpYPXkepmpgUJy86VzqSIR6ur/5KVGQjX/vqucmOSIdXLVq261yoTwxUp++PtQZf39pS+blKiNZKxwnr6CX2B2GMH668x2TK9dA++yDSk4Ar8954OKqbiwXmIIUF5Hf9J01lw8auAapH0AqIQXoPcYv4KKbUkj+aiV0MsIM3ml0Gxk87OnXeE+XvLITA9sPN0RSCj6A4GyQGT1KzEt+/BHlibAlVN2QMdtc58L6BAtXD0me2veVVua1vC+Ys+HZvhjJWi9QMVASltQGiR2pewRTqnAuANurS+XCZxLK2wP6w6UiM5DG4K4rJMYiSnUA==; 5:WmFBe5N3Xu8vMjV2vPn37v2LpML6+I1bWHbxP5y84nfGE4X5n0RMHpFYGuYzYKpUVNcaiL76UauranUS6hxm+UsBupVmO4uHbkfpcnQtbW4kvoebXlCWeC+GbxD6Qd50YU/GcT0cy9bwF9KOX3eIHR8QXNSj5b2tMtvG5ZIPzuT5OvZAwi1KE6BOUwUcticP; 24:YG/AGXX0CvBUHb+JaxJDzAWppeQb+COLgXMj7WpvYaNFwPoEuobWFsRuoJR+uP8NPwgZfHtFrQYcWBYZ30gGFbExfgddaBGtjXBT+ivv2JM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0898; 7:udlkm/PcgfnzsRXI8SBhtyQW3xYOsSBu9fuwiOVXYC9swGmGNbEn2xmfvp74vPW4g0W9bdMZAP/fmTTPMuzwfBLCI1cTaFujpJiENvk1C4ParHkBqcnwKM3Gmugt9F9Oa9hj/533IljIulwsAqwf4AZUiHbfYrnoulTY907axFf1b3lIdcm488Of1gWXXmNl7/UcU526I6MvnX6nTRPN8+fcIbUs9Kl6kFlMN1x8Y9ktWxwqgVSSo9hcNNBwmaHkiIQzUdWItmnBWqjQltMJiMzu8EzymOQemGwZFYidCrAU0g/+tf7OTC9hGoCH8vqb+Ug0z06+axb+pM9tFEZjsw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2017 12:38:18.4630 (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: BN3PR0301MB0898 Subject: [dpdk-dev] [PATCH v2 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 practicaly 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)