From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <Anoob.Joseph@cavium.com>
Received: from NAM03-DM3-obe.outbound.protection.outlook.com
 (mail-dm3nam03on0081.outbound.protection.outlook.com [104.47.41.81])
 by dpdk.org (Postfix) with ESMTP id EC37C1B179
 for <dev@dpdk.org>; Tue,  9 Oct 2018 11:10:06 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vxb29upSPMg6vfhE90hX6oCxvTqEXVDlVZwx12PmQso=;
 b=Wy9apppnIPle9GMXOaRwerjeI2aApVQCOfMJUx60qCmZcXpMdAaPFwvOq2XAGRIOcYbkDu8cXlwhqJ9X2tbnubFBEf8gyNAKXVJ9SoVGOItpsrF9BlnxvQ/Xxdbif8H7nYygDO8qcx706aGkOq9OfegjBENOJaENHlsVOQ60KHM=
Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Anoob.Joseph@cavium.com; 
Received: from ajoseph83.caveonetworks.com.com (115.113.156.2) by
 BN7PR07MB4897.namprd07.prod.outlook.com (2603:10b6:406:ef::26) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.1207.28; Tue, 9 Oct 2018 09:10:02 +0000
From: Anoob Joseph <anoob.joseph@caviumnetworks.com>
To: Akhil Goyal <akhil.goyal@nxp.com>,
 Pablo de Lara <pablo.de.lara.guarch@intel.com>,
 Thomas Monjalon <thomas@monjalon.net>
Cc: Tejasree Kondoj <kondoj.tejasree@caviumnetworks.com>,
 Jerin Jacob <jerin.jacob@caviumnetworks.com>,
 Narayana Prasad <narayanaprasad.athreya@caviumnetworks.com>,
 Ankur Dwivedi <ankur.dwivedi@caviumnetworks.com>,
 Anoob Joseph <anoob.joseph@caviumnetworks.com>,
 Murthy NSSR <nidadavolu.murthy@caviumnetworks.com>,
 Nithin Dabilpuram <nithin.dabilpuram@caviumnetworks.com>,
 Ragothaman Jayaraman <rjayaraman@caviumnetworks.com>,
 Srisivasubramanian S <ssrinivasan@caviumnetworks.com>, dev@dpdk.org
Date: Tue,  9 Oct 2018 14:37:54 +0530
Message-Id: <1539076076-19786-22-git-send-email-anoob.joseph@caviumnetworks.com>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1539076076-19786-1-git-send-email-anoob.joseph@caviumnetworks.com>
References: <1538744363-30340-1-git-send-email-anoob.joseph@caviumnetworks.com>
 <1539076076-19786-1-git-send-email-anoob.joseph@caviumnetworks.com>
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [115.113.156.2]
X-ClientProxiedBy: PN1PR0101CA0004.INDPRD01.PROD.OUTLOOK.COM
 (2603:1096:c00:e::14) To BN7PR07MB4897.namprd07.prod.outlook.com
 (2603:10b6:406:ef::26)
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 031c4ece-4bd5-4f67-48c7-08d62dc700bc
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);
 SRVR:BN7PR07MB4897; 
X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4897;
 3:tZ5AJOP9gAoYv+M4rN9xR/od54SiRad6qKFZfrh8DyCsqMnoF+GmuG792fNHdwuByANmYqCWVUAjiQJS0YNis5krunmVc8w0anZfi6y8WTiXccwMMhLgbQazyybTpkaKaqgzIdwz9MqXTLQJBrki7+Vb2hGG97I4YiFmnJn7d1Td8GbXiJT3VRbU8OVv9Ma3lLYNRWadUWYVH4p+mLlArEtTAU+U5NkqG7ErUYgFekvhhWyqthqi0bk3BAxCXy9a;
 25:PuhyD0uU9pj/oZSipGLDmmgiccX6Femc8qS6MfffcHlhyJL05vQB3OrolizhMITwgkxaBgaZpgSd/UDZ+vz3JQALI0ZdbRwbtgF+oGiPr4j46k2dUCbU7GebaUZ+uIlhCQZypBLp+8uPKGCHAY7/vHomOcVXR/puVwU0vG0WOsVcHml+iCalLvowPRzVDKjmf3JH6dy+73M1XtdGxre7USIujN1W5MCQGNLs8VCHjF8EUwV7OMV7b2rZ4/B/eazOxKyryo8QnT5eNNZflrP+rKaCOtegAtG2CJuGNK/hpXpRFUNBSA6WLdHMLf+uMLqrT+tRD84xEvMj05yT6mTCtA==;
 31:Z4TR2nFlDyDjVuXXYw4RjdO5CgCsgamXQ/xRvezkKucNYt/+d1qJIFa+0r4YAFPuA45xCRPdPsSTh0VWOlSCfRxnEnawzbMGt6mywcOov9jUwVHmM1MM4z2FqqE3KQHYYMEmEIpWYBUOx7lVA5GV3g0xqt9x/7LPY3y1Qvy65zsXnxbCEiHUhtAlrgaLoibwXHmO9MwNGmoiVLLrmNJ76y4GfVIl5laTpkt2ogRrzp8=
X-MS-TrafficTypeDiagnostic: BN7PR07MB4897:
X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4897;
 20:7JzuQeYs3ZQQguvcn9PU8Zvxe1emhRRd4SpF3pQjJvL/y8ghmFCr5Fh9AegYVk5Hjt8kf2iPBhmpqjQnjMUpu13ODv6f9jLd77beFgyS38l9bo+H+2izHdQQpsqKFS3erzb9D9jzgIcOw9VSUOE7oPSmcyfxjiVNM69jMfrOuqRcBgKsh5ym0pNzyi6JSD7MAdDN4P74OSLktfzMBkqNrkHOGgck/N2nqHRqbs0WtFghen/q3PtEb2u7ft/rTpuiN6vbKCbE0QXxf4SeWGVlkdEsOGkCmx5Zx5OzzSapBUsHn/+nKGMX+DdP7xxxvUg7Kn9yiOU/R8fJ1cgqtvt5C1p5okU5a9re6raB/eHvWz+/PYDJw/XWoFQU/BkphzeG17w/sjjH8Hq980D/gdYxcBiFE3InzLONQTS0gvOnuZP4b/C2JOKXcTKwLBd5fvAHs4xBxLfBv6ePRy/6+MT4EU9Pl7LA3QV1yufAtCN8gs3C7A69WI8ycica+xmNLzOJoo6S9vWFojPp6foCe9fojGN4Xq01XpMT+IJxwjOU778bnzibf0yvN1cRHTJCD9fqZ8c2QwkQmjUOv5O3SLUphNtJbVP2mUfpPvU4DRAeyS4=;
 4:Js6zBnXgEPVqDHOeok7Yi3fI86eXx+JC/e8ivCM97OhPJFTC4ucIsIZMpv+13JnCo0L0hETH/2/nkuLGjz04AHHiQIrGxj2+l+/wqGrSO++bolb187MK0Mt/kbWkAlIh2RMSjoxX23Aozl74HgH9yMhtVHWeKMz0Eu7aZ0+Z03Gks/XRod3QPAzx2ApdUPVNMRF7HbnJVZwiictl3TL2EKuAxF93MmiL9UQc6ofsAxfOI1YrtCK+Q0uxIlo4GfYZlC9CZVBRo2RjDpd9AqT+6Q==
X-Microsoft-Antispam-PRVS: <BN7PR07MB48974D0509EDBABC558BD48BF8E70@BN7PR07MB4897.namprd07.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:;
X-MS-Exchange-SenderADCheck: 1
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(93006095)(10201501046)(3231355)(944501410)(52105095)(149066)(150057)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123558120)(201708071742011)(7699051);
 SRVR:BN7PR07MB4897; BCL:0; PCL:0; RULEID:; SRVR:BN7PR07MB4897; 
X-Forefront-PRVS: 08200063E9
X-Forefront-Antispam-Report: SFV:NSPM;
 SFS:(10009020)(396003)(366004)(376002)(136003)(346002)(39860400002)(199004)(189003)(42882007)(47776003)(106356001)(6666003)(186003)(5660300001)(26005)(68736007)(16526019)(8936002)(25786009)(6116002)(2906002)(81156014)(50226002)(305945005)(81166006)(7736002)(3846002)(105586002)(478600001)(8676002)(54906003)(110136005)(48376002)(16586007)(14444005)(6486002)(6506007)(50466002)(316002)(53936002)(386003)(51416003)(52116002)(76176011)(11346002)(6512007)(44832011)(446003)(36756003)(55236004)(956004)(2616005)(486006)(4326008)(66066001)(97736004)(72206003)(476003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:BN7PR07MB4897;
 H:ajoseph83.caveonetworks.com.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords;
 A:1; MX:1; 
Received-SPF: None (protection.outlook.com: cavium.com does not designate
 permitted sender hosts)
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN7PR07MB4897;
 23:MbtFCldSLBjCFLTmdOI/wBrONtl5DiK5tZIGjlqwZ?=
 =?us-ascii?Q?EIK1SUQ/3VhRsvq69nFUnX/Mk8UMJcw3IOj5wzZkYpYC9MaWDJyYuhpF/z7v?=
 =?us-ascii?Q?0oLR4brZAbY6xBVcxOmN64+8CcQlpp139laK6lB5me3alxOihM5bv+j9tWQP?=
 =?us-ascii?Q?6TSfeAwgThMm8dMeEj/sdxjyvuUwyf/9ITRRry4x2n7OmBIhawdPqyRc64rQ?=
 =?us-ascii?Q?s/U0eFs2C1voHbsQOlJKJf0n1s4tNH12V8URxGW5H4pZVxkkMAWbdW8RNKTY?=
 =?us-ascii?Q?yhS8m6EyFdp9shYNrgHiAf/nGWGfuyPmLUB/kINnUFnF8vzIsdMNdA3RxRnH?=
 =?us-ascii?Q?kllz9l5sAPA5I61csV1nB9VNMPi+wswKgiy++64iDlDOpyb9g7tIjfbSW4Ix?=
 =?us-ascii?Q?mNCN63I5/Sp0v/Nmp3QHRPI/gbBjOris+fZicnmgtGV/CS5TzGj5DvDRc17/?=
 =?us-ascii?Q?b7K4hvFiTO4Zpcrj198N+IwKQ2S3HZ6Cc4M+/7i/ddg946enwDGJ4+9TGWUU?=
 =?us-ascii?Q?3Hs8dD9bpZwF5YkAJ87UgWCkZ3RExHP0UPx20TDLTuQJppIBkXVs09jzjShH?=
 =?us-ascii?Q?0PVNiClpsZJ+H/0OfVJjl+z9/sMEp6GZWa5JRT190bnqZhWh4alXSTE9RqnQ?=
 =?us-ascii?Q?qRbnG97d3+g/Do2XtAETxVhOSdmwjP0z/WM26UMbecR2uWNSTs9o9cN4rq80?=
 =?us-ascii?Q?JKeBpj4rsABuhuj3ks+hcGtslHfRZEYfvUqiyW8pxUKY3K4PCeM1ZIGmKVGp?=
 =?us-ascii?Q?uqxqq98aSlm6LhRO8iyAobawNDUeoLunP+FkXtdROFdU+FijXMxGhBDJIHM3?=
 =?us-ascii?Q?4mt6cAMbFtFgr1vQkRgaZaXdZJK3xlYUd0tH7Ps6e9e6Xj5FPEVLlrUsOX4u?=
 =?us-ascii?Q?xI3qZDzWBJplh9poncSVHY31+SQUgAXfi19KSxAQmXPurBLzrtHN4f655YAX?=
 =?us-ascii?Q?BdH3Wf10tHXeuHgI95JxwKOI3F+UMM8zZ37qoElaKnwY2GfqFsxfhV2k5LyD?=
 =?us-ascii?Q?GPS3ODGHHb8UJkRMoXhM+VUWM/cbX6TFcCReXO/bQD60XiZq1wzqsNb6dIMF?=
 =?us-ascii?Q?VAuOhCOBCkZy+icbR7CSL4X6kogW0Z4behAbd8lEx4XCHOKe+A0Exq5wLhLW?=
 =?us-ascii?Q?MrWrBTiTBW0213Qt0t5utmMVGa4+N7aTZbrU/uOUKp0XAd8UG1bXkLPsZ7XS?=
 =?us-ascii?Q?8eeyYHXrwaqrcldWpS2g4+hCQ53ZpzDSWR0fVqrsCnwYffi3AZDZb+9Ab8em?=
 =?us-ascii?Q?gDxSWKycLAYohqplZALPFtZob75dLERDdZ2zEOZ?=
X-Microsoft-Antispam-Message-Info: yBT6EV3lr94rSq3zCkwD1J+22ZnW+75zviot6wT6ou7A8c4XXC+GyUvZAGc4tMUlPiF1dNeHxUEBnD+6PHi0J6vGaUPFpWHFAnSPkcQo5QqP4uX3bXJt/MXYqiygwTOUsgT67Ss8NGG4PKkhngPLiquY8wSfBMAML3T5ry6hP/0W/KhoDw8taGZAOVBg1TijluiWIExiQe0GXCn5s/gljwcDTxHQdBU5J29qhanr4zn/XsJPSnmUDms0i/wm3DnQ8o5jdyceSgSFHBYxNkv/K+c08UNvwCA7EYhxVVlxaNQ4aJAxrvrmL8TIDOzqahyrnGqHIei28jmXRFmsy0MsvXQN9AGTjrUE3/U787WkZ7M=
X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4897;
 6:LoQmz87aRfHo6szbS+2vBJw6R9QKj3ocaSltINP4W3l7oOOm/xS37gZqbkyJRCKAkhEv9raaedVwrNY3mEK4Mo2z9KWR+LDqtkolnFQxozLhynaoa3+3apkjauPhqrMb0MMA0KKeo4uqIQDevcGPHi7ARnnVxteg3IJIPyh8rbnqInAdn0oqRGNaj+cMcGIzX12mkGHPG60eHpe/4/ixM5EGWWHW2zuj5DKCFhnKps4cW+jc7ntQpxPTDcdwuj7DvmNDmuTFThm/a0oY0cjoH6jJZ1+K/IRcxq/nfSIQ+s19nYWu1f9lgolAi+/Mh9VipwVNg/1Q8gEOJRM7jDonT8BeCUMTVoTkTsAJiKrKi3OShRqamJvaV3RMzP+sMTyQL258Kbm7g9BEBh72WiUdK87YfIEfCkQA1Acrk2KapglM4iBgWIBX6ZeJhil8QLrHwBSch8oi8ol7XxNf2PzIsg==;
 5:+ppRDGfppydpYO72XLxk/tck2n2Mi5GLvCPOmFXAtrooKg+Kz3CB5XH4cmZjjsuGfiqsZ/gQ1wWSZN8ItAo0nMQDEtheCMcElp+ei4Trr/A1uEUmL4ezomZilcDhFaoRvpcpT2NWpMllKA7/SbBEEldF2uQHKOG283lbFagmHBY=;
 7:Iu3e20IBws61w/atHAg38pnD0T2DYzrjXUYhhWv2Q2822/kQ6inDM2h4jVhHIjCltgciJYR07aiyFLj5A0LGXuTt8CWn9Nrl+GQ/NfPzwozC0hQ2R4cagNga5E2tt6a/LMUKZDOdte5fsEW5GOiSCPFsr3FWGxvDjrCOtENN9cMgxkF+ipCP7nWqmHPtBrwXfqHlw2o2IuFZMq8eLK3Chwzm9lQ8Fu5b9nGvqyUSVDnSWPOwFQPKYTwmcfSUWqRL
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-OriginatorOrg: caviumnetworks.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Oct 2018 09:10:02.0051 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 031c4ece-4bd5-4f67-48c7-08d62dc700bc
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR07MB4897
Subject: [dpdk-dev] [PATCH v4 21/23] crypto/octeontx: add dequeue burst op
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <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>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Tue, 09 Oct 2018 09:10:07 -0000

From: Tejasree Kondoj <kondoj.tejasree@caviumnetworks.com>

Signed-off-by: Ankur Dwivedi <ankur.dwivedi@caviumnetworks.com>
Signed-off-by: Anoob Joseph <anoob.joseph@caviumnetworks.com>
Signed-off-by: Murthy NSSR <nidadavolu.murthy@caviumnetworks.com>
Signed-off-by: Nithin Dabilpuram <nithin.dabilpuram@caviumnetworks.com>
Signed-off-by: Ragothaman Jayaraman <rjayaraman@caviumnetworks.com>
Signed-off-by: Srisivasubramanian S <ssrinivasan@caviumnetworks.com>
Signed-off-by: Tejasree Kondoj <kondoj.tejasree@caviumnetworks.com>
---
 drivers/common/cpt/cpt_common.h                   |  2 +
 drivers/common/cpt/cpt_mcode_defines.h            | 15 +++++
 drivers/common/cpt/cpt_request_mgr.h              | 39 +++++++++++++
 drivers/common/cpt/cpt_ucode.h                    | 26 +++++++++
 drivers/crypto/octeontx/otx_cryptodev_hw_access.h | 69 +++++++++++++++++++++--
 drivers/crypto/octeontx/otx_cryptodev_ops.c       | 47 ++++++++++++++-
 6 files changed, 192 insertions(+), 6 deletions(-)

diff --git a/drivers/common/cpt/cpt_common.h b/drivers/common/cpt/cpt_common.h
index 1823939..8461cd6 100644
--- a/drivers/common/cpt/cpt_common.h
+++ b/drivers/common/cpt/cpt_common.h
@@ -15,6 +15,8 @@
  */
 #define CRYPTO_OCTEONTX		0x1
 
+#define TIME_IN_RESET_COUNT	5
+
 /* Default command timeout in seconds */
 #define DEFAULT_COMMAND_TIMEOUT	4
 
diff --git a/drivers/common/cpt/cpt_mcode_defines.h b/drivers/common/cpt/cpt_mcode_defines.h
index 60be8b3..becc14f 100644
--- a/drivers/common/cpt/cpt_mcode_defines.h
+++ b/drivers/common/cpt/cpt_mcode_defines.h
@@ -175,6 +175,21 @@ typedef enum {
 	ERR_ENODEV,
 } mc_error_code_t;
 
+/**
+ * Enumeration cpt_comp_e
+ *
+ * CPT Completion Enumeration
+ * Enumerates the values of CPT_RES_S[COMPCODE].
+ */
+typedef enum {
+	CPT_8X_COMP_E_NOTDONE    = (0x00),
+	CPT_8X_COMP_E_GOOD       = (0x01),
+	CPT_8X_COMP_E_FAULT      = (0x02),
+	CPT_8X_COMP_E_SWERR      = (0x03),
+	CPT_8X_COMP_E_HWERR      = (0x04),
+	CPT_8X_COMP_E_LAST_ENTRY = (0xFF)
+} cpt_comp_e_t;
+
 typedef struct sglist_comp {
 	union {
 		uint64_t len;
diff --git a/drivers/common/cpt/cpt_request_mgr.h b/drivers/common/cpt/cpt_request_mgr.h
index dea89f8..4463cfb 100644
--- a/drivers/common/cpt/cpt_request_mgr.h
+++ b/drivers/common/cpt/cpt_request_mgr.h
@@ -143,4 +143,43 @@ cpt_pmd_crypto_operation(struct cpt_instance *instance,
 	return ret;
 }
 
+static __rte_always_inline int32_t __hot
+cpt_dequeue_burst(struct cpt_instance *instance, uint16_t cnt,
+		  void *resp[], uint8_t cc[], struct pending_queue *pqueue)
+{
+	struct cpt_request_info *user_req;
+	struct rid *rid_e;
+	int i, count, pcount;
+	uint8_t ret;
+
+	pcount = pqueue->pending_count;
+	count = (cnt > pcount) ? pcount : cnt;
+
+	for (i = 0; i < count; i++) {
+		rid_e = &pqueue->rid_queue[pqueue->deq_head];
+		user_req = (struct cpt_request_info *)(rid_e->rid);
+
+		if (likely((i+1) < count))
+			rte_prefetch_non_temporal((void *)rid_e[1].rid);
+
+		ret = check_nb_command_id(user_req, instance);
+
+		if (unlikely(ret == ERR_REQ_PENDING)) {
+			/* Stop checking for completions */
+			break;
+		}
+
+		/* Return completion code and op handle */
+		cc[i] = (uint8_t)ret;
+		resp[i] = user_req->op;
+		CPT_LOG_DP_DEBUG("Request %p Op %p completed with code %d",
+			   user_req, user_req->op, ret);
+
+		MOD_INC(pqueue->deq_head, DEFAULT_CMD_QLEN);
+		pqueue->pending_count -= 1;
+	}
+
+	return i;
+}
+
 #endif /* _CPT_REQUEST_MGR_H_ */
diff --git a/drivers/common/cpt/cpt_ucode.h b/drivers/common/cpt/cpt_ucode.h
index 4d892f2..c5a9f34 100644
--- a/drivers/common/cpt/cpt_ucode.h
+++ b/drivers/common/cpt/cpt_ucode.h
@@ -3373,6 +3373,32 @@ fill_fc_params(struct rte_crypto_op *cop,
 	return prep_req;
 }
 
+static __rte_always_inline void
+compl_auth_verify(struct rte_crypto_op *op,
+		      uint8_t *gen_mac,
+		      uint64_t mac_len)
+{
+	uint8_t *mac;
+	struct rte_crypto_sym_op *sym_op = op->sym;
+
+	if (sym_op->auth.digest.data)
+		mac = sym_op->auth.digest.data;
+	else
+		mac = rte_pktmbuf_mtod_offset(sym_op->m_src,
+					      uint8_t *,
+					      sym_op->auth.data.length +
+					      sym_op->auth.data.offset);
+	if (!mac) {
+		op->status = RTE_CRYPTO_OP_STATUS_ERROR;
+		return;
+	}
+
+	if (memcmp(mac, gen_mac, mac_len))
+		op->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
+	else
+		op->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
+}
+
 static __rte_always_inline int
 instance_session_cfg(struct rte_crypto_sym_xform *xform, void *sess)
 {
diff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h
index 6f4d6e1..82b15ee 100644
--- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h
+++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h
@@ -1,19 +1,20 @@
 /* SPDX-License-Identifier: BSD-3-Clause
  * Copyright(c) 2018 Cavium, Inc
  */
-
 #ifndef _OTX_CRYPTODEV_HW_ACCESS_H_
 #define _OTX_CRYPTODEV_HW_ACCESS_H_
 
 #include <stdbool.h>
 
 #include <rte_branch_prediction.h>
+#include <rte_cycles.h>
 #include <rte_io.h>
 #include <rte_memory.h>
 #include <rte_prefetch.h>
 
 #include "cpt_common.h"
 #include "cpt_hw_types.h"
+#include "cpt_mcode_defines.h"
 #include "cpt_pmd_logs.h"
 
 #define CPT_INTR_POLL_INTERVAL_MS	(50)
@@ -252,10 +253,68 @@ static __rte_always_inline uint8_t
 check_nb_command_id(struct cpt_request_info *user_req,
 		struct cpt_instance *instance)
 {
-	/* Required for dequeue operation. Adding a dummy routine for now */
-	RTE_SET_USED(user_req);
-	RTE_SET_USED(instance);
-	return 0;
+	uint8_t ret = ERR_REQ_PENDING;
+	struct cpt_vf *cptvf = (struct cpt_vf *)instance;
+	volatile cpt_res_s_t *cptres;
+
+	cptres = (volatile cpt_res_s_t *)user_req->completion_addr;
+
+	if (unlikely(cptres->s8x.compcode == CPT_8X_COMP_E_NOTDONE)) {
+		/*
+		 * Wait for some time for this command to get completed
+		 * before timing out
+		 */
+		if (rte_get_timer_cycles() < user_req->time_out)
+			return ret;
+		/*
+		 * TODO: See if alternate caddr can be used to not loop
+		 * longer than needed.
+		 */
+		if ((cptres->s8x.compcode == CPT_8X_COMP_E_NOTDONE) &&
+		    (user_req->extra_time < TIME_IN_RESET_COUNT)) {
+			user_req->extra_time++;
+			return ret;
+		}
+
+		if (cptres->s8x.compcode != CPT_8X_COMP_E_NOTDONE)
+			goto complete;
+
+		ret = ERR_REQ_TIMEOUT;
+		CPT_LOG_DP_ERR("Request %p timedout", user_req);
+		otx_cpt_poll_misc(cptvf);
+		goto exit;
+	}
+
+complete:
+	if (likely(cptres->s8x.compcode == CPT_8X_COMP_E_GOOD)) {
+		ret = 0; /* success */
+		if (unlikely((uint8_t)*user_req->alternate_caddr)) {
+			ret = (uint8_t)*user_req->alternate_caddr;
+			CPT_LOG_DP_ERR("Request %p : failed with microcode"
+				" error, MC completion code : 0x%x", user_req,
+				ret);
+		}
+		CPT_LOG_DP_DEBUG("MC status %.8x\n",
+			   *((volatile uint32_t *)user_req->alternate_caddr));
+		CPT_LOG_DP_DEBUG("HW status %.8x\n",
+			   *((volatile uint32_t *)user_req->completion_addr));
+	} else if ((cptres->s8x.compcode == CPT_8X_COMP_E_SWERR) ||
+		   (cptres->s8x.compcode == CPT_8X_COMP_E_FAULT)) {
+		ret = (uint8_t)*user_req->alternate_caddr;
+		if (!ret)
+			ret = ERR_BAD_ALT_CCODE;
+		CPT_LOG_DP_DEBUG("Request %p : failed with %s : err code :%x",
+			   user_req,
+			   (cptres->s8x.compcode == CPT_8X_COMP_E_FAULT) ?
+			   "DMA Fault" : "Software error", ret);
+	} else {
+		CPT_LOG_DP_ERR("Request %p : unexpected completion code %d",
+			   user_req, cptres->s8x.compcode);
+		ret = (uint8_t)*user_req->alternate_caddr;
+	}
+
+exit:
+	return ret;
 }
 
 #endif /* _OTX_CRYPTODEV_HW_ACCESS_H_ */
diff --git a/drivers/crypto/octeontx/otx_cryptodev_ops.c b/drivers/crypto/octeontx/otx_cryptodev_ops.c
index 4240051..23f9659 100644
--- a/drivers/crypto/octeontx/otx_cryptodev_ops.c
+++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c
@@ -366,6 +366,51 @@ otx_cpt_pkt_enqueue(void *qptr, struct rte_crypto_op **ops, uint16_t nb_ops)
 	return count;
 }
 
+static uint16_t
+otx_cpt_pkt_dequeue(void *qptr, struct rte_crypto_op **ops, uint16_t nb_ops)
+{
+	struct cpt_instance *instance = (struct cpt_instance *)qptr;
+	struct cpt_vf *cptvf = (struct cpt_vf *)instance;
+	struct pending_queue *pqueue = &cptvf->pqueue;
+	uint16_t nb_completed, i = 0;
+	uint8_t compcode[nb_ops];
+
+	nb_completed = cpt_dequeue_burst(instance, nb_ops,
+					 (void **)ops, compcode, pqueue);
+	while (likely(i < nb_completed)) {
+		struct rte_crypto_op *cop;
+		void *metabuf;
+		uintptr_t *rsp;
+		uint8_t status;
+
+		rsp = (void *)ops[i];
+		status = compcode[i];
+		if (likely((i + 1) < nb_completed))
+			rte_prefetch0(ops[i+1]);
+		metabuf = (void *)rsp[0];
+		cop = (void *)rsp[1];
+
+		ops[i] = cop;
+
+		if (likely(status == 0)) {
+			if (likely(!rsp[2]))
+				cop->status =
+					RTE_CRYPTO_OP_STATUS_SUCCESS;
+			else
+				compl_auth_verify(cop, (uint8_t *)rsp[2],
+						  rsp[3]);
+		} else if (status == ERR_GC_ICV_MISCOMPARE) {
+			/*auth data mismatch */
+			cop->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
+		} else {
+			cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
+		}
+		free_op_meta(metabuf, cptvf->meta_info.cptvf_meta_pool);
+		i++;
+	}
+	return nb_completed;
+}
+
 static struct rte_cryptodev_ops cptvf_ops = {
 	/* Device related operations */
 	.dev_configure = otx_cpt_dev_config,
@@ -458,7 +503,7 @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev)
 	c_dev->dev_ops = &cptvf_ops;
 
 	c_dev->enqueue_burst = otx_cpt_pkt_enqueue;
-	c_dev->dequeue_burst = NULL;
+	c_dev->dequeue_burst = otx_cpt_pkt_dequeue;
 
 	c_dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
 			RTE_CRYPTODEV_FF_HW_ACCELERATED |
-- 
2.7.4