From patchwork Tue Nov 1 23:04:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chautru, Nicolas" X-Patchwork-Id: 119399 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id EA969A00C2; Wed, 2 Nov 2022 00:05:42 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E2B0B427FF; Wed, 2 Nov 2022 00:05:17 +0100 (CET) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id AC67240223; Wed, 2 Nov 2022 00:05:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1667343912; x=1698879912; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6L1S3WDINB4WrLGAp/VQZszSnmM1fdaXtHQvCE09tiI=; b=IXEVSwcSIs7KOMHqwN4dQ5YDHWADjQyS/YRWKLUvuDCNS82hPEBcm3pH Nro2e0ydxKvfejROA0t1H9Qakuwh4kFrHbQlC3E2h3U45UuhA9JB7Na0v 8sd6fiw623YWvjGwiLDYUb2ToVfSEtjXCQGKBvES93XrO/F0aWKlTu0EN WuXcMoJHkjN23QBJyuZm2AJwyATsWfFP5aWi5h/822KlQKMuEh9tLunXM fG/sfm11umKn8QKMLHDq1lUmkmbgQ3Rst0xUnGvWzCW8mJq+/IABrl3Vm M23vCA5ECASOgGZxCAdbM7taQzvVHA8QzEmgvd3mnx0psYslJRo3q4GUw Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10518"; a="373484042" X-IronPort-AV: E=Sophos;i="5.95,232,1661842800"; d="scan'208";a="373484042" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Nov 2022 16:05:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10518"; a="585175110" X-IronPort-AV: E=Sophos;i="5.95,232,1661842800"; d="scan'208";a="585175110" Received: from unknown (HELO icx-npg-scs1-cp1.localdomain) ([10.233.180.245]) by orsmga003.jf.intel.com with ESMTP; 01 Nov 2022 16:05:10 -0700 From: Nicolas Chautru To: dev@dpdk.org, gakhil@marvell.com, maxime.coquelin@redhat.com, hernan.vargas@intel.com Cc: stable@dpdk.org Subject: [PATCH v1 5/6] baseband/acc: fix double MSI intr in TB mode Date: Tue, 1 Nov 2022 16:04:58 -0700 Message-Id: <20221101230459.50891-6-nicolas.chautru@intel.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20221101230459.50891-1-nicolas.chautru@intel.com> References: <20221101230459.50891-1-nicolas.chautru@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Hernan Vargas Fix logical bug in SW causing MSI to be issued twice when running in transport block mode. Fixes: f404dfe35cc ("baseband/acc100: support 4G processing") Fixes: bec597b78a0 ("baseband/acc200: add LTE processing") Cc: stable@dpdk.org Signed-off-by: Hernan Vargas Reviewed-by: Maxime Coquelin --- drivers/baseband/acc/acc_common.h | 7 +++++- drivers/baseband/acc/rte_acc100_pmd.c | 29 ----------------------- drivers/baseband/acc/rte_acc200_pmd.c | 34 --------------------------- 3 files changed, 6 insertions(+), 64 deletions(-) diff --git a/drivers/baseband/acc/acc_common.h b/drivers/baseband/acc/acc_common.h index eae7eab4e9..5cfa2b64ba 100644 --- a/drivers/baseband/acc/acc_common.h +++ b/drivers/baseband/acc/acc_common.h @@ -908,6 +908,7 @@ acc_dma_enqueue(struct acc_queue *q, uint16_t n, struct rte_bbdev_stats *queue_stats) { union acc_enqueue_reg_fmt enq_req; + union acc_dma_desc *desc; #ifdef RTE_BBDEV_OFFLOAD_COST uint64_t start_time = 0; queue_stats->acc_offload_cycles = 0; @@ -915,13 +916,17 @@ acc_dma_enqueue(struct acc_queue *q, uint16_t n, RTE_SET_USED(queue_stats); #endif + /* Set Sdone and IRQ enable bit on last descriptor. */ + desc = acc_desc(q, n - 1); + desc->req.sdone_enable = 1; + desc->req.irq_enable = q->irq_enable; + enq_req.val = 0; /* Setting offset, 100b for 256 DMA Desc */ enq_req.addr_offset = ACC_DESC_OFFSET; /* Split ops into batches */ do { - union acc_dma_desc *desc; uint16_t enq_batch_size; uint64_t offset; rte_iova_t req_elem_addr; diff --git a/drivers/baseband/acc/rte_acc100_pmd.c b/drivers/baseband/acc/rte_acc100_pmd.c index 2999a6a81a..727a718e9d 100644 --- a/drivers/baseband/acc/rte_acc100_pmd.c +++ b/drivers/baseband/acc/rte_acc100_pmd.c @@ -2671,7 +2671,6 @@ enqueue_enc_one_op_tb(struct acc_queue *q, struct rte_bbdev_enc_op *op, /* Set SDone on last CB descriptor for TB mode. */ desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; return current_enqueued_cbs; } @@ -2741,7 +2740,6 @@ enqueue_ldpc_enc_one_op_tb(struct acc_queue *q, struct rte_bbdev_enc_op *op, desc_idx = ((q->sw_ring_head + enq_descs - 1) & q->sw_ring_wrap_mask); desc = q->ring_addr + desc_idx; desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; desc->req.op_addr = op; return return_descs; } @@ -3303,7 +3301,6 @@ enqueue_ldpc_dec_one_op_tb(struct acc_queue *q, struct rte_bbdev_dec_op *op, #endif /* Set SDone on last CB descriptor for TB mode */ desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; return current_enqueued_cbs; } @@ -3408,7 +3405,6 @@ enqueue_dec_one_op_tb(struct acc_queue *q, struct rte_bbdev_dec_op *op, #endif /* Set SDone on last CB descriptor for TB mode */ desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; return current_enqueued_cbs; } @@ -3421,7 +3417,6 @@ acc100_enqueue_enc_cb(struct rte_bbdev_queue_data *q_data, struct acc_queue *q = q_data->queue_private; int32_t avail = acc_ring_avail_enq(q); uint16_t i; - union acc_dma_desc *desc; int ret; for (i = 0; i < num; ++i) { @@ -3442,11 +3437,6 @@ acc100_enqueue_enc_cb(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue */ - /* Set SDone in last CB in enqueued ops for CB mode*/ - desc = acc_desc(q, i - 1); - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; - acc_dma_enqueue(q, i, &q_data->queue_stats); /* Update stats */ @@ -3463,7 +3453,6 @@ acc100_enqueue_ldpc_enc_cb(struct rte_bbdev_queue_data *q_data, struct acc_queue *q = q_data->queue_private; int32_t avail = acc_ring_avail_enq(q); uint16_t i = 0; - union acc_dma_desc *desc; int ret, desc_idx = 0; int16_t enq, left = num; @@ -3497,11 +3486,6 @@ acc100_enqueue_ldpc_enc_cb(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue */ - /* Set SDone in last CB in enqueued ops for CB mode*/ - desc = acc_desc(q, desc_idx - 1); - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; - acc_dma_enqueue(q, desc_idx, &q_data->queue_stats); /* Update stats */ @@ -3625,7 +3609,6 @@ acc100_enqueue_dec_cb(struct rte_bbdev_queue_data *q_data, struct acc_queue *q = q_data->queue_private; int32_t avail = acc_ring_avail_enq(q); uint16_t i; - union acc_dma_desc *desc; int ret; for (i = 0; i < num; ++i) { @@ -3646,11 +3629,6 @@ acc100_enqueue_dec_cb(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue */ - /* Set SDone in last CB in enqueued ops for CB mode*/ - desc = acc_desc(q, i - 1); - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; - acc_dma_enqueue(q, i, &q_data->queue_stats); /* Update stats */ @@ -3705,7 +3683,6 @@ acc100_enqueue_ldpc_dec_cb(struct rte_bbdev_queue_data *q_data, struct acc_queue *q = q_data->queue_private; int32_t avail = acc_ring_avail_enq(q); uint16_t i; - union acc_dma_desc *desc; int ret; bool same_op = false; for (i = 0; i < num; ++i) { @@ -3735,12 +3712,6 @@ acc100_enqueue_ldpc_dec_cb(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue */ - /* Set SDone in last CB in enqueued ops for CB mode*/ - desc = acc_desc(q, i - 1); - - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; - acc_dma_enqueue(q, i, &q_data->queue_stats); /* Update stats */ diff --git a/drivers/baseband/acc/rte_acc200_pmd.c b/drivers/baseband/acc/rte_acc200_pmd.c index 10511d8b56..fd725e996e 100644 --- a/drivers/baseband/acc/rte_acc200_pmd.c +++ b/drivers/baseband/acc/rte_acc200_pmd.c @@ -1884,7 +1884,6 @@ enqueue_enc_one_op_tb(struct acc_queue *q, struct rte_bbdev_enc_op *op, /* Set SDone on last CB descriptor for TB mode. */ desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; return current_enqueued_cbs; } @@ -1945,7 +1944,6 @@ enqueue_ldpc_enc_one_op_tb(struct acc_queue *q, struct rte_bbdev_enc_op *op, /* Set SDone on last CB descriptor for TB mode. */ desc = acc_desc(q, enq_descs - 1); desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; desc->req.op_addr = op; return return_descs; } @@ -2181,7 +2179,6 @@ enqueue_ldpc_dec_one_op_tb(struct acc_queue *q, struct rte_bbdev_dec_op *op, #endif /* Set SDone on last CB descriptor for TB mode. */ desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; return current_enqueued_cbs; } @@ -2270,7 +2267,6 @@ enqueue_dec_one_op_tb(struct acc_queue *q, struct rte_bbdev_dec_op *op, /* Set SDone on last CB descriptor for TB mode */ desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; return current_enqueued_cbs; } @@ -2283,7 +2279,6 @@ acc200_enqueue_enc_cb(struct rte_bbdev_queue_data *q_data, struct acc_queue *q = q_data->queue_private; int32_t avail = acc_ring_avail_enq(q); uint16_t i; - union acc_dma_desc *desc; int ret; for (i = 0; i < num; ++i) { @@ -2304,11 +2299,6 @@ acc200_enqueue_enc_cb(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue */ - /* Set SDone in last CB in enqueued ops for CB mode*/ - desc = acc_desc(q, i - 1); - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; - acc_dma_enqueue(q, i, &q_data->queue_stats); /* Update stats */ @@ -2325,7 +2315,6 @@ acc200_enqueue_ldpc_enc_cb(struct rte_bbdev_queue_data *q_data, struct acc_queue *q = q_data->queue_private; int32_t avail = acc_ring_avail_enq(q); uint16_t i = 0; - union acc_dma_desc *desc; int ret, desc_idx = 0; int16_t enq, left = num; @@ -2350,11 +2339,6 @@ acc200_enqueue_ldpc_enc_cb(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue. */ - /* Set SDone in last CB in enqueued ops for CB mode. */ - desc = acc_desc(q, desc_idx - 1); - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; - acc_dma_enqueue(q, desc_idx, &q_data->queue_stats); /* Update stats. */ @@ -2479,7 +2463,6 @@ acc200_enqueue_dec_cb(struct rte_bbdev_queue_data *q_data, struct acc_queue *q = q_data->queue_private; int32_t avail = acc_ring_avail_enq(q); uint16_t i; - union acc_dma_desc *desc; int ret; for (i = 0; i < num; ++i) { @@ -2496,11 +2479,6 @@ acc200_enqueue_dec_cb(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue. */ - /* Set SDone in last CB in enqueued ops for CB mode. */ - desc = acc_desc(q, i - 1); - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; - acc_dma_enqueue(q, i, &q_data->queue_stats); /* Update stats. */ @@ -2552,7 +2530,6 @@ acc200_enqueue_ldpc_dec_cb(struct rte_bbdev_queue_data *q_data, struct acc_queue *q = q_data->queue_private; int32_t avail = acc_ring_avail_enq(q); uint16_t i; - union acc_dma_desc *desc; int ret; bool same_op = false; @@ -2581,11 +2558,6 @@ acc200_enqueue_ldpc_dec_cb(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue. */ - /* Set SDone in last CB in enqueued ops for CB mode. */ - desc = acc_desc(q, i - 1); - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; - acc_dma_enqueue(q, i, &q_data->queue_stats); /* Update stats. */ @@ -3234,7 +3206,6 @@ acc200_enqueue_fft(struct rte_bbdev_queue_data *q_data, struct acc_queue *q; int32_t aq_avail, avail; uint16_t i; - union acc_dma_desc *desc; int ret; aq_avail = acc_aq_avail(q_data, num); @@ -3256,11 +3227,6 @@ acc200_enqueue_fft(struct rte_bbdev_queue_data *q_data, if (unlikely(i == 0)) return 0; /* Nothing to enqueue. */ - /* Set SDone in last CB in enqueued ops for CB mode. */ - desc = acc_desc(q, i - 1); - - desc->req.sdone_enable = 1; - desc->req.irq_enable = q->irq_enable; acc_dma_enqueue(q, i, &q_data->queue_stats); /* Update stats */