get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 60284,
    "url": "https://patches.dpdk.org/api/patches/60284/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20191001064048.5624-5-rnagadheeraj@marvell.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": "<20191001064048.5624-5-rnagadheeraj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20191001064048.5624-5-rnagadheeraj@marvell.com",
    "date": "2019-10-01T06:41:27",
    "name": "[v7,4/8] crypto/nitrox: add hardware queue management functionality",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "45d30f3abb2db183d0528363807969d9983ca497",
    "submitter": {
        "id": 1365,
        "url": "https://patches.dpdk.org/api/people/1365/?format=api",
        "name": "Nagadheeraj Rottela",
        "email": "rnagadheeraj@marvell.com"
    },
    "delegate": {
        "id": 6690,
        "url": "https://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20191001064048.5624-5-rnagadheeraj@marvell.com/mbox/",
    "series": [
        {
            "id": 6638,
            "url": "https://patches.dpdk.org/api/series/6638/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=6638",
            "date": "2019-10-01T06:41:18",
            "name": "add Nitrox crypto device support",
            "version": 7,
            "mbox": "https://patches.dpdk.org/series/6638/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/60284/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/60284/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 6CAE21BE8B;\n\tTue,  1 Oct 2019 08:41:33 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n\t[67.231.156.173]) by dpdk.org (Postfix) with ESMTP id A7D6E1BE3D\n\tfor <dev@dpdk.org>; Tue,  1 Oct 2019 08:41:31 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n\tby mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id\n\tx916ei2e024077; Mon, 30 Sep 2019 23:41:31 -0700",
            "from sc-exch03.marvell.com ([199.233.58.183])\n\tby mx0b-0016f401.pphosted.com with ESMTP id 2va71mh7vg-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); \n\tMon, 30 Sep 2019 23:41:30 -0700",
            "from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH03.marvell.com\n\t(10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1367.3;\n\tMon, 30 Sep 2019 23:41:29 -0700",
            "from NAM04-SN1-obe.outbound.protection.outlook.com (104.47.44.54)\n\tby SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server\n\t(TLS) id\n\t15.0.1367.3 via Frontend Transport; Mon, 30 Sep 2019 23:41:28 -0700",
            "from MN2PR18MB2797.namprd18.prod.outlook.com (20.179.22.16) by\n\tMN2PR18MB3375.namprd18.prod.outlook.com (10.255.238.144) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.2305.15; Tue, 1 Oct 2019 06:41:27 +0000",
            "from MN2PR18MB2797.namprd18.prod.outlook.com\n\t([fe80::259c:a73e:a83:ccfe]) by\n\tMN2PR18MB2797.namprd18.prod.outlook.com\n\t([fe80::259c:a73e:a83:ccfe%4]) with mapi id 15.20.2305.017;\n\tTue, 1 Oct 2019 06:41:27 +0000"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n\th=from : to : cc :\n\tsubject : date : message-id : references : in-reply-to : content-type\n\t: content-transfer-encoding : mime-version; s=pfpt0818;\n\tbh=XiwYtdFG9IGvlAKQye3SY/+GHnHBwYIniQ+YVCf42YM=;\n\tb=fgLSdambEIRZmN/Xp8tzbP8KMe0bxkLYt0uLBqVR0fSlG4DxSAAXHi9yH7UEHUyRQe5S\n\tAhYMk9OQd53fDpYUe+p4y+wRxAB0ZVHo8nGgv5TR+q4h1TgFGqTYH7ZkNhi6D3m/I/tE\n\tZ50uCK5R+EO8jplP4aVXk36DlMH+aDM2fml/ZG5EO4rDcQeg7Oayer8hdoKU/2hB3p3I\n\t+Uwq04PBHDDR/MghbnZh/mNSEyCEp1WBSFLQ2yl8xwHv36lJTTiZXqY18nMGsMgpytt+\n\t4uPe9xf4sy5luE/NdzZtEokJZ4WIR3y/O7uxSr3xJ+qm49lgr3gS1NA+iSa+iMac8sLS\n\tBA== ",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=marvell.onmicrosoft.com; s=selector2-marvell-onmicrosoft-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=XiwYtdFG9IGvlAKQye3SY/+GHnHBwYIniQ+YVCf42YM=;\n\tb=s5QI99Eppoem4dAMtProFlpYWVFNqtU32FZgYM6vQfVULkeOcrwWUc+Tor2DVlFdkeaI9LsCnU6e7S7P4s5CIuORt3qQo6aygEpkmybSC/abHK6iO3z0/7TIh30+HCQp8PRCTWd1ACuLKK2znGijuSrDV3Whpiuj1VHAA4hS4mI="
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n\tb=bPy7V37NCaiSuE0dBOIF6GmVsz6buTvvh6kYugIrjM1YJGKxffAz4dsAlUCUX0MFoJ24aOWaXL3fb/PaKDwkUwXP1/pquVUAgbv4FZyq9VZPtnbuoeBoNVGk07CjbMFNhwg+FamFZ0IKInohnboDsWWahQusH6OXcnKtElT9FuL6NpRHbQY2TkYhOTpY1IEqaZU8Po7JqQdPuMQDBE/moRNDqrG/WWm1T6Jxca+9jsQpfDa9oYS48SPuapVxJjHhTOmunQQ+bdnxaIxVu1+a/AemQs3rgH+NMnWlK57ZbMHhLuTG2D6p82IVZr9laQ/7wenYmH5sSFmogUnga4avIg==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector9901;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=XiwYtdFG9IGvlAKQye3SY/+GHnHBwYIniQ+YVCf42YM=;\n\tb=FSxxTKGhgAzxcWb4UdXzpsqLIkrWF/JqyXJ1f3CnkV2GfEmRrE39mVFbukKUM89/oAvcTIyapYMWGUhJQv+nKVj/vJsKGdQsp3JQCyehGrqN4J9wRrlJ/x5+xJDF8kvKokQyyhVuT+Y33/EbhEOkDN9yvVE39n1IJ6IqjTQ68MlEqCnFoLGH4Q0gDVCt/liMW7SnSxSvOyXah+Y0nQgpKzB1z/cdFGVe49mUlKNOUasCQQLbEs3T6xmwKNqjfoJM0if4tueGjW6GHepyha7pklFpvyiRtMClzBxzoIgTTkQUVQZeUI8+8i5jyqnZubCq18EdTN+ucb4+QVgttk31ww==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=marvell.com;\n\tdmarc=pass action=none header.from=marvell.com; \n\tdkim=pass header.d=marvell.com; arc=none",
        "From": "Nagadheeraj Rottela <rnagadheeraj@marvell.com>",
        "To": "\"akhil.goyal@nxp.com\" <akhil.goyal@nxp.com>,\n\t\"pablo.de.lara.guarch@intel.com\" <pablo.de.lara.guarch@intel.com>",
        "CC": "Srikanth Jampala <jsrikanth@marvell.com>, \"dev@dpdk.org\" <dev@dpdk.org>, \n\tNagadheeraj Rottela <rnagadheeraj@marvell.com>",
        "Thread-Topic": "[PATCH v7 4/8] crypto/nitrox: add hardware queue management\n\tfunctionality",
        "Thread-Index": "AQHVeCNAYlmtZsoCnEiFVHBGG0lQiA==",
        "Date": "Tue, 1 Oct 2019 06:41:27 +0000",
        "Message-ID": "<20191001064048.5624-5-rnagadheeraj@marvell.com>",
        "References": "<20190716091016.4788-1-rnagadheeraj@marvell.com>\n\t<20191001064048.5624-1-rnagadheeraj@marvell.com>",
        "In-Reply-To": "<20191001064048.5624-1-rnagadheeraj@marvell.com>",
        "Accept-Language": "en-IN, en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-clientproxiedby": "PN1PR0101CA0050.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:c00:d::12) To MN2PR18MB2797.namprd18.prod.outlook.com\n\t(2603:10b6:208:a0::16)",
        "x-ms-exchange-messagesentrepresentingtype": "1",
        "x-mailer": "git-send-email 2.13.6",
        "x-originating-ip": "[115.113.156.2]",
        "x-ms-publictraffictype": "Email",
        "x-ms-office365-filtering-correlation-id": "b68856bb-ca90-413a-2a02-08d7463a6283",
        "x-ms-traffictypediagnostic": "MN2PR18MB3375:",
        "x-ms-exchange-transport-forked": "True",
        "x-microsoft-antispam-prvs": "<MN2PR18MB3375D4412244E2C2CD8050E6D69D0@MN2PR18MB3375.namprd18.prod.outlook.com>",
        "x-ms-oob-tlc-oobclassifiers": "OLM:127;",
        "x-forefront-prvs": "0177904E6B",
        "x-forefront-antispam-report": "SFV:NSPM;\n\tSFS:(10009020)(4636009)(366004)(396003)(39850400004)(346002)(136003)(376002)(199004)(189003)(66946007)(76176011)(6512007)(66556008)(476003)(81166006)(66476007)(478600001)(446003)(14444005)(52116002)(256004)(99286004)(486006)(81156014)(8936002)(305945005)(2616005)(64756008)(5660300002)(4326008)(66066001)(316002)(11346002)(6436002)(25786009)(2906002)(386003)(71200400001)(71190400001)(14454004)(107886003)(6486002)(55236004)(102836004)(110136005)(54906003)(8676002)(2501003)(186003)(66446008)(6116002)(3846002)(50226002)(86362001)(30864003)(26005)(36756003)(1076003)(7736002)(6506007);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR18MB3375;\n\tH:MN2PR18MB2797.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; A:1; MX:1; ",
        "received-spf": "None (protection.outlook.com: marvell.com does not designate\n\tpermitted sender hosts)",
        "x-ms-exchange-senderadcheck": "1",
        "x-microsoft-antispam": "BCL:0;",
        "x-microsoft-antispam-message-info": "CEwhrqKQMa73AL4XvtZrCCvFgrgX9e/cuKmLLCGnoGWqn3asPE/7XnSppyLN5XCt77kE4UF/vJ8kRpMqRcyR3O/Tcn5YUR7HiyT+egQCbk7QY/6LlkLq7YkYzIlRxgzBeLTYN2xmB1n2sWFIPKksowSpORn8uYab+ESv7EgOOFrmCmO3NjwdlM9j8LVptfp2Lf0bcDJ/CGK0s44RlF1DLe7WqLLIuV1LNo7iX59glBfxd8Pa1WI5CuvDcF2aMr64n6sXRsNRDRgnheloaZtILYi80T9M2SIZ6Ds4o8mTGFD909WabhShawSf/0La3xO4N4Qbx5GtRb+8Eeenzfqv0iRkEU/+YD+luN7iA3mckwSo46FvXmjTHo3sXf6PaxKcU/cQaS5yu/5Zg6fUSYjYnkU5aA+WVP0IdMSbktNL1WQ=",
        "Content-Type": "text/plain; charset=\"iso-8859-1\"",
        "Content-Transfer-Encoding": "quoted-printable",
        "MIME-Version": "1.0",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "b68856bb-ca90-413a-2a02-08d7463a6283",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "01 Oct 2019 06:41:27.3473\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-fromentityheader": "Hosted",
        "X-MS-Exchange-CrossTenant-id": "70e1fb47-1155-421d-87fc-2e58f638b6e0",
        "X-MS-Exchange-CrossTenant-mailboxtype": "HOSTED",
        "X-MS-Exchange-CrossTenant-userprincipalname": "NpUsDneemiIjpcwfWsu7yYNOLE64IIj8g7JS2Mv1LQ1JW84xQzNC0OgHgqjcbiuP8wYFgn6NSDG5PQuLuNWObJeMqcywr+/aEbnItKaNFXY=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MN2PR18MB3375",
        "X-OriginatorOrg": "marvell.com",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.95,1.0.8\n\tdefinitions=2019-10-01_03:2019-09-30,2019-10-01 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v7 4/8] crypto/nitrox: add hardware queue\n\tmanagement functionality",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add hardware queue management code corresponding to queue pair setup\nand release functions.\n\nSigned-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com>\n---\n drivers/crypto/nitrox/nitrox_csr.h |  12 +++\n drivers/crypto/nitrox/nitrox_hal.c | 151 +++++++++++++++++++++++++++++++++++++\n drivers/crypto/nitrox/nitrox_hal.h | 128 +++++++++++++++++++++++++++++++\n drivers/crypto/nitrox/nitrox_qp.c  |  51 +++++++++++--\n drivers/crypto/nitrox/nitrox_qp.h  |   8 ++\n 5 files changed, 345 insertions(+), 5 deletions(-)",
    "diff": "diff --git a/drivers/crypto/nitrox/nitrox_csr.h b/drivers/crypto/nitrox/nitrox_csr.h\nindex 879104515..8cd92e38b 100644\n--- a/drivers/crypto/nitrox/nitrox_csr.h\n+++ b/drivers/crypto/nitrox/nitrox_csr.h\n@@ -9,6 +9,18 @@\n #include <rte_io.h>\n \n #define CSR_DELAY\t30\n+#define NITROX_CSR_ADDR(bar_addr, offset) (bar_addr + (offset))\n+\n+/* NPS packet registers */\n+#define NPS_PKT_IN_INSTR_CTLX(_i)\t(0x10060 + ((_i) * 0x40000))\n+#define NPS_PKT_IN_INSTR_BADDRX(_i)\t(0x10068 + ((_i) * 0x40000))\n+#define NPS_PKT_IN_INSTR_RSIZEX(_i)\t(0x10070 + ((_i) * 0x40000))\n+#define NPS_PKT_IN_DONE_CNTSX(_i)\t(0x10080 + ((_i) * 0x40000))\n+#define NPS_PKT_IN_INSTR_BAOFF_DBELLX(_i)\t(0x10078 + ((_i) * 0x40000))\n+#define NPS_PKT_IN_INT_LEVELSX(_i)\t\t(0x10088 + ((_i) * 0x40000))\n+#define NPS_PKT_SLC_CTLX(_i)\t\t(0x10000 + ((_i) * 0x40000))\n+#define NPS_PKT_SLC_CNTSX(_i)\t\t(0x10008 + ((_i) * 0x40000))\n+#define NPS_PKT_SLC_INT_LEVELSX(_i)\t(0x10010 + ((_i) * 0x40000))\n \n /* AQM Virtual Function Registers */\n #define AQMQ_QSZX(_i)\t\t\t(0x20008 + ((_i)*0x40000))\ndiff --git a/drivers/crypto/nitrox/nitrox_hal.c b/drivers/crypto/nitrox/nitrox_hal.c\nindex ed1882016..433f3adb2 100644\n--- a/drivers/crypto/nitrox/nitrox_hal.c\n+++ b/drivers/crypto/nitrox/nitrox_hal.c\n@@ -12,6 +12,157 @@\n \n #define MAX_VF_QUEUES\t8\n #define MAX_PF_QUEUES\t64\n+#define NITROX_TIMER_THOLD\t0x3FFFFF\n+#define NITROX_COUNT_THOLD      0xFFFFFFFF\n+\n+void\n+nps_pkt_input_ring_disable(uint8_t *bar_addr, uint16_t ring)\n+{\n+\tunion nps_pkt_in_instr_ctl pkt_in_instr_ctl;\n+\tuint64_t reg_addr;\n+\tint max_retries = 5;\n+\n+\treg_addr = NPS_PKT_IN_INSTR_CTLX(ring);\n+\tpkt_in_instr_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tpkt_in_instr_ctl.s.enb = 0;\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_in_instr_ctl.u64);\n+\trte_delay_us_block(100);\n+\n+\t/* wait for enable bit to be cleared */\n+\tpkt_in_instr_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\twhile (pkt_in_instr_ctl.s.enb && max_retries--) {\n+\t\trte_delay_ms(10);\n+\t\tpkt_in_instr_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t}\n+}\n+\n+void\n+nps_pkt_solicited_port_disable(uint8_t *bar_addr, uint16_t port)\n+{\n+\tunion nps_pkt_slc_ctl pkt_slc_ctl;\n+\tuint64_t reg_addr;\n+\tint max_retries = 5;\n+\n+\t/* clear enable bit */\n+\treg_addr = NPS_PKT_SLC_CTLX(port);\n+\tpkt_slc_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tpkt_slc_ctl.s.enb = 0;\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_slc_ctl.u64);\n+\trte_delay_us_block(100);\n+\n+\tpkt_slc_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\twhile (pkt_slc_ctl.s.enb && max_retries--) {\n+\t\trte_delay_ms(10);\n+\t\tpkt_slc_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t}\n+}\n+\n+void\n+setup_nps_pkt_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\n+\t\t\t phys_addr_t raddr)\n+{\n+\tunion nps_pkt_in_instr_ctl pkt_in_instr_ctl;\n+\tunion nps_pkt_in_instr_rsize pkt_in_instr_rsize;\n+\tunion nps_pkt_in_instr_baoff_dbell pkt_in_instr_baoff_dbell;\n+\tunion nps_pkt_in_done_cnts pkt_in_done_cnts;\n+\tuint64_t base_addr, reg_addr;\n+\tint max_retries = 5;\n+\n+\tnps_pkt_input_ring_disable(bar_addr, ring);\n+\n+\t/* write base address */\n+\treg_addr = NPS_PKT_IN_INSTR_BADDRX(ring);\n+\tbase_addr = raddr;\n+\tnitrox_write_csr(bar_addr, reg_addr, base_addr);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write ring size */\n+\treg_addr = NPS_PKT_IN_INSTR_RSIZEX(ring);\n+\tpkt_in_instr_rsize.u64 = 0;\n+\tpkt_in_instr_rsize.s.rsize = rsize;\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_in_instr_rsize.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* clear door bell */\n+\treg_addr = NPS_PKT_IN_INSTR_BAOFF_DBELLX(ring);\n+\tpkt_in_instr_baoff_dbell.u64 = 0;\n+\tpkt_in_instr_baoff_dbell.s.dbell = 0xFFFFFFFF;\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_in_instr_baoff_dbell.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* clear done count */\n+\treg_addr = NPS_PKT_IN_DONE_CNTSX(ring);\n+\tpkt_in_done_cnts.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_in_done_cnts.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* Setup PKT IN RING Interrupt Threshold */\n+\treg_addr = NPS_PKT_IN_INT_LEVELSX(ring);\n+\tnitrox_write_csr(bar_addr, reg_addr, 0xFFFFFFFF);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* enable ring */\n+\treg_addr = NPS_PKT_IN_INSTR_CTLX(ring);\n+\tpkt_in_instr_ctl.u64 = 0;\n+\tpkt_in_instr_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tpkt_in_instr_ctl.s.is64b = 1;\n+\tpkt_in_instr_ctl.s.enb = 1;\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_in_instr_ctl.u64);\n+\trte_delay_us_block(100);\n+\n+\tpkt_in_instr_ctl.u64 = 0;\n+\tpkt_in_instr_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t/* wait for ring to be enabled */\n+\twhile (!pkt_in_instr_ctl.s.enb && max_retries--) {\n+\t\trte_delay_ms(10);\n+\t\tpkt_in_instr_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t}\n+}\n+\n+void\n+setup_nps_pkt_solicit_output_port(uint8_t *bar_addr, uint16_t port)\n+{\n+\tunion nps_pkt_slc_ctl pkt_slc_ctl;\n+\tunion nps_pkt_slc_cnts pkt_slc_cnts;\n+\tunion nps_pkt_slc_int_levels pkt_slc_int_levels;\n+\tuint64_t reg_addr;\n+\tint max_retries = 5;\n+\n+\tnps_pkt_solicited_port_disable(bar_addr, port);\n+\n+\t/* clear pkt counts */\n+\treg_addr = NPS_PKT_SLC_CNTSX(port);\n+\tpkt_slc_cnts.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_slc_cnts.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* slc interrupt levels */\n+\treg_addr = NPS_PKT_SLC_INT_LEVELSX(port);\n+\tpkt_slc_int_levels.u64 = 0;\n+\tpkt_slc_int_levels.s.bmode = 0;\n+\tpkt_slc_int_levels.s.timet = NITROX_TIMER_THOLD;\n+\n+\tif (NITROX_COUNT_THOLD > 0)\n+\t\tpkt_slc_int_levels.s.cnt = NITROX_COUNT_THOLD - 1;\n+\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_slc_int_levels.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* enable ring */\n+\treg_addr = NPS_PKT_SLC_CTLX(port);\n+\tpkt_slc_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tpkt_slc_ctl.s.rh = 1;\n+\tpkt_slc_ctl.s.z = 1;\n+\tpkt_slc_ctl.s.enb = 1;\n+\tnitrox_write_csr(bar_addr, reg_addr, pkt_slc_ctl.u64);\n+\trte_delay_us_block(100);\n+\n+\tpkt_slc_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\twhile (!pkt_slc_ctl.s.enb && max_retries--) {\n+\t\trte_delay_ms(10);\n+\t\tpkt_slc_ctl.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t}\n+}\n \n int\n vf_get_vf_config_mode(uint8_t *bar_addr)\ndiff --git a/drivers/crypto/nitrox/nitrox_hal.h b/drivers/crypto/nitrox/nitrox_hal.h\nindex 6184211a5..dcfbd11d8 100644\n--- a/drivers/crypto/nitrox/nitrox_hal.h\n+++ b/drivers/crypto/nitrox/nitrox_hal.h\n@@ -10,6 +10,129 @@\n \n #include \"nitrox_csr.h\"\n \n+union nps_pkt_slc_cnts {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t slc_int : 1;\n+\t\tuint64_t uns_int : 1;\n+\t\tuint64_t in_int : 1;\n+\t\tuint64_t mbox_int : 1;\n+\t\tuint64_t resend : 1;\n+\t\tuint64_t raz : 5;\n+\t\tuint64_t timer : 22;\n+\t\tuint64_t cnt : 32;\n+#else\n+\t\tuint64_t cnt : 32;\n+\t\tuint64_t timer : 22;\n+\t\tuint64_t raz : 5;\n+\t\tuint64_t resend : 1;\n+\t\tuint64_t mbox_int : 1;\n+\t\tuint64_t in_int : 1;\n+\t\tuint64_t uns_int : 1;\n+\t\tuint64_t slc_int : 1;\n+#endif\n+\t} s;\n+};\n+\n+union nps_pkt_slc_int_levels {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t bmode : 1;\n+\t\tuint64_t raz : 9;\n+\t\tuint64_t timet : 22;\n+\t\tuint64_t cnt : 32;\n+#else\n+\t\tuint64_t cnt : 32;\n+\t\tuint64_t timet : 22;\n+\t\tuint64_t raz : 9;\n+\t\tuint64_t bmode : 1;\n+#endif\n+\t} s;\n+};\n+\n+union nps_pkt_slc_ctl {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz : 61;\n+\t\tuint64_t rh : 1;\n+\t\tuint64_t z : 1;\n+\t\tuint64_t enb : 1;\n+#else\n+\t\tuint64_t enb : 1;\n+\t\tuint64_t z : 1;\n+\t\tuint64_t rh : 1;\n+\t\tuint64_t raz : 61;\n+#endif\n+\t} s;\n+};\n+\n+union nps_pkt_in_instr_ctl {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz : 62;\n+\t\tuint64_t is64b : 1;\n+\t\tuint64_t enb : 1;\n+#else\n+\t\tuint64_t enb : 1;\n+\t\tuint64_t is64b : 1;\n+\t\tuint64_t raz : 62;\n+#endif\n+\t} s;\n+};\n+\n+union nps_pkt_in_instr_rsize {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz : 32;\n+\t\tuint64_t rsize : 32;\n+#else\n+\t\tuint64_t rsize : 32;\n+\t\tuint64_t raz : 32;\n+#endif\n+\t} s;\n+};\n+\n+union nps_pkt_in_instr_baoff_dbell {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t aoff : 32;\n+\t\tuint64_t dbell : 32;\n+#else\n+\t\tuint64_t dbell : 32;\n+\t\tuint64_t aoff : 32;\n+#endif\n+\t} s;\n+};\n+\n+union nps_pkt_in_done_cnts {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t slc_int : 1;\n+\t\tuint64_t uns_int : 1;\n+\t\tuint64_t in_int : 1;\n+\t\tuint64_t mbox_int : 1;\n+\t\tuint64_t resend : 1;\n+\t\tuint64_t raz : 27;\n+\t\tuint64_t cnt : 32;\n+#else\n+\t\tuint64_t cnt : 32;\n+\t\tuint64_t raz : 27;\n+\t\tuint64_t resend : 1;\n+\t\tuint64_t mbox_int : 1;\n+\t\tuint64_t in_int : 1;\n+\t\tuint64_t uns_int : 1;\n+\t\tuint64_t slc_int : 1;\n+#endif\n+\t} s;\n+};\n+\n union aqmq_qsz {\n \tuint64_t u64;\n \tstruct {\n@@ -33,5 +156,10 @@ enum nitrox_vf_mode {\n \n int vf_get_vf_config_mode(uint8_t *bar_addr);\n int vf_config_mode_to_nr_queues(enum nitrox_vf_mode vf_mode);\n+void setup_nps_pkt_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\n+\t\t\t      phys_addr_t raddr);\n+void setup_nps_pkt_solicit_output_port(uint8_t *bar_addr, uint16_t port);\n+void nps_pkt_input_ring_disable(uint8_t *bar_addr, uint16_t ring);\n+void nps_pkt_solicited_port_disable(uint8_t *bar_addr, uint16_t port);\n \n #endif /* _NITROX_HAL_H_ */\ndiff --git a/drivers/crypto/nitrox/nitrox_qp.c b/drivers/crypto/nitrox/nitrox_qp.c\nindex 9673bb4f3..5e85ccbd5 100644\n--- a/drivers/crypto/nitrox/nitrox_qp.c\n+++ b/drivers/crypto/nitrox/nitrox_qp.c\n@@ -10,6 +10,38 @@\n #include \"nitrox_logs.h\"\n \n #define MAX_CMD_QLEN 16384\n+#define CMDQ_PKT_IN_ALIGN 16\n+\n+static int\n+nitrox_setup_cmdq(struct nitrox_qp *qp, uint8_t *bar_addr,\n+\t\t  const char *dev_name, uint8_t instr_size, int socket_id)\n+{\n+\tchar mz_name[RTE_MEMZONE_NAMESIZE];\n+\tconst struct rte_memzone *mz;\n+\tsize_t cmdq_size = qp->count * instr_size;\n+\tuint64_t offset;\n+\n+\tsnprintf(mz_name, sizeof(mz_name), \"%s_cmdq_%d\", dev_name, qp->qno);\n+\tmz = rte_memzone_reserve_aligned(mz_name, cmdq_size, socket_id,\n+\t\t\t\t\t RTE_MEMZONE_SIZE_HINT_ONLY |\n+\t\t\t\t\t RTE_MEMZONE_256MB,\n+\t\t\t\t\t CMDQ_PKT_IN_ALIGN);\n+\tif (!mz) {\n+\t\tNITROX_LOG(ERR, \"cmdq memzone reserve failed for %s queue\\n\",\n+\t\t\t   mz_name);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tqp->cmdq.mz = mz;\n+\toffset = NPS_PKT_IN_INSTR_BAOFF_DBELLX(qp->qno);\n+\tqp->cmdq.dbell_csr_addr = NITROX_CSR_ADDR(bar_addr, offset);\n+\tqp->cmdq.ring = mz->addr;\n+\tqp->cmdq.instr_size = instr_size;\n+\tsetup_nps_pkt_input_ring(bar_addr, qp->qno, qp->count, mz->iova);\n+\tsetup_nps_pkt_solicit_output_port(bar_addr, qp->qno);\n+\n+\treturn 0;\n+}\n \n static int\n nitrox_setup_ridq(struct nitrox_qp *qp, int socket_id)\n@@ -27,6 +59,14 @@ nitrox_setup_ridq(struct nitrox_qp *qp, int socket_id)\n \treturn 0;\n }\n \n+static int\n+nitrox_release_cmdq(struct nitrox_qp *qp, uint8_t *bar_addr)\n+{\n+\tnps_pkt_solicited_port_disable(bar_addr, qp->qno);\n+\tnps_pkt_input_ring_disable(bar_addr, qp->qno);\n+\treturn rte_memzone_free(qp->cmdq.mz);\n+}\n+\n int\n nitrox_qp_setup(struct nitrox_qp *qp, uint8_t *bar_addr, const char *dev_name,\n \t\tuint32_t nb_descriptors, uint8_t instr_size, int socket_id)\n@@ -34,8 +74,6 @@ nitrox_qp_setup(struct nitrox_qp *qp, uint8_t *bar_addr, const char *dev_name,\n \tint err;\n \tuint32_t count;\n \n-\tRTE_SET_USED(bar_addr);\n-\tRTE_SET_USED(instr_size);\n \tcount = rte_align32pow2(nb_descriptors);\n \tif (count > MAX_CMD_QLEN) {\n \t\tNITROX_LOG(ERR, \"%s: Number of descriptors too big %d,\"\n@@ -48,6 +86,10 @@ nitrox_qp_setup(struct nitrox_qp *qp, uint8_t *bar_addr, const char *dev_name,\n \tqp->count = count;\n \tqp->head = qp->tail = 0;\n \trte_atomic16_init(&qp->pending_count);\n+\terr = nitrox_setup_cmdq(qp, bar_addr, dev_name, instr_size, socket_id);\n+\tif (err)\n+\t\treturn err;\n+\n \terr = nitrox_setup_ridq(qp, socket_id);\n \tif (err)\n \t\tgoto ridq_err;\n@@ -55,8 +97,8 @@ nitrox_qp_setup(struct nitrox_qp *qp, uint8_t *bar_addr, const char *dev_name,\n \treturn 0;\n \n ridq_err:\n+\tnitrox_release_cmdq(qp, bar_addr);\n \treturn err;\n-\n }\n \n static void\n@@ -68,7 +110,6 @@ nitrox_release_ridq(struct nitrox_qp *qp)\n int\n nitrox_qp_release(struct nitrox_qp *qp, uint8_t *bar_addr)\n {\n-\tRTE_SET_USED(bar_addr);\n \tnitrox_release_ridq(qp);\n-\treturn 0;\n+\treturn nitrox_release_cmdq(qp, bar_addr);\n }\ndiff --git a/drivers/crypto/nitrox/nitrox_qp.h b/drivers/crypto/nitrox/nitrox_qp.h\nindex cf0102ff9..0244c4dbf 100644\n--- a/drivers/crypto/nitrox/nitrox_qp.h\n+++ b/drivers/crypto/nitrox/nitrox_qp.h\n@@ -11,11 +11,19 @@\n \n struct nitrox_softreq;\n \n+struct command_queue {\n+\tconst struct rte_memzone *mz;\n+\tuint8_t *dbell_csr_addr;\n+\tuint8_t *ring;\n+\tuint8_t instr_size;\n+};\n+\n struct rid {\n \tstruct nitrox_softreq *sr;\n };\n \n struct nitrox_qp {\n+\tstruct command_queue cmdq;\n \tstruct rid *ridq;\n \tuint32_t count;\n \tuint32_t head;\n",
    "prefixes": [
        "v7",
        "4/8"
    ]
}