crypto/dpaa2_sec: upgarde mc FW APIs to 10.10.0
authorHemant Agrawal <hemant.agrawal@nxp.com>
Fri, 12 Oct 2018 10:04:16 +0000 (15:34 +0530)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 16 Oct 2018 12:54:25 +0000 (14:54 +0200)
This also brings in support to configure the queues
for order restoration.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
drivers/crypto/dpaa2_sec/mc/dpseci.c
drivers/crypto/dpaa2_sec/mc/fsl_dpseci.h
drivers/crypto/dpaa2_sec/mc/fsl_dpseci_cmd.h

index 265a8e4..ee95c2b 100644 (file)
@@ -24,6 +24,7 @@
 #include <dpaa2_hw_pvt.h>
 #include <dpaa2_hw_dpio.h>
 #include <dpaa2_hw_mempool.h>
+#include <fsl_dpopr.h>
 #include <fsl_dpseci.h>
 #include <fsl_mc_sys.h>
 
index de8ca97..87e0def 100644 (file)
@@ -6,6 +6,7 @@
  */
 #include <fsl_mc_sys.h>
 #include <fsl_mc_cmd.h>
+#include <fsl_dpopr.h>
 #include <fsl_dpseci.h>
 #include <fsl_dpseci_cmd.h>
 
@@ -116,11 +117,13 @@ int dpseci_create(struct fsl_mc_io *mc_io,
                                          cmd_flags,
                                          dprc_token);
        cmd_params = (struct dpseci_cmd_create *)cmd.params;
-       for (i = 0; i < DPSECI_PRIO_NUM; i++)
+       for (i = 0; i < 8; i++)
                cmd_params->priorities[i] = cfg->priorities[i];
+       for (i = 0; i < 8; i++)
+               cmd_params->priorities2[i] = cfg->priorities[8 + i];
        cmd_params->num_tx_queues = cfg->num_tx_queues;
        cmd_params->num_rx_queues = cfg->num_rx_queues;
-       cmd_params->options = cfg->options;
+       cmd_params->options = cpu_to_le32(cfg->options);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -302,7 +305,7 @@ int dpseci_get_attributes(struct fsl_mc_io *mc_io,
        /* retrieve response parameters */
        rsp_params = (struct dpseci_rsp_get_attr *)cmd.params;
        attr->id = le32_to_cpu(rsp_params->id);
-       attr->options = rsp_params->options;
+       attr->options = le32_to_cpu(rsp_params->options);
        attr->num_tx_queues = rsp_params->num_tx_queues;
        attr->num_rx_queues = rsp_params->num_rx_queues;
 
@@ -490,6 +493,8 @@ int dpseci_get_sec_attr(struct fsl_mc_io *mc_io,
        attr->arc4_acc_num = rsp_params->arc4_acc_num;
        attr->des_acc_num = rsp_params->des_acc_num;
        attr->aes_acc_num = rsp_params->aes_acc_num;
+       attr->ccha_acc_num = rsp_params->ccha_acc_num;
+       attr->ptha_acc_num = rsp_params->ptha_acc_num;
 
        return 0;
 }
@@ -569,6 +574,113 @@ int dpseci_get_api_version(struct fsl_mc_io *mc_io,
        return 0;
 }
 
+/**
+ * dpseci_set_opr() - Set Order Restoration configuration.
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPSECI object
+ * @index:     The queue index
+ * @options:   Configuration mode options
+ *                     can be OPR_OPT_CREATE or OPR_OPT_RETIRE
+ * @cfg:       Configuration options for the OPR
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
+int dpseci_set_opr(struct fsl_mc_io *mc_io,
+                  uint32_t cmd_flags,
+                  uint16_t token,
+                  uint8_t index,
+                  uint8_t options,
+                  struct opr_cfg *cfg)
+{
+       struct dpseci_cmd_set_opr *cmd_params;
+       struct mc_command cmd = { 0 };
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPSECI_CMDID_SET_OPR,
+                                         cmd_flags,
+                                         token);
+       cmd_params = (struct dpseci_cmd_set_opr *)cmd.params;
+       cmd_params->index = index;
+       cmd_params->options = options;
+       cmd_params->oloe = cfg->oloe;
+       cmd_params->oeane = cfg->oeane;
+       cmd_params->olws = cfg->olws;
+       cmd_params->oa = cfg->oa;
+       cmd_params->oprrws = cfg->oprrws;
+
+       /* send command to mc*/
+       return mc_send_command(mc_io, &cmd);
+}
+
+/**
+ * dpseci_get_opr() - Retrieve Order Restoration config and query.
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPSECI object
+ * @index:     The queue index
+ * @cfg:       Returned OPR configuration
+ * @qry:       Returned OPR query
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
+int dpseci_get_opr(struct fsl_mc_io *mc_io,
+                  uint32_t cmd_flags,
+                  uint16_t token,
+                  uint8_t index,
+                  struct opr_cfg *cfg,
+                  struct opr_qry *qry)
+{
+       struct dpseci_rsp_get_opr *rsp_params;
+       struct dpseci_cmd_get_opr *cmd_params;
+       struct mc_command cmd = { 0 };
+       int err;
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_OPR,
+                                         cmd_flags,
+                                         token);
+       cmd_params = (struct dpseci_cmd_get_opr *)cmd.params;
+       cmd_params->index = index;
+
+       /* send command to mc*/
+       err = mc_send_command(mc_io, &cmd);
+       if (err)
+               return err;
+
+       /* retrieve response parameters */
+       rsp_params = (struct dpseci_rsp_get_opr *)cmd.params;
+       cfg->oloe = rsp_params->oloe;
+       cfg->oeane = rsp_params->oeane;
+       cfg->olws = rsp_params->olws;
+       cfg->oa = rsp_params->oa;
+       cfg->oprrws = rsp_params->oprrws;
+       qry->rip = dpseci_get_field(rsp_params->flags, RIP);
+       qry->enable = dpseci_get_field(rsp_params->flags, OPR_ENABLE);
+       qry->nesn = le16_to_cpu(rsp_params->nesn);
+       qry->ndsn = le16_to_cpu(rsp_params->ndsn);
+       qry->ea_tseq = le16_to_cpu(rsp_params->ea_tseq);
+       qry->tseq_nlis = dpseci_get_field(rsp_params->tseq_nlis, TSEQ_NLIS);
+       qry->ea_hseq = le16_to_cpu(rsp_params->ea_hseq);
+       qry->hseq_nlis = dpseci_get_field(rsp_params->hseq_nlis, HSEQ_NLIS);
+       qry->ea_hptr = le16_to_cpu(rsp_params->ea_hptr);
+       qry->ea_tptr = le16_to_cpu(rsp_params->ea_tptr);
+       qry->opr_vid = le16_to_cpu(rsp_params->opr_vid);
+       qry->opr_id = le16_to_cpu(rsp_params->opr_id);
+
+       return 0;
+}
+
+/**
+ * dpseci_set_congestion_notification() - Set congestion group
+ *     notification configuration
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPSECI object
+ * @cfg:       congestion notification configuration
+ *
+ * Return:     '0' on success, error code otherwise
+ */
 int dpseci_set_congestion_notification(
                        struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
@@ -604,6 +716,16 @@ int dpseci_set_congestion_notification(
        return mc_send_command(mc_io, &cmd);
 }
 
+/**
+ * dpseci_get_congestion_notification() - Get congestion group
+ *     notification configuration
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPSECI object
+ * @cfg:       congestion notification configuration
+ *
+ * Return:     '0' on success, error code otherwise
+ */
 int dpseci_get_congestion_notification(
                                struct fsl_mc_io *mc_io,
                                uint32_t cmd_flags,
index 12ac005..279e8f4 100644 (file)
@@ -20,7 +20,7 @@ struct fsl_mc_io;
 /**
  * Maximum number of Tx/Rx priorities per DPSECI object
  */
-#define DPSECI_PRIO_NUM                8
+#define DPSECI_MAX_QUEUE_NUM           16
 
 /**
  * All queues considered; see dpseci_set_rx_queue()
@@ -58,7 +58,7 @@ struct dpseci_cfg {
        uint32_t options;
        uint8_t num_tx_queues;
        uint8_t num_rx_queues;
-       uint8_t priorities[DPSECI_PRIO_NUM];
+       uint8_t priorities[DPSECI_MAX_QUEUE_NUM];
 };
 
 int dpseci_create(struct fsl_mc_io *mc_io,
@@ -259,6 +259,10 @@ int dpseci_get_tx_queue(struct fsl_mc_io *mc_io,
  *                     implemented in this version of SEC.
  * @aes_acc_num:       The number of copies of the AES module that are
  *                     implemented in this version of SEC.
+ * @ccha_acc_num:      The number of copies of the ChaCha20 module that are
+ *                     implemented in this version of SEC.
+ * @ptha_acc_num:      The number of copies of the Poly1305 module that are
+ *                     implemented in this version of SEC.
  **/
 
 struct dpseci_sec_attr {
@@ -279,6 +283,8 @@ struct dpseci_sec_attr {
        uint8_t arc4_acc_num;
        uint8_t des_acc_num;
        uint8_t aes_acc_num;
+       uint8_t ccha_acc_num;
+       uint8_t ptha_acc_num;
 };
 
 int dpseci_get_sec_attr(struct fsl_mc_io *mc_io,
@@ -316,6 +322,21 @@ int dpseci_get_api_version(struct fsl_mc_io *mc_io,
                           uint32_t cmd_flags,
                           uint16_t *major_ver,
                           uint16_t *minor_ver);
+
+int dpseci_set_opr(struct fsl_mc_io *mc_io,
+                  uint32_t cmd_flags,
+                  uint16_t token,
+                  uint8_t index,
+                  uint8_t options,
+                  struct opr_cfg *cfg);
+
+int dpseci_get_opr(struct fsl_mc_io *mc_io,
+                  uint32_t cmd_flags,
+                  uint16_t token,
+                  uint8_t index,
+                  struct opr_cfg *cfg,
+                  struct opr_qry *qry);
+
 /**
  * enum dpseci_congestion_unit - DPSECI congestion units
  * @DPSECI_CONGESTION_UNIT_BYTES: bytes units
index 26cef0f..af3518a 100644 (file)
@@ -9,22 +9,25 @@
 
 /* DPSECI Version */
 #define DPSECI_VER_MAJOR               5
-#define DPSECI_VER_MINOR               1
+#define DPSECI_VER_MINOR               3
 
 /* Command versioning */
 #define DPSECI_CMD_BASE_VERSION                1
 #define DPSECI_CMD_BASE_VERSION_V2     2
+#define DPSECI_CMD_BASE_VERSION_V3     3
 #define DPSECI_CMD_ID_OFFSET           4
 
 #define DPSECI_CMD_V1(id) \
        ((id << DPSECI_CMD_ID_OFFSET) | DPSECI_CMD_BASE_VERSION)
 #define DPSECI_CMD_V2(id) \
        ((id << DPSECI_CMD_ID_OFFSET) | DPSECI_CMD_BASE_VERSION_V2)
+#define DPSECI_CMD_V3(id) \
+       ((id << DPSECI_CMD_ID_OFFSET) | DPSECI_CMD_BASE_VERSION_V3)
 
 /* Command IDs */
 #define DPSECI_CMDID_CLOSE             DPSECI_CMD_V1(0x800)
 #define DPSECI_CMDID_OPEN              DPSECI_CMD_V1(0x809)
-#define DPSECI_CMDID_CREATE            DPSECI_CMD_V2(0x909)
+#define DPSECI_CMDID_CREATE            DPSECI_CMD_V3(0x909)
 #define DPSECI_CMDID_DESTROY           DPSECI_CMD_V1(0x989)
 #define DPSECI_CMDID_GET_API_VERSION   DPSECI_CMD_V1(0xa09)
 
 #define DPSECI_CMDID_SET_RX_QUEUE      DPSECI_CMD_V1(0x194)
 #define DPSECI_CMDID_GET_RX_QUEUE      DPSECI_CMD_V1(0x196)
 #define DPSECI_CMDID_GET_TX_QUEUE      DPSECI_CMD_V1(0x197)
-#define DPSECI_CMDID_GET_SEC_ATTR      DPSECI_CMD_V1(0x198)
+#define DPSECI_CMDID_GET_SEC_ATTR      DPSECI_CMD_V2(0x198)
 #define DPSECI_CMDID_GET_SEC_COUNTERS  DPSECI_CMD_V1(0x199)
-
+#define DPSECI_CMDID_SET_OPR           DPSECI_CMD_V1(0x19A)
+#define DPSECI_CMDID_GET_OPR           DPSECI_CMD_V1(0x19B)
 #define DPSECI_CMDID_SET_CONGESTION_NOTIFICATION       DPSECI_CMD_V1(0x170)
 #define DPSECI_CMDID_GET_CONGESTION_NOTIFICATION       DPSECI_CMD_V1(0x171)
 
@@ -63,6 +67,8 @@ struct dpseci_cmd_create {
        uint8_t num_rx_queues;
        uint8_t pad[6];
        uint32_t options;
+       uint32_t pad2;
+       uint8_t priorities2[8];
 };
 
 struct dpseci_cmd_destroy {
@@ -152,6 +158,8 @@ struct dpseci_rsp_get_sec_attr {
        uint8_t arc4_acc_num;
        uint8_t des_acc_num;
        uint8_t aes_acc_num;
+       uint8_t ccha_acc_num;
+       uint8_t ptha_acc_num;
 };
 
 struct dpseci_rsp_get_sec_counters {
@@ -169,6 +177,63 @@ struct dpseci_rsp_get_api_version {
        uint16_t minor;
 };
 
+struct dpseci_cmd_set_opr {
+       uint16_t pad0;
+       uint8_t index;
+       uint8_t options;
+       uint8_t pad1[7];
+       uint8_t oloe;
+       uint8_t oeane;
+       uint8_t olws;
+       uint8_t oa;
+       uint8_t oprrws;
+};
+
+struct dpseci_cmd_get_opr {
+       uint16_t pad;
+       uint8_t index;
+};
+
+#define DPSECI_RIP_SHIFT       0
+#define DPSECI_RIP_SIZE                1
+#define DPSECI_OPR_ENABLE_SHIFT        1
+#define DPSECI_OPR_ENABLE_SIZE 1
+#define DPSECI_TSEQ_NLIS_SHIFT 0
+#define DPSECI_TSEQ_NLIS_SIZE  1
+#define DPSECI_HSEQ_NLIS_SHIFT 0
+#define DPSECI_HSEQ_NLIS_SIZE  1
+
+struct dpseci_rsp_get_opr {
+       uint64_t pad0;
+       /* from LSB: rip:1 enable:1 */
+       uint8_t flags;
+       uint16_t pad1;
+       uint8_t oloe;
+       uint8_t oeane;
+       uint8_t olws;
+       uint8_t oa;
+       uint8_t oprrws;
+       uint16_t nesn;
+       uint16_t pad8;
+       uint16_t ndsn;
+       uint16_t pad2;
+       uint16_t ea_tseq;
+       /* only the LSB */
+       uint8_t tseq_nlis;
+       uint8_t pad3;
+       uint16_t ea_hseq;
+       /* only the LSB */
+       uint8_t hseq_nlis;
+       uint8_t pad4;
+       uint16_t ea_hptr;
+       uint16_t pad5;
+       uint16_t ea_tptr;
+       uint16_t pad6;
+       uint16_t opr_vid;
+       uint16_t pad7;
+       uint16_t opr_id;
+};
+
 #define DPSECI_DEST_TYPE_SHIFT         0
 #define DPSECI_DEST_TYPE_SIZE          4
 #define DPSECI_CG_UNITS_SHIFT          4