DPDK patches and discussions
 help / color / mirror / Atom feed
From: Akhil Goyal <gakhil@marvell.com>
To: Hanxiao Li <li.hanxiao@zte.com.cn>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "wang.yong19@zte.com.cn" <wang.yong19@zte.com.cn>
Subject: RE: [EXTERNAL] [PATCH v6 5/8] zsda: modify files for introducing zsda cryptodev
Date: Tue, 17 Sep 2024 18:22:44 +0000	[thread overview]
Message-ID: <CO6PR18MB4484FE952D5D48F0A1FF5FC0D8612@CO6PR18MB4484.namprd18.prod.outlook.com> (raw)
In-Reply-To: <20240911075447.4074486-4-li.hanxiao@zte.com.cn>



> -----Original Message-----
> From: Hanxiao Li <li.hanxiao@zte.com.cn>
> Sent: Wednesday, September 11, 2024 1:24 PM
> To: dev@dpdk.org
> Cc: wang.yong19@zte.com.cn; Hanxiao Li <li.hanxiao@zte.com.cn>
> Subject: [EXTERNAL] [PATCH v6 5/8] zsda: modify files for introducing zsda
> cryptodev
> 
> It is necessary to make necessary modifications to existing files based on the
> newly introduced content Signed-off-by: Hanxiao Li <li. hanxiao@ zte. com. cn> ---
> MAINTAINERS | 3 ++ drivers/common/zsda/zsda_common. h | 50
> +++++++++++++++++++++++
> 
> It is necessary to make necessary modifications to
> existing files based on the newly introduced content
> 
> Signed-off-by: Hanxiao Li <li.hanxiao@zte.com.cn>
> ---
>  MAINTAINERS                       |  3 ++
>  drivers/common/zsda/zsda_common.h | 50 +++++++++++++++++++++++
>  drivers/common/zsda/zsda_device.c | 42 +++-----------------
>  drivers/common/zsda/zsda_device.h | 19 +++++++--
>  drivers/common/zsda/zsda_qp.c     | 66 ++++++++++++++++++++++++++++++-
>  lib/cryptodev/rte_crypto_sym.h    |  4 +-
>  6 files changed, 141 insertions(+), 43 deletions(-)
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index ea245fc61b..9e66c72c45 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1221,6 +1221,9 @@ F: drivers/crypto/virtio/
>  F: doc/guides/cryptodevs/virtio.rst
>  F: doc/guides/cryptodevs/features/virtio.ini
> 
> +ZTE Storage Data Accelerator
> +M: Hanxiao Li <li.hanxiao@zte.com.cn>
> +F: drivers/crypto/zsda/
> 
>  Compression Drivers
>  -------------------
> diff --git a/drivers/common/zsda/zsda_common.h
> b/drivers/common/zsda/zsda_common.h
> index 0dbc9b7d3c..d50a152307 100644
> --- a/drivers/common/zsda/zsda_common.h
> +++ b/drivers/common/zsda/zsda_common.h
> @@ -97,17 +97,39 @@
>  enum zsda_service_type {
>      ZSDA_SERVICE_COMPRESSION = 0,
>      ZSDA_SERVICE_DECOMPRESSION,
> +    ZSDA_SERVICE_SYMMETRIC_ENCRYPT,
> +    ZSDA_SERVICE_SYMMETRIC_DECRYPT,
> +    ZSDA_SERVICE_HASH_ENCODE = 6,
>      ZSDA_SERVICE_INVALID,
>  };
> 
>  #define ZSDA_MAX_SERVICES (ZSDA_SERVICE_INVALID)
> 
> +#define ZSDA_OPC_EC_AES_XTS_256 0x0  /* Encry AES-XTS-256 */
> +#define ZSDA_OPC_EC_AES_XTS_512 0x01 /* Encry AES-XTS-512 */
> +#define ZSDA_OPC_EC_SM4_XTS_256 0x02 /* Encry SM4-XTS-256 */
> +#define ZSDA_OPC_DC_AES_XTS_256 0x08 /* Decry AES-XTS-256 */
> +#define ZSDA_OPC_DC_AES_XTS_512 0x09 /* Decry AES-XTS-512 */
> +#define ZSDA_OPC_DC_SM4_XTS_256 0x0A /* Decry SM4-XTS-256 */
>  #define ZSDA_OPC_COMP_GZIP    0x10 /* Encomp deflate-Gzip */
>  #define ZSDA_OPC_COMP_ZLIB    0x11 /* Encomp deflate-Zlib */
>  #define ZSDA_OPC_DECOMP_GZIP    0x18 /* Decompinfalte-Gzip */
>  #define ZSDA_OPC_DECOMP_ZLIB    0x19 /* Decompinfalte-Zlib */
> +#define ZSDA_OPC_HASH_SHA1    0x20 /* Hash-SHA1 */
> +#define ZSDA_OPC_HASH_SHA2_224    0x21 /* Hash-SHA2-224 */
> +#define ZSDA_OPC_HASH_SHA2_256    0x22 /* Hash-SHA2-256 */
> +#define ZSDA_OPC_HASH_SHA2_384    0x23 /* Hash-SHA2-384 */
> +#define ZSDA_OPC_HASH_SHA2_512    0x24 /* Hash-SHA2-512 */
> +#define ZSDA_OPC_HASH_SM3    0x25 /* Hash-SM3 */
>  #define ZSDA_OPC_INVALID    0xff
> 
> +#define ZSDA_DIGEST_SIZE_SHA1      (20)
> +#define ZSDA_DIGEST_SIZE_SHA2_224 (28)
> +#define ZSDA_DIGEST_SIZE_SHA2_256 (32)
> +#define ZSDA_DIGEST_SIZE_SHA2_384 (48)
> +#define ZSDA_DIGEST_SIZE_SHA2_512 (64)
> +#define ZSDA_DIGEST_SIZE_SM3      (32)
> +
>  #define SET_CYCLE      0xff
>  #define SET_HEAD_INTI      0x0
> 
> @@ -237,9 +259,34 @@ struct zsda_op_cookie {
>      uint8_t comp_head[COMP_REMOVE_SPACE_LEN];
>  } __rte_packed;
> 
> +#define ZSDA_CIPHER_KEY_MAX_LEN 64
> +struct crypto_cfg {
> +    uint8_t slba_L[8];
> +    uint8_t key[ZSDA_CIPHER_KEY_MAX_LEN];
> +    uint8_t lbads : 4;
> +    uint8_t resv1 : 4;
> +    uint8_t resv2[7];
> +    uint8_t slba_H[8];
> +    uint8_t resv3[8];
> +} __rte_packed;
> +
Move crypto specific things to crypto pmd.

>  struct compress_cfg {
>  } __rte_packed;
> 
> +struct zsda_wqe_crpt {
> +    uint8_t valid;
> +    uint8_t op_code;
> +    uint16_t sid;
> +    uint8_t resv[3];
> +    uint8_t rx_sgl_type : 4;
> +    uint8_t tx_sgl_type : 4;
> +    uint64_t rx_addr;
> +    uint32_t rx_length;
> +    uint64_t tx_addr;
> +    uint32_t tx_length;
> +    struct crypto_cfg cfg;
> +} __rte_packed;
> +
>  struct zsda_wqe_comp {
>      uint8_t valid;
>      uint8_t op_code;
> @@ -281,6 +328,9 @@ struct zsda_common_stat {
>  enum zsda_algo_core {
>      ZSDA_CORE_COMP,
>      ZSDA_CORE_DECOMP,
> +    ZSDA_CORE_ENCRY,
> +    ZSDA_CORE_DECRY,
> +    ZSDA_CORE_HASH,
>      ZSDA_CORE_INVALID,
>  };
> 
> diff --git a/drivers/common/zsda/zsda_device.c
> b/drivers/common/zsda/zsda_device.c
> index de8894f5a3..4ddc97e564 100644
> --- a/drivers/common/zsda/zsda_device.c
> +++ b/drivers/common/zsda/zsda_device.c
> @@ -7,6 +7,7 @@
>  #include <stdint.h>
> 
>  #include "zsda_device.h"
> +#include "zsda_qp.h"
> 
>  /* per-process array of device data */
>  struct zsda_device_info zsda_devs[RTE_PMD_ZSDA_MAX_PCI_DEVICES];
> @@ -306,7 +307,8 @@ zsda_pci_device_release(const struct rte_pci_device
> *pci_dev)
>          inst = &zsda_devs[zsda_pci_dev->zsda_dev_id];
> 
>          if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
> -            if (zsda_pci_dev->comp_dev != NULL) {
> +            if ((zsda_pci_dev->sym_dev != NULL) ||
> +                (zsda_pci_dev->comp_dev != NULL)) {
>                  ZSDA_LOG(DEBUG, "ZSDA device %s is busy", name);
>                  return -EBUSY;
>              }
> @@ -322,47 +324,12 @@ static int
>  zsda_pci_dev_destroy(struct zsda_pci_device *zsda_pci_dev,
>               const struct rte_pci_device *pci_dev)
>  {
> +    zsda_sym_dev_destroy(zsda_pci_dev);
>      zsda_comp_dev_destroy(zsda_pci_dev);
> 
>      return zsda_pci_device_release(pci_dev);
>  }
> 
> -int
> -zsda_get_queue_cfg_by_id(const struct zsda_pci_device *zsda_pci_dev,
> -             const uint8_t qid, struct qinfo *qcfg)
> -{
> -    struct zsda_admin_req_qcfg req = {0};
> -    struct zsda_admin_resp_qcfg resp = {0};
> -    int ret = 0;
> -    struct rte_pci_device *pci_dev =
> -        zsda_devs[zsda_pci_dev->zsda_dev_id].pci_dev;
> -
> -    if (qid >= MAX_QPS_ON_FUNCTION) {
> -        ZSDA_LOG(ERR, "qid beyond limit!");
> -        return ZSDA_FAILED;
> -    }
> -
> -    zsda_admin_msg_init(pci_dev);
> -    req.msg_type = ZSDA_ADMIN_QUEUE_CFG_REQ;
> -    req.qid = qid;
> -
> -    ret = zsda_send_admin_msg(pci_dev, &req, sizeof(req));
> -    if (ret) {
> -        ZSDA_LOG(ERR, "Failed! Send msg");
> -        return ret;
> -    }
> -
> -    ret = zsda_recv_admin_msg(pci_dev, &resp, sizeof(resp));
> -    if (ret) {
> -        ZSDA_LOG(ERR, "Failed! Receive msg");
> -        return ret;
> -    }
> -
> -    memcpy(qcfg, &resp.qcfg, sizeof(*qcfg));
> -
> -    return ZSDA_SUCCESS;
> -}
> -
>  static int
>  zsda_unmask_flr(const struct zsda_pci_device *zsda_pci_dev)
>  {
> @@ -432,6 +399,7 @@ zsda_pci_probe(struct rte_pci_driver *pci_drv
> __rte_unused,
>          return ret;
>      }
> 
> +    ret |= zsda_sym_dev_create(zsda_pci_dev);
>      ret |= zsda_comp_dev_create(zsda_pci_dev);
> 
>      if (ret) {
> diff --git a/drivers/common/zsda/zsda_device.h
> b/drivers/common/zsda/zsda_device.h
> index 1b2ad0ce85..51ff741840 100644
> --- a/drivers/common/zsda/zsda_device.h
> +++ b/drivers/common/zsda/zsda_device.h
> @@ -18,6 +18,12 @@ struct zsda_device_info {
> 
>      struct rte_pci_device *pci_dev;
> 
> +    struct rte_device sym_rte_dev;
> +    /**< This represents the crypto sym subset of this pci device.
> +     * Register with this rather than with the one in
> +     * pci_dev so that its driver can have a crypto-specific name
> +     */
> +
>      struct rte_device comp_rte_dev;
>      /**< This represents the compression subset of this pci device.
>       * Register with this rather than with the one in
> @@ -27,6 +33,7 @@ struct zsda_device_info {
> 
>  extern struct zsda_device_info zsda_devs[];
> 
> +struct zsda_sym_dev_private;
>  struct zsda_comp_dev_private;
> 
>  struct zsda_qp_hw_data {
> @@ -64,6 +71,10 @@ struct zsda_pci_device {
> 
>      struct rte_pci_device *pci_dev;
> 
> +    /* Data relating to symmetric crypto service */
> +    struct zsda_sym_dev_private *sym_dev;
> +    /**< link back to cryptodev private data */
> +
>      /* Data relating to compression service */
>      struct zsda_comp_dev_private *comp_dev;
>      /**< link back to compressdev private data */
> @@ -79,7 +90,10 @@ struct zsda_pci_device *
>  zsda_get_zsda_dev_from_pci_dev(const struct rte_pci_device *pci_dev);
> 
>  __rte_weak int
> -zsda_get_queue_cfg(struct zsda_pci_device *zsda_pci_dev);
> +zsda_sym_dev_create(struct zsda_pci_device *zsda_pci_dev);
> +
> +__rte_weak int
> +zsda_sym_dev_destroy(struct zsda_pci_device *zsda_pci_dev);
> 
>  __rte_weak int
>  zsda_comp_dev_create(struct zsda_pci_device *zsda_pci_dev);
> @@ -87,9 +101,6 @@ zsda_comp_dev_create(struct zsda_pci_device
> *zsda_pci_dev);
>  __rte_weak int
>  zsda_comp_dev_destroy(struct zsda_pci_device *zsda_pci_dev);
> 
> -int zsda_get_queue_cfg_by_id(const struct zsda_pci_device *zsda_pci_dev,
> -                 const uint8_t qid, struct qinfo *qcfg);
> -
>  int zsda_queue_start(const struct rte_pci_device *pci_dev);
>  int zsda_queue_stop(const struct rte_pci_device *pci_dev);
>  int zsda_queue_clear(const struct rte_pci_device *pci_dev);
> diff --git a/drivers/common/zsda/zsda_qp.c b/drivers/common/zsda/zsda_qp.c
> index f2dfe43b2e..5c5ac90771 100644
> --- a/drivers/common/zsda/zsda_qp.c
> +++ b/drivers/common/zsda/zsda_qp.c
> @@ -20,8 +20,11 @@ struct ring_size {
>  };
> 
>  struct ring_size zsda_qp_hw_ring_size[ZSDA_MAX_SERVICES] = {
> +    [ZSDA_SERVICE_SYMMETRIC_ENCRYPT] = {128, 16},
> +    [ZSDA_SERVICE_SYMMETRIC_DECRYPT] = {128, 16},
>      [ZSDA_SERVICE_COMPRESSION] = {32, 16},
>      [ZSDA_SERVICE_DECOMPRESSION] = {32, 16},
> +    [ZSDA_SERVICE_HASH_ENCODE] = {32, 16},
>  };
> 
>  static void
> @@ -36,6 +39,43 @@ zsda_set_queue_head_tail(const struct zsda_pci_device
> *zsda_pci_dev,
>               SET_HEAD_INTI);
>  }
> 
> +static int
> +zsda_get_queue_cfg_by_id(const struct zsda_pci_device *zsda_pci_dev,
> +             const uint8_t qid, struct qinfo *qcfg)

This function is moved from device.c to qp.c.
Better to place it at the right place at once.
Avoid unnecessary movement of code within patchset.

> +{
> +    struct zsda_admin_req_qcfg req = {0};
> +    struct zsda_admin_resp_qcfg resp = {0};
> +    int ret = 0;
> +    struct rte_pci_device *pci_dev =
> +        zsda_devs[zsda_pci_dev->zsda_dev_id].pci_dev;
> +
> +    if (qid >= MAX_QPS_ON_FUNCTION) {
> +        ZSDA_LOG(ERR, "qid beyond limit!");
> +        return ZSDA_FAILED;
> +    }
> +
> +    zsda_admin_msg_init(pci_dev);
> +    req.msg_type = ZSDA_ADMIN_QUEUE_CFG_REQ;
> +    req.qid = qid;
> +
> +    ret = zsda_send_admin_msg(pci_dev, &req, sizeof(req));
> +    if (ret) {
> +        ZSDA_LOG(ERR, "Failed! Send msg");
> +        return ret;
> +    }
> +
> +    ret = zsda_recv_admin_msg(pci_dev, &resp, sizeof(resp));
> +    if (ret) {
> +        ZSDA_LOG(ERR, "Failed! Receive msg");
> +        return ret;
> +    }
> +
> +    memcpy(qcfg, &resp.qcfg, sizeof(*qcfg));
> +
> +    return ZSDA_SUCCESS;
> +}
> +
> +
>  int
>  zsda_get_queue_cfg(struct zsda_pci_device *zsda_pci_dev)
>  {
> @@ -43,7 +83,7 @@ zsda_get_queue_cfg(struct zsda_pci_device
> *zsda_pci_dev)
>      uint32_t index;
>      enum zsda_service_type type;
>      struct zsda_qp_hw *zsda_hw_qps = zsda_pci_dev->zsda_hw_qps;
> -    struct qinfo qcfg;
> +    struct qinfo qcfg = {0};
>      int ret = 0;
> 
>      for (i = 0; i < zsda_num_used_qps; i++) {
> @@ -115,6 +155,30 @@ zsda_comp_max_nb_qps(const struct zsda_pci_device
> *zsda_pci_dev)
>      return min;
>  }
> 
> +uint16_t
> +zsda_crypto_max_nb_qps(struct zsda_pci_device *zsda_pci_dev)
> +{
> +    uint16_t encrypt = zsda_qps_per_service(zsda_pci_dev,
> +                        ZSDA_SERVICE_SYMMETRIC_ENCRYPT);
> +    uint16_t decrypt = zsda_qps_per_service(zsda_pci_dev,
> +                        ZSDA_SERVICE_SYMMETRIC_DECRYPT);
> +    uint16_t hash =
> +        zsda_qps_per_service(zsda_pci_dev, ZSDA_SERVICE_HASH_ENCODE);
> +    uint16_t min = 0;
> +
> +    if ((encrypt == MAX_QPS_ON_FUNCTION) ||
> +        (decrypt == MAX_QPS_ON_FUNCTION) ||
> +        (hash == MAX_QPS_ON_FUNCTION))
> +        min = MAX_QPS_ON_FUNCTION;
> +    else {
> +        min = (encrypt < decrypt) ? encrypt : decrypt;
> +        min = (min < hash) ? min : hash;
> +    }
> +
> +    if (min == 0)
> +        return MAX_QPS_ON_FUNCTION;
> +    return min;
> +}
> 
>  void
>  zsda_stats_get(void **queue_pairs, const uint32_t nb_queue_pairs,
> diff --git a/lib/cryptodev/rte_crypto_sym.h b/lib/cryptodev/rte_crypto_sym.h
> index 53b18b9412..b34d041fe0 100644
> --- a/lib/cryptodev/rte_crypto_sym.h
> +++ b/lib/cryptodev/rte_crypto_sym.h
> @@ -176,8 +176,10 @@ enum rte_crypto_cipher_algorithm {
>      /**< ShangMi 4 (SM4) algorithm in CTR mode */
>      RTE_CRYPTO_CIPHER_SM4_OFB,
>      /**< ShangMi 4 (SM4) algorithm in OFB mode */
> -    RTE_CRYPTO_CIPHER_SM4_CFB
> +    RTE_CRYPTO_CIPHER_SM4_CFB,
>      /**< ShangMi 4 (SM4) algorithm in CFB mode */
> +    RTE_CRYPTO_CIPHER_SM4_XTS
> +    /**< ShangMi 4 (SM4) algorithm in XTS mode */
>  };


This change should be a separate patch.
Also add test cases for this.

  reply	other threads:[~2024-09-17 18:22 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-01  8:27 [PATCH] zsda:introduce zsda drivers and examples lhx
2024-07-02  8:52 ` David Marchand
2024-07-02 13:11 ` [EXTERNAL] " Akhil Goyal
2024-09-09  8:08 ` [PATCH v4 1/8] zsda: Introduce zsda device drivers Hanxiao Li
2024-09-10  9:15 ` [PATCH v5 " Hanxiao Li
2024-09-10  9:18   ` [PATCH v5 2/8] zsda: add support for zsdadev operations Hanxiao Li
2024-09-10  9:18     ` [PATCH v5 3/8] zsda: add support for queue operation Hanxiao Li
2024-09-10  9:18     ` [PATCH v5 4/8] zsda: add zsda compressdev driver and interface Hanxiao Li
2024-09-10  9:18     ` [PATCH v5 5/8] zsda: modify files for introducing zsda cryptodev Hanxiao Li
2024-09-10  9:18     ` [PATCH v5 6/8] zsda: add zsda crypto-pmd Hanxiao Li
2024-09-10  9:18     ` [PATCH v5 7/8] zsda: add zsda crypto-sym Hanxiao Li
2024-09-10  9:18     ` [PATCH v5 8/8] zsda: add zsda crypto-session and compile file Hanxiao Li
2024-09-11  7:52   ` [PATCH v6 1/8] zsda: Introduce zsda device drivers Hanxiao Li
2024-09-11  7:54     ` [PATCH v6 2/8] zsda: add support for zsdadev operations Hanxiao Li
2024-09-11  7:54       ` [PATCH v6 3/8] zsda: add support for queue operation Hanxiao Li
2024-09-11 16:01         ` Stephen Hemminger
2024-09-11  7:54       ` [PATCH v6 4/8] zsda: add zsda compressdev driver and interface Hanxiao Li
2024-09-11  7:54       ` [PATCH v6 5/8] zsda: modify files for introducing zsda cryptodev Hanxiao Li
2024-09-17 18:22         ` Akhil Goyal [this message]
2024-09-11  7:54       ` [PATCH v6 6/8] zsda: add zsda crypto-pmd Hanxiao Li
2024-09-17 18:25         ` [EXTERNAL] " Akhil Goyal
2024-09-11  7:54       ` [PATCH v6 7/8] zsda: add zsda crypto-sym Hanxiao Li
2024-09-11  7:54       ` [PATCH v6 8/8] zsda: add zsda crypto-session and compile file Hanxiao Li
2024-09-17 18:33         ` [EXTERNAL] " Akhil Goyal
2024-09-17 18:13     ` [EXTERNAL] [PATCH v6 1/8] zsda: Introduce zsda device drivers Akhil Goyal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CO6PR18MB4484FE952D5D48F0A1FF5FC0D8612@CO6PR18MB4484.namprd18.prod.outlook.com \
    --to=gakhil@marvell.com \
    --cc=dev@dpdk.org \
    --cc=li.hanxiao@zte.com.cn \
    --cc=wang.yong19@zte.com.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).