get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 59959,
    "url": "https://patches.dpdk.org/api/patches/59959/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20190927062533.19005-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": "<20190927062533.19005-5-rnagadheeraj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190927062533.19005-5-rnagadheeraj@marvell.com",
    "date": "2019-09-27T06:26:33",
    "name": "[v6,4/8] crypto/nitrox: add hardware queue management functionality",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "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/20190927062533.19005-5-rnagadheeraj@marvell.com/mbox/",
    "series": [
        {
            "id": 6560,
            "url": "https://patches.dpdk.org/api/series/6560/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=6560",
            "date": "2019-09-27T06:26:22",
            "name": "add Nitrox crypto device support",
            "version": 6,
            "mbox": "https://patches.dpdk.org/series/6560/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/59959/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/59959/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 81A83343C;\n\tFri, 27 Sep 2019 08:26:41 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n\t[67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 4D0812BE6\n\tfor <dev@dpdk.org>; Fri, 27 Sep 2019 08:26:37 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n\tby mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id\n\tx8R5nf4L008074; Thu, 26 Sep 2019 23:26:36 -0700",
            "from sc-exch03.marvell.com ([199.233.58.183])\n\tby mx0a-0016f401.pphosted.com with ESMTP id 2v8vdwmepq-2\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); \n\tThu, 26 Sep 2019 23:26:36 -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\tThu, 26 Sep 2019 23:26:35 -0700",
            "from NAM05-DM3-obe.outbound.protection.outlook.com (104.47.49.55)\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; Thu, 26 Sep 2019 23:26:35 -0700",
            "from BYAPR18MB2792.namprd18.prod.outlook.com (20.179.56.216) by\n\tBYAPR18MB2984.namprd18.prod.outlook.com (20.179.59.97) with Microsoft\n\tSMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.2284.19; Fri, 27 Sep 2019 06:26:33 +0000",
            "from BYAPR18MB2792.namprd18.prod.outlook.com\n\t([fe80::7112:68c6:eb44:e9aa]) by\n\tBYAPR18MB2792.namprd18.prod.outlook.com\n\t([fe80::7112:68c6:eb44:e9aa%3]) with mapi id 15.20.2284.028;\n\tFri, 27 Sep 2019 06:26:33 +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=n/Yuq48wVeb2kDWukqZSNEd+4PfVB/fkHYY9SR27U0LBi8WyXs4sz8NxnL91YZ9oPz02\n\t5FPS/r0Ay5rUjXiqKMuDmhwE6FtfgyOeRG/ia+ikjmflLyCNGV3Y5Jsboyq0MGSrsSho\n\tjJkwLxjmErvxsL9cCk/E2H4pVLYy7UnXLXVZ/t0DRSq1/etXIxYy708aPHtlrkDIIaMF\n\t5h2wduS1+4yzX46gWTmJ0KE2+MmdPRnrBlGqmOIKR+yPr8gV757V4ASDRO7l5IK+YJ1N\n\tS2baVHFIwQz7x6tRRMZaSUxW3unHtKdTwreifbojLPuSA6ece2lyuuMHVbGezd2AKuBa\n\tLw== ",
            "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=BvXnYeWjo265/rFLiT1sRLaEnK+ltpqKTEHyDuKBAyOCDQn4b6yWkK8FlOoLHlhONfTNf4hkNKGhTGOt7NMnKbDRi2M7mAooEPfbMmCyx65akoxafBoeCqhD6f7RbokFOGd1WR4yUlyUSOmTA1SufCyqcOaYE4vz7jyr5x2BSmY="
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n\tb=mLT7PMCBtBb+SFeT+rIe4OqGHZFI7lZ6rUCvAhRTOxEUwTw9AyxVriqHrAZikaVpG9jWCFFsBIB/GtPNNzzvhicSVxG6pisfNYYmtWIoNZi4FfZmA4Vrp/0Boc7aku87dMT59nsG8MCzniXFBz/ha2x1f9355rwqvgPd7syflJFxyX2NwUtHMwetLJcKOXEiglYCNAibp36FE2loZgAschW0L6U8g/5bymY2C8+VKuuQd1PKnHUjyR/xde6clI4Wo39Euzywb+D8uaJquKs4PhhvRIobv6Or4L11zDU6B35hZxlCa9JkmJrAwUbvTm2GoeLtKbA/yzZjVoNtYMZpnQ==",
        "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=BVpqWt8sxmuyWi/1drKAYAPiywX9A4KQoM7ckF47N591uhNJyXzLcItKQuYnAUjXfbTtrkqGU6jMUwCOYnK45hwzyhyaoyOw5GQWmgXO/YuKgoF1nONX2XlDBF5oeRk3bD30qKu2FnlqElirfbQwqQeY8khL1elPaDhWWg4r2yuRVk4EpM0Kc3iZ08rzVPIgYPJjfVPiYvmUmV88+XlOvSFjVBBfSfQXFb0drSbAeoVdRfyuhIRVDuQ9zh74Po++TuJuQ2zCDTpVbquEWHlbkfd6r+tXmyVVvABYGYXkYx5keneP+Lz4ViHxGcoFUqRRe4CeClzVYAy2T1ZI7wTSrg==",
        "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 v6 4/8] crypto/nitrox: add hardware queue management\n\tfunctionality",
        "Thread-Index": "AQHVdPyBrfDGsb44oUyoqjuubqbOmw==",
        "Date": "Fri, 27 Sep 2019 06:26:33 +0000",
        "Message-ID": "<20190927062533.19005-5-rnagadheeraj@marvell.com>",
        "References": "<20190716091016.4788-1-rnagadheeraj@marvell.com>\n\t<20190927062533.19005-1-rnagadheeraj@marvell.com>",
        "In-Reply-To": "<20190927062533.19005-1-rnagadheeraj@marvell.com>",
        "Accept-Language": "en-IN, en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-clientproxiedby": "PN1PR0101CA0025.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:c00:c::11) To BYAPR18MB2792.namprd18.prod.outlook.com\n\t(2603:10b6:a03:105::24)",
        "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": "83dee7ab-339c-4500-780e-08d74313a3f2",
        "x-microsoft-antispam": "BCL:0; PCL:0;\n\tRULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);\n\tSRVR:BYAPR18MB2984; ",
        "x-ms-traffictypediagnostic": "BYAPR18MB2984:",
        "x-ms-exchange-transport-forked": "True",
        "x-microsoft-antispam-prvs": "<BYAPR18MB29847743146C03C10401A2FFD6810@BYAPR18MB2984.namprd18.prod.outlook.com>",
        "x-ms-oob-tlc-oobclassifiers": "OLM:127;",
        "x-forefront-prvs": "0173C6D4D5",
        "x-forefront-antispam-report": "SFV:NSPM;\n\tSFS:(10009020)(4636009)(396003)(376002)(136003)(366004)(39860400002)(346002)(189003)(199004)(6436002)(26005)(30864003)(2906002)(107886003)(14444005)(102836004)(3846002)(1076003)(66066001)(14454004)(6486002)(55236004)(36756003)(305945005)(256004)(478600001)(186003)(6506007)(66946007)(110136005)(76176011)(8936002)(8676002)(54906003)(6116002)(71190400001)(5660300002)(71200400001)(52116002)(386003)(66556008)(66446008)(446003)(11346002)(2501003)(86362001)(81166006)(64756008)(316002)(4326008)(66476007)(25786009)(50226002)(99286004)(2616005)(476003)(7736002)(486006)(81156014)(6512007);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR18MB2984;\n\tH:BYAPR18MB2792.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; MX:1; A:1; ",
        "received-spf": "None (protection.outlook.com: marvell.com does not designate\n\tpermitted sender hosts)",
        "x-ms-exchange-senderadcheck": "1",
        "x-microsoft-antispam-message-info": "HHaDOVgu9VNbso3yZszrTGC9UdjCJqzGXEC4rroLl5xDnS42UQ39Qv5nBWSF2Ykczsovlf5t0K/KXk34dThQRDxMesWr+CtD1pb9k0X7Fc8NPa4r0xDFQztug0czh3u3pTxdIEGKoZsb+3PXvMkSyDMw91Q6S+TgWVQzEW+Yu4zMVv454qVQAwFt4eCDuNK9m+oa3kNJAE3OFTm+rsf8SDCtxsXVNA0ATxDeGPoVz3gIKfpUQFqymZLEWfqukZUHqpfCve7bvsVq76IZ6O85t0kpAkdDMv9jeYWwrfvAkR8d7P2flti43r5kVVJ+qQdJGOk7hMYrIK9al2xbfwVd9gRyp4ZqAhw3SfAJ2ugHOqs4/zgDKGGTG/xN5i8GFtG5+CSiZavVPRgWbK9Y9Ujq5RDGUZs0jxjHciOMbPXlAZE=",
        "Content-Type": "text/plain; charset=\"iso-8859-1\"",
        "Content-Transfer-Encoding": "quoted-printable",
        "MIME-Version": "1.0",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "83dee7ab-339c-4500-780e-08d74313a3f2",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "27 Sep 2019 06:26:33.4538\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": "7kSutDRNjo+wUsoOeRynQ6E6j5YUM1H39Lsy1BwykFlQDt5fYFLF8VnF5CRjrVQiPwTsb65n9u84KGJLIRuNZKi1l/7IQRYx7nRuHyfqnG8=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BYAPR18MB2984",
        "X-OriginatorOrg": "marvell.com",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.95,1.0.8\n\tdefinitions=2019-09-27_04:2019-09-25,2019-09-27 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v6 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": [
        "v6",
        "4/8"
    ]
}