From patchwork Mon May 22 09:39:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24431 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 BAB625424; Mon, 22 May 2017 11:40:13 +0200 (CEST) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0081.outbound.protection.outlook.com [104.47.38.81]) by dpdk.org (Postfix) with ESMTP id 6B96437AF for ; Mon, 22 May 2017 11:40:00 +0200 (CEST) Received: from BLUPR0301CA0037.namprd03.prod.outlook.com (10.162.113.175) 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.1101.14; Mon, 22 May 2017 09:39:59 +0000 Received: from BN1BFFO11OLC002.protection.gbl (2a01:111:f400:7c10::1:184) by BLUPR0301CA0037.outlook.office365.com (2a01:111:e400:5259::47) 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:39:59 +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 BN1BFFO11OLC002.mail.protection.outlook.com (10.58.145.13) 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:39:58 +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 v4M9dk41031538; Mon, 22 May 2017 02:39:57 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 22 May 2017 15:09:15 +0530 Message-ID: <1495445969-29199-7-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: 131399195990148647; (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)(39840400002)(39410400002)(39400400002)(39860400002)(39380400002)(39850400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(9170700003)(4326008)(48376002)(33646002)(110136004)(5003940100001)(38730400002)(50466002)(54906002)(50986999)(106466001)(5890100001)(305945005)(2351001)(81166006)(8936002)(8676002)(6666003)(85426001)(189998001)(50226002)(47776003)(6916009)(53936002)(8656002)(2950100002)(86362001)(5660300001)(105606002)(76176999)(498600001)(356003)(36756003)(2906002)(104016004)(77096006); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR03MB167; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11OLC002; 1:s58TY3XN33o9KU/JmdE+jvFBATiHm27E7NxVuTSGe2nEWqWbPIbq1QrV0hWM8m5Xc2FDaSsMFo+CFuo3a0orOdVOcxIzO2z6Kl2HvlwtQYwNwTDxwL6txVmlkzFC/YnqwQQD6B75BVnz0YNSFBlGvBjT1TQ+Ag82tyhU7TuzcvOnPAbvcWw/vO7Jx3spyMS/EoXdTLXYhx3Wo79VF1WZxIXkKrRv+jJvGlmMUOGxYJXoCKzIuG5MUXB6taXekgC155pliUdc4+CFFnNnm4R7rGBMhnB/WmBNdeFzq7g+W5cCh2k0OTmYdwD7lTODKS4ZJpmipatkoa1Mlh8gbl0QS5NVwzie+AZ3D+dRE26aZkGUfQXMO/hB0i8uGWHhTAOeqFvAROHQLAMI0yqmOmfwy4tt25mGE+Axr8l70XT9fmqFZ/M07RwFlgqoUXyLii8XZnJnd0nYGVKse/KJ8m8mDF34moWpr+m/B/9JZblkdX5VrtC+lVOubTMSpsE5lYQFDOSoKwL6zwFOBtMWjUmqOnXlrqhHWscbP6DSjhxuu3ZRSXuFb91qzxm8oj9uB0FgjtIcnMijgeXhtlcAKR80fy3uR4VmzW8xs+l31e26E+F+AxLPgG9iN4/w1WVTQ5Esy880H4x27VWKpBLPR7zuqUWrB7ZsYEWEpXWcxjk00qo7+WyvQMmp0a9g4DVJKT8Z76+AuVpfxVL/BxOtPmn42LVrq/2o0dKvBf+Q+FkUXki2s44Qt2cMsZNVk84/x8YJ3CuT/Hl3MlPLqnPbBru1ag== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BLUPR03MB167: X-MS-Office365-Filtering-Correlation-Id: d50cd287-51a5-476a-64cc-08d4a0f68338 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BLUPR03MB167; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 3:kBwFbvqhXRUOhNZqscJLCPvFy1/VtaXEp6eY0xLLWAJ1HOazNxaUJxw7mVnxtx7f0SOXY7DXvOp/9zsrywXseihE1pspU9Fu31rAj4UVhqPLUIPcjvgApxc2+I5OaLmbkqqL6Tancji/FAXQytsUW7hrmu4ZFy8PY8jf5/Cy6fAFLSXoQQpJvfvMeNYfxM9H3okqPUSMOuAr/PKdP7e0ZwZs0rTB7YBSP1bZpkd+PgfQUC+P2NFz311ckrM4q2AM4Y8mcgndEa4wN5+byad+lHX0BJoPUNE7daiMQXHpAwQ/FCXMZ770bGsYVvDPjOYh4Cvhqze7v5ptr+stjO1rB2TeQV8rRcvdMarOxVx9wTXXMpr0qqDOmCD8nIq69AK/DCe6jFpX7V3PhIbRIqLO3qtazts4hhY8Y/IXE8W0zQ+ufC8sx8758o4OHMpE14v+; 25:8ok7EOkIiCLvDbPpFdvHFVvZUGMPNqigZ7EFRpcB/Bio4zxj6qhdaQkvf4XcobJyGOsIl+RPHGM97TkAR1ASMCAI24QlhBRvLmMjO+EMLuRRcP+qTdQ/YNGI0csxSzRRVz0K4p1UqgsYK6AdiLnBA3y1CBUj1lRAZzZJs+SZHyWNnV+rhvbEkRCrZz8TrfQfWdLWEDCKaKA99+rbWBjM2cP3wkC1IUR3mvpiqLIneQkeichekyWHEAOdymawHlqULtZGeh68Nz3DNfcrbmq8AArBgHtEMTMCxNpRAm/4ElvQnNL0a0+202JnWBbFPgUDj3UibsuXPNxn22kmfExxymFbpsZboyfrKH+Ucb4qT1BgBxv0RdaOX0lx2JvC0597snA1wMEXkAdDZg4dnORPQUs4YL0cOo5xRhlUVUvvuSKTr05xgULeUDYfKENVRxhdmGT0SVlp6H7sUHhSrffqXZN6QhZsxs1khIn1UurvR1U= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 31:nVtMIzJ02RXV+OTtfWEzXnfc6Huky71DD3JKVd2Kbfa/uLb6TySBXx2W7/TkZqjYeUGilckHmZRFRlOeKd8+kp3c0Nn3UB1A+paEt0j/Ao1rEDfvAsuySt5hVIJda/jY+qN67f65smwFAJ0FAD3ZF6BwIOG/JM6dVrOBUSRVxg3PkFqw5pZGjKdlBoWoJOUr6K0xRNeDUOKBuskONcWMENrXgEzSkflY7WI8We+9j1NdFCpaSl7hg4SVgU4zPksBvix3GcVlDba8r+3R3vFLPBg+50Flg0MhVYsJvx+4JZs= 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)(5005006)(13018025)(13015025)(8121501046)(13024025)(13017025)(10201501046)(93006095)(93001095)(3002001)(6055026)(6096035)(20161123561025)(20161123559100)(20161123556025)(20161123565025)(20161123563025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153); SRVR:BLUPR03MB167; BCL:0; PCL:0; RULEID:(400006); SRVR:BLUPR03MB167; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB167; 4:Fmr+/l9NrLJSJCCxq0szLyuVRdnmKthCNoKl/p68Q8b?= 60GrEZ8zd/qXuCrDYHxKTDZ2003Hje18ma3bH5JoZqVP2+CWkSXNZIwW/V+xdOsyGpUZNZksqOD3o1WV9F5mJ5YhO8c7PZGp3MNFpJhCZbkcwEnPREd/lJSTO0KzkzpVy78I3Hd6mtHZYwsQyv3LizY1zlitym9/EMqAvvpaAOXwDy4Yt/aSv4BI+YU838UjWNsinChxhRXE1FbHJHyFmZZpnz2IDq5ShIvsBVmIcirmg/xBNqFwy1dAkWZtSfBSCcIEcOMmSFzuKFH9lktZ5OhgGQ9bIJYtlRlFzIJIyreB1RkEtk8pdcLCYKYHd3zQ5My5uVxWN7LjynFwXTLWxLZ0Rf8QtLB9MOLb6YcF9nCaK7YIPZUXcF0yG8xa1peoJVHOQo42JlOBCnN+MWaaf1RynyOPgcEqoC0CocUnQxm+ZuZ7EkpeRMMcbJ29bF3pLJ9rD4hSMRUm2ppbZ87JCM/cXrDfwPkxqJ0709BGRsUprFQImkGupKiwcrphbOzsPLB40spSyOqWgM6pOQt4/I9Im1yg04zUMnp9fiJOufIChE0hIvy9G8u0sPI9g2O+zhaysUzuuyO47AEiIYF+/sUrIbhZE5Kax5BmotxLaLBCn2KHWAX8DGaD+9yJA+FcBVI7Z7VkQI60BZcHiMuifGQT3+eJBdI0T2kYHapROqqpZVDsWBZbmP60F+uttnuE/VoZm2hXB4lRjKOxNTJ+EC01xF67bHBTdk8v2JTDs5nkjbM6WeH9vX4bWO8jyabGjjsCzo4N2eX3r8cTbA1LYC36wgMCIo+n3/O8vlzSLtgh5kArixOVbk7vr6V0k3uC97q0rIkCvkT62BOJ7dmuNYdtlVac2rrfVIIUsqfgEjCwRMTtGJpw6FhrMWj0KaprZitNWvMgrOr9InL3fS9B8HBDAK9ODVysLFcPBYDHCvNHgjCHzDVNOQLJ9IfIaMdY= X-Forefront-PRVS: 03152A99FF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB167; 23:KMkeGHAZPkSBbivZQNaJ/IxzlF+gevbnsD+fu5C6yq?= sOahYUpHB3krHkzEbwx4p9SvupbKyazztZQZu4nQX6SDeARd20Qv1NbrJGPc+/FIwx3C6dCbZl/WX+/SiPq/xu3ihQCdQtKFk89yKsb21qqZDmxiY1tt1HMs3gD4YC37Qx9GXWMWHRxmSnyv1xiKNcv61YFdDjRoQOKPG+iQfqYeKNfJQ4zx4PCyvvCVPkQVW+8bT7JFAqp68fwErIi6xFtdBAjlKGQR/Xl+aSr4/Au5rcCwV+UMrxo4PBcHb28j+OE1Jvo7wfXvTmgTE3WpjZRV84y+ebUKpU8ETy79PQLEZS5NGOBPMAgTLl1NgAkCFhWM4HBjS0HbYEIsowkV3UIPv1ddxN+banIDjkz1KPEjzbP3fJho4cjDUBIKIphV26O2PHqZBUHqGgFgZhnDSPU9aPYgBXhe3b0Zgd6NI+fD6lH1ksqcoIdCgYxlOrh8f/JqjO1v31d+4RRpaAlQDdPhdgq/7nk1de1Rck1siAAF6/PJnaElLvfSTKiSnx+6nYisbh3ZsruCmFyk56NLj2E90E5Nw4dQYudJflTN2GjQV9DGyFhmFdP573GzzwoNv+4Sm7JvyP7t83MUmziIl9sB2m1F21dbMaIAF5SPXTY60PkKYRgn6yvyTZtujtJv9QpkIwn7/sdHAmJksMIe72jTfzrxt+YCioot+BD5t43+D9LzuOc3R+rVxGk5DCKGLkbNMXWU5Va6NUGk3N3ss1gXBjUg2UIyqMhFmG7rHKBBC+bGsBtJJUmgB98dFQe3UFwHzpMvk//0WTbSfC5N4MBROg/50XWk8a7+rsdO5g59MkxNJC1S9S7ouB7ajN0ZPdCnjl7lh6hajWXugcwBDXha93Jz8uIZwkIwlEx/HAOZzAPEYRnaV0dynu4p1nSwHpS2G0rP98SB7PD9Rq96R93yg90hWH4h8c758sPQM9UG75g+sSC/d0slpKt0qMex4q+NiQOA6ZsVZMOWAM+Egc9RbI0uuGQkLNPCNshj7LocnM8bkP0mPwj8do3OQ6C42fTdPNdEgTtC83ZXfrHshhBIKf20GIaaYjNjVHCTp/WhtpxzJWQsM/pRZSAMYdmPn0IIXKPnNseBdtgMKNUDLp3FGPpXeNgOkYcSyYYr/NVlQONS3TaXfcO+9o7kndcX1rVxpn3lgNZN1IWhxfEMg3C3U4iRnScMvmps7ZI01sLy6kiYRkoijtXhTTFaJgqV7KS14FO/qT2d4dbtE/3kRl X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 6:OvBDHupwbdrTprXILQKJAkzP5gPNNyCH8iYJvgPSY+dXRkPHmUngSJKMZ+mSgmABB/dT2ugqS59BfcKxF2n89AUeY0fit2LRnNteR7SzNu/6yiGeowUL7TzwMNmvMMS7ciGEHiwKVt4qLR8YoRzAsWCWqVSnHfpH+OSRCM4m2+9dHFykeClqibYkkvQ0t11zYT4C+xOP73HcrPXs/ojXMlobClwvt59rHz+QmrMLKCcXCeuZnNCBSvzIq0yrU+B+9aKjLkH2lNSyhzkzI//vij35KjG46eqqjpVjubGEeJKI6+8nSeChScuyytrg/ZJJixNfw6ejzSnHNt8OEAW317i+qoWrvssYMtnd/inMlda3oaxi9Yr6gmMf6cXYnkrLhkMHZtkSgkdhl4B2VVkN+lNQ80bkNXQ1DjQZciwE71nqbAekxaNf86RECXYq/yYly35yoDIpi/RHhIqynGb4zXdC4fijphQIEhO7WTwrg8ffTuWOOUGRx/IcwE548c0kZPZJotVYSQTz57rdPgFVyw==; 5:Fts7mxR9TvOEeNZGdpvfSpxVit+sa1jMCtEjy0XNacshYaYiNQNhEsxcrAV2To9z1zk1VMX/0F1YPmOILFrgoO8KNbZTBk77nKVEcTzpJ/CqhtocXrp0/hQ39HN5t5npRKdMGY8mzLZijv30+m97ny0xdinQNKTpVIrx3DokEZdq1PsAQFGzTMqfei87mUgn; 24:TO2x/y40rhK9/XdlxMdge47tsGqxh0yr9MTHAHH4gHJlLn70NVIkf3Bvl07N1lz2I2yodGXwmHcepJG8TGbZMNvo6izGIeSorUw/ZXOjjNQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB167; 7:+fcL6qT1SIeh0A9gV1jqiS+BGLUIkwof8YNoWWovhwmavpACYc2OkYRTvjgzz2cKSyro71rNRFm8Zu1DLZ71AApqoPlfnc8WQasjUiZWoY91OF44Ss1jVygKBErtKVS57EjKtYzMH7F1k/KdBEnxAKkxqmhuSNJ0rlAMYGNoPqMDtTd1yIEpNzu1VvKbr8Yw//7FKF2Z62OECQfkXa9eqiSjYcRLkkUH6H8IodTzjpR/SEloyhuwMecPqGH1cQobvwKscf74bezE8Mkm3xV71skUBVAb5yRkKrsbEszh3G7fOK4RjuJMm2/UxqkFSLqSVdFtrwhJ9CwVN5eyc+PuGA== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2017 09:39:58.8276 (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: BLUPR03MB167 Subject: [dpdk-dev] [PATCH v3 06/20] net/dpaa2: support parallel Rx in eth pmd 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" Typically when the PMD issues a RX command to DPAA2 hardware, the hw writes the available descriptors into the given memory. The RX function then processes the frames and prepare them as mbufs. This patch adds support to issue another pull request to hardware in another memory location, before we start processing the output of the first request. This help in controlling the cpu cycles wasted during the wait for the hardware to write the descriptors. Signed-off-by: Hemant Agrawal --- drivers/net/dpaa2/dpaa2_ethdev.c | 4 +- drivers/net/dpaa2/dpaa2_ethdev.h | 3 +- drivers/net/dpaa2/dpaa2_rxtx.c | 119 ++++++++++++++++++++++++--------------- 3 files changed, 79 insertions(+), 47 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 698fb84..797e71d 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -391,7 +391,7 @@ RTE_PTYPE_UNKNOWN }; - if (dev->rx_pkt_burst == dpaa2_dev_rx) + if (dev->rx_pkt_burst == dpaa2_dev_prefetch_rx) return ptypes; return NULL; } @@ -886,7 +886,7 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) eth_dev->dev_ops = &dpaa2_ethdev_ops; eth_dev->data->drv_name = rte_dpaa2_pmd.driver.name; - eth_dev->rx_pkt_burst = dpaa2_dev_rx; + eth_dev->rx_pkt_burst = dpaa2_dev_prefetch_rx; eth_dev->tx_pkt_burst = dpaa2_dev_tx; rte_fslmc_vfio_dmamap(); diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index 7196398..7fa7e7d 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -77,7 +77,8 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev, int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist); -uint16_t dpaa2_dev_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); +uint16_t dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs, + uint16_t nb_pkts); uint16_t dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); #endif /* _DPAA2_ETHDEV_H */ diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index c5d49cb..9b7539a 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -242,17 +242,18 @@ static inline int __attribute__((hot)) } uint16_t -dpaa2_dev_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) +dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { - /* Function is responsible to receive frames for a given device and VQ*/ + /* Function receive frames for a given device and VQ*/ struct dpaa2_queue *dpaa2_q = (struct dpaa2_queue *)queue; struct qbman_result *dq_storage; uint32_t fqid = dpaa2_q->fqid; int ret, num_rx = 0; uint8_t is_last = 0, status; struct qbman_swp *swp; - const struct qbman_fd *fd; + const struct qbman_fd *fd[DPAA2_DQRR_RING_SIZE]; struct qbman_pull_desc pulldesc; + struct queue_storage_info_t *q_storage = dpaa2_q->q_storage; struct rte_eth_dev *dev = dpaa2_q->dev; if (unlikely(!DPAA2_PER_LCORE_DPIO)) { @@ -263,44 +264,51 @@ static inline int __attribute__((hot)) } } swp = DPAA2_PER_LCORE_PORTAL; - dq_storage = dpaa2_q->q_storage->dq_storage[0]; - - qbman_pull_desc_clear(&pulldesc); - qbman_pull_desc_set_numframes(&pulldesc, - (nb_pkts > DPAA2_DQRR_RING_SIZE) ? - DPAA2_DQRR_RING_SIZE : nb_pkts); - qbman_pull_desc_set_fq(&pulldesc, fqid); - /* todo optimization - we can have dq_storage_phys available*/ - qbman_pull_desc_set_storage(&pulldesc, dq_storage, + if (!q_storage->active_dqs) { + q_storage->toggle = 0; + dq_storage = q_storage->dq_storage[q_storage->toggle]; + qbman_pull_desc_clear(&pulldesc); + qbman_pull_desc_set_numframes(&pulldesc, + (nb_pkts > DPAA2_DQRR_RING_SIZE) ? + DPAA2_DQRR_RING_SIZE : nb_pkts); + qbman_pull_desc_set_fq(&pulldesc, fqid); + qbman_pull_desc_set_storage(&pulldesc, dq_storage, (dma_addr_t)(DPAA2_VADDR_TO_IOVA(dq_storage)), 1); - - /*Issue a volatile dequeue command. */ - while (1) { - if (qbman_swp_pull(swp, &pulldesc)) { - PMD_RX_LOG(ERR, "VDQ command is not issued." - "QBMAN is busy\n"); - /* Portal was busy, try again */ - continue; + if (check_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index)) { + while (!qbman_check_command_complete(swp, + get_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index))) + ; + clear_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index); } - break; - }; - - /* Receive the packets till Last Dequeue entry is found with - * respect to the above issues PULL command. + while (1) { + if (qbman_swp_pull(swp, &pulldesc)) { + PMD_RX_LOG(WARNING, "VDQ command is not issued." + "QBMAN is busy\n"); + /* Portal was busy, try again */ + continue; + } + break; + } + q_storage->active_dqs = dq_storage; + q_storage->active_dpio_id = DPAA2_PER_LCORE_DPIO->index; + set_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index, dq_storage); + } + dq_storage = q_storage->active_dqs; + /* Check if the previous issued command is completed. + * Also seems like the SWP is shared between the Ethernet Driver + * and the SEC driver. */ + while (!qbman_check_command_complete(swp, dq_storage)) + ; + if (dq_storage == get_swp_active_dqs(q_storage->active_dpio_id)) + clear_swp_active_dqs(q_storage->active_dpio_id); while (!is_last) { - struct rte_mbuf *mbuf; - /*Check if the previous issued command is completed. - * Also seems like the SWP is shared between the - * Ethernet Driver and the SEC driver. - */ - while (!qbman_check_command_complete(swp, dq_storage)) - ; /* Loop until the dq_storage is updated with * new token by QBMAN */ while (!qbman_result_has_new_result(swp, dq_storage)) ; + rte_prefetch0((void *)((uint64_t)(dq_storage + 1))); /* Check whether Last Pull command is Expired and * setting Condition for Loop termination */ @@ -311,27 +319,50 @@ static inline int __attribute__((hot)) if (unlikely((status & QBMAN_DQ_STAT_VALIDFRAME) == 0)) continue; } + fd[num_rx] = qbman_result_DQ_fd(dq_storage); - fd = qbman_result_DQ_fd(dq_storage); - mbuf = (struct rte_mbuf *)DPAA2_IOVA_TO_VADDR( - DPAA2_GET_FD_ADDR(fd) - - rte_dpaa2_bpid_info[DPAA2_GET_FD_BPID(fd)].meta_data_size); - /* Prefeth mbuf */ - rte_prefetch0(mbuf); /* Prefetch Annotation address for the parse results */ - rte_prefetch0((void *)((uint64_t)DPAA2_GET_FD_ADDR(fd) - + DPAA2_FD_PTA_SIZE + 16)); + rte_prefetch0((void *)((uint64_t)DPAA2_GET_FD_ADDR(fd[num_rx]) + + DPAA2_FD_PTA_SIZE + 16)); - bufs[num_rx] = eth_fd_to_mbuf(fd); + bufs[num_rx] = eth_fd_to_mbuf(fd[num_rx]); bufs[num_rx]->port = dev->data->port_id; + if (dev->data->dev_conf.rxmode.hw_vlan_strip) + rte_vlan_strip(bufs[num_rx]); - num_rx++; dq_storage++; - } /* End of Packet Rx loop */ + num_rx++; + } + + if (check_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index)) { + while (!qbman_check_command_complete(swp, + get_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index))) + ; + clear_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index); + } + q_storage->toggle ^= 1; + dq_storage = q_storage->dq_storage[q_storage->toggle]; + qbman_pull_desc_clear(&pulldesc); + qbman_pull_desc_set_numframes(&pulldesc, DPAA2_DQRR_RING_SIZE); + qbman_pull_desc_set_fq(&pulldesc, fqid); + qbman_pull_desc_set_storage(&pulldesc, dq_storage, + (dma_addr_t)(DPAA2_VADDR_TO_IOVA(dq_storage)), 1); + /* Issue a volatile dequeue command. */ + while (1) { + if (qbman_swp_pull(swp, &pulldesc)) { + PMD_RX_LOG(WARNING, "VDQ command is not issued." + "QBMAN is busy\n"); + continue; + } + break; + } + q_storage->active_dqs = dq_storage; + q_storage->active_dpio_id = DPAA2_PER_LCORE_DPIO->index; + set_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index, dq_storage); dpaa2_q->rx_pkts += num_rx; - /*Return the total number of packets received to DPAA2 app*/ + /* Return the total number of packets received to DPAA2 app */ return num_rx; }