From patchwork Fri Sep 8 08:45:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 112025 Delivered-To: patch@linaro.org Received: by 10.37.128.210 with SMTP id c18csp1242782ybm; Fri, 8 Sep 2017 01:46:28 -0700 (PDT) X-Google-Smtp-Source: ADKCNb67Xb8Xo91FQgXjDwXGIZRPL2NuDwFM+flTJB0oxnKnXWQ+FHL5vkVMQpTsUBUCr1H3E1mA X-Received: by 10.223.186.130 with SMTP id p2mr1355893wrg.47.1504860388379; Fri, 08 Sep 2017 01:46:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504860388; cv=none; d=google.com; s=arc-20160816; b=tbcDX09mnQgr2rOCMv6nW4clf0gr4Ws1SVFwh+KkZheBPlVq5myCt8A4jLuNmgtwjK ZxJohcl8nzLXU86OZ2+POxfFVSeDYmF2fSAkIPEWDsDhkvzvTMwjfqOx4uZkoooyjav9 Fz7vwHBrhvxeK6BHGS1FFuMUGP87aYzw8PvU/JGu4zTQpt/le8uInNZl9A7wzpOrUmnT UUtTyNwCGZaNAo9ier6bp+p3igUbML+Oq17eUMxM/cukCrpBEI5TvnaSJlmuNQu8xYJ4 vQD/Grb5sB2ICPZgQPT0j8/YIqkU7xWlPf8W4/wGqVx/oEvEgeyDLEe1ZiYQtURRtk88 nDPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:spamdiagnosticmetadata :spamdiagnosticoutput:mime-version:references:in-reply-to:message-id :date:cc:to:from:arc-authentication-results; bh=T+AeHQS+nzkgRGzh2aSeyds13Sq4qKUkHzK3UHQlfUs=; b=kyzthkdo1MSfHLwjXMKtCDMKisNyZA5n2fINWOo+AKExZUPNLYrpc7a3k1P9OvAoR2 PxxSgOmCI/f+y7xn19/0LiwOlWd0upWxGdgGgYXzwyk3dnEGAPTf5QUFsZl8M17PWphr ZbguNew99I+cNV0200CMhUhj+sSHPWHfUr4dgySyBgf0m0f6uloTJrEqQqVHwjV4A4kH 1EDt/WHJwN62ND7XFWnjXF3z32EaxHxV5UTBjFEZrnoHm9W4GBJMLWmAl4ghzGB7PEo7 gAbuY/6xItzx2Kp5gxS/xR4DWI0mtEUuSM14r5b0yJ9JOtbAnWCYieDSJq6G1aUHRqZ1 LK9g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 2001:4b98:dc0:41:216:3eff:fe72:dd13 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from dpdk.org ([2001:4b98:dc0:41:216:3eff:fe72:dd13]) by mx.google.com with ESMTP id 31si1098623wrf.176.2017.09.08.01.46.28; Fri, 08 Sep 2017 01:46:28 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 2001:4b98:dc0:41:216:3eff:fe72:dd13 as permitted sender) client-ip=2001:4b98:dc0:41:216:3eff:fe72:dd13; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 2001:4b98:dc0:41:216:3eff:fe72:dd13 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 068DC199BE; Fri, 8 Sep 2017 10:46:02 +0200 (CEST) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0064.outbound.protection.outlook.com [104.47.37.64]) by dpdk.org (Postfix) with ESMTP id C0ACE237 for ; Fri, 8 Sep 2017 10:45:58 +0200 (CEST) Received: from CY4PR03CA0006.namprd03.prod.outlook.com (10.168.162.16) by CY1PR03MB2266.namprd03.prod.outlook.com (10.166.207.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10; Fri, 8 Sep 2017 08:45:57 +0000 Received: from BY2FFO11FD011.protection.gbl (2a01:111:f400:7c0c::148) by CY4PR03CA0006.outlook.office365.com (2603:10b6:903:33::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.35.12 via Frontend Transport; Fri, 8 Sep 2017 08:45:57 +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 BY2FFO11FD011.mail.protection.outlook.com (10.1.14.129) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1385.11 via Frontend Transport; Fri, 8 Sep 2017 08:45:57 +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 v888jmoZ023063; Fri, 8 Sep 2017 01:45:55 -0700 From: Hemant Agrawal To: CC: , Date: Fri, 8 Sep 2017 14:15:00 +0530 Message-ID: <1504860327-18451-4-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1504860327-18451-1-git-send-email-hemant.agrawal@nxp.com> References: <1503658183-4078-1-git-send-email-hemant.agrawal@nxp.com> <1504860327-18451-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131493339573136414; (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)(39380400002)(39860400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(48376002)(33646002)(5003940100001)(50466002)(5660300001)(68736007)(189998001)(106466001)(2351001)(105606002)(47776003)(36756003)(498600001)(77096006)(97736004)(2950100002)(6666003)(2906002)(8676002)(81166006)(53936002)(6916009)(8936002)(54906002)(356003)(85426001)(81156014)(104016004)(8656003)(305945005)(86362001)(4326008)(50226002)(110136004)(50986999)(76176999); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR03MB2266; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD011; 1:VqGOA+zVCDejVOqDStNsIQN2Cp+wJ+sKPYsxqNkGOjDsLB3hgTaOucgkqs6qtN4/I3S3VfCWDtgK1gCtoaGT2doLRcmCKMIbwBHce+YK3Ut/loeq6lavsoetJ+naa/xm MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: eeeb716f-cc28-4629-2116-08d4f69605fa X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(300000503095)(300135400095)(2017052603199)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:CY1PR03MB2266; X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB2266; 3:kK7T0q9HL0VgE/bLDsMlPNlz/fjjGJBS4ztQSfhCCb3947Pk6JxbGdEIys8VuyEH8487FDDbYyPOrGUzMehstQbTF5BgptjUo87B3JkGgx7EaYJ27O1qgrj4nkVZy/JCVeSI8W40qtbG3gxbvUf6hlSwLxFYXfev/JcQOnfaRcmaiylS1XG/Ish1PMLg0TR6+ITUZWoYprGRz76BzS42Ce/EVnDNvW+iKxaYyHSBNRBzgu4pdrIbK75hXatUtxVSCG8wgPagNS0aeFo74jobESU0R2OiKd3Fwj1EMGNdTGAvSE6jS8ZbWNPo7YVLXThFFZqIoauathXwvW7ADOtSuwrx/I7B+tzh30bs2m/KgWk=; 25:Fnzz+gYAD+3nmcwF1c1htwVCTcw+rZ76CiUxPsbXZhTHycgTwxJ1/erUIFswgBSdtQt57wZjNYKkH0/mlAyZcXnImdB0a5SIxIwIxDgvdVp7/6KXuETjfQqO+1dTEnvzcFbllPhz6QX54zo9DUEizryJBITMT9OLALz4is1SsDE3dmdjDsrcfmKhIHpCZDzSWndwObqYXmL57GeEuoXEo4BUhKTJemIdTv/ZogcDyVN2lt+5C2ui9Ghf+ij6nGMBtWVF2/IeX6lu+Cy44GzjAfW1C/AunyAzpvkTDCyMIO9NrLr+dFZ3Grj4xkgN3W8Ty8KWbWj7Alqyl8vuF6gSOg== X-MS-TrafficTypeDiagnostic: CY1PR03MB2266: X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB2266; 31:tAIiISqkq2TyMwr3/P/1S5lEN08vPb9MQ5j90/XrR6PfmC9wXOcOxbaqFK11sHkVxV/rsc40c+KwpkFg0xqY6oLN+3K/GQkaaACXinmVEUOcHW9P3vNya0Ycd7vRVcO3HpD0z1m2BdhNtdK8LGKlYfqBBRl4mAuK3Y4x5g9Oa32vu10VOAnOe8MgNNAog4d0l01sTHe/WoPpQA3hjvB2dzVRF91Nth0SujXD7LyptO8=; 4:pzmRY9jzPQAQB5Th9Ux5cYiOheu1+PvbhWACR0jJOrneC2fB3vfHTdtsKFVLuspOADMcK8/ogSY2fd0EYmMZZ5IDAGPIY0vJOu5z05Cc9I5qolDbS6e9L+M2H0F2hxGwrM77iB9WYQn9QQUOdZ6+7EdrtXGoQPhEIWGbwEVtMpB0C0VtAUO5HRkrSU4DjCWO7qyQ7YrTcvnHfPYgW13mVSzRpb5eM2h+jbeQC6wgESY28h++9pwi1fGDqvsg65MINtYVBFZckDXhNs6G+qcE232oBHXHjZYnG+eGxhEGe0oDa9fwuLy0070lxhrbR2JuOrXHnytZNAzBC3/3ezi+DA== X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(275809806118684); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(100000703101)(100105400095)(6055026)(6096035)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123559100)(20161123563025)(20161123565025)(20161123561025)(20161123556025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY1PR03MB2266; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY1PR03MB2266; X-Forefront-PRVS: 04244E0DC5 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR03MB2266; 23:vxPg6ygCXKpi8sjfLR70oIJaBosL5Mug0drNJogZC?= mLo0U+m2MX7pTDJqCMh89ig80X3oYtf5oqLli//ivEcXI3ZmJP6KfydNTHwyKXRilN7o96zIO1yBhRMyXB4dnSthM/rV+jQlfU2atvrWgEjaQqVISRpe2fYpejerOF+94YmKASzHhzrHHRap1vz3hGlmLVHRlIBz+OD5b8d6vivgOEHxMbKk51Ux7DBFcXkF9FKzeutTjQQMEUfahwLeox8CA0wsLd6hT2EuAVkwHZEr0AJGx1nxvSLIgCadgeuzvQUTPlS9B893c2tBGvRsKCP9cHH25B3q7Tg6URm0Zg45XXGviOii/qrWMW26eM63jhuWw2p09Hjyey/Enbbeb6/ey0Sxjy3hkgfwe0gy7SZXXXGnn1IxdpAyvmRmDYoSs+1tjBe3TrjmBMpejU7BM/rWKos9x5lXR1UhGZrWYTT9vZmolXlM/5W52w3ukBMfV2mA5fSXoDE1XXVVCKfAty44TPrVlI/rD2uF76YR5ccgwGX/CtRGVJBQKFYhzqm9ErFZtwMFGs9UXsqjAisYqXV63N0ebapfi4atOIwLUzuuatiYCrXYEuFg7V97Zn8Nv8iXWJKvFFYfmctmDktyXvmgI3+V5V09V5LtOvoQPQw4t21wj8yJ+wyjG2WN+xE7LpCieaDbMVCr/nII6LomVWAWaFGDywxD4wg1GDj9eTQAhN5eHfh+kTKkrAVZqCAew6WeLZ84eWVN/P6AnpYpzQ1SLaatUOJAiI5dcuoDAytGWf9+MGp76/OITtu9g4glZ9qjBO0CW/cOpiI2rWLExREkPXa0aiYEHcGHVK8PCMoQ/ds88heTjvcSaIQAUHZL//yFd00ftA+uzD5PG5hUoj7NzMo8cB0BwizxctFwQTOu8rhhIbaLLx5VqzK6s7YanNFrqO9hNHcXlvqXJSmXlUByFdXRLq6y0fCmh1O23QeB6yVK8N1lLxGSkNkPBdsbxjbS8HddJ12RXpy4Hls7U8W3BdBxEyeAMwjE2xfzTQ5hOmJX2Ijda1vlwrUHlOqne7NrBwfaziF+b3nO9NuNsGrF+GZ7SQqU3estltPq3NowecXLxVuOzm+b/Yhqvq6UiA= X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB2266; 6:bPWDtvWAl9EQSozkaXW8PH5MEKUjbzfLpXEuy1v3H/ArC3VTIjYszdOhD+FSPmynHwZcOiUk/G0p5cn4l+Ki0NTerQKBcebErFwMQYLOOk6ac5BARa2Ya1kBtbnkKT5VzLKCE5NCATapEwnDL7tyIN92BzFymmx942EPZJ4LCqi+EfYw1kvflg8ueEhL6ESjVG3yeGvKsvmDF3jJmC+ToYTO2HTb+4kBrk3ifhNh7tki1ORciM7A0KqDSzG8s2JR2B54OwCJRKR709kNaQqtW/w0pfUSLa/TdmOt9rxt1yzul8dxhLqRePj3NT8elo20Hha48/fNI99fqDXqwL2Msg==; 5:C114ebQZ7aQE+rAwhkvJw3EO2l/aFMZMcEpmTZjSYTt7+nmDkhaAYblwcZpgbP6HuYNcvtdHAF1QFi59e2VBo0VPMpbaBDt7p5wRUGc885RpueI9d6Cg+ZWgeukJLaWEvJF6a22Be2HFcbBtEVPYvg==; 24:smiGG23TA/ZoQDqwxcXlguJu74IPKvMwbTT0OC8fbNh+ufQQ/pt/jUxKl9f/rVoA51kKT7IU2J6YAmbuXFUlCTa4zk3cUKTDEq6Bjsb1S8E=; 7:tyJNJ+K8BHYQLpjAitPgwaRQ6hA6yvz30fldxcig1Ke4y7ij0pPA7VV596wEL1nbX2W33bP4GYSh3vjOuzhG6r2v+0GJK6nfvA6NhrBbhV9Vm9lXS9KqodoOqkdFBRT2k6N/wOCC1OHMAVfa+cn0Fo95twyRMp/1XBxbrthEKP/LSQa9quF031viXts/q/9Wexrqqo+5oSl0x/HM8KFAu7ptv1WpFV0cSZVBNxDUGT0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2017 08:45:57.0016 (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: CY1PR03MB2266 Subject: [dpdk-dev] [PATCH v2 03/30] bus/fslmc: add qbman API to do enqueue with multiple frames 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" From: Haiying Wang Clean it up and update the prototype. Signed-off-by: Haiying Wang Signed-off-by: Hemant Agrawal --- drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h | 32 ++-- drivers/bus/fslmc/qbman/qbman_portal.c | 200 +++++++-------------- drivers/bus/fslmc/rte_bus_fslmc_version.map | 3 +- drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 2 +- drivers/event/dpaa2/dpaa2_eventdev.c | 2 +- drivers/net/dpaa2/dpaa2_rxtx.c | 2 +- 6 files changed, 83 insertions(+), 158 deletions(-) -- 2.7.4 diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h index 23c3d13..fe1cc94 100644 --- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h +++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h @@ -914,19 +914,33 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable, int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d, const struct qbman_fd *fd); /** - * qbman_swp_enqueue_multiple_eqdesc() - Enqueue multiple frames with separte - * enqueue descriptors. + * qbman_swp_enqueue_multiple() - Enqueue multiple frames with same + eq descriptor * @s: the software portal used for enqueue. - * @d: the enqueue descriptors + * @d: the enqueue descriptor. * @fd: the frame descriptor to be enqueued. * @num_frames: the number of the frames to be enqueued. * * Return the number of enqueued frames, -EBUSY if the EQCR is not ready. */ -int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s, +int qbman_swp_enqueue_multiple(struct qbman_swp *s, const struct qbman_eq_desc *d, const struct qbman_fd *fd, int num_frames); +/** + * qbman_swp_enqueue_multiple_desc() - Enqueue multiple frames with + * individual eq descriptor. + * @s: the software portal used for enqueue. + * @d: the enqueue descriptor. + * @fd: the frame descriptor to be enqueued. + * @num_frames: the number of the frames to be enqueued. + * + * Return the number of enqueued frames, -EBUSY if the EQCR is not ready. + */ +int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s, + const struct qbman_eq_desc *d, + const struct qbman_fd *fd, + int num_frames); /* TODO: * qbman_swp_enqueue_thresh() - Set threshold for EQRI interrupt. @@ -1119,16 +1133,6 @@ int qbman_swp_CDAN_disable(struct qbman_swp *s, uint16_t channelid); */ int qbman_swp_CDAN_set_context_enable(struct qbman_swp *s, uint16_t channelid, uint64_t ctx); -int qbman_swp_fill_ring(struct qbman_swp *s, - const struct qbman_eq_desc *d, - const struct qbman_fd *fd, - uint8_t burst_index); -int qbman_swp_flush_ring(struct qbman_swp *s); -void qbman_sync(void); -int qbman_swp_send_multiple(struct qbman_swp *s, - const struct qbman_eq_desc *d, - const struct qbman_fd *fd, - int frames_to_send); int qbman_check_command_complete(struct qbman_swp *s, const struct qbman_result *dq); diff --git a/drivers/bus/fslmc/qbman/qbman_portal.c b/drivers/bus/fslmc/qbman/qbman_portal.c index 97df703..f212829 100644 --- a/drivers/bus/fslmc/qbman/qbman_portal.c +++ b/drivers/bus/fslmc/qbman/qbman_portal.c @@ -525,15 +525,26 @@ static int qbman_swp_enqueue_ring_mode(struct qbman_swp *s, return 0; } -int qbman_swp_fill_ring(struct qbman_swp *s, - const struct qbman_eq_desc *d, - const struct qbman_fd *fd, - __attribute__((unused)) uint8_t burst_index) +int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d, + const struct qbman_fd *fd) +{ + if (s->sys.eqcr_mode == qman_eqcr_vb_array) + return qbman_swp_enqueue_array_mode(s, d, fd); + else /* Use ring mode by default */ + return qbman_swp_enqueue_ring_mode(s, d, fd); +} + +int qbman_swp_enqueue_multiple(struct qbman_swp *s, + const struct qbman_eq_desc *d, + const struct qbman_fd *fd, + int num_frames) { uint32_t *p; const uint32_t *cl = qb_cl(d); - uint32_t eqcr_ci; + uint32_t eqcr_ci, eqcr_pi; uint8_t diff; + int i, num_enqueued = 0; + uint64_t addr_cena; if (!s->eqcr.available) { eqcr_ci = s->eqcr.ci; @@ -543,62 +554,58 @@ int qbman_swp_fill_ring(struct qbman_swp *s, eqcr_ci, s->eqcr.ci); s->eqcr.available += diff; if (!diff) - return -EBUSY; + return 0; } - p = qbman_cena_write_start_wo_shadow(&s->sys, - QBMAN_CENA_SWP_EQCR((s->eqcr.pi/* +burst_index */) & 7)); - memcpy(&p[1], &cl[1], 7 * 4); - memcpy(&p[8], fd, sizeof(struct qbman_fd)); - - /* lwsync(); */ - p[0] = cl[0] | s->eqcr.pi_vb; - - s->eqcr.pi++; - s->eqcr.pi &= 0xF; - s->eqcr.available--; - if (!(s->eqcr.pi & 7)) - s->eqcr.pi_vb ^= QB_VALID_BIT; - - return 0; -} -int qbman_swp_flush_ring(struct qbman_swp *s) -{ - void *ptr = s->sys.addr_cena; + eqcr_pi = s->eqcr.pi; + num_enqueued = (s->eqcr.available < num_frames) ? + s->eqcr.available : num_frames; + s->eqcr.available -= num_enqueued; + /* Fill in the EQCR ring */ + for (i = 0; i < num_enqueued; i++) { + p = qbman_cena_write_start_wo_shadow(&s->sys, + QBMAN_CENA_SWP_EQCR(eqcr_pi & 7)); + memcpy(&p[1], &cl[1], 28); + memcpy(&p[8], &fd[i], sizeof(*fd)); + eqcr_pi++; + eqcr_pi &= 0xF; + } - dcbf((uint64_t)ptr); - dcbf((uint64_t)ptr + 0x40); - dcbf((uint64_t)ptr + 0x80); - dcbf((uint64_t)ptr + 0xc0); - dcbf((uint64_t)ptr + 0x100); - dcbf((uint64_t)ptr + 0x140); - dcbf((uint64_t)ptr + 0x180); - dcbf((uint64_t)ptr + 0x1c0); + lwsync(); - return 0; -} + /* Set the verb byte, have to substitute in the valid-bit */ + eqcr_pi = s->eqcr.pi; + for (i = 0; i < num_enqueued; i++) { + p = qbman_cena_write_start_wo_shadow(&s->sys, + QBMAN_CENA_SWP_EQCR(eqcr_pi & 7)); + p[0] = cl[0] | s->eqcr.pi_vb; + eqcr_pi++; + eqcr_pi &= 0xF; + if (!(eqcr_pi & 7)) + s->eqcr.pi_vb ^= QB_VALID_BIT; + } -void qbman_sync(void) -{ - lwsync(); -} + /* Flush all the cacheline without load/store in between */ + eqcr_pi = s->eqcr.pi; + addr_cena = (uint64_t)s->sys.addr_cena; + for (i = 0; i < num_enqueued; i++) { + dcbf((uint64_t *)(addr_cena + + QBMAN_CENA_SWP_EQCR(eqcr_pi & 7))); + eqcr_pi++; + eqcr_pi &= 0xF; + } + s->eqcr.pi = eqcr_pi; -int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d, - const struct qbman_fd *fd) -{ - if (s->sys.eqcr_mode == qman_eqcr_vb_array) - return qbman_swp_enqueue_array_mode(s, d, fd); - else /* Use ring mode by default */ - return qbman_swp_enqueue_ring_mode(s, d, fd); + return num_enqueued; } -int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s, - const struct qbman_eq_desc *d, - const struct qbman_fd *fd, - int num_frames) +int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s, + const struct qbman_eq_desc *d, + const struct qbman_fd *fd, + int num_frames) { uint32_t *p; - const uint32_t *cl = qb_cl(d); + const uint32_t *cl; uint32_t eqcr_ci, eqcr_pi; uint8_t diff; int i, num_enqueued = 0; @@ -623,29 +630,26 @@ int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s, for (i = 0; i < num_enqueued; i++) { p = qbman_cena_write_start_wo_shadow(&s->sys, QBMAN_CENA_SWP_EQCR(eqcr_pi & 7)); + cl = qb_cl(&d[i]); memcpy(&p[1], &cl[1], 28); memcpy(&p[8], &fd[i], sizeof(*fd)); eqcr_pi++; eqcr_pi &= 0xF; - /*Pointing to the next enqueue descriptor*/ - cl += (sizeof(struct qbman_eq_desc) / sizeof(uint32_t)); } lwsync(); /* Set the verb byte, have to substitute in the valid-bit */ eqcr_pi = s->eqcr.pi; - cl = qb_cl(d); for (i = 0; i < num_enqueued; i++) { p = qbman_cena_write_start_wo_shadow(&s->sys, QBMAN_CENA_SWP_EQCR(eqcr_pi & 7)); + cl = qb_cl(&d[i]); p[0] = cl[0] | s->eqcr.pi_vb; eqcr_pi++; eqcr_pi &= 0xF; if (!(eqcr_pi & 7)) s->eqcr.pi_vb ^= QB_VALID_BIT; - /*Pointing to the next enqueue descriptor*/ - cl += (sizeof(struct qbman_eq_desc) / sizeof(uint32_t)); } /* Flush all the cacheline without load/store in between */ @@ -1493,87 +1497,3 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx) dq = qbman_cena_read(&s->sys, QBMAN_CENA_SWP_DQRR(idx)); return dq; } - -int qbman_swp_send_multiple(struct qbman_swp *s, - const struct qbman_eq_desc *d, - const struct qbman_fd *fd, - int frames_to_send) -{ - uint32_t *p; - const uint32_t *cl = qb_cl(d); - uint32_t eqcr_ci; - uint8_t diff; - int sent = 0; - int i; - int initial_pi = s->eqcr.pi; - uint64_t start_pointer; - - if (!s->eqcr.available) { - eqcr_ci = s->eqcr.ci; - s->eqcr.ci = qbman_cena_read_reg(&s->sys, - QBMAN_CENA_SWP_EQCR_CI) & 0xF; - diff = qm_cyc_diff(QBMAN_EQCR_SIZE, - eqcr_ci, s->eqcr.ci); - if (!diff) - goto done; - s->eqcr.available += diff; - } - - /* we are trying to send frames_to_send, - * if we have enough space in the ring - */ - while (s->eqcr.available && frames_to_send--) { - p = qbman_cena_write_start_wo_shadow_fast(&s->sys, - QBMAN_CENA_SWP_EQCR((initial_pi) & 7)); - /* Write command (except of first byte) and FD */ - memcpy(&p[1], &cl[1], 7 * 4); - memcpy(&p[8], &fd[sent], sizeof(struct qbman_fd)); - - initial_pi++; - initial_pi &= 0xF; - s->eqcr.available--; - sent++; - } - -done: - initial_pi = s->eqcr.pi; - lwsync(); - - /* in order for flushes to complete faster: - * we use a following trick: we record all lines in 32 bit word - */ - - initial_pi = s->eqcr.pi; - for (i = 0; i < sent; i++) { - p = qbman_cena_write_start_wo_shadow_fast(&s->sys, - QBMAN_CENA_SWP_EQCR((initial_pi) & 7)); - - p[0] = cl[0] | s->eqcr.pi_vb; - initial_pi++; - initial_pi &= 0xF; - - if (!(initial_pi & 7)) - s->eqcr.pi_vb ^= QB_VALID_BIT; - } - - initial_pi = s->eqcr.pi; - - /* We need to flush all the lines but without - * load/store operations between them. - * We assign start_pointer before we start loop so that - * in loop we do not read it from memory - */ - start_pointer = (uint64_t)s->sys.addr_cena; - for (i = 0; i < sent; i++) { - p = (uint32_t *)(start_pointer - + QBMAN_CENA_SWP_EQCR(initial_pi & 7)); - dcbf((uint64_t)p); - initial_pi++; - initial_pi &= 0xF; - } - - /* Update producer index for the next call */ - s->eqcr.pi = initial_pi; - - return sent; -} diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map index 6ac256d..13fb46a 100644 --- a/drivers/bus/fslmc/rte_bus_fslmc_version.map +++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map @@ -69,7 +69,8 @@ DPDK_17.08 { qbman_result_SCN_state_in_mem; qbman_swp_dqrr_consume; qbman_swp_dqrr_next; - qbman_swp_enqueue_multiple_eqdesc; + qbman_swp_enqueue_multiple; + qbman_swp_enqueue_multiple_desc; qbman_swp_interrupt_clear_status; qbman_swp_push_set; rte_dpaa2_alloc_dpci_dev; diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c index 95c3951..094cf30 100644 --- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c +++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c @@ -634,7 +634,7 @@ dpaa2_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops, } loop = 0; while (loop < frames_to_send) { - loop += qbman_swp_send_multiple(swp, &eqdesc, + loop += qbman_swp_enqueue_multiple(swp, &eqdesc, &fd_arr[loop], frames_to_send - loop); } diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c index cf2d274..81286a8 100644 --- a/drivers/event/dpaa2/dpaa2_eventdev.c +++ b/drivers/event/dpaa2/dpaa2_eventdev.c @@ -144,7 +144,7 @@ dpaa2_eventdev_enqueue_burst(void *port, const struct rte_event ev[], } loop = 0; while (loop < frames_to_send) { - loop += qbman_swp_enqueue_multiple_eqdesc(swp, + loop += qbman_swp_enqueue_multiple_desc(swp, &eqdesc[loop], &fd_arr[loop], frames_to_send - loop); } diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index 3c057a3..4342c73 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -622,7 +622,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) } loop = 0; while (loop < frames_to_send) { - loop += qbman_swp_send_multiple(swp, &eqdesc, + loop += qbman_swp_enqueue_multiple(swp, &eqdesc, &fd_arr[loop], frames_to_send - loop); }