diff --git a/include/odp/api/spec/crypto.h b/include/odp/api/spec/crypto.h
index 3e47f3ef..6736214b 100644
--- a/include/odp/api/spec/crypto.h
+++ b/include/odp/api/spec/crypto.h
@@ -271,11 +271,8 @@ typedef struct odp_crypto_session_param_t {
 	 */
 	odp_bool_t auth_cipher_text;
 
-	/** Preferred sync vs. async
-	 *
-	 * @deprecated no-op now, odp_crypto_operation() will always process
-	 * data in non-posted mode */
-	odp_crypto_op_mode_t ODP_DEPRECATE(pref_mode);
+	/** Preferred sync vs. async for odp_crypto_operation() */
+	odp_crypto_op_mode_t pref_mode;
 
 	/** Operation mode when using packet interface: sync or async */
 	odp_crypto_op_mode_t op_mode;
@@ -340,11 +337,8 @@ typedef struct odp_crypto_op_param_t {
 	/** Session handle from creation */
 	odp_crypto_session_t session;
 
-	/** User context
-	 *
-	 * @deprecated No need to pass context around sync calls
-	 * */
-	void *ODP_DEPRECATE(ctx);
+	/** User context */
+	void *ctx;
 
 	/** Input packet
 	 *
@@ -504,11 +498,8 @@ typedef struct odp_crypto_op_result {
 	/** Request completed successfully */
 	odp_bool_t  ok;
 
-	/** User context from request
-	 *
-	 * @deprecated No need to pass context around sync calls
-	 * */
-	void *ODP_DEPRECATE(ctx);
+	/** User context from request */
+	void *ctx;
 
 	/** Output packet */
 	odp_packet_t pkt;
@@ -692,8 +683,7 @@ int odp_crypto_session_destroy(odp_crypto_session_t session);
  *
  * @return crypto completion handle
  */
-ODP_DEPRECATE(odp_crypto_compl_t) ODP_DEPRECATE(odp_crypto_compl_from_event)(
-						odp_event_t ev);
+odp_crypto_compl_t odp_crypto_compl_from_event(odp_event_t ev);
 
 /**
  * Convert crypto completion handle to event handle
@@ -702,16 +692,14 @@ ODP_DEPRECATE(odp_crypto_compl_t) ODP_DEPRECATE(odp_crypto_compl_from_event)(
  *
  * @return Event handle
  */
-odp_event_t ODP_DEPRECATE(odp_crypto_compl_to_event)(
-			  ODP_DEPRECATE(odp_crypto_compl_t) completion_event);
+odp_event_t odp_crypto_compl_to_event(odp_crypto_compl_t completion_event);
 
 /**
  * Release crypto completion event
  *
  * @param completion_event  Completion event we are done accessing
  */
-void ODP_DEPRECATE(odp_crypto_compl_free)(
-		   ODP_DEPRECATE(odp_crypto_compl_t) completion_event);
+void odp_crypto_compl_free(odp_crypto_compl_t completion_event);
 
 /**
  * Crypto per packet operation
@@ -739,9 +727,8 @@ int odp_crypto_operation(odp_crypto_op_param_t *param,
  * @param completion_event  Event containing operation results
  * @param result            Pointer to result structure
  */
-void ODP_DEPRECATE(odp_crypto_compl_result)(
-		   ODP_DEPRECATE(odp_crypto_compl_t) completion_event,
-		   odp_crypto_op_result_t *result);
+void odp_crypto_compl_result(odp_crypto_compl_t completion_event,
+			     odp_crypto_op_result_t *result);
 
 /**
  * Get printable value for an odp_crypto_session_t
@@ -767,8 +754,7 @@ uint64_t odp_crypto_session_to_u64(odp_crypto_session_t hdl);
  * to enable applications to generate a printable value that represents
  * an odp_crypto_compl_t handle.
  */
-uint64_t ODP_DEPRECATE(odp_crypto_compl_to_u64)(
-		       ODP_DEPRECATE(odp_crypto_compl_t) hdl);
+uint64_t odp_crypto_compl_to_u64(odp_crypto_compl_t hdl);
 
 /**
  * Initialize crypto session parameters
diff --git a/include/odp/arch/default/api/abi/crypto.h b/include/odp/arch/default/api/abi/crypto.h
index 2d02eee6..f0793a19 100644
--- a/include/odp/arch/default/api/abi/crypto.h
+++ b/include/odp/arch/default/api/abi/crypto.h
@@ -11,8 +11,6 @@
 extern "C" {
 #endif
 
-#include <odp/api/deprecated.h>
-
 #include <stdint.h>
 
 /** @internal Dummy type for strong typing */
@@ -25,7 +23,7 @@ typedef struct { char dummy; /**< @internal Dummy */ } _odp_abi_crypto_compl_t;
 #define ODP_CRYPTO_SESSION_INVALID (0xffffffffffffffffULL)
 
 typedef uint64_t  odp_crypto_session_t;
-typedef _odp_abi_crypto_compl_t *ODP_DEPRECATE(odp_crypto_compl_t);
+typedef _odp_abi_crypto_compl_t *odp_crypto_compl_t;
 
 /**
  * @}
diff --git a/include/odp/arch/default/api/abi/event.h b/include/odp/arch/default/api/abi/event.h
index 871d2cf9..f86d8e27 100644
--- a/include/odp/arch/default/api/abi/event.h
+++ b/include/odp/arch/default/api/abi/event.h
@@ -11,8 +11,6 @@
 extern "C" {
 #endif
 
-#include <odp/api/deprecated.h>
-
 #include <stdint.h>
 
 /** @internal Dummy type for strong typing */
@@ -30,7 +28,7 @@ typedef enum odp_event_type_t {
 	ODP_EVENT_BUFFER       = 1,
 	ODP_EVENT_PACKET       = 2,
 	ODP_EVENT_TIMEOUT      = 3,
-	ODP_DEPRECATE(ODP_EVENT_CRYPTO_COMPL) = 4,
+	ODP_EVENT_CRYPTO_COMPL = 4,
 	ODP_EVENT_IPSEC_STATUS = 5
 } odp_event_type_t;
 
diff --git a/platform/linux-generic/include/odp/api/plat/crypto_types.h b/platform/linux-generic/include/odp/api/plat/crypto_types.h
index 23e1cc42..2cc747eb 100644
--- a/platform/linux-generic/include/odp/api/plat/crypto_types.h
+++ b/platform/linux-generic/include/odp/api/plat/crypto_types.h
@@ -22,7 +22,6 @@ extern "C" {
 #if ODP_ABI_COMPAT == 1
 #include <odp/api/abi/crypto.h>
 #else
-#include <odp/api/deprecated.h>
 
 /** @ingroup odp_crypto
  *  @{
@@ -31,7 +30,7 @@ extern "C" {
 #define ODP_CRYPTO_SESSION_INVALID (0xffffffffffffffffULL)
 
 typedef uint64_t odp_crypto_session_t;
-typedef ODP_HANDLE_T(ODP_DEPRECATE(odp_crypto_compl_t));
+typedef ODP_HANDLE_T(odp_crypto_compl_t);
 
 /**
  * @}
diff --git a/platform/linux-generic/include/odp/api/plat/event_types.h b/platform/linux-generic/include/odp/api/plat/event_types.h
index 58ce0a8b..4d0efff1 100644
--- a/platform/linux-generic/include/odp/api/plat/event_types.h
+++ b/platform/linux-generic/include/odp/api/plat/event_types.h
@@ -23,7 +23,6 @@ extern "C" {
 #include <odp/api/abi/event.h>
 #else
 
-#include <odp/api/deprecated.h>
 #include <odp/api/std_types.h>
 #include <odp/api/plat/strong_types.h>
 
@@ -39,7 +38,7 @@ typedef enum odp_event_type_t {
 	ODP_EVENT_BUFFER       = 1,
 	ODP_EVENT_PACKET       = 2,
 	ODP_EVENT_TIMEOUT      = 3,
-	ODP_DEPRECATE(ODP_EVENT_CRYPTO_COMPL) = 4,
+	ODP_EVENT_CRYPTO_COMPL = 4,
 	ODP_EVENT_IPSEC_STATUS = 5
 } odp_event_type_t;
 
diff --git a/platform/linux-generic/odp_crypto.c b/platform/linux-generic/odp_crypto.c
index 80ff6f59..ca51bdf0 100644
--- a/platform/linux-generic/odp_crypto.c
+++ b/platform/linux-generic/odp_crypto.c
@@ -881,9 +881,7 @@ odp_crypto_operation(odp_crypto_op_param_t *param,
 				      ODP_EVENT_PACKET_BASIC);
 
 	/* Fill in result */
-#if ODP_DEPRECATED_API
 	local_result.ctx = param->ctx;
-#endif
 	local_result.pkt = out_pkt;
 	local_result.cipher_status = packet_result.cipher_status;
 	local_result.auth_status = packet_result.auth_status;
@@ -1030,7 +1028,6 @@ int32_t odp_random_test_data(uint8_t *buf, uint32_t len, uint64_t *seed)
 	return len;
 }
 
-#if ODP_DEPRECATED_API
 odp_crypto_compl_t odp_crypto_compl_from_event(odp_event_t ev)
 {
 	/* This check not mandated by the API specification */
@@ -1067,7 +1064,6 @@ uint64_t odp_crypto_compl_to_u64(odp_crypto_compl_t hdl)
 {
 	return _odp_pri(hdl);
 }
-#endif
 
 void odp_crypto_session_param_init(odp_crypto_session_param_t *param)
 {
diff --git a/platform/linux-generic/odp_event.c b/platform/linux-generic/odp_event.c
index 56cc90b0..23b410d8 100644
--- a/platform/linux-generic/odp_event.c
+++ b/platform/linux-generic/odp_event.c
@@ -46,11 +46,9 @@ void odp_event_free(odp_event_t event)
 	case ODP_EVENT_TIMEOUT:
 		odp_timeout_free(odp_timeout_from_event(event));
 		break;
-#if ODP_DEPRECATED_API
 	case ODP_EVENT_CRYPTO_COMPL:
 		odp_crypto_compl_free(odp_crypto_compl_from_event(event));
 		break;
-#endif
 	default:
 		ODP_ABORT("Invalid event type: %d\n", odp_event_type(event));
 	}
diff --git a/test/common_plat/performance/odp_crypto.c b/test/common_plat/performance/odp_crypto.c
index 27d4fd30..7a25ffdc 100644
--- a/test/common_plat/performance/odp_crypto.c
+++ b/test/common_plat/performance/odp_crypto.c
@@ -427,6 +427,7 @@ create_session_from_config(odp_crypto_session_t *session,
 	odp_crypto_session_param_init(&params);
 	memcpy(&params, &config->session, sizeof(odp_crypto_session_param_t));
 	params.op = ODP_CRYPTO_OP_ENCODE;
+	params.pref_mode   = ODP_CRYPTO_SYNC;
 
 	/* Lookup the packet pool */
 	pkt_pool = odp_pool_lookup("packet_pool");
diff --git a/test/common_plat/validation/api/crypto/crypto.c b/test/common_plat/validation/api/crypto/crypto.c
index 8a6c20ec..04ca527d 100644
--- a/test/common_plat/validation/api/crypto/crypto.c
+++ b/test/common_plat/validation/api/crypto/crypto.c
@@ -15,6 +15,8 @@
 odp_suiteinfo_t crypto_suites[] = {
 	{ODP_CRYPTO_SYNC_INP, crypto_suite_sync_init,
 	 crypto_suite_term, crypto_suite},
+	{ODP_CRYPTO_ASYNC_INP, crypto_suite_async_init,
+	 crypto_suite_term, crypto_suite},
 	{ODP_CRYPTO_PACKET_SYNC_INP, crypto_suite_packet_sync_init,
 	 crypto_suite_term, crypto_suite},
 	{ODP_CRYPTO_PACKET_ASYNC_INP, crypto_suite_packet_async_init,
diff --git a/test/common_plat/validation/api/crypto/odp_crypto_test_inp.c b/test/common_plat/validation/api/crypto/odp_crypto_test_inp.c
index ac59744f..953fef02 100644
--- a/test/common_plat/validation/api/crypto/odp_crypto_test_inp.c
+++ b/test/common_plat/validation/api/crypto/odp_crypto_test_inp.c
@@ -16,6 +16,7 @@
 struct suite_context_s {
 	odp_bool_t packet;
 	odp_crypto_op_mode_t op_mode;
+	odp_crypto_op_mode_t pref_mode;
 	odp_pool_t pool;
 	odp_queue_t queue;
 };
@@ -81,6 +82,7 @@ static int alg_op(odp_packet_t pkt,
 	op_params.session = session;
 	op_params.pkt = pkt;
 	op_params.out_pkt = pkt;
+	op_params.ctx = (void *)0xdeadbeef;
 
 	if (cipher_range) {
 		op_params.cipher_range = *cipher_range;
@@ -109,8 +111,30 @@ static int alg_op(odp_packet_t pkt,
 		return rc;
 	}
 
-	CU_ASSERT(posted == 0);
+	if (posted) {
+		odp_event_t event;
+		odp_crypto_compl_t compl_event;
+
+		/* Poll completion queue for results */
+		do {
+			event = odp_queue_deq(suite_context.queue);
+		} while (event == ODP_EVENT_INVALID);
+
+		CU_ASSERT(ODP_EVENT_CRYPTO_COMPL == odp_event_type(event));
+		CU_ASSERT(ODP_EVENT_NO_SUBTYPE == odp_event_subtype(event));
+		CU_ASSERT(ODP_EVENT_CRYPTO_COMPL ==
+			  odp_event_types(event, &subtype));
+		CU_ASSERT(ODP_EVENT_NO_SUBTYPE == subtype);
+
+		compl_event = odp_crypto_compl_from_event(event);
+		CU_ASSERT(odp_crypto_compl_to_u64(compl_event) ==
+			  odp_crypto_compl_to_u64(odp_crypto_compl_from_event(event)));
+		odp_crypto_compl_result(compl_event, &result);
+		odp_crypto_compl_free(compl_event);
+	}
+
 	CU_ASSERT(result.pkt == pkt);
+	CU_ASSERT(result.ctx == (void *)0xdeadbeef);
 	CU_ASSERT(ODP_EVENT_PACKET ==
 		  odp_event_type(odp_packet_to_event(result.pkt)));
 	CU_ASSERT(ODP_EVENT_PACKET_BASIC ==
@@ -403,6 +427,7 @@ static void alg_test(odp_crypto_op_t op,
 	ses_params.op = op;
 	ses_params.auth_cipher_text = false;
 	ses_params.op_mode = suite_context.op_mode;
+	ses_params.pref_mode = suite_context.pref_mode;
 	ses_params.cipher_alg = cipher_alg;
 	ses_params.auth_alg = auth_alg;
 	ses_params.compl_queue = suite_context.queue;
@@ -1678,6 +1703,20 @@ int crypto_suite_sync_init(void)
 		return -1;
 
 	suite_context.queue = ODP_QUEUE_INVALID;
+	suite_context.pref_mode = ODP_CRYPTO_SYNC;
+	return 0;
+}
+
+int crypto_suite_async_init(void)
+{
+	suite_context.pool = odp_pool_lookup("packet_pool");
+	if (suite_context.pool == ODP_POOL_INVALID)
+		return -1;
+	suite_context.queue = odp_queue_lookup("crypto-out");
+	if (suite_context.queue == ODP_QUEUE_INVALID)
+		return -1;
+
+	suite_context.pref_mode = ODP_CRYPTO_ASYNC;
 	return 0;
 }
 
diff --git a/test/common_plat/validation/api/crypto/odp_crypto_test_inp.h b/test/common_plat/validation/api/crypto/odp_crypto_test_inp.h
index 2bc77a94..c50b8493 100644
--- a/test/common_plat/validation/api/crypto/odp_crypto_test_inp.h
+++ b/test/common_plat/validation/api/crypto/odp_crypto_test_inp.h
@@ -10,6 +10,7 @@
 
 /* Suite names */
 #define ODP_CRYPTO_SYNC_INP         "odp_crypto_sync_inp"
+#define ODP_CRYPTO_ASYNC_INP        "odp_crypto_async_inp"
 #define ODP_CRYPTO_PACKET_SYNC_INP  "odp_crypto_packet_sync_inp"
 #define ODP_CRYPTO_PACKET_ASYNC_INP "odp_crypto_packet_async_inp"
 
@@ -17,6 +18,7 @@
 extern odp_testinfo_t crypto_suite[];
 
 int crypto_suite_sync_init(void);
+int crypto_suite_async_init(void);
 int crypto_suite_packet_sync_init(void);
 int crypto_suite_packet_async_init(void);
 int crypto_suite_term(void);
