From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0055.outbound.protection.outlook.com [104.47.42.55]) by dpdk.org (Postfix) with ESMTP id 4D31A1B23B for ; Tue, 9 Jan 2018 14:24:52 +0100 (CET) Received: from DM5PR03CA0040.namprd03.prod.outlook.com (10.174.189.157) by BN3PR03MB2356.namprd03.prod.outlook.com (10.166.74.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Tue, 9 Jan 2018 13:24:50 +0000 Received: from BL2FFO11FD051.protection.gbl (2a01:111:f400:7c09::118) by DM5PR03CA0040.outlook.office365.com (2603:10b6:4:3b::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.386.5 via Frontend Transport; Tue, 9 Jan 2018 13:24:50 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; NXP1.onmicrosoft.com; dkim=none (message not signed) header.d=none;NXP1.onmicrosoft.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 BL2FFO11FD051.mail.protection.outlook.com (10.173.161.213) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.345.12 via Frontend Transport; Tue, 9 Jan 2018 13:24:19 +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 w09DOAW0017638; Tue, 9 Jan 2018 06:24:47 -0700 From: Hemant Agrawal To: CC: , , Sunil Kumar Kori Date: Tue, 9 Jan 2018 18:53:04 +0530 Message-ID: <1515504186-13587-17-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515504186-13587-1-git-send-email-hemant.agrawal@nxp.com> References: <1513166759-13466-1-git-send-email-hemant.agrawal@nxp.com> <1515504186-13587-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131599778592175356; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(376002)(346002)(39380400002)(39860400002)(396003)(2980300002)(1110001)(1109001)(339900001)(199004)(189003)(77096006)(51416003)(81156014)(356003)(305945005)(36756003)(498600001)(68736007)(76176011)(53936002)(8676002)(86362001)(4326008)(8656006)(50466002)(48376002)(59450400001)(5660300001)(54906003)(316002)(47776003)(8936002)(104016004)(296002)(2950100002)(6916009)(85426001)(2351001)(16586007)(81166006)(50226002)(97736004)(106466001)(2906002)(6666003)(105606002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR03MB2356; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD051; 1:lP1/ixwfPBu27dBgAK9LxfBV/wSqG72pYO7Cq/jaZ3xyEXMXuByceH1onOrGJNpcNRiskoDxUmuJTwz0yZun7Wtj1j12X1HcJvbKP30xUppCJJUkN4q5ojXQFj3uYZmo MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b0f01d10-7f44-40fa-b4fc-08d5576449f8 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4628075)(201703131517081)(5600026)(4604075)(2017052603307); SRVR:BN3PR03MB2356; X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2356; 3:JI83kJkSKCRcb120mc/l6Id5fON9fe2hxI3M6nCg9FxJ4IPIDs+g0piua94aF2fdE3TQMAVp05gNTm2cDEJ8w09/GwGKs+mMd45BSP08IYWz6hk+QyKubSQneEq6RhLWhV395xkX/4IL/zQMe76aG2d2KCMVjBFzE93LnlrHOAteROa7CDcUFKEBTes9LOVpUOXmDa6IBQFMixNzTEf12Qj1GL5MPR4rvi5lEs19xVhFKFknmU1javHxOdEUuZbIn8Seje1v4dEXucpHQ2L99Dt0fuoQ3OTdAoXfil1JQr2jzBOXxyjdYISZRFtiLesFd+ZTQuu/49/8N9Kp85RGdzlI9VM5gOuUoJB3iY1WUFU=; 25:xCd1X0ouXLjPAv1c73AOwSKCHSe4Mp4ulGt69b3TUUZaVLCtGPxaPHJsFnWd5uihV/WnIBvwOQql53rYFFFKPDcKMK2SZym+jpQXYJU4VdMKNW2RZjYCPXNdw2Y80YnsriXNkAyFp03Czkn1/na0++rjcBcq4qOuIMg0N22i4IaF+sgxTeynwhj9GdC0bf7CifNzs8uL83kPSrkRGy/8PuhGdH9NeZosEtDwqCee7XXOfsK7eWGE6ar47FxiEoJnIOCxSp0VcIzxJdjNsXROrVu6mLsdNkzo8+LWfXIR5BWHSMx51+CU74KczgxafumA/y7buTMDvUOCkIxzy/0LcA== X-MS-TrafficTypeDiagnostic: BN3PR03MB2356: X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2356; 31:xp0J4IpZ49zTTduLY7SqDU96V8EYJkOlAQhhDGDDl+oaTdmMlFUyint7uGXFKoi99C1SRmTUhhlVhnNcgVHoEYw2t68Jo959B6bVY+WVeu7fh227wRJEl8i4dOPvAT2Td/QSmB4VXx7IF6mPMHyeRWBE3QK71mrEL+Ijotnds89jB0Vh/xlpSsQInhxNPPviXR0C/+RVphjs1yDj7HcCS5RA/EgUkh++MYn2IC9Ex5E=; 4:v5pet5usQBhtpFeqVUaLOxU2UMTolvRii4UX5VFXqfqX2EPy48aLvdHIS0fnojYg+APdd0SHybKfNd6T1+qShXdZIBRAP6QsWWasfDAxFHd7fp0yUIcP906Ob2vKs/Tto5zWFAAwp85ZbW+ZUDl4T8VMpO53Yv2YMrFFsbpxM6sb61j0yPDA5pniwnyL2AMBaiNDf/ttQUuirH6j1vNEXbvOz2jDjk3YOyzKVofU8rvLLkB/+Yy+KvZb8A/W/DX9mCvSIgkGfVzcLsmuG7+0SAnn7uvahef7/Q8tiG7BcqKT3FyTVEWub7Yr3EqoBKdp X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231023)(944501110)(10201501046)(3002001)(6055026)(6096035)(201703131430075)(201703131520075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123561025)(20161123563025)(20161123556025)(20161123559100)(20161123565025)(201708071742011); SRVR:BN3PR03MB2356; BCL:0; PCL:0; RULEID:(100000803101)(100110400095)(400006); SRVR:BN3PR03MB2356; X-Forefront-PRVS: 0547116B72 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR03MB2356; 23:/0P7pVmLF6p6bH5JRUy4HDDalHBCXxgvhvGb1qbzG?= =?us-ascii?Q?8G3zA4BsI2KZXSRgpeEz2aazOS6vAcZG7w+3/VUsKCb4P1xqtPg49+aYaohv?= =?us-ascii?Q?zaS2YrAASxlJ9YA2oPU8Xf0gMJzro6qEZCU/BCFqJF3x2YCa9r28fMELmbrW?= =?us-ascii?Q?r+zFkyPsMl8nXMhbHtiETveROqBjKOAZ5gSkBRv0rfoWTOiH9KIHYBtBc5SV?= =?us-ascii?Q?gsbB95B8SUSskK12SLLe7WTLAVRmms7ZHOjUm77vM9fwB4RiWpgJIEtepdGC?= =?us-ascii?Q?Y9Ix8GyyWeWHhr3tRtECNCIerOwHTWgUER6NRBj6d/btmRU2BtC9+K7avGIV?= =?us-ascii?Q?MYUhJbyhc+03zwwsXSsOA6URGZN8x+bsT7bdcdm13+XQNqECyyRQnjHft06N?= =?us-ascii?Q?BXPcHzCJKrpSEaFKk0IXhb9O0Tnk3xRblWIVYortiEFiJbk9Mf24mt6ulxsg?= =?us-ascii?Q?qaLH2iMEgdcVcLfO8ixZQmwFf7FdrsUhV8gGZm9F6TXROqqPLmqvsFhr1fa3?= =?us-ascii?Q?ocMAMOIolhPaA+51TDxVMVIcODRKrw75DOGvm2V8Tr2/grxQAqM/M6Z9uSWL?= =?us-ascii?Q?3WQ3SP/vVKkOaJoZ0U3wZ+R8k/9fDYMuxNTb+KThEpXnP84k6s0D+OVZDYwT?= =?us-ascii?Q?DNnlmxeU9uZ4ubjBf67Od5I+laBNt6nDSmXBiEC2UKmezwGx+uprQyQVeGy2?= =?us-ascii?Q?vDVI3l4N/EwO9c9OE8l2wKkqvfiGpmeDdE+YU1FHTQkpUlwoVq1fyLfesUtk?= =?us-ascii?Q?Ell84N28+aA6LPXHDN5UX11lfchuU5G5ZUbvvW9WNj3S50oqHNXY06ExAMqd?= =?us-ascii?Q?7DQJbfcxXAxU794u+aiYL27/oGqDPIJqNYqP/1TJhCk/hYl+njdTaF3YkgCA?= =?us-ascii?Q?pEAZj4opGJbaXHp2p87zTmBA6RlmR+SW1LxZ5eaIkhOSph2YEqTy6LydA/Gq?= =?us-ascii?Q?2wmHBsl2DDbpZkr3zihXBm8I7Gk1v+xBq3PUFW99wf50mGdkzywXTpwqFc/5?= =?us-ascii?Q?gt9J2YyKHYPeuD7MT5hJhDfeecAljSi6hRFRdVuPHyPidZU6MfuwSPKB8p0T?= =?us-ascii?Q?4skz512w/9cYVk3YNfwHFnwDRAIr8rm8LUuFqZAGiY8QSqam2OBwBTneiq+e?= =?us-ascii?Q?zE/jgbCtTg=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2356; 6:xu+9w4/zeokIy1wUsgOlGHQbzef6HIu5biJGbxA08jPbdFTvzqrAlOhGcnzMXWpRmsT+RPMQh+2OSdcrvuJ1gdWXWZM0AvhKQ7L0bM+ggRhpy5NcIZmdrnWJCe9JGQUNNDCxG+isSgMcHVYlSzJ41eA55cyzRI8jYrwYBNdttpQdQP6HW99SeczbThQotF1XoHL8LJtkhVounPcPayaFEtVIxRnJePyZseg8ATtXxKrWwZVnk6JYEUTjvvAi3kPyIF1UFOjeoL8LsmyTYkzIKmdjTQYqbdXaHV15ApEoKYYtoHPedsmTPLY41sXvBtJAI1aP44UpdSb3HHeSUpNrvlYb57qwanF64+PsyGES9F0=; 5:++54cD5D7s/Ay713RX7r+eW+J/BYRVDAJYtToXZw4iE4eNuSSRyJnV/WM96QjcmuXIpFIWKdj/nZx0/JPe22iDEB1e6z3/IWmEQNbI7Qy1dOeSCl5yb35OzIrQOKZSJATtVaxk3LaHABs0R03SbVjFYgSfPx+5LXQ+P5xW65M+4=; 24:M0ovChoRIIRXmLOrVWSiQoIPM01x0ePgsCejzpx1hC2zsWHyakSz0VXfAb/dQ1xUEWqhe+/ahBUilB31lZwaREk/eN3iwuTGYfNKI8jsfgk=; 7:+1XjR+FmGHfzxkOeXAhWcKgX29nz7Gk87nCIlDfyRYsSutOa4YjLVPiDy9cR+a+G3pHV3pg2x/q1tNhsMzUNCAor1H2XAxX/FQXsKYuSuL4ONVHngaAqSvyH/lvuHHM1cexPS4pYqPi8r2uJ5HaoGRhzv2DxXsidWDlx9SmuFZaFPoyjz9wBHUkZV7Sri4c1JLN+F5RnN/cXietGn6h4gDYfCZJ04p94qjwYoWT6tCDkQ2tvsX+N/GWdJwKPOFzF SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jan 2018 13:24:19.0615 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b0f01d10-7f44-40fa-b4fc-08d5576449f8 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: BN3PR03MB2356 Subject: [dpdk-dev] [PATCH v2 16/18] bus/dpaa: add support for static queues 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: , X-List-Received-Date: Tue, 09 Jan 2018 13:24:53 -0000 DPAA hardware support two kinds of queues: 1. Pull mode queue - where one needs to regularly pull the packets. 2. Push mode queue - where the hw pushes the packet to queue. These are high performance queues, but limitd in number. This patch add the driver support for push m de queues. Signed-off-by: Sunil Kumar Kori Signed-off-by: Hemant Agrawal --- drivers/bus/dpaa/base/qbman/qman.c | 64 +++++++++++++++++++++++++++++++ drivers/bus/dpaa/base/qbman/qman.h | 4 +- drivers/bus/dpaa/include/fsl_qman.h | 14 ++++++- drivers/bus/dpaa/rte_bus_dpaa_version.map | 4 ++ 4 files changed, 83 insertions(+), 3 deletions(-) diff --git a/drivers/bus/dpaa/base/qbman/qman.c b/drivers/bus/dpaa/base/qbman/qman.c index ffb008e..7e285a5 100644 --- a/drivers/bus/dpaa/base/qbman/qman.c +++ b/drivers/bus/dpaa/base/qbman/qman.c @@ -1051,6 +1051,70 @@ u16 qman_affine_channel(int cpu) return affine_channels[cpu]; } +unsigned int qman_portal_poll_rx(unsigned int poll_limit, + void **bufs, + struct qman_portal *p) +{ + const struct qm_dqrr_entry *dq; + struct qman_fq *fq; + enum qman_cb_dqrr_result res; + unsigned int limit = 0; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + struct qm_dqrr_entry *shadow; +#endif + unsigned int rx_number = 0; + + do { + qm_dqrr_pvb_update(&p->p); + dq = qm_dqrr_current(&p->p); + if (unlikely(!dq)) + break; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + /* If running on an LE system the fields of the + * dequeue entry must be swapper. Because the + * QMan HW will ignore writes the DQRR entry is + * copied and the index stored within the copy + */ + shadow = &p->shadow_dqrr[DQRR_PTR2IDX(dq)]; + *shadow = *dq; + dq = shadow; + shadow->fqid = be32_to_cpu(shadow->fqid); + shadow->contextB = be32_to_cpu(shadow->contextB); + shadow->seqnum = be16_to_cpu(shadow->seqnum); + hw_fd_to_cpu(&shadow->fd); +#endif + + /* SDQCR: context_b points to the FQ */ +#ifdef CONFIG_FSL_QMAN_FQ_LOOKUP + fq = get_fq_table_entry(dq->contextB); +#else + fq = (void *)(uintptr_t)dq->contextB; +#endif + /* Now let the callback do its stuff */ + res = fq->cb.dqrr_dpdk_cb(NULL, p, fq, dq, &bufs[rx_number]); + rx_number++; + /* Interpret 'dq' from a driver perspective. */ + /* + * Parking isn't possible unless HELDACTIVE was set. NB, + * FORCEELIGIBLE implies HELDACTIVE, so we only need to + * check for HELDACTIVE to cover both. + */ + DPAA_ASSERT((dq->stat & QM_DQRR_STAT_FQ_HELDACTIVE) || + (res != qman_cb_dqrr_park)); + qm_dqrr_cdc_consume_1ptr(&p->p, dq, res == qman_cb_dqrr_park); + /* Move forward */ + qm_dqrr_next(&p->p); + /* + * Entry processed and consumed, increment our counter. The + * callback can request that we exit after consuming the + * entry, and we also exit if we reach our processing limit, + * so loop back only if neither of these conditions is met. + */ + } while (likely(++limit < poll_limit)); + + return limit; +} + struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq) { struct qman_portal *p = get_affine_portal(); diff --git a/drivers/bus/dpaa/base/qbman/qman.h b/drivers/bus/dpaa/base/qbman/qman.h index a433369..4346d86 100644 --- a/drivers/bus/dpaa/base/qbman/qman.h +++ b/drivers/bus/dpaa/base/qbman/qman.h @@ -154,7 +154,7 @@ struct qm_eqcr { }; struct qm_dqrr { - const struct qm_dqrr_entry *ring, *cursor; + struct qm_dqrr_entry *ring, *cursor; u8 pi, ci, fill, ithresh, vbit; #ifdef RTE_LIBRTE_DPAA_HWDEBUG enum qm_dqrr_dmode dmode; @@ -441,7 +441,7 @@ static inline u8 DQRR_PTR2IDX(const struct qm_dqrr_entry *e) return ((uintptr_t)e >> 6) & (QM_DQRR_SIZE - 1); } -static inline const struct qm_dqrr_entry *DQRR_INC( +static inline struct qm_dqrr_entry *DQRR_INC( const struct qm_dqrr_entry *e) { return DQRR_CARRYCLEAR(e + 1); diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h index d769d50..ad40d80 100644 --- a/drivers/bus/dpaa/include/fsl_qman.h +++ b/drivers/bus/dpaa/include/fsl_qman.h @@ -1124,6 +1124,12 @@ typedef enum qman_cb_dqrr_result (*qman_cb_dqrr)(struct qman_portal *qm, struct qman_fq *fq, const struct qm_dqrr_entry *dqrr); +typedef enum qman_cb_dqrr_result (*qman_dpdk_cb_dqrr)(void *event, + struct qman_portal *qm, + struct qman_fq *fq, + const struct qm_dqrr_entry *dqrr, + void **bd); + /* * This callback type is used when handling ERNs, FQRNs and FQRLs via MR. They * are always consumed after the callback returns. @@ -1182,7 +1188,10 @@ enum qman_fq_state { */ struct qman_fq_cb { - qman_cb_dqrr dqrr; /* for dequeued frames */ + union { /* for dequeued frames */ + qman_dpdk_cb_dqrr dqrr_dpdk_cb; + qman_cb_dqrr dqrr; + }; qman_cb_mr ern; /* for s/w ERNs */ qman_cb_mr fqs; /* frame-queue state changes*/ }; @@ -1299,6 +1308,9 @@ int qman_get_portal_index(void); */ u16 qman_affine_channel(int cpu); +unsigned int qman_portal_poll_rx(unsigned int poll_limit, + void **bufs, struct qman_portal *q); + /** * qman_set_vdq - Issue a volatile dequeue command * @fq: Frame Queue on which the volatile dequeue command is issued diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map index 212c75f..ac455cd 100644 --- a/drivers/bus/dpaa/rte_bus_dpaa_version.map +++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map @@ -70,11 +70,15 @@ DPDK_18.02 { dpaa_svr_family; qman_alloc_cgrid_range; + qman_alloc_pool_range; qman_create_cgr; qman_delete_cgr; qman_modify_cgr; + qman_oos_fq; + qman_portal_poll_rx; qman_query_fq_frm_cnt; qman_release_cgrid_range; + qman_retire_fq; rte_dpaa_portal_fq_close; rte_dpaa_portal_fq_init; -- 2.7.4