get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/27958/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 27958,
    "url": "https://patches.dpdk.org/api/patches/27958/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1503658183-4078-4-git-send-email-hemant.agrawal@nxp.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1503658183-4078-4-git-send-email-hemant.agrawal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1503658183-4078-4-git-send-email-hemant.agrawal@nxp.com",
    "date": "2017-08-25T10:49:19",
    "name": "[dpdk-dev,03/27] bus/fslmc: add qbman API to do enqueue with multiple frames",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "889a2d7690041a421237f98ff2c963de9929a8b4",
    "submitter": {
        "id": 477,
        "url": "https://patches.dpdk.org/api/people/477/?format=api",
        "name": "Hemant Agrawal",
        "email": "hemant.agrawal@nxp.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1503658183-4078-4-git-send-email-hemant.agrawal@nxp.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/27958/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/27958/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id D1CB890F5;\n\tFri, 25 Aug 2017 12:50:11 +0200 (CEST)",
            "from NAM02-CY1-obe.outbound.protection.outlook.com\n\t(mail-cys01nam02on0062.outbound.protection.outlook.com\n\t[104.47.37.62]) by dpdk.org (Postfix) with ESMTP id CB2337D9F\n\tfor <dev@dpdk.org>; Fri, 25 Aug 2017 12:50:09 +0200 (CEST)",
            "from CY1PR03CA0007.namprd03.prod.outlook.com (2603:10b6:600::17) by\n\tBL2PR03MB547.namprd03.prod.outlook.com (2a01:111:e400:c23::20) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1385.9;\n\tFri, 25 Aug 2017 10:50:07 +0000",
            "from BL2FFO11FD033.protection.gbl (2a01:111:f400:7c09::189) by\n\tCY1PR03CA0007.outlook.office365.com (2603:10b6:600::17) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.1.1385.9 via Frontend Transport; Fri, 25 Aug 2017 10:50:07 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBL2FFO11FD033.mail.protection.outlook.com (10.173.161.129) with\n\tMicrosoft\n\tSMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id\n\t15.1.1341.15 via Frontend Transport; Fri, 25 Aug 2017 10:50:06 +0000",
            "from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net\n\t[10.232.134.28])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv7PAnw67032070; Fri, 25 Aug 2017 03:50:05 -0700"
        ],
        "Authentication-Results": "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed)\n\theader.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;",
        "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;",
        "From": "Hemant Agrawal <hemant.agrawal@nxp.com>",
        "To": "<ferruh.yigit@intel.com>",
        "CC": "<dev@dpdk.org>, <shreyansh.jain@nxp.com>",
        "Date": "Fri, 25 Aug 2017 16:19:19 +0530",
        "Message-ID": "<1503658183-4078-4-git-send-email-hemant.agrawal@nxp.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1503658183-4078-1-git-send-email-hemant.agrawal@nxp.com>",
        "References": "<1503658183-4078-1-git-send-email-hemant.agrawal@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131481318069176703;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()",
        "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(10009020)(6009001)(336005)(39380400002)(39860400002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(626005)(110136004)(53936002)(4326008)(2351001)(5660300001)(54906002)(106466001)(85426001)(498600001)(77096006)(33646002)(68736007)(97736004)(50466002)(105606002)(81156014)(47776003)(356003)(81166006)(76176999)(48376002)(305945005)(8936002)(8676002)(50986999)(2950100002)(86362001)(104016004)(36756003)(575784001)(5003940100001)(6916009)(6666003)(2906002)(189998001)(8656003)(50226002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BL2PR03MB547;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BL2FFO11FD033;\n\t1:h2DM8BejEZtNIqUBmw54k4yH14vSmW2gW16w6dCBpwJPWMK85bQesy96elkQhTGZuV9o0jqGu4HF8QdKZ3KubnmkwB3CMdT2SGHFwyUp9g1rGZ0IY48Gp1W6r/hVW30C",
            "1; BL2PR03MB547;\n\t3:u92hcp7x+4sNrK1YA4hq3gEycJvO890zq4WkOXUB0z+fKNQVFBRaW644ICa0vrV31P/li5tn2ZDn7oyo98FMqMXRw8+MNf+iCb898aLM6cd9l1Wpc1RpbnEH9Jy8uG8Fave2QSwv53+nLNd5lWBBKnbaZZ6nMEC51dV/0nKIdjNq2dVOGWt4ggOGl8yJo+RDCSbLm609DJOnc+bxazHe0nnA3t/RZ+Heh0EZnH6zpowmwt52yPBcYQWHx2sG6HsTpnarEfN3e1DdwdYU3KNQ0/J5ZuvOcf/22+EcTdT6p+QguRxS0cYR4Cka9q8GmOlbASfY5SF3lYJ0nLa9rjZpUqkhRAie0SUaMkfDiaVALr4=;\n\t25:rOs7l1ebd34ChIpMWKXhL3iPl5ft629rAXN20+zVHXeobHKlH/5iFvMR9c9yfCX8qlxUUxIOw0GAnrzfqEtTi7nkuss6KNw01GQvagUKVvCXo4cW8IR8/MPTxLzSs/tlSxggggOFARMl4Zl6wjp4vELCsX9zM928Dof4AHzHwDg24IL8QFoGSHQMBKalzjWnrnjm3kzZQuFYbo6I6DksMrvpF2eb2mGitF9Px34VVsjyj5fIIONpJmaqO5MUgUNzQLMf1DrX4i/oApMGJdDCc9/wsURNjL88LFb1EQNYXqdwmlkHFXKMtl1VMUakoIPfLUDG8ieo9rwhpOX/MCJUznt2c9bVqvhJ0s3JjMuYy7I=",
            "1; BL2PR03MB547;\n\t31:k9OpR8hVaLaQJSt6StYWNdJyEqlgD5yut3A0iOnzq16zcSGfZjmCuKPa8R1XUWD4N2Ez1iHHXgPMsDkn85fG81JwrRrrfIq93w6WiwZrEKMPHiRL0ftLB9ThM342PrCcwJI27f2Uipu7949qqT/eADEBEgxYOjzlpGPlDA3HRuGyBWP/w9RdKX5Aef1pOOhRPKzloQmzRlWUdHxtT+vl1fro/j4VSd47ir+Hfug76Aw=;\n\t4:V+blnHC+cTOzhsPIuWNVgbySnno6/VGWB9bv89BKzNXcyXdkIca1ANDcMUPaCu37q2B/Y0RV3U4yIIzAfZzEDq/tmfc7UjSpaxg5EGkdT4XmzBkz3+SiZ/ZV75fJQE+f7x/tZMSCFx2pyuaa343ojIreTFpC19+wsdPejDMNSUXUFz2iEaW5c9Pd08Arg99wQGwC5TbwiFRpMbMOEdC0dLq4R5KHsXJhrHf7u+Y7FMunuJwe1E1Om7WvuCz2Qd0blIynq7qITllNJ+5inn7SQk/kcvF2bqsWfpX04QxnxUs7N0JaN/09gvC0+/tQOB2+XBgoKPW/GK9+zAuAynUizQ==",
            "=?us-ascii?Q?1; BL2PR03MB547;\n\t23:E5fNaRIh4B/SwS7PcNJI6Cuqau/GcGZWeWHy+B+q9k?=\n\tv8id6Dj4eXvELSb3+R3YWFVhanWVLZoUotQu+3GJtRvSvxb4QPdqvw7px0lluEjz51sCM9dpMeIaIn9xSSI/lPRA1PBKJUuzynUuEJPCes1knssw6kpmjSEDJ05lFW9ZoX8gbXoErZi/xg1BzhcpIU/1rTaDVSOKZszzHehf3zNwat3Y4LTycLF+aKIn5Bn3ve/uPFQzPgvcaOvzxlQEpDalJz6RuDHe/kRREHrTWvQKSvpSGjtLPUscyH9AlwafTAeqPrkDge40jUSZFQTvVD815rwPQZEOfTYvqzPNBa1BJlGzNyWMRbceWjiVuOKc/OWRqhYLxheALYKdEYdUncb8k9T0WGRugqKWQavoVQNs1mn2t+4TadXHANRglhsV8mabygylo9iFM0+L0GX7Y9Finm6HmqSkL9Mg9xWsuIbmZkTrYtowsIB7UAuJGehU3yVOJyJsMYFf/kIGWAF13H+Edv4owe5TvrFSk3lIGSdZgXrS+M7tF+J4dNYBzUODAC9bdYbCU3E0U5Fnh4SHgymvvy4brk/2PEgDKzKURzMmyuEHLFWARP7a3UkkTwbkn+EHYuQg0PGs0TZDHKbhHsM/aWsI/MG2Xd54PfZYAqABASJFWBXAaGbHPHHD2sznp4lwmw3E6m6u7LcQ63csS4P0cClfNrYzjvGNfF4AgvTdgGPyUlPKtKi7vjlbHonwkl6WlpNMmKROA22SMG/45KwT61/0TUHU3dlWk5I9RVm3+aR+Fghg5FUhj41TwXrbQVcxZidRPG8ImxUobAqMXl6uavZ+WQyKFKCjgd9SDbEW/HNF8/tQcKcrBf7uHt3sNd7021DiwOzZr90Dg6xLk5S6qJCRn17GF5H8riAoBgmv1JvtFbfF235qwWbD6lwfxQvhAozWTqx01RMqdZnz/K4Pc1gQ2+CZIv7eTR1caFKQOfAwxmEgvZlMP5bTPf5EMpc+BrcyDzeAZcyDHqUt7IyT5H+YVy4z0COQWj9uyvADl5k38B3daayCJu1/rWI0TBghwHiRxtBX+46xoDGZcMYV+GE/wKZPPNjVre6OGIrBtYmLMP5ygoQkmshyRQ2gDnOA38rG548LB9CN8V0BCFdyMemssTFawHkbSpLOXYsQ==",
            "1; BL2PR03MB547;\n\t6:T6NGNrdrE7PfCQEcApCig8HhGj1HdcuHkLh3UUp8IuTdVhwBQKQgfjslp8+tTD3sdgkooH/yjNZYIh+gbwF2p6Wl3KMlN04argGqhjDvZ341P+t5XbuE0Ie5M5+dchtH/LAPrhs6dUtLzQQbXzPNcu/BgwdvheB8IqhcDsxtHdwc+d8BbXM06gzGVlDvfDsN5VH9XuAioV0US4CWHiwiphNj3VTxGH5tr84l3AFstWTvindTWYsP/GC0l/pnLO0ui2Y2NWsKgK4cU52dlo59PLTt3lIJvu4z+heMludQ5lskHFez87Wz4/Ce6n87web/OQSvBXuSJv1+qjNresFxtA==;\n\t5:GkFVQEqdNv9cEGiMHPanvTMtc0UM6Qk2BXa38x/GIUQEfIfjNdtxKyhRhb1k2vEmnSY5JHVPMxhddKBP2yqIwSDCgIe3/V2l4U2GoQonSOWxXVtgrn1Trn4DNN2z9+mp4BHOXlEl4ayFmy1KtM0jSQ==;\n\t24:J1se95+Olm470J/8Mv+5c8sxbEqMrWZR6Gj9Zfoe3Kcl6XrUG4uCBN/8FH4xEhgOefQI9aiH4a0u5qp4rlSILMQnDvADv67pEunG/a80u8Q=;\n\t7:qXZJd2EMxM4UhWMlm28MgpVfF+mtfxjoHD+AZTsbHMm2dJX18l7uRwjgD5NFUUIKT24a5BwNhrdI4BvUR/G1cO1gGCNNn1QME9Vn8PyuYhRtIWSBkiO7AX4iRU0WtzY/xQjdJX5WqFL99DwOPmv4C3FphybgNmq6FkKeDj2zWBKHrPll2+jt2FkS3aYT7bgpZFIvarM0YQBW/DFlvJ1r+mAOo7Bofd2P/7TidjMOCAE="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "ec59961f-9593-4e00-a81f-08d4eba70c91",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(2017052603199)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:BL2PR03MB547; ",
        "X-MS-TrafficTypeDiagnostic": "BL2PR03MB547:",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197)(275809806118684); ",
        "X-Microsoft-Antispam-PRVS": "<BL2PR03MB5473EC59897492351AFBFFF899B0@BL2PR03MB547.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(601004)(2401047)(8121501046)(5005006)(13016025)(13018025)(3002001)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(6055026)(6096035)(20161123563025)(20161123565025)(20161123561025)(20161123556025)(20161123559100)(201703131430075)(201703131441075)(201703131448075)(201703131433075)(201703161259150)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:BL2PR03MB547; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:BL2PR03MB547; ",
        "X-Forefront-PRVS": "041032FF37",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "25 Aug 2017 10:50:06.7460\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;\n\tIp=[192.88.168.50]; \n\tHelo=[tx30smr01.am.freescale.net]",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BL2PR03MB547",
        "Subject": "[dpdk-dev] [PATCH 03/27] bus/fslmc: add qbman API to do enqueue\n\twith multiple frames",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Haiying Wang <Haiying.Wang@nxp.com>\n\nClean it up and update the prototype.\n\nSigned-off-by: Haiying Wang <Haiying.Wang@nxp.com>\nSigned-off-by: Hemant Agrawal <Hemant.Agrawal@nxp.com>\n---\n drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h |  32 ++--\n drivers/bus/fslmc/qbman/qbman_portal.c             | 200 +++++++--------------\n drivers/bus/fslmc/rte_bus_fslmc_version.map        |   3 +-\n drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c        |   2 +-\n drivers/event/dpaa2/dpaa2_eventdev.c               |   2 +-\n drivers/net/dpaa2/dpaa2_rxtx.c                     |   2 +-\n 6 files changed, 83 insertions(+), 158 deletions(-)",
    "diff": "diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\nindex 23c3d13..fe1cc94 100644\n--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\n+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h\n@@ -914,19 +914,33 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,\n int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,\n \t\t      const struct qbman_fd *fd);\n /**\n- * qbman_swp_enqueue_multiple_eqdesc() - Enqueue multiple frames with separte\n- * enqueue descriptors.\n+ * qbman_swp_enqueue_multiple() - Enqueue multiple frames with same\n+\t\t\t\t  eq descriptor\n  * @s: the software portal used for enqueue.\n- * @d: the enqueue descriptors\n+ * @d: the enqueue descriptor.\n  * @fd: the frame descriptor to be enqueued.\n  * @num_frames: the number of the frames to be enqueued.\n  *\n  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.\n  */\n-int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s,\n+int qbman_swp_enqueue_multiple(struct qbman_swp *s,\n \t\t\t       const struct qbman_eq_desc *d,\n \t\t\t       const struct qbman_fd *fd,\n \t\t\t       int num_frames);\n+/**\n+ * qbman_swp_enqueue_multiple_desc() - Enqueue multiple frames with\n+ *\t\t\t\t       individual eq descriptor.\n+ * @s: the software portal used for enqueue.\n+ * @d: the enqueue descriptor.\n+ * @fd: the frame descriptor to be enqueued.\n+ * @num_frames: the number of the frames to be enqueued.\n+ *\n+ * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.\n+ */\n+int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,\n+\t\t\t\t    const struct qbman_eq_desc *d,\n+\t\t\t\t    const struct qbman_fd *fd,\n+\t\t\t\t    int num_frames);\n \n /* TODO:\n  * qbman_swp_enqueue_thresh() - Set threshold for EQRI interrupt.\n@@ -1119,16 +1133,6 @@ int qbman_swp_CDAN_disable(struct qbman_swp *s, uint16_t channelid);\n  */\n int qbman_swp_CDAN_set_context_enable(struct qbman_swp *s, uint16_t channelid,\n \t\t\t\t      uint64_t ctx);\n-int qbman_swp_fill_ring(struct qbman_swp *s,\n-\t\t\tconst struct qbman_eq_desc *d,\n-\t\t       const struct qbman_fd *fd,\n-\t\t       uint8_t burst_index);\n-int qbman_swp_flush_ring(struct qbman_swp *s);\n-void qbman_sync(void);\n-int qbman_swp_send_multiple(struct qbman_swp *s,\n-\t\t\t    const struct qbman_eq_desc *d,\n-\t\t\t    const struct qbman_fd *fd,\n-\t\t\t    int frames_to_send);\n \n int qbman_check_command_complete(struct qbman_swp *s,\n \t\t\t\t const struct qbman_result *dq);\ndiff --git a/drivers/bus/fslmc/qbman/qbman_portal.c b/drivers/bus/fslmc/qbman/qbman_portal.c\nindex 97df703..f212829 100644\n--- a/drivers/bus/fslmc/qbman/qbman_portal.c\n+++ b/drivers/bus/fslmc/qbman/qbman_portal.c\n@@ -525,15 +525,26 @@ static int qbman_swp_enqueue_ring_mode(struct qbman_swp *s,\n \treturn 0;\n }\n \n-int qbman_swp_fill_ring(struct qbman_swp *s,\n-\t\t\tconst struct qbman_eq_desc *d,\n-\t\t\tconst struct qbman_fd *fd,\n-\t\t\t__attribute__((unused)) uint8_t burst_index)\n+int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,\n+\t\t      const struct qbman_fd *fd)\n+{\n+\tif (s->sys.eqcr_mode == qman_eqcr_vb_array)\n+\t\treturn qbman_swp_enqueue_array_mode(s, d, fd);\n+\telse    /* Use ring mode by default */\n+\t\treturn qbman_swp_enqueue_ring_mode(s, d, fd);\n+}\n+\n+int qbman_swp_enqueue_multiple(struct qbman_swp *s,\n+\t\t\t       const struct qbman_eq_desc *d,\n+\t\t\t       const struct qbman_fd *fd,\n+\t\t\t       int num_frames)\n {\n \tuint32_t *p;\n \tconst uint32_t *cl = qb_cl(d);\n-\tuint32_t eqcr_ci;\n+\tuint32_t eqcr_ci, eqcr_pi;\n \tuint8_t diff;\n+\tint i, num_enqueued = 0;\n+\tuint64_t addr_cena;\n \n \tif (!s->eqcr.available) {\n \t\teqcr_ci = s->eqcr.ci;\n@@ -543,62 +554,58 @@ int qbman_swp_fill_ring(struct qbman_swp *s,\n \t\t\t\t   eqcr_ci, s->eqcr.ci);\n \t\ts->eqcr.available += diff;\n \t\tif (!diff)\n-\t\t\treturn -EBUSY;\n+\t\t\treturn 0;\n \t}\n-\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n-\t\tQBMAN_CENA_SWP_EQCR((s->eqcr.pi/* +burst_index */) & 7));\n-\tmemcpy(&p[1], &cl[1], 7 * 4);\n-\tmemcpy(&p[8], fd, sizeof(struct qbman_fd));\n-\n-\t/* lwsync(); */\n-\tp[0] = cl[0] | s->eqcr.pi_vb;\n-\n-\ts->eqcr.pi++;\n-\ts->eqcr.pi &= 0xF;\n-\ts->eqcr.available--;\n-\tif (!(s->eqcr.pi & 7))\n-\t\ts->eqcr.pi_vb ^= QB_VALID_BIT;\n-\n-\treturn 0;\n-}\n \n-int qbman_swp_flush_ring(struct qbman_swp *s)\n-{\n-\tvoid *ptr = s->sys.addr_cena;\n+\teqcr_pi = s->eqcr.pi;\n+\tnum_enqueued = (s->eqcr.available < num_frames) ?\n+\t\t\ts->eqcr.available : num_frames;\n+\ts->eqcr.available -= num_enqueued;\n+\t/* Fill in the EQCR ring */\n+\tfor (i = 0; i < num_enqueued; i++) {\n+\t\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n+\t\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7));\n+\t\tmemcpy(&p[1], &cl[1], 28);\n+\t\tmemcpy(&p[8], &fd[i], sizeof(*fd));\n+\t\teqcr_pi++;\n+\t\teqcr_pi &= 0xF;\n+\t}\n \n-\tdcbf((uint64_t)ptr);\n-\tdcbf((uint64_t)ptr + 0x40);\n-\tdcbf((uint64_t)ptr + 0x80);\n-\tdcbf((uint64_t)ptr + 0xc0);\n-\tdcbf((uint64_t)ptr + 0x100);\n-\tdcbf((uint64_t)ptr + 0x140);\n-\tdcbf((uint64_t)ptr + 0x180);\n-\tdcbf((uint64_t)ptr + 0x1c0);\n+\tlwsync();\n \n-\treturn 0;\n-}\n+\t/* Set the verb byte, have to substitute in the valid-bit */\n+\teqcr_pi = s->eqcr.pi;\n+\tfor (i = 0; i < num_enqueued; i++) {\n+\t\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n+\t\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7));\n+\t\tp[0] = cl[0] | s->eqcr.pi_vb;\n+\t\teqcr_pi++;\n+\t\teqcr_pi &= 0xF;\n+\t\tif (!(eqcr_pi & 7))\n+\t\t\ts->eqcr.pi_vb ^= QB_VALID_BIT;\n+\t}\n \n-void qbman_sync(void)\n-{\n-\tlwsync();\n-}\n+\t/* Flush all the cacheline without load/store in between */\n+\teqcr_pi = s->eqcr.pi;\n+\taddr_cena = (uint64_t)s->sys.addr_cena;\n+\tfor (i = 0; i < num_enqueued; i++) {\n+\t\tdcbf((uint64_t *)(addr_cena +\n+\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7)));\n+\t\teqcr_pi++;\n+\t\teqcr_pi &= 0xF;\n+\t}\n+\ts->eqcr.pi = eqcr_pi;\n \n-int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,\n-\t\t      const struct qbman_fd *fd)\n-{\n-\tif (s->sys.eqcr_mode == qman_eqcr_vb_array)\n-\t\treturn qbman_swp_enqueue_array_mode(s, d, fd);\n-\telse    /* Use ring mode by default */\n-\t\treturn qbman_swp_enqueue_ring_mode(s, d, fd);\n+\treturn num_enqueued;\n }\n \n-int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s,\n-\t\t\t       const struct qbman_eq_desc *d,\n-\t\t\t       const struct qbman_fd *fd,\n-\t\t\t       int num_frames)\n+int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,\n+\t\t\t\t    const struct qbman_eq_desc *d,\n+\t\t\t\t    const struct qbman_fd *fd,\n+\t\t\t\t    int num_frames)\n {\n \tuint32_t *p;\n-\tconst uint32_t *cl = qb_cl(d);\n+\tconst uint32_t *cl;\n \tuint32_t eqcr_ci, eqcr_pi;\n \tuint8_t diff;\n \tint i, num_enqueued = 0;\n@@ -623,29 +630,26 @@ int qbman_swp_enqueue_multiple_eqdesc(struct qbman_swp *s,\n \tfor (i = 0; i < num_enqueued; i++) {\n \t\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n \t\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7));\n+\t\tcl = qb_cl(&d[i]);\n \t\tmemcpy(&p[1], &cl[1], 28);\n \t\tmemcpy(&p[8], &fd[i], sizeof(*fd));\n \t\teqcr_pi++;\n \t\teqcr_pi &= 0xF;\n-\t\t/*Pointing to the next enqueue descriptor*/\n-\t\tcl += (sizeof(struct qbman_eq_desc) / sizeof(uint32_t));\n \t}\n \n \tlwsync();\n \n \t/* Set the verb byte, have to substitute in the valid-bit */\n \teqcr_pi = s->eqcr.pi;\n-\tcl = qb_cl(d);\n \tfor (i = 0; i < num_enqueued; i++) {\n \t\tp = qbman_cena_write_start_wo_shadow(&s->sys,\n \t\t\t\t\tQBMAN_CENA_SWP_EQCR(eqcr_pi & 7));\n+\t\tcl = qb_cl(&d[i]);\n \t\tp[0] = cl[0] | s->eqcr.pi_vb;\n \t\teqcr_pi++;\n \t\teqcr_pi &= 0xF;\n \t\tif (!(eqcr_pi & 7))\n \t\t\ts->eqcr.pi_vb ^= QB_VALID_BIT;\n-\t\t/*Pointing to the next enqueue descriptor*/\n-\t\tcl += (sizeof(struct qbman_eq_desc) / sizeof(uint32_t));\n \t}\n \n \t/* Flush all the cacheline without load/store in between */\n@@ -1493,87 +1497,3 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx)\n \tdq = qbman_cena_read(&s->sys, QBMAN_CENA_SWP_DQRR(idx));\n \treturn dq;\n }\n-\n-int qbman_swp_send_multiple(struct qbman_swp *s,\n-\t\t\t    const struct qbman_eq_desc *d,\n-\t\t\t    const struct qbman_fd *fd,\n-\t\t\t    int frames_to_send)\n-{\n-\tuint32_t *p;\n-\tconst uint32_t *cl = qb_cl(d);\n-\tuint32_t eqcr_ci;\n-\tuint8_t diff;\n-\tint sent = 0;\n-\tint i;\n-\tint initial_pi = s->eqcr.pi;\n-\tuint64_t start_pointer;\n-\n-\tif (!s->eqcr.available) {\n-\t\teqcr_ci = s->eqcr.ci;\n-\t\ts->eqcr.ci = qbman_cena_read_reg(&s->sys,\n-\t\t\t\t QBMAN_CENA_SWP_EQCR_CI) & 0xF;\n-\t\tdiff = qm_cyc_diff(QBMAN_EQCR_SIZE,\n-\t\t\t\t   eqcr_ci, s->eqcr.ci);\n-\t\tif (!diff)\n-\t\t\tgoto done;\n-\t\ts->eqcr.available += diff;\n-\t}\n-\n-\t/* we are trying to send frames_to_send,\n-\t * if we have enough space in the ring\n-\t */\n-\twhile (s->eqcr.available && frames_to_send--) {\n-\t\tp = qbman_cena_write_start_wo_shadow_fast(&s->sys,\n-\t\t\t\t\tQBMAN_CENA_SWP_EQCR((initial_pi) & 7));\n-\t\t/* Write command (except of first byte) and FD */\n-\t\tmemcpy(&p[1], &cl[1], 7 * 4);\n-\t\tmemcpy(&p[8], &fd[sent], sizeof(struct qbman_fd));\n-\n-\t\tinitial_pi++;\n-\t\tinitial_pi &= 0xF;\n-\t\ts->eqcr.available--;\n-\t\tsent++;\n-\t}\n-\n-done:\n-\tinitial_pi =  s->eqcr.pi;\n-\tlwsync();\n-\n-\t/* in order for flushes to complete faster:\n-\t * we use a following trick: we record all lines in 32 bit word\n-\t */\n-\n-\tinitial_pi =  s->eqcr.pi;\n-\tfor (i = 0; i < sent; i++) {\n-\t\tp = qbman_cena_write_start_wo_shadow_fast(&s->sys,\n-\t\t\t\t\tQBMAN_CENA_SWP_EQCR((initial_pi) & 7));\n-\n-\t\tp[0] = cl[0] | s->eqcr.pi_vb;\n-\t\tinitial_pi++;\n-\t\tinitial_pi &= 0xF;\n-\n-\t\tif (!(initial_pi & 7))\n-\t\t\ts->eqcr.pi_vb ^= QB_VALID_BIT;\n-\t}\n-\n-\tinitial_pi = s->eqcr.pi;\n-\n-\t/* We need  to flush all the lines but without\n-\t * load/store operations between them.\n-\t * We assign start_pointer before we start loop so that\n-\t * in loop we do not read it from memory\n-\t */\n-\tstart_pointer = (uint64_t)s->sys.addr_cena;\n-\tfor (i = 0; i < sent; i++) {\n-\t\tp = (uint32_t *)(start_pointer\n-\t\t\t\t + QBMAN_CENA_SWP_EQCR(initial_pi & 7));\n-\t\tdcbf((uint64_t)p);\n-\t\tinitial_pi++;\n-\t\tinitial_pi &= 0xF;\n-\t}\n-\n-\t/* Update producer index for the next call */\n-\ts->eqcr.pi = initial_pi;\n-\n-\treturn sent;\n-}\ndiff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map\nindex 6ac256d..13fb46a 100644\n--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map\n+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map\n@@ -69,7 +69,8 @@ DPDK_17.08 {\n \tqbman_result_SCN_state_in_mem;\n \tqbman_swp_dqrr_consume;\n \tqbman_swp_dqrr_next;\n-\tqbman_swp_enqueue_multiple_eqdesc;\n+\tqbman_swp_enqueue_multiple;\n+\tqbman_swp_enqueue_multiple_desc;\n \tqbman_swp_interrupt_clear_status;\n \tqbman_swp_push_set;\n \trte_dpaa2_alloc_dpci_dev;\ndiff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\nindex bae0a96..8052d36 100644\n--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n@@ -671,7 +671,7 @@ dpaa2_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,\n \t\t}\n \t\tloop = 0;\n \t\twhile (loop < frames_to_send) {\n-\t\t\tloop += qbman_swp_send_multiple(swp, &eqdesc,\n+\t\t\tloop += qbman_swp_enqueue_multiple(swp, &eqdesc,\n \t\t\t\t\t\t\t&fd_arr[loop],\n \t\t\t\t\t\t\tframes_to_send - loop);\n \t\t}\ndiff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c\nindex cf2d274..81286a8 100644\n--- a/drivers/event/dpaa2/dpaa2_eventdev.c\n+++ b/drivers/event/dpaa2/dpaa2_eventdev.c\n@@ -144,7 +144,7 @@ dpaa2_eventdev_enqueue_burst(void *port, const struct rte_event ev[],\n \t\t}\n \t\tloop = 0;\n \t\twhile (loop < frames_to_send) {\n-\t\t\tloop += qbman_swp_enqueue_multiple_eqdesc(swp,\n+\t\t\tloop += qbman_swp_enqueue_multiple_desc(swp,\n \t\t\t\t\t&eqdesc[loop], &fd_arr[loop],\n \t\t\t\t\tframes_to_send - loop);\n \t\t}\ndiff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c\nindex 3c057a3..4342c73 100644\n--- a/drivers/net/dpaa2/dpaa2_rxtx.c\n+++ b/drivers/net/dpaa2/dpaa2_rxtx.c\n@@ -622,7 +622,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)\n \t\t}\n \t\tloop = 0;\n \t\twhile (loop < frames_to_send) {\n-\t\t\tloop += qbman_swp_send_multiple(swp, &eqdesc,\n+\t\t\tloop += qbman_swp_enqueue_multiple(swp, &eqdesc,\n \t\t\t\t\t&fd_arr[loop], frames_to_send - loop);\n \t\t}\n \n",
    "prefixes": [
        "dpdk-dev",
        "03/27"
    ]
}