Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/118454/?format=api
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" ] }{ "id": 118454, "url": "