From 9ad776442d80b0bdc6301284da1f6f78d6d3eec9 Mon Sep 17 00:00:00 2001 From: Raja Zidane Date: Tue, 2 Nov 2021 09:32:56 +0000 Subject: [PATCH] crypto/mlx5: support 1MB data-unit Add 1MB data-unit length to the capability's bitmap. Handle 1MB data-unit length in the mlx5 session create operation, and expose its capability in the mlx5 capabilities. Signed-off-by: Raja Zidane Acked-by: Matan Azrad --- doc/guides/cryptodevs/mlx5.rst | 4 ++-- drivers/crypto/mlx5/mlx5_crypto.c | 8 +++++++- examples/l2fwd-crypto/main.c | 5 +++++ lib/cryptodev/rte_cryptodev.h | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/guides/cryptodevs/mlx5.rst b/doc/guides/cryptodevs/mlx5.rst index 7338c0c493..9bd8c6fe85 100644 --- a/doc/guides/cryptodevs/mlx5.rst +++ b/doc/guides/cryptodevs/mlx5.rst @@ -147,9 +147,9 @@ Limitations ----------- - AES-XTS keys provided in xform must include keytag and should be wrapped. -- The supported data-unit lengths are 512B and 1KB. In case the `dataunit_len` +- The supported data-unit lengths are 512B and 4KB and 1MB. In case the `dataunit_len` is not provided in the cipher xform, the OP length is limited to the above - values and 1MB. + values. Prerequisites diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index 07c2a9c68b..368affcd18 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -60,7 +60,8 @@ const struct rte_cryptodev_capabilities mlx5_crypto_caps[] = { }, .dataunit_set = RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES | - RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES, + RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES | + RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1_MEGABYTES, }, } }, } }, @@ -222,6 +223,11 @@ mlx5_crypto_sym_session_configure(struct rte_cryptodev *dev, ((uint32_t)MLX5_BLOCK_SIZE_4096B << MLX5_BLOCK_SIZE_OFFSET); break; + case 1048576: + sess_private_data->bsp_res = rte_cpu_to_be_32 + ((uint32_t)MLX5_BLOCK_SIZE_1MB << + MLX5_BLOCK_SIZE_OFFSET); + break; default: DRV_LOG(ERR, "Cipher data unit length is not supported."); return -ENOTSUP; diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c index 04a3bdace2..4d9f8861af 100644 --- a/examples/l2fwd-crypto/main.c +++ b/examples/l2fwd-crypto/main.c @@ -2218,6 +2218,11 @@ check_capabilities(struct l2fwd_crypto_options *options, uint8_t cdev_id) RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES)) ret = -1; break; + case 1048576: + if (!(cap->sym.cipher.dataunit_set & + RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1_MEGABYTES)) + ret = -1; + break; default: ret = -1; } diff --git a/lib/cryptodev/rte_cryptodev.h b/lib/cryptodev/rte_cryptodev.h index 56e3868ada..59ea5a54df 100644 --- a/lib/cryptodev/rte_cryptodev.h +++ b/lib/cryptodev/rte_cryptodev.h @@ -102,6 +102,7 @@ struct rte_crypto_param_range { */ #define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES RTE_BIT32(0) #define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES RTE_BIT32(1) +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1_MEGABYTES RTE_BIT32(2) /** * Symmetric Crypto Capability -- 2.20.1