get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 118454,
    "url": "https://patches.dpdk.org/api/patches/118454/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20221019003918.257506-20-hernan.vargas@intel.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": "<20221019003918.257506-20-hernan.vargas@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20221019003918.257506-20-hernan.vargas@intel.com",
    "date": "2022-10-19T00:39:07",
    "name": "[v4,19/30] baseband/acc100: added LDPC transport block support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "f8447044a2e39c9c5011545f1509e446b848d8e8",
    "submitter": {
        "id": 2659,
        "url": "https://patches.dpdk.org/api/people/2659/?format=api",
        "name": "Hernan Vargas",
        "email": "hernan.vargas@intel.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/20221019003918.257506-20-hernan.vargas@intel.com/mbox/",
    "series": [
        {
            "id": 25287,
            "url": "https://patches.dpdk.org/api/series/25287/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=25287",
            "date": "2022-10-19T00:38:48",
            "name": "baseband/acc100: changes for 22.11",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/25287/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/118454/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/118454/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 73A70A0560;\n\tTue, 18 Oct 2022 18:44:48 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 0571E42BA0;\n\tTue, 18 Oct 2022 18:43:10 +0200 (CEST)",
            "from mga06.intel.com (mga06b.intel.com [134.134.136.31])\n by mails.dpdk.org (Postfix) with ESMTP id 723F44161A\n for <dev@dpdk.org>; Tue, 18 Oct 2022 18:42:57 +0200 (CEST)",
            "from orsmga005.jf.intel.com ([10.7.209.41])\n by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 18 Oct 2022 09:42:57 -0700",
            "from unknown (HELO csl-npg-qt0.la.intel.com) ([10.233.181.103])\n by orsmga005.jf.intel.com with ESMTP; 18 Oct 2022 09:42:56 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1666111377; x=1697647377;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=6osk9K+TlyYli3HXAhyKFtFSRIseES8Nd6y4FnOAdjM=;\n b=PRC+KnGbDpQbZUir5ToKgRiDqzgwIEBXO0aCiUfoNJl0aeQgZ24sbTqf\n UEXy0gRNDHzENNBUppKiVi3hzIRS0YKCtAEMGNHOOc8Y6HUJ2qphbQ84L\n IOyDk4hdWzF2dE019gWHbHsDpW/lQp5O/dUPZytjYx27X7BFi+nDNJy5k\n RZZHoAH2w/cLJBsKErOje2+D9cY4wBixbdfzBpabQOqLHYh5B+AkBMnHn\n N2iSkDlkdbPjoJp+7iFyBJGhzlzTo236Ercv6HnJ2xLNCaUlm8ax+mfPl\n 50WZF+YVJoJDifiMRyXAM9D1IdSjsyXH/YxqByjZmRGsh5wjYcN1u4ARf Q==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6500,9779,10504\"; a=\"368192105\"",
            "E=Sophos;i=\"5.95,193,1661842800\"; d=\"scan'208\";a=\"368192105\"",
            "E=McAfee;i=\"6500,9779,10504\"; a=\"803836104\"",
            "E=Sophos;i=\"5.95,193,1661842800\"; d=\"scan'208\";a=\"803836104\""
        ],
        "X-ExtLoop1": "1",
        "From": "Hernan Vargas <hernan.vargas@intel.com>",
        "To": "dev@dpdk.org, gakhil@marvell.com, trix@redhat.com,\n maxime.coquelin@redhat.com",
        "Cc": "nicolas.chautru@intel.com, qi.z.zhang@intel.com,\n Hernan Vargas <hernan.vargas@intel.com>",
        "Subject": "[PATCH v4 19/30] baseband/acc100: added LDPC transport block support",
        "Date": "Tue, 18 Oct 2022 17:39:07 -0700",
        "Message-Id": "<20221019003918.257506-20-hernan.vargas@intel.com>",
        "X-Mailer": "git-send-email 2.37.1",
        "In-Reply-To": "<20221019003918.257506-1-hernan.vargas@intel.com>",
        "References": "<20221019003918.257506-1-hernan.vargas@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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 LDPC enqueue functions to handle transport blocks.\n\nSigned-off-by: Hernan Vargas <hernan.vargas@intel.com>\nReviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>\n---\n drivers/baseband/acc/rte_acc100_pmd.c | 164 +++++++++++++++++++++++++-\n 1 file changed, 163 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/baseband/acc/rte_acc100_pmd.c b/drivers/baseband/acc/rte_acc100_pmd.c\nindex c75a426d38..580780c274 100644\n--- a/drivers/baseband/acc/rte_acc100_pmd.c\n+++ b/drivers/baseband/acc/rte_acc100_pmd.c\n@@ -2164,6 +2164,56 @@ enqueue_ldpc_enc_n_op_cb(struct acc_queue *q, struct rte_bbdev_enc_op **ops,\n \treturn num;\n }\n \n+/* Enqueue one encode operations for ACC100 device for a partial TB\n+ * all codes blocks have same configuration multiplexed on the same descriptor.\n+ */\n+static inline void\n+enqueue_ldpc_enc_part_tb(struct acc_queue *q, struct rte_bbdev_enc_op *op,\n+\t\tuint16_t total_enqueued_descs, int16_t num_cbs, uint32_t e,\n+\t\tuint16_t in_len_bytes, uint32_t out_len_bytes, uint32_t *in_offset,\n+\t\tuint32_t *out_offset)\n+{\n+\tunion acc_dma_desc *desc = NULL;\n+\tstruct rte_mbuf *output_head, *output;\n+\tint i, next_triplet;\n+\tstruct rte_bbdev_op_ldpc_enc *enc = &op->ldpc_enc;\n+\tuint16_t desc_idx = ((q->sw_ring_head + total_enqueued_descs) & q->sw_ring_wrap_mask);\n+\n+\tdesc = q->ring_addr + desc_idx;\n+\tacc_fcw_le_fill(op, &desc->req.fcw_le, num_cbs, e);\n+\n+\t/* This could be done at polling. */\n+\tacc_header_init(&desc->req);\n+\tdesc->req.numCBs = num_cbs;\n+\n+\tdesc->req.m2dlen = 1 + num_cbs;\n+\tdesc->req.d2mlen = num_cbs;\n+\tnext_triplet = 1;\n+\n+\tfor (i = 0; i < num_cbs; i++) {\n+\t\tdesc->req.data_ptrs[next_triplet].address =\n+\t\t\trte_pktmbuf_iova_offset(enc->input.data, *in_offset);\n+\t\t*in_offset += in_len_bytes;\n+\t\tdesc->req.data_ptrs[next_triplet].blen = in_len_bytes;\n+\t\tnext_triplet++;\n+\t\tdesc->req.data_ptrs[next_triplet].address =\n+\t\t\trte_pktmbuf_iova_offset(enc->output.data, *out_offset);\n+\t\t*out_offset += out_len_bytes;\n+\t\tdesc->req.data_ptrs[next_triplet].blen = out_len_bytes;\n+\t\tnext_triplet++;\n+\t\tenc->output.length += out_len_bytes;\n+\t\toutput_head = output = enc->output.data;\n+\t\tmbuf_append(output_head, output, out_len_bytes);\n+\t}\n+\n+#ifdef RTE_LIBRTE_BBDEV_DEBUG\n+\trte_memdump(stderr, \"FCW\", &desc->req.fcw_le,\n+\t\t\tsizeof(desc->req.fcw_le) - 8);\n+\trte_memdump(stderr, \"Req Desc.\", desc, sizeof(*desc));\n+#endif\n+\n+}\n+\n /* Enqueue one encode operations for ACC100 device in CB mode */\n static inline int\n enqueue_ldpc_enc_one_op_cb(struct acc_queue *q, struct rte_bbdev_enc_op *op,\n@@ -2305,6 +2355,76 @@ enqueue_enc_one_op_tb(struct acc_queue *q, struct rte_bbdev_enc_op *op,\n \treturn current_enqueued_cbs;\n }\n \n+/* Enqueue one encode operations for ACC100 device in TB mode.\n+ * returns the number of descs used.\n+ */\n+static inline int\n+enqueue_ldpc_enc_one_op_tb(struct acc_queue *q, struct rte_bbdev_enc_op *op,\n+\t\tuint16_t enq_descs, uint8_t cbs_in_tb)\n+{\n+#ifndef RTE_LIBRTE_BBDEV_SKIP_VALIDATE\n+\tif (validate_ldpc_enc_op(op, q) == -1) {\n+\t\trte_bbdev_log(ERR, \"LDPC encoder validation failed\");\n+\t\treturn -EINVAL;\n+\t}\n+#endif\n+\tuint8_t num_a, num_b;\n+\tuint16_t desc_idx;\n+\tuint8_t r = op->ldpc_enc.tb_params.r;\n+\tuint8_t cab =  op->ldpc_enc.tb_params.cab;\n+\tunion acc_dma_desc *desc;\n+\tuint16_t init_enq_descs = enq_descs;\n+\tuint16_t input_len_B = ((op->ldpc_enc.basegraph == 1 ? 22 : 10) *\n+\t\t\top->ldpc_enc.z_c - op->ldpc_enc.n_filler) >> 3;\n+\tuint32_t in_offset = 0, out_offset = 0;\n+\tuint16_t return_descs;\n+\n+\tif (check_bit(op->ldpc_enc.op_flags, RTE_BBDEV_LDPC_CRC_24B_ATTACH))\n+\t\tinput_len_B -= 3;\n+\n+\tif (r < cab) {\n+\t\tnum_a = cab - r;\n+\t\tnum_b = cbs_in_tb - cab;\n+\t} else {\n+\t\tnum_a = 0;\n+\t\tnum_b = cbs_in_tb - r;\n+\t}\n+\n+\twhile (num_a > 0) {\n+\t\tuint32_t e = op->ldpc_enc.tb_params.ea;\n+\t\tuint32_t out_len_bytes = (e + 7) >> 3;\n+\t\tuint8_t enq = RTE_MIN(num_a, ACC_MUX_5GDL_DESC);\n+\t\tnum_a -= enq;\n+\t\tenqueue_ldpc_enc_part_tb(q, op, enq_descs, enq, e, input_len_B,\n+\t\t\t\tout_len_bytes, &in_offset, &out_offset);\n+\t\tenq_descs++;\n+\t}\n+\twhile (num_b > 0) {\n+\t\tuint32_t e = op->ldpc_enc.tb_params.eb;\n+\t\tuint32_t out_len_bytes = (e + 7) >> 3;\n+\t\tuint8_t enq = RTE_MIN(num_b, ACC_MUX_5GDL_DESC);\n+\t\tnum_b -= enq;\n+\t\tenqueue_ldpc_enc_part_tb(q, op, enq_descs, enq, e, input_len_B,\n+\t\t\t\tout_len_bytes, &in_offset, &out_offset);\n+\t\tenq_descs++;\n+\t}\n+\n+\treturn_descs = enq_descs - init_enq_descs;\n+\t/* Keep total number of CBs in first TB. */\n+\tdesc_idx = ((q->sw_ring_head + init_enq_descs) & q->sw_ring_wrap_mask);\n+\tdesc = q->ring_addr + desc_idx;\n+\tdesc->req.cbs_in_tb = return_descs; /** Actual number of descriptors. */\n+\tdesc->req.op_addr = op;\n+\n+\t/* Set SDone on last CB descriptor for TB mode. */\n+\tdesc_idx = ((q->sw_ring_head + enq_descs - 1) & q->sw_ring_wrap_mask);\n+\tdesc = q->ring_addr + desc_idx;\n+\tdesc->req.sdone_enable = 1;\n+\tdesc->req.irq_enable = q->irq_enable;\n+\tdesc->req.op_addr = op;\n+\treturn return_descs;\n+}\n+\n #ifndef RTE_LIBRTE_BBDEV_SKIP_VALIDATE\n /* Validates turbo decoder parameters */\n static inline int\n@@ -2881,6 +3001,10 @@ enqueue_dec_one_op_tb(struct acc_queue *q, struct rte_bbdev_dec_op *op,\n \n #ifndef RTE_LIBRTE_BBDEV_SKIP_VALIDATE\n \t/* Validate op structure */\n+\tif (cbs_in_tb == 0) {\n+\t\trte_bbdev_log(ERR, \"Turbo decoder invalid number of CBs\");\n+\t\treturn -EINVAL;\n+\t}\n \tif (validate_dec_op(op, q) == -1) {\n \t\trte_bbdev_log(ERR, \"Turbo decoder validation rejected\");\n \t\treturn -EINVAL;\n@@ -3102,6 +3226,44 @@ acc100_enqueue_enc_tb(struct rte_bbdev_queue_data *q_data,\n \treturn i;\n }\n \n+/* Enqueue LDPC encode operations for ACC100 device in TB mode. */\n+static uint16_t\n+acc100_enqueue_ldpc_enc_tb(struct rte_bbdev_queue_data *q_data,\n+\t\tstruct rte_bbdev_enc_op **ops, uint16_t num)\n+{\n+\tstruct acc_queue *q = q_data->queue_private;\n+\tint32_t avail = acc_ring_avail_enq(q);\n+\tuint16_t i, enqueued_descs = 0;\n+\tuint8_t cbs_in_tb;\n+\tint descs_used;\n+\n+\tfor (i = 0; i < num; ++i) {\n+\t\tcbs_in_tb = get_num_cbs_in_tb_ldpc_enc(&ops[i]->ldpc_enc);\n+\t\t/* Check if there are available space for further processing. */\n+\t\tif (unlikely(avail - cbs_in_tb < 0)) {\n+\t\t\tacc_enqueue_ring_full(q_data);\n+\t\t\tbreak;\n+\t\t}\n+\t\tdescs_used = enqueue_ldpc_enc_one_op_tb(q, ops[i], enqueued_descs, cbs_in_tb);\n+\t\tif (descs_used < 0) {\n+\t\t\tacc_enqueue_invalid(q_data);\n+\t\t\tbreak;\n+\t\t}\n+\t\tenqueued_descs += descs_used;\n+\t\tavail -= descs_used;\n+\t}\n+\tif (unlikely(enqueued_descs == 0))\n+\t\treturn 0; /* Nothing to enqueue. */\n+\n+\tacc_dma_enqueue(q, enqueued_descs, &q_data->queue_stats);\n+\n+\t/* Update stats. */\n+\tq_data->queue_stats.enqueued_count += i;\n+\tq_data->queue_stats.enqueue_err_count += num - i;\n+\n+\treturn i;\n+}\n+\n /* Enqueue encode operations for ACC100 device. */\n static uint16_t\n acc100_enqueue_enc(struct rte_bbdev_queue_data *q_data,\n@@ -3125,7 +3287,7 @@ acc100_enqueue_ldpc_enc(struct rte_bbdev_queue_data *q_data,\n \tif (unlikely((aq_avail <= 0) || (num == 0)))\n \t\treturn 0;\n \tif (ops[0]->ldpc_enc.code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK)\n-\t\treturn acc100_enqueue_enc_tb(q_data, ops, num);\n+\t\treturn acc100_enqueue_ldpc_enc_tb(q_data, ops, num);\n \telse\n \t\treturn acc100_enqueue_ldpc_enc_cb(q_data, ops, num);\n }\n",
    "prefixes": [
        "v4",
        "19/30"
    ]
}