get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 137796,
    "url": "http://patches.dpdk.org/api/patches/137796/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240302093813.14922-4-rnagadheeraj@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20240302093813.14922-4-rnagadheeraj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240302093813.14922-4-rnagadheeraj@marvell.com",
    "date": "2024-03-02T09:38:09",
    "name": "[v5,3/7] common/nitrox: add compress hardware queue management",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "3e1ed62fbc289d5508488283541aa8452c295875",
    "submitter": {
        "id": 1365,
        "url": "http://patches.dpdk.org/api/people/1365/?format=api",
        "name": "Nagadheeraj Rottela",
        "email": "rnagadheeraj@marvell.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20240302093813.14922-4-rnagadheeraj@marvell.com/mbox/",
    "series": [
        {
            "id": 31344,
            "url": "http://patches.dpdk.org/api/series/31344/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31344",
            "date": "2024-03-02T09:38:06",
            "name": "add Nitrox compress device support",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/31344/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/137796/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/137796/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 8366943C30;\n\tSat,  2 Mar 2024 10:39:03 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 8174E42D66;\n\tSat,  2 Mar 2024 10:38:49 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 6199042D2B\n for <dev@dpdk.org>; Sat,  2 Mar 2024 10:38:47 +0100 (CET)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id\n 4229aUeo008350; Sat, 2 Mar 2024 01:38:46 -0800",
            "from dc5-exch05.marvell.com ([199.233.59.128])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3wjfayafpa-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Sat, 02 Mar 2024 01:38:46 -0800 (PST)",
            "from DC5-EXCH05.marvell.com (10.69.176.209) by\n DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server\n (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.2.1258.12; Sat, 2 Mar 2024 01:38:45 -0800",
            "from hyd1399.caveonetworks.com.com (10.69.176.80) by\n DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id\n 15.2.1258.12 via Frontend Transport; Sat, 2 Mar 2024 01:38:43 -0800"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=\n from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding:content-type; s=\n pfpt0220; bh=ajUY1RWoNOPsSxoJjy0r82uSuRiE4GK3MgLvg/XCdQE=; b=PtO\n DQnr4K1KlLF74hu7L4rCsHVqK44TPXNPIgsX6mcuiW1VKTgHadbuXpQSg/nk0Kmk\n tzEghsgbSbmxjglr6o6C3sm6vXA5FZqdcZ1FZhF8w0bxkYTtoLVDZGF/rUdPlSAN\n dB3SGd8ewHgnXjNo+ue5j03J/V/kdbq6Zq1d1hk35loXUZIOFxa2H75emUQLSbQK\n 4CpbSIMzLTj66QrufhqECcccaPzVOa4NjmBFO7bYEvjG6fZcl8ezdcUF3o8i20yM\n 49fJeq3HMlUCmgyz1TE2+LzbO99umNOIXuWfeorCfq5IOnUkQT2nidjjxDOij8ES\n abU3ivP+uNIF26q22AA==",
        "From": "Nagadheeraj Rottela <rnagadheeraj@marvell.com>",
        "To": "<gakhil@marvell.com>, <fanzhang.oss@gmail.com>, <ashishg@marvell.com>",
        "CC": "<dev@dpdk.org>, Nagadheeraj Rottela <rnagadheeraj@marvell.com>",
        "Subject": "[PATCH v5 3/7] common/nitrox: add compress hardware queue management",
        "Date": "Sat, 2 Mar 2024 15:08:09 +0530",
        "Message-ID": "<20240302093813.14922-4-rnagadheeraj@marvell.com>",
        "X-Mailer": "git-send-email 2.42.0",
        "In-Reply-To": "<20240302093813.14922-1-rnagadheeraj@marvell.com>",
        "References": "<20240302093813.14922-1-rnagadheeraj@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "02DhBf5l-fI3YTQM7EydvvnUE2YQPC8T",
        "X-Proofpoint-GUID": "02DhBf5l-fI3YTQM7EydvvnUE2YQPC8T",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26\n definitions=2024-03-02_04,2024-03-01_03,2023-05-22_02",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <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 <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Added compress device hardware ring initialization.\n\nSigned-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com>\n---\n drivers/common/nitrox/nitrox_csr.h |  12 +++\n drivers/common/nitrox/nitrox_hal.c | 116 +++++++++++++++++++++++++++++\n drivers/common/nitrox/nitrox_hal.h | 115 ++++++++++++++++++++++++++++\n drivers/common/nitrox/nitrox_qp.c  |  54 ++++++++++++--\n drivers/common/nitrox/nitrox_qp.h  |  49 ++++++++++--\n 5 files changed, 330 insertions(+), 16 deletions(-)",
    "diff": "diff --git a/drivers/common/nitrox/nitrox_csr.h b/drivers/common/nitrox/nitrox_csr.h\nindex de7a3c6713..97c797c2e2 100644\n--- a/drivers/common/nitrox/nitrox_csr.h\n+++ b/drivers/common/nitrox/nitrox_csr.h\n@@ -25,6 +25,18 @@\n /* AQM Virtual Function Registers */\n #define AQMQ_QSZX(_i)\t\t\t(0x20008UL + ((_i) * 0x40000UL))\n \n+/* ZQM virtual function registers */\n+#define ZQMQ_DRBLX(_i)\t\t\t(0x30000UL + ((_i) * 0x40000UL))\n+#define ZQMQ_QSZX(_i)\t\t\t(0x30008UL + ((_i) * 0x40000UL))\n+#define ZQMQ_BADRX(_i)\t\t\t(0x30010UL + ((_i) * 0x40000UL))\n+#define ZQMQ_NXT_CMDX(_i)\t\t(0x30018UL + ((_i) * 0x40000UL))\n+#define ZQMQ_CMD_CNTX(_i)\t\t(0x30020UL + ((_i) * 0x40000UL))\n+#define ZQMQ_CMP_THRX(_i)\t\t(0x30028UL + ((_i) * 0x40000UL))\n+#define ZQMQ_CMP_CNTX(_i)\t\t(0x30030UL + ((_i) * 0x40000UL))\n+#define ZQMQ_TIMER_LDX(_i)\t\t(0x30038UL + ((_i) * 0x40000UL))\n+#define ZQMQ_ENX(_i)\t\t\t(0x30048UL + ((_i) * 0x40000UL))\n+#define ZQMQ_ACTIVITY_STATX(_i)\t\t(0x30050UL + ((_i) * 0x40000UL))\n+\n static inline uint64_t\n nitrox_read_csr(uint8_t *bar_addr, uint64_t offset)\n {\ndiff --git a/drivers/common/nitrox/nitrox_hal.c b/drivers/common/nitrox/nitrox_hal.c\nindex 433f3adb20..451549a664 100644\n--- a/drivers/common/nitrox/nitrox_hal.c\n+++ b/drivers/common/nitrox/nitrox_hal.c\n@@ -9,6 +9,7 @@\n \n #include \"nitrox_hal.h\"\n #include \"nitrox_csr.h\"\n+#include \"nitrox_logs.h\"\n \n #define MAX_VF_QUEUES\t8\n #define MAX_PF_QUEUES\t64\n@@ -164,6 +165,121 @@ setup_nps_pkt_solicit_output_port(uint8_t *bar_addr, uint16_t port)\n \t}\n }\n \n+int\n+zqmq_input_ring_disable(uint8_t *bar_addr, uint16_t ring)\n+{\n+\tunion zqmq_activity_stat zqmq_activity_stat;\n+\tunion zqmq_en zqmq_en;\n+\tunion zqmq_cmp_cnt zqmq_cmp_cnt;\n+\tuint64_t reg_addr;\n+\tint max_retries = 5;\n+\n+\t/* clear queue enable */\n+\treg_addr = ZQMQ_ENX(ring);\n+\tzqmq_en.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tzqmq_en.s.queue_enable = 0;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_en.u64);\n+\trte_delay_us_block(100);\n+\n+\t/* wait for queue active to clear */\n+\treg_addr = ZQMQ_ACTIVITY_STATX(ring);\n+\tzqmq_activity_stat.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\twhile (zqmq_activity_stat.s.queue_active && max_retries--) {\n+\t\trte_delay_ms(10);\n+\t\tzqmq_activity_stat.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t}\n+\n+\tif (zqmq_activity_stat.s.queue_active) {\n+\t\tNITROX_LOG(ERR, \"Failed to disable zqmq ring %d\\n\", ring);\n+\t\treturn -EBUSY;\n+\t}\n+\n+\t/* clear commands completed count */\n+\treg_addr = ZQMQ_CMP_CNTX(ring);\n+\tzqmq_cmp_cnt.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_cmp_cnt.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\treturn 0;\n+}\n+\n+int\n+setup_zqmq_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\n+\t\t      phys_addr_t raddr)\n+{\n+\tunion zqmq_drbl zqmq_drbl;\n+\tunion zqmq_qsz zqmq_qsz;\n+\tunion zqmq_en zqmq_en;\n+\tunion zqmq_cmp_thr zqmq_cmp_thr;\n+\tunion zqmq_timer_ld zqmq_timer_ld;\n+\tuint64_t reg_addr = 0;\n+\tint max_retries = 5;\n+\tint err = 0;\n+\n+\terr = zqmq_input_ring_disable(bar_addr, ring);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* clear doorbell count */\n+\treg_addr = ZQMQ_DRBLX(ring);\n+\tzqmq_drbl.u64 = 0;\n+\tzqmq_drbl.s.dbell_count = 0xFFFFFFFF;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_drbl.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\treg_addr = ZQMQ_NXT_CMDX(ring);\n+\tnitrox_write_csr(bar_addr, reg_addr, 0);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write queue length */\n+\treg_addr = ZQMQ_QSZX(ring);\n+\tzqmq_qsz.u64 = 0;\n+\tzqmq_qsz.s.host_queue_size = rsize;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_qsz.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write queue base address */\n+\treg_addr = ZQMQ_BADRX(ring);\n+\tnitrox_write_csr(bar_addr, reg_addr, raddr);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write commands completed threshold */\n+\treg_addr = ZQMQ_CMP_THRX(ring);\n+\tzqmq_cmp_thr.u64 = 0;\n+\tzqmq_cmp_thr.s.commands_completed_threshold = 0;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_cmp_thr.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\t/* write timer load value */\n+\treg_addr = ZQMQ_TIMER_LDX(ring);\n+\tzqmq_timer_ld.u64 = 0;\n+\tzqmq_timer_ld.s.timer_load_value = 0;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_timer_ld.u64);\n+\trte_delay_us_block(CSR_DELAY);\n+\n+\treg_addr = ZQMQ_ENX(ring);\n+\tzqmq_en.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\tzqmq_en.s.queue_enable = 1;\n+\tnitrox_write_csr(bar_addr, reg_addr, zqmq_en.u64);\n+\trte_delay_us_block(100);\n+\n+\t/* enable queue */\n+\tzqmq_en.u64 = 0;\n+\tzqmq_en.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\twhile (!zqmq_en.s.queue_enable && max_retries--) {\n+\t\trte_delay_ms(10);\n+\t\tzqmq_en.u64 = nitrox_read_csr(bar_addr, reg_addr);\n+\t}\n+\n+\tif (!zqmq_en.s.queue_enable) {\n+\t\tNITROX_LOG(ERR, \"Failed to enable zqmq ring %d\\n\", ring);\n+\t\terr = -EFAULT;\n+\t} else {\n+\t\terr = 0;\n+\t}\n+\n+\treturn err;\n+}\n+\n int\n vf_get_vf_config_mode(uint8_t *bar_addr)\n {\ndiff --git a/drivers/common/nitrox/nitrox_hal.h b/drivers/common/nitrox/nitrox_hal.h\nindex dcfbd11d85..2367b967e5 100644\n--- a/drivers/common/nitrox/nitrox_hal.h\n+++ b/drivers/common/nitrox/nitrox_hal.h\n@@ -146,6 +146,101 @@ union aqmq_qsz {\n \t} s;\n };\n \n+union zqmq_activity_stat {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 63;\n+\t\tuint64_t queue_active\t: 1;\n+#else\n+\t\tuint64_t queue_active\t: 1;\n+\t\tuint64_t raz\t\t: 63;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_en {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 63;\n+\t\tuint64_t queue_enable\t: 1;\n+#else\n+\t\tuint64_t queue_enable\t: 1;\n+\t\tuint64_t raz\t\t: 63;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_cmp_cnt {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t\t: 30;\n+\t\tuint64_t resend\t\t\t: 1;\n+\t\tuint64_t completion_status\t: 1;\n+\t\tuint64_t commands_completed_count: 32;\n+#else\n+\t\tuint64_t commands_completed_count: 32;\n+\t\tuint64_t completion_status\t: 1;\n+\t\tuint64_t resend\t\t\t: 1;\n+\t\tuint64_t raz\t\t\t: 30;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_drbl {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 32;\n+\t\tuint64_t dbell_count\t: 32;\n+#else\n+\t\tuint64_t dbell_count\t: 32;\n+\t\tuint64_t raz\t\t: 32;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_qsz {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 32;\n+\t\tuint64_t host_queue_size: 32;\n+#else\n+\t\tuint64_t host_queue_size: 32;\n+\t\tuint64_t raz\t\t: 32;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_cmp_thr {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t\t\t: 32;\n+\t\tuint64_t commands_completed_threshold\t: 32;\n+#else\n+\t\tuint64_t commands_completed_threshold\t: 32;\n+\t\tuint64_t raz\t\t\t\t: 32;\n+#endif\n+\t} s;\n+};\n+\n+union zqmq_timer_ld {\n+\tuint64_t u64;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz\t\t: 32;\n+\t\tuint64_t timer_load_value: 32;\n+#else\n+\t\tuint64_t timer_load_value: 32;\n+\t\tuint64_t raz\t\t: 32;\n+#endif\n+\t} s;\n+};\n+\n enum nitrox_vf_mode {\n \tNITROX_MODE_PF = 0x0,\n \tNITROX_MODE_VF16 = 0x1,\n@@ -154,6 +249,23 @@ enum nitrox_vf_mode {\n \tNITROX_MODE_VF128 = 0x4,\n };\n \n+static inline int\n+inc_zqmq_next_cmd(uint8_t *bar_addr, uint16_t ring)\n+{\n+\tuint64_t reg_addr = 0;\n+\tuint64_t val;\n+\n+\treg_addr = ZQMQ_NXT_CMDX(ring);\n+\tval = nitrox_read_csr(bar_addr, reg_addr);\n+\tval++;\n+\tnitrox_write_csr(bar_addr, reg_addr, val);\n+\trte_delay_us_block(CSR_DELAY);\n+\tif (nitrox_read_csr(bar_addr, reg_addr) != val)\n+\t\treturn -EIO;\n+\n+\treturn 0;\n+}\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@@ -161,5 +273,8 @@ void setup_nps_pkt_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\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+int setup_zqmq_input_ring(uint8_t *bar_addr, uint16_t ring, uint32_t rsize,\n+\t\t\t  phys_addr_t raddr);\n+int zqmq_input_ring_disable(uint8_t *bar_addr, uint16_t ring);\n \n #endif /* _NITROX_HAL_H_ */\ndiff --git a/drivers/common/nitrox/nitrox_qp.c b/drivers/common/nitrox/nitrox_qp.c\nindex 79a26f0024..1665c3c40d 100644\n--- a/drivers/common/nitrox/nitrox_qp.c\n+++ b/drivers/common/nitrox/nitrox_qp.c\n@@ -20,6 +20,7 @@ nitrox_setup_cmdq(struct nitrox_qp *qp, uint8_t *bar_addr,\n \tconst struct rte_memzone *mz;\n \tsize_t cmdq_size = qp->count * instr_size;\n \tuint64_t offset;\n+\tint err = 0;\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@@ -32,14 +33,34 @@ nitrox_setup_cmdq(struct nitrox_qp *qp, uint8_t *bar_addr,\n \t\treturn -ENOMEM;\n \t}\n \n+\tswitch (qp->type) {\n+\tcase NITROX_QUEUE_SE:\n+\t\toffset = NPS_PKT_IN_INSTR_BAOFF_DBELLX(qp->qno);\n+\t\tqp->cmdq.dbell_csr_addr = NITROX_CSR_ADDR(bar_addr, offset);\n+\t\tsetup_nps_pkt_input_ring(bar_addr, qp->qno, qp->count,\n+\t\t\t\t\t mz->iova);\n+\t\tsetup_nps_pkt_solicit_output_port(bar_addr, qp->qno);\n+\t\tbreak;\n+\tcase NITROX_QUEUE_ZIP:\n+\t\toffset = ZQMQ_DRBLX(qp->qno);\n+\t\tqp->cmdq.dbell_csr_addr = NITROX_CSR_ADDR(bar_addr, offset);\n+\t\terr = setup_zqmq_input_ring(bar_addr, qp->qno, qp->count,\n+\t\t\t\t\t    mz->iova);\n+\t\tbreak;\n+\tdefault:\n+\t\tNITROX_LOG(ERR, \"Invalid queue type %d\\n\", qp->type);\n+\t\terr = -EINVAL;\n+\t\tbreak;\n+\t}\n+\n+\tif (err) {\n+\t\trte_memzone_free(mz);\n+\t\treturn err;\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@@ -62,8 +83,23 @@ nitrox_setup_ridq(struct nitrox_qp *qp, int socket_id)\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+\tint err = 0;\n+\n+\tswitch (qp->type) {\n+\tcase NITROX_QUEUE_SE:\n+\t\tnps_pkt_solicited_port_disable(bar_addr, qp->qno);\n+\t\tnps_pkt_input_ring_disable(bar_addr, qp->qno);\n+\t\tbreak;\n+\tcase NITROX_QUEUE_ZIP:\n+\t\terr = zqmq_input_ring_disable(bar_addr, qp->qno);\n+\t\tbreak;\n+\tdefault:\n+\t\terr = -EINVAL;\n+\t}\n+\n+\tif (err)\n+\t\treturn err;\n+\n \treturn rte_memzone_free(qp->cmdq.mz);\n }\n \n@@ -83,9 +119,11 @@ nitrox_qp_setup(struct nitrox_qp *qp, uint8_t *bar_addr, const char *dev_name,\n \t\treturn -EINVAL;\n \t}\n \n+\tqp->bar_addr = bar_addr;\n \tqp->count = count;\n \tqp->head = qp->tail = 0;\n-\trte_atomic16_init(&qp->pending_count);\n+\trte_atomic_store_explicit(&qp->pending_count, 0,\n+\t\t\t\t  rte_memory_order_relaxed);\n \terr = nitrox_setup_cmdq(qp, bar_addr, dev_name, instr_size, socket_id);\n \tif (err)\n \t\treturn err;\ndiff --git a/drivers/common/nitrox/nitrox_qp.h b/drivers/common/nitrox/nitrox_qp.h\nindex 23dffd1268..c328b88926 100644\n--- a/drivers/common/nitrox/nitrox_qp.h\n+++ b/drivers/common/nitrox/nitrox_qp.h\n@@ -8,9 +8,16 @@\n #include <stdbool.h>\n \n #include <rte_io.h>\n+#include \"nitrox_hal.h\"\n \n struct nitrox_softreq;\n \n+enum nitrox_queue_type {\n+\tNITROX_QUEUE_SE,\n+\tNITROX_QUEUE_AE,\n+\tNITROX_QUEUE_ZIP,\n+};\n+\n struct command_queue {\n \tconst struct rte_memzone *mz;\n \tuint8_t *dbell_csr_addr;\n@@ -30,6 +37,8 @@ struct nitrox_qp_stats {\n };\n \n struct nitrox_qp {\n+\tenum nitrox_queue_type type;\n+\tuint8_t *bar_addr;\n \tstruct command_queue cmdq;\n \tstruct rid *ridq;\n \tuint32_t count;\n@@ -38,14 +47,16 @@ struct nitrox_qp {\n \tstruct rte_mempool *sr_mp;\n \tstruct nitrox_qp_stats stats;\n \tuint16_t qno;\n-\trte_atomic16_t pending_count;\n+\tRTE_ATOMIC(uint16_t) pending_count;\n };\n \n static inline uint16_t\n nitrox_qp_free_count(struct nitrox_qp *qp)\n {\n-\tuint16_t pending_count = rte_atomic16_read(&qp->pending_count);\n+\tuint16_t pending_count;\n \n+\tpending_count = rte_atomic_load_explicit(&qp->pending_count,\n+\t\t\t\t\t\t rte_memory_order_relaxed);\n \tRTE_ASSERT(qp->count >= pending_count);\n \treturn (qp->count - pending_count);\n }\n@@ -53,13 +64,15 @@ nitrox_qp_free_count(struct nitrox_qp *qp)\n static inline bool\n nitrox_qp_is_empty(struct nitrox_qp *qp)\n {\n-\treturn (rte_atomic16_read(&qp->pending_count) == 0);\n+\treturn (rte_atomic_load_explicit(&qp->pending_count,\n+\t\t\t\t\t rte_memory_order_relaxed) == 0);\n }\n \n static inline uint16_t\n nitrox_qp_used_count(struct nitrox_qp *qp)\n {\n-\treturn rte_atomic16_read(&qp->pending_count);\n+\treturn rte_atomic_load_explicit(&qp->pending_count,\n+\t\t\t\t\t rte_memory_order_relaxed);\n }\n \n static inline struct nitrox_softreq *\n@@ -67,7 +80,7 @@ nitrox_qp_get_softreq(struct nitrox_qp *qp)\n {\n \tuint32_t tail = qp->tail % qp->count;\n \n-\trte_smp_rmb();\n+\trte_atomic_thread_fence(rte_memory_order_acquire);\n \treturn qp->ridq[tail].sr;\n }\n \n@@ -92,15 +105,35 @@ nitrox_qp_enqueue(struct nitrox_qp *qp, void *instr, struct nitrox_softreq *sr)\n \tmemcpy(&qp->cmdq.ring[head * qp->cmdq.instr_size],\n \t       instr, qp->cmdq.instr_size);\n \tqp->ridq[head].sr = sr;\n-\trte_smp_wmb();\n-\trte_atomic16_inc(&qp->pending_count);\n+\trte_atomic_thread_fence(rte_memory_order_release);\n+\trte_atomic_fetch_add_explicit(&qp->pending_count, 1,\n+\t\t\t\t      rte_memory_order_relaxed);\n+}\n+\n+static inline int\n+nitrox_qp_enqueue_sr(struct nitrox_qp *qp, struct nitrox_softreq *sr)\n+{\n+\tuint32_t head = qp->head % qp->count;\n+\tint err;\n+\n+\terr = inc_zqmq_next_cmd(qp->bar_addr, qp->qno);\n+\tif (unlikely(err))\n+\t\treturn err;\n+\n+\tqp->head++;\n+\tqp->ridq[head].sr = sr;\n+\trte_atomic_thread_fence(rte_memory_order_release);\n+\trte_atomic_fetch_add_explicit(&qp->pending_count, 1,\n+\t\t\t\t      rte_memory_order_relaxed);\n+\treturn 0;\n }\n \n static inline void\n nitrox_qp_dequeue(struct nitrox_qp *qp)\n {\n \tqp->tail++;\n-\trte_atomic16_dec(&qp->pending_count);\n+\trte_atomic_fetch_sub_explicit(&qp->pending_count, 1,\n+\t\t\t\t      rte_memory_order_relaxed);\n }\n \n __rte_internal\n",
    "prefixes": [
        "v5",
        "3/7"
    ]
}