From patchwork Thu Mar 14 13:18:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vidya Sagar Velumuri X-Patchwork-Id: 138398 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 CB80B43CA6; Thu, 14 Mar 2024 14:20:51 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B6F6142E85; Thu, 14 Mar 2024 14:20:51 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id C591E42E93 for ; Thu, 14 Mar 2024 14:20:50 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 42ED0OjH016200 for ; Thu, 14 Mar 2024 06:20:50 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=7JSvnPB0H3WkxjmMnSHOy7OOUi9298WXLFwlZLsZojg=; b=dZg H4gPzLPlvGndN78ANFHupEG4pSN6F1RPvxjGyx3ziq83As3g0Xbci/NBZaYC853g MKW3lbjtK0Raj2piLnjJtgDjPXeHTKS+/B1yIs7ifmnqL7xeuce9t5d4c7eU7JkH quJTKlnfRF+cFUYLRxFL/3Tm8twG4j2mupWYNZmaILJgxWfiKXjTbEN4BxTNgroX Z9llAO5UfnPcFukEgr5YmXIs5NjuRxEIJQK2YGzFE6vN01rqKY7sMSzk8mOoOgra zKwQqsNCXKgcWeZUZ6NdOOPRHYPK15o9TX/KONJ9v2T1WLzo5Llz42CfhnZ5WMu5 jUpVU3OYlgtgNLaAgSg== Received: from dc6wp-exch02.marvell.com ([4.21.29.225]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3wucg2w05p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 14 Mar 2024 06:20:49 -0700 (PDT) Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.12; Thu, 14 Mar 2024 06:20:49 -0700 Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server id 15.2.1258.12 via Frontend Transport; Thu, 14 Mar 2024 06:20:49 -0700 Received: from localhost.localdomain (unknown [10.28.36.179]) by maili.marvell.com (Postfix) with ESMTP id 6D2E25B6928; Thu, 14 Mar 2024 06:20:46 -0700 (PDT) From: Vidya Sagar Velumuri To: Ankur Dwivedi , Anoob Joseph , Tejasree Kondoj CC: , , , , Subject: [PATCH v2 1/8] crypto/cnxk: multi seg support block ciphers in tls Date: Thu, 14 Mar 2024 06:18:32 -0700 Message-ID: <20240314131839.3362494-2-vvelumuri@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240314083844.3319506-1-vvelumuri@marvell.com> References: <20240314083844.3319506-1-vvelumuri@marvell.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: Yzah38l4Nj9Kn2B5a2CIWrXbjl7e6w7k X-Proofpoint-GUID: Yzah38l4Nj9Kn2B5a2CIWrXbjl7e6w7k X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-03-14_11,2024-03-13_01,2023-05-22_02 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 Add support for Scatter-Gather mode for block ciphers in TLS-1.2 Signed-off-by: Vidya Sagar Velumuri --- drivers/crypto/cnxk/cn10k_cryptodev_sec.h | 3 +- drivers/crypto/cnxk/cn10k_tls.c | 5 +++ drivers/crypto/cnxk/cn10k_tls_ops.h | 48 ++++++++++++++++++----- 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/drivers/crypto/cnxk/cn10k_cryptodev_sec.h b/drivers/crypto/cnxk/cn10k_cryptodev_sec.h index 1efed3c4cf..881a0276cc 100644 --- a/drivers/crypto/cnxk/cn10k_cryptodev_sec.h +++ b/drivers/crypto/cnxk/cn10k_cryptodev_sec.h @@ -33,7 +33,8 @@ struct cn10k_sec_session { } ipsec; struct { uint8_t enable_padding : 1; - uint8_t rvsd : 7; + uint8_t tail_fetch_len : 2; + uint8_t rvsd : 5; bool is_write; } tls; }; diff --git a/drivers/crypto/cnxk/cn10k_tls.c b/drivers/crypto/cnxk/cn10k_tls.c index 879e0ea978..b46904d3f8 100644 --- a/drivers/crypto/cnxk/cn10k_tls.c +++ b/drivers/crypto/cnxk/cn10k_tls.c @@ -639,6 +639,11 @@ cn10k_tls_read_sa_create(struct roc_cpt *roc_cpt, struct roc_cpt_lf *lf, if ((sa_dptr->w2.s.version_select == ROC_IE_OT_TLS_VERSION_TLS_12) || (sa_dptr->w2.s.version_select == ROC_IE_OT_TLS_VERSION_DTLS_12)) { inst_w4.s.opcode_major = ROC_IE_OT_TLS_MAJOR_OP_RECORD_DEC | ROC_IE_OT_INPLACE_BIT; + sec_sess->tls.tail_fetch_len = 0; + if (sa_dptr->w2.s.cipher_select == ROC_IE_OT_TLS_CIPHER_3DES) + sec_sess->tls.tail_fetch_len = 1; + else if (sa_dptr->w2.s.cipher_select == ROC_IE_OT_TLS_CIPHER_AES_CBC) + sec_sess->tls.tail_fetch_len = 2; } else if (sa_dptr->w2.s.version_select == ROC_IE_OT_TLS_VERSION_TLS_13) { inst_w4.s.opcode_major = ROC_IE_OT_TLS13_MAJOR_OP_RECORD_DEC | ROC_IE_OT_INPLACE_BIT; diff --git a/drivers/crypto/cnxk/cn10k_tls_ops.h b/drivers/crypto/cnxk/cn10k_tls_ops.h index 7c8ac14ab2..6fd74927ee 100644 --- a/drivers/crypto/cnxk/cn10k_tls_ops.h +++ b/drivers/crypto/cnxk/cn10k_tls_ops.h @@ -234,7 +234,10 @@ process_tls_read(struct rte_crypto_op *cop, struct cn10k_sec_session *sess, inst->w4.u64 = w4.u64; } else if (is_sg_ver2 == false) { struct roc_sglist_comp *scatter_comp, *gather_comp; + int tail_len = sess->tls.tail_fetch_len * 16; + int pkt_len = rte_pktmbuf_pkt_len(m_src); uint32_t g_size_bytes, s_size_bytes; + uint16_t *sg_hdr; uint32_t dlen; int i; @@ -244,16 +247,25 @@ process_tls_read(struct rte_crypto_op *cop, struct cn10k_sec_session *sess, return -ENOMEM; } - in_buffer = (uint8_t *)m_data; - ((uint16_t *)in_buffer)[0] = 0; - ((uint16_t *)in_buffer)[1] = 0; - /* Input Gather List */ + in_buffer = (uint8_t *)m_data; + sg_hdr = (uint16_t *)(in_buffer + 32); + gather_comp = (struct roc_sglist_comp *)((uint8_t *)sg_hdr + 8); i = 0; - gather_comp = (struct roc_sglist_comp *)((uint8_t *)in_buffer + 8); + /* Add the last blocks as first gather component for tail fetch. */ + if (tail_len) { + const uint8_t *output; + + output = rte_pktmbuf_read(m_src, pkt_len - tail_len, tail_len, in_buffer); + if (output != in_buffer) + rte_memcpy(in_buffer, output, tail_len); + i = fill_sg_comp(gather_comp, i, (uint64_t)in_buffer, tail_len); + } + sg_hdr[0] = 0; + sg_hdr[1] = 0; i = fill_sg_comp_from_pkt(gather_comp, i, m_src); - ((uint16_t *)in_buffer)[2] = rte_cpu_to_be_16(i); + sg_hdr[2] = rte_cpu_to_be_16(i); g_size_bytes = ((i + 3) / 4) * sizeof(struct roc_sglist_comp); @@ -261,7 +273,7 @@ process_tls_read(struct rte_crypto_op *cop, struct cn10k_sec_session *sess, scatter_comp = (struct roc_sglist_comp *)((uint8_t *)gather_comp + g_size_bytes); i = fill_sg_comp_from_pkt(scatter_comp, i, m_src); - ((uint16_t *)in_buffer)[3] = rte_cpu_to_be_16(i); + sg_hdr[3] = rte_cpu_to_be_16(i); s_size_bytes = ((i + 3) / 4) * sizeof(struct roc_sglist_comp); @@ -273,10 +285,12 @@ process_tls_read(struct rte_crypto_op *cop, struct cn10k_sec_session *sess, w4.u64 = sess->inst.w4; w4.s.dlen = dlen; w4.s.opcode_major |= (uint64_t)ROC_DMA_MODE_SG; - w4.s.param1 = rte_pktmbuf_pkt_len(m_src); + w4.s.param1 = pkt_len; inst->w4.u64 = w4.u64; } else { struct roc_sg2list_comp *scatter_comp, *gather_comp; + int tail_len = sess->tls.tail_fetch_len * 16; + int pkt_len = rte_pktmbuf_pkt_len(m_src); union cpt_inst_w5 cpt_inst_w5; union cpt_inst_w6 cpt_inst_w6; uint32_t g_size_bytes; @@ -292,7 +306,21 @@ process_tls_read(struct rte_crypto_op *cop, struct cn10k_sec_session *sess, /* Input Gather List */ i = 0; - gather_comp = (struct roc_sg2list_comp *)((uint8_t *)in_buffer); + /* First 32 bytes in m_data are rsvd for tail fetch. + * SG list start from 32 byte onwards. + */ + gather_comp = (struct roc_sg2list_comp *)((uint8_t *)(in_buffer + 32)); + + /* Add the last blocks as first gather component for tail fetch. */ + if (tail_len) { + const uint8_t *output; + + output = rte_pktmbuf_read(m_src, pkt_len - tail_len, tail_len, in_buffer); + if (output != in_buffer) + rte_memcpy(in_buffer, output, tail_len); + i = fill_sg2_comp(gather_comp, i, (uint64_t)in_buffer, tail_len); + } + i = fill_sg2_comp_from_pkt(gather_comp, i, m_src); cpt_inst_w5.s.gather_sz = ((i + 2) / 3); @@ -311,7 +339,7 @@ process_tls_read(struct rte_crypto_op *cop, struct cn10k_sec_session *sess, inst->w5.u64 = cpt_inst_w5.u64; inst->w6.u64 = cpt_inst_w6.u64; w4.u64 = sess->inst.w4; - w4.s.dlen = rte_pktmbuf_pkt_len(m_src); + w4.s.dlen = pkt_len + tail_len; w4.s.param1 = w4.s.dlen; w4.s.opcode_major &= (~(ROC_IE_OT_INPLACE_BIT)); inst->w4.u64 = w4.u64;