bus/fslmc: upgrade mc FW APIs to 10.10.0
authorHemant Agrawal <hemant.agrawal@nxp.com>
Fri, 12 Oct 2018 10:04:14 +0000 (15:34 +0530)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 16 Oct 2018 12:54:25 +0000 (14:54 +0200)
This patch add the support for new Management Complex
Firmware version to 10.1x.x. One of the main changes in
the APIs ordered queue.

The fslmc bus lib ABI will need to be bumped to reflect
the MC FW API and structure changes.

This will also result in bumping of ABI verion of all dependent
libs as they internally use the MC FW APIs and structures.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
29 files changed:
drivers/bus/fslmc/mc/dpbp.c
drivers/bus/fslmc/mc/dpci.c
drivers/bus/fslmc/mc/dpcon.c
drivers/bus/fslmc/mc/dpdmai.c
drivers/bus/fslmc/mc/dpio.c
drivers/bus/fslmc/mc/fsl_dpbp.h
drivers/bus/fslmc/mc/fsl_dpbp_cmd.h
drivers/bus/fslmc/mc/fsl_dpci.h
drivers/bus/fslmc/mc/fsl_dpci_cmd.h
drivers/bus/fslmc/mc/fsl_dpcon.h
drivers/bus/fslmc/mc/fsl_dpdmai.h
drivers/bus/fslmc/mc/fsl_dpdmai_cmd.h
drivers/bus/fslmc/mc/fsl_dpmng.h
drivers/bus/fslmc/mc/fsl_dpopr.h [new file with mode: 0644]
drivers/bus/fslmc/rte_bus_fslmc_version.map
drivers/crypto/dpaa2_sec/Makefile
drivers/crypto/dpaa2_sec/meson.build
drivers/event/dpaa2/Makefile
drivers/event/dpaa2/meson.build
drivers/mempool/dpaa2/Makefile
drivers/mempool/dpaa2/meson.build
drivers/net/dpaa2/Makefile
drivers/net/dpaa2/meson.build
drivers/raw/dpaa2_cmdif/Makefile
drivers/raw/dpaa2_cmdif/meson.build
drivers/raw/dpaa2_qdma/Makefile
drivers/raw/dpaa2_qdma/dpaa2_qdma.c
drivers/raw/dpaa2_qdma/dpaa2_qdma.h
drivers/raw/dpaa2_qdma/meson.build

index 0215d22..d910340 100644 (file)
@@ -248,6 +248,16 @@ int dpbp_reset(struct fsl_mc_io *mc_io,
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
+/**
+ * dpbp_get_attributes - Retrieve DPBP attributes.
+ *
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPBP object
+ * @attr:      Returned object's attributes
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
index ff366bf..95edae9 100644 (file)
@@ -265,6 +265,15 @@ int dpci_reset(struct fsl_mc_io *mc_io,
        return mc_send_command(mc_io, &cmd);
 }
 
+/**
+ * dpci_get_attributes() - Retrieve DPCI attributes.
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPCI object
+ * @attr:      Returned object's attributes
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
 int dpci_get_attributes(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
@@ -292,6 +301,94 @@ int dpci_get_attributes(struct fsl_mc_io *mc_io,
        return 0;
 }
 
+/**
+ * dpci_get_peer_attributes() - Retrieve peer DPCI attributes.
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPCI object
+ * @attr:      Returned peer attributes
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
+int dpci_get_peer_attributes(struct fsl_mc_io *mc_io,
+                            uint32_t cmd_flags,
+                            uint16_t token,
+                            struct dpci_peer_attr *attr)
+{
+       struct dpci_rsp_get_peer_attr *rsp_params;
+       struct mc_command cmd = { 0 };
+       int err;
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPCI_CMDID_GET_PEER_ATTR,
+                                         cmd_flags,
+                                         token);
+
+       /* send command to mc*/
+       err = mc_send_command(mc_io, &cmd);
+       if (err)
+               return err;
+
+       /* retrieve response parameters */
+       rsp_params = (struct dpci_rsp_get_peer_attr *)cmd.params;
+       attr->peer_id = le32_to_cpu(rsp_params->id);
+       attr->num_of_priorities = rsp_params->num_of_priorities;
+
+       return 0;
+}
+
+/**
+ * dpci_get_link_state() - Retrieve the DPCI link state.
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPCI object
+ * @up:                Returned link state; returns '1' if link is up, '0' otherwise
+ *
+ * DPCI can be connected to another DPCI, together they
+ * create a 'link'. In order to use the DPCI Tx and Rx queues,
+ * both objects must be enabled.
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
+int dpci_get_link_state(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
+                       uint16_t token,
+                       int *up)
+{
+       struct dpci_rsp_get_link_state *rsp_params;
+       struct mc_command cmd = { 0 };
+       int err;
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPCI_CMDID_GET_LINK_STATE,
+                                         cmd_flags,
+                                         token);
+
+       /* send command to mc*/
+       err = mc_send_command(mc_io, &cmd);
+       if (err)
+               return err;
+
+       /* retrieve response parameters */
+       rsp_params = (struct dpci_rsp_get_link_state *)cmd.params;
+       *up = dpci_get_field(rsp_params->up, UP);
+
+       return 0;
+}
+
+/**
+ * dpci_set_rx_queue() - Set Rx queue 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 DPCI object
+ * @priority:  Select the queue relative to number of
+ *                     priorities configured at DPCI creation; use
+ *                     DPCI_ALL_QUEUES to configure all Rx queues
+ *                     identically.
+ * @cfg:       Rx queue configuration
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
                      uint32_t cmd_flags,
                      uint16_t token,
@@ -314,6 +411,9 @@ int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
        dpci_set_field(cmd_params->dest_type,
                       DEST_TYPE,
                       cfg->dest_cfg.dest_type);
+       dpci_set_field(cmd_params->dest_type,
+                      ORDER_PRESERVATION,
+                      cfg->order_preservation_en);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
@@ -438,3 +538,100 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
 
        return 0;
 }
+
+/**
+ * dpci_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 DPCI 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 dpci_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 dpci_cmd_set_opr *cmd_params;
+       struct mc_command cmd = { 0 };
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPCI_CMDID_SET_OPR,
+                                         cmd_flags,
+                                         token);
+       cmd_params = (struct dpci_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);
+}
+
+/**
+ * dpci_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 DPCI object
+ * @index:     The queue index
+ * @cfg:       Returned OPR configuration
+ * @qry:       Returned OPR query
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
+int dpci_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 dpci_rsp_get_opr *rsp_params;
+       struct dpci_cmd_get_opr *cmd_params;
+       struct mc_command cmd = { 0 };
+       int err;
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPCI_CMDID_GET_OPR,
+                                         cmd_flags,
+                                         token);
+       cmd_params = (struct dpci_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 dpci_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 = dpci_get_field(rsp_params->flags, RIP);
+       qry->enable = dpci_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 = dpci_get_field(rsp_params->tseq_nlis, TSEQ_NLIS);
+       qry->ea_hseq = le16_to_cpu(rsp_params->ea_hseq);
+       qry->hseq_nlis = dpci_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;
+}
index 3f6e04b..92bd265 100644 (file)
@@ -295,6 +295,36 @@ int dpcon_get_attributes(struct fsl_mc_io *mc_io,
        return 0;
 }
 
+/**
+ * dpcon_set_notification() - Set DPCON notification destination
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPCON object
+ * @cfg:       Notification parameters
+ *
+ * Return:     '0' on Success; Error code otherwise
+ */
+int dpcon_set_notification(struct fsl_mc_io *mc_io,
+                          uint32_t cmd_flags,
+                          uint16_t token,
+                          struct dpcon_notification_cfg *cfg)
+{
+       struct dpcon_cmd_set_notification *dpcon_cmd;
+       struct mc_command cmd = { 0 };
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPCON_CMDID_SET_NOTIFICATION,
+                                         cmd_flags,
+                                         token);
+       dpcon_cmd = (struct dpcon_cmd_set_notification *)cmd.params;
+       dpcon_cmd->dpio_id = cpu_to_le32(cfg->dpio_id);
+       dpcon_cmd->priority = cfg->priority;
+       dpcon_cmd->user_ctx = cpu_to_le64(cfg->user_ctx);
+
+       /* send command to mc*/
+       return mc_send_command(mc_io, &cmd);
+}
+
 /**
  * dpcon_get_api_version - Get Data Path Concentrator API version
  * @mc_io:     Pointer to MC portal's DPCON object
index 528889d..dcb9d51 100644 (file)
@@ -113,6 +113,7 @@ int dpdmai_create(struct fsl_mc_io *mc_io,
                                          cmd_flags,
                                          dprc_token);
        cmd_params = (struct dpdmai_cmd_create *)cmd.params;
+       cmd_params->num_queues = cfg->num_queues;
        cmd_params->priorities[0] = cfg->priorities[0];
        cmd_params->priorities[1] = cfg->priorities[1];
 
@@ -297,6 +298,7 @@ int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
        rsp_params = (struct dpdmai_rsp_get_attr *)cmd.params;
        attr->id = le32_to_cpu(rsp_params->id);
        attr->num_of_priorities = rsp_params->num_of_priorities;
+       attr->num_of_queues = rsp_params->num_of_queues;
 
        return 0;
 }
@@ -306,6 +308,8 @@ int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
  * @mc_io:     Pointer to MC portal's I/O object
  * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPDMAI object
+ * @queue_idx: Rx queue index. Accepted values are form 0 to num_queues
+ *             parameter provided in dpdmai_create
  * @priority:  Select the queue relative to number of
  *             priorities configured at DPDMAI creation; use
  *             DPDMAI_ALL_QUEUES to configure all Rx queues
@@ -317,6 +321,7 @@ int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
+                       uint8_t queue_idx,
                        uint8_t priority,
                        const struct dpdmai_rx_queue_cfg *cfg)
 {
@@ -331,6 +336,7 @@ int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
        cmd_params->dest_id = cpu_to_le32(cfg->dest_cfg.dest_id);
        cmd_params->dest_priority = cfg->dest_cfg.priority;
        cmd_params->priority = priority;
+       cmd_params->queue_idx = queue_idx;
        cmd_params->user_ctx = cpu_to_le64(cfg->user_ctx);
        cmd_params->options = cpu_to_le32(cfg->options);
        dpdmai_set_field(cmd_params->dest_type,
@@ -346,6 +352,8 @@ int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
  * @mc_io:     Pointer to MC portal's I/O object
  * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPDMAI object
+ * @queue_idx: Rx queue index. Accepted values are form 0 to num_queues
+ *             parameter provided in dpdmai_create
  * @priority:  Select the queue relative to number of
  *             priorities configured at DPDMAI creation
  * @attr:      Returned Rx queue attributes
@@ -355,6 +363,7 @@ int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
+                       uint8_t queue_idx,
                        uint8_t priority,
                        struct dpdmai_rx_queue_attr *attr)
 {
@@ -369,6 +378,7 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
                                          token);
        cmd_params = (struct dpdmai_cmd_get_queue *)cmd.params;
        cmd_params->priority = priority;
+       cmd_params->queue_idx = queue_idx;
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -392,6 +402,8 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
  * @mc_io:     Pointer to MC portal's I/O object
  * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPDMAI object
+ * @queue_idx: Tx queue index. Accepted values are form 0 to num_queues
+ *             parameter provided in dpdmai_create
  * @priority:  Select the queue relative to number of
  *             priorities configured at DPDMAI creation
  * @attr:      Returned Tx queue attributes
@@ -401,6 +413,7 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
+                       uint8_t queue_idx,
                        uint8_t priority,
                        struct dpdmai_tx_queue_attr *attr)
 {
@@ -415,6 +428,7 @@ int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
                                          token);
        cmd_params = (struct dpdmai_cmd_get_queue *)cmd.params;
        cmd_params->priority = priority;
+       cmd_params->queue_idx = queue_idx;
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
index 966277c..a3382ed 100644 (file)
@@ -268,6 +268,15 @@ int dpio_reset(struct fsl_mc_io *mc_io,
        return mc_send_command(mc_io, &cmd);
 }
 
+/**
+ * dpio_get_attributes() - Retrieve DPIO attributes
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPIO object
+ * @attr:      Returned object's attributes
+ *
+ * Return:     '0' on Success; Error code otherwise
+ */
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
index 1118362..9d405b4 100644 (file)
@@ -82,6 +82,7 @@ int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 /**
  * BPSCN write will attempt to allocate into a cache (coherent write)
  */
+#define DPBP_NOTIF_OPT_COHERENT_WRITE  0x00000001
 int dpbp_get_api_version(struct fsl_mc_io *mc_io,
                         uint32_t cmd_flags,
                         uint16_t *major_ver,
index 18402ce..55c9fc9 100644 (file)
@@ -9,13 +9,15 @@
 
 /* DPBP Version */
 #define DPBP_VER_MAJOR                         3
-#define DPBP_VER_MINOR                         3
+#define DPBP_VER_MINOR                         4
 
 /* Command versioning */
 #define DPBP_CMD_BASE_VERSION                  1
+#define DPBP_CMD_VERSION_2                     2
 #define DPBP_CMD_ID_OFFSET                     4
 
 #define DPBP_CMD(id)   ((id << DPBP_CMD_ID_OFFSET) | DPBP_CMD_BASE_VERSION)
+#define DPBP_CMD_V2(id)        ((id << DPBP_CMD_ID_OFFSET) | DPBP_CMD_VERSION_2)
 
 /* Command IDs */
 #define DPBP_CMDID_CLOSE               DPBP_CMD(0x800)
@@ -37,8 +39,8 @@
 #define DPBP_CMDID_GET_IRQ_STATUS      DPBP_CMD(0x016)
 #define DPBP_CMDID_CLEAR_IRQ_STATUS    DPBP_CMD(0x017)
 
-#define DPBP_CMDID_SET_NOTIFICATIONS   DPBP_CMD(0x1b0)
-#define DPBP_CMDID_GET_NOTIFICATIONS   DPBP_CMD(0x1b1)
+#define DPBP_CMDID_SET_NOTIFICATIONS   DPBP_CMD_V2(0x1b0)
+#define DPBP_CMDID_GET_NOTIFICATIONS   DPBP_CMD_V2(0x1b1)
 
 #define DPBP_CMDID_GET_FREE_BUFFERS_NUM        DPBP_CMD(0x1b2)
 
@@ -68,8 +70,8 @@ struct dpbp_cmd_set_notifications {
        uint32_t depletion_exit;
        uint32_t surplus_entry;
        uint32_t surplus_exit;
-       uint16_t options;
-       uint16_t pad[3];
+       uint32_t options;
+       uint16_t pad[2];
        uint64_t message_ctx;
        uint64_t message_iova;
 };
@@ -79,8 +81,8 @@ struct dpbp_rsp_get_notifications {
        uint32_t depletion_exit;
        uint32_t surplus_entry;
        uint32_t surplus_exit;
-       uint16_t options;
-       uint16_t pad[3];
+       uint32_t options;
+       uint16_t pad[2];
        uint64_t message_ctx;
        uint64_t message_iova;
 };
index f69ed3f..9af9097 100644 (file)
@@ -6,6 +6,8 @@
 #ifndef __FSL_DPCI_H
 #define __FSL_DPCI_H
 
+#include <fsl_dpopr.h>
+
 /* Data Path Communication Interface API
  * Contains initialization APIs and runtime control APIs for DPCI
  */
@@ -17,7 +19,7 @@ struct fsl_mc_io;
 /**
  * Maximum number of Tx/Rx priorities per DPCI object
  */
-#define DPCI_PRIO_NUM          2
+#define DPCI_PRIO_NUM          4
 
 /**
  * Indicates an invalid frame queue
@@ -106,6 +108,27 @@ int dpci_get_attributes(struct fsl_mc_io *mc_io,
                        uint16_t token,
                        struct dpci_attr *attr);
 
+/**
+ * struct dpci_peer_attr - Structure representing the peer DPCI attributes
+ * @peer_id:           DPCI peer id; if no peer is connected returns (-1)
+ * @num_of_priorities: The pper's number of receive priorities; determines the
+ *                     number of transmit priorities for the local DPCI object
+ */
+struct dpci_peer_attr {
+       int peer_id;
+       uint8_t num_of_priorities;
+};
+
+int dpci_get_peer_attributes(struct fsl_mc_io *mc_io,
+                            uint32_t cmd_flags,
+                            uint16_t token,
+                            struct dpci_peer_attr *attr);
+
+int dpci_get_link_state(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
+                       uint16_t token,
+                       int *up);
+
 /**
  * enum dpci_dest - DPCI destination types
  * @DPCI_DEST_NONE:    Unassigned destination; The queue is set in parked mode
@@ -153,6 +176,11 @@ struct dpci_dest_cfg {
  */
 #define DPCI_QUEUE_OPT_DEST            0x00000002
 
+/**
+ * Set the queue to hold active mode.
+ */
+#define DPCI_QUEUE_OPT_HOLD_ACTIVE     0x00000004
+
 /**
  * struct dpci_rx_queue_cfg - Structure representing RX queue configuration
  * @options:   Flags representing the suggested modifications to the queue;
@@ -163,11 +191,14 @@ struct dpci_dest_cfg {
  *             'options'
  * @dest_cfg:  Queue destination parameters;
  *             valid only if 'DPCI_QUEUE_OPT_DEST' is contained in 'options'
+ * @order_preservation_en: order preservation configuration for the rx queue
+ * valid only if 'DPCI_QUEUE_OPT_HOLD_ACTIVE' is contained in 'options'
  */
 struct dpci_rx_queue_cfg {
        uint32_t options;
        uint64_t user_ctx;
        struct dpci_dest_cfg dest_cfg;
+       int order_preservation_en;
 };
 
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
@@ -217,4 +248,18 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
                         uint16_t *major_ver,
                         uint16_t *minor_ver);
 
+int dpci_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 dpci_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);
+
 #endif /* __FSL_DPCI_H */
index 634248a..92b85a8 100644 (file)
@@ -8,7 +8,7 @@
 
 /* DPCI Version */
 #define DPCI_VER_MAJOR                 3
-#define DPCI_VER_MINOR                 3
+#define DPCI_VER_MINOR                 4
 
 #define DPCI_CMD_BASE_VERSION          1
 #define DPCI_CMD_BASE_VERSION_V2       2
@@ -35,6 +35,8 @@
 #define DPCI_CMDID_GET_PEER_ATTR       DPCI_CMD_V1(0x0e2)
 #define DPCI_CMDID_GET_RX_QUEUE                DPCI_CMD_V1(0x0e3)
 #define DPCI_CMDID_GET_TX_QUEUE                DPCI_CMD_V1(0x0e4)
+#define DPCI_CMDID_SET_OPR             DPCI_CMD_V1(0x0e5)
+#define DPCI_CMDID_GET_OPR             DPCI_CMD_V1(0x0e6)
 
 /* Macros for accessing command fields smaller than 1byte */
 #define DPCI_MASK(field)        \
@@ -90,6 +92,8 @@ struct dpci_rsp_get_link_state {
 
 #define DPCI_DEST_TYPE_SHIFT   0
 #define DPCI_DEST_TYPE_SIZE    4
+#define DPCI_ORDER_PRESERVATION_SHIFT  4
+#define DPCI_ORDER_PRESERVATION_SIZE   1
 
 struct dpci_cmd_set_rx_queue {
        uint32_t dest_id;
@@ -128,5 +132,61 @@ struct dpci_rsp_get_api_version {
        uint16_t minor;
 };
 
+struct dpci_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 dpci_cmd_get_opr {
+       uint16_t pad;
+       uint8_t index;
+};
+
+#define DPCI_RIP_SHIFT         0
+#define DPCI_RIP_SIZE          1
+#define DPCI_OPR_ENABLE_SHIFT  1
+#define DPCI_OPR_ENABLE_SIZE   1
+#define DPCI_TSEQ_NLIS_SHIFT   0
+#define DPCI_TSEQ_NLIS_SIZE    1
+#define DPCI_HSEQ_NLIS_SHIFT   0
+#define DPCI_HSEQ_NLIS_SIZE    1
+
+struct dpci_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;
+};
 #pragma pack(pop)
 #endif /* _FSL_DPCI_CMD_H */
index 36dd5f3..fc0430d 100644 (file)
@@ -81,6 +81,25 @@ int dpcon_get_attributes(struct fsl_mc_io *mc_io,
                         uint16_t token,
                         struct dpcon_attr *attr);
 
+/**
+ * struct dpcon_notification_cfg - Structure representing notification params
+ * @dpio_id:   DPIO object ID; must be configured with a notification channel;
+ *             to disable notifications set it to 'DPCON_INVALID_DPIO_ID';
+ * @priority:  Priority selection within the DPIO channel; valid values
+ *             are 0-7, depending on the number of priorities in that channel
+ * @user_ctx:  User context value provided with each CDAN message
+ */
+struct dpcon_notification_cfg {
+       int dpio_id;
+       uint8_t priority;
+       uint64_t user_ctx;
+};
+
+int dpcon_set_notification(struct fsl_mc_io *mc_io,
+                          uint32_t cmd_flags,
+                          uint16_t token,
+                          struct dpcon_notification_cfg *cfg);
+
 int dpcon_get_api_version(struct fsl_mc_io *mc_io,
                          uint32_t cmd_flags,
                          uint16_t *major_ver,
index 03e46ec..40469cc 100644 (file)
@@ -39,6 +39,7 @@ int dpdmai_close(struct fsl_mc_io *mc_io,
  *     should be configured with 0
  */
 struct dpdmai_cfg {
+       uint8_t num_queues;
        uint8_t priorities[DPDMAI_PRIO_NUM];
 };
 
@@ -78,6 +79,7 @@ int dpdmai_reset(struct fsl_mc_io *mc_io,
 struct dpdmai_attr {
        int id;
        uint8_t num_of_priorities;
+       uint8_t num_of_queues;
 };
 
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
@@ -149,6 +151,7 @@ struct dpdmai_rx_queue_cfg {
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
+                       uint8_t queue_idx,
                        uint8_t priority,
                        const struct dpdmai_rx_queue_cfg *cfg);
 
@@ -168,6 +171,7 @@ struct dpdmai_rx_queue_attr {
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
+                       uint8_t queue_idx,
                        uint8_t priority,
                        struct dpdmai_rx_queue_attr *attr);
 
@@ -183,6 +187,7 @@ struct dpdmai_tx_queue_attr {
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
                        uint32_t cmd_flags,
                        uint16_t token,
+                       uint8_t queue_idx,
                        uint8_t priority,
                        struct dpdmai_tx_queue_attr *attr);
 
index 618e19e..7e122de 100644 (file)
@@ -7,30 +7,32 @@
 
 /* DPDMAI Version */
 #define DPDMAI_VER_MAJOR               3
-#define DPDMAI_VER_MINOR               2
+#define DPDMAI_VER_MINOR               3
 
 /* Command versioning */
 #define DPDMAI_CMD_BASE_VERSION                1
+#define DPDMAI_CMD_VERSION_2           2
 #define DPDMAI_CMD_ID_OFFSET           4
 
 #define DPDMAI_CMD(id) ((id << DPDMAI_CMD_ID_OFFSET) | DPDMAI_CMD_BASE_VERSION)
+#define DPDMAI_CMD_V2(id) ((id << DPDMAI_CMD_ID_OFFSET) | DPDMAI_CMD_VERSION_2)
 
 /* Command IDs */
 #define DPDMAI_CMDID_CLOSE             DPDMAI_CMD(0x800)
 #define DPDMAI_CMDID_OPEN              DPDMAI_CMD(0x80E)
-#define DPDMAI_CMDID_CREATE            DPDMAI_CMD(0x90E)
+#define DPDMAI_CMDID_CREATE            DPDMAI_CMD_V2(0x90E)
 #define DPDMAI_CMDID_DESTROY           DPDMAI_CMD(0x98E)
 #define DPDMAI_CMDID_GET_API_VERSION   DPDMAI_CMD(0xa0E)
 
 #define DPDMAI_CMDID_ENABLE            DPDMAI_CMD(0x002)
 #define DPDMAI_CMDID_DISABLE           DPDMAI_CMD(0x003)
-#define DPDMAI_CMDID_GET_ATTR          DPDMAI_CMD(0x004)
+#define DPDMAI_CMDID_GET_ATTR          DPDMAI_CMD_V2(0x004)
 #define DPDMAI_CMDID_RESET             DPDMAI_CMD(0x005)
 #define DPDMAI_CMDID_IS_ENABLED                DPDMAI_CMD(0x006)
 
-#define DPDMAI_CMDID_SET_RX_QUEUE      DPDMAI_CMD(0x1A0)
-#define DPDMAI_CMDID_GET_RX_QUEUE      DPDMAI_CMD(0x1A1)
-#define DPDMAI_CMDID_GET_TX_QUEUE      DPDMAI_CMD(0x1A2)
+#define DPDMAI_CMDID_SET_RX_QUEUE      DPDMAI_CMD_V2(0x1A0)
+#define DPDMAI_CMDID_GET_RX_QUEUE      DPDMAI_CMD_V2(0x1A1)
+#define DPDMAI_CMDID_GET_TX_QUEUE      DPDMAI_CMD_V2(0x1A2)
 
 /* Macros for accessing command fields smaller than 1byte */
 #define DPDMAI_MASK(field)        \
@@ -47,7 +49,7 @@ struct dpdmai_cmd_open {
 };
 
 struct dpdmai_cmd_create {
-       uint8_t pad;
+       uint8_t num_queues;
        uint8_t priorities[2];
 };
 
@@ -66,6 +68,7 @@ struct dpdmai_rsp_is_enabled {
 struct dpdmai_rsp_get_attr {
        uint32_t id;
        uint8_t num_of_priorities;
+       uint8_t num_of_queues;
 };
 
 #define DPDMAI_DEST_TYPE_SHIFT 0
@@ -77,7 +80,7 @@ struct dpdmai_cmd_set_rx_queue {
        uint8_t priority;
        /* from LSB: dest_type:4 */
        uint8_t dest_type;
-       uint8_t pad;
+       uint8_t queue_idx;
        uint64_t user_ctx;
        uint32_t options;
 };
@@ -85,6 +88,7 @@ struct dpdmai_cmd_set_rx_queue {
 struct dpdmai_cmd_get_queue {
        uint8_t pad[5];
        uint8_t priority;
+       uint8_t queue_idx;
 };
 
 struct dpdmai_rsp_get_rx_queue {
index afaf9b7..8559bef 100644 (file)
@@ -18,7 +18,7 @@ struct fsl_mc_io;
  * Management Complex firmware version information
  */
 #define MC_VER_MAJOR 10
-#define MC_VER_MINOR 3
+#define MC_VER_MINOR 10
 
 /**
  * struct mc_version
diff --git a/drivers/bus/fslmc/mc/fsl_dpopr.h b/drivers/bus/fslmc/mc/fsl_dpopr.h
new file mode 100644 (file)
index 0000000..fd727e0
--- /dev/null
@@ -0,0 +1,85 @@
+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
+ *
+ * Copyright 2013-2015 Freescale Semiconductor Inc.
+ * Copyright 2018 NXP
+ *
+ */
+#ifndef __FSL_DPOPR_H_
+#define __FSL_DPOPR_H_
+
+/** @addtogroup dpopr Data Path Order Restoration API
+ * Contains initialization APIs and runtime APIs for the Order Restoration
+ * @{
+ */
+
+/** Order Restoration properties */
+
+/**
+ * Create a new Order Point Record option
+ */
+#define OPR_OPT_CREATE 0x1
+/**
+ * Retire an existing Order Point Record option
+ */
+#define OPR_OPT_RETIRE 0x2
+
+/**
+ * struct opr_cfg - Structure representing OPR configuration
+ * @oprrws: Order point record (OPR) restoration window size (0 to 5)
+ *                     0 - Window size is 32 frames.
+ *                     1 - Window size is 64 frames.
+ *                     2 - Window size is 128 frames.
+ *                     3 - Window size is 256 frames.
+ *                     4 - Window size is 512 frames.
+ *                     5 - Window size is 1024 frames.
+ *@oa: OPR auto advance NESN window size (0 disabled, 1 enabled)
+ *@olws: OPR acceptable late arrival window size (0 to 3)
+ *                     0 - Disabled. Late arrivals are always rejected.
+ *                     1 - Window size is 32 frames.
+ *                     2 - Window size is the same as the OPR restoration
+ *                     window size configured in the OPRRWS field.
+ *                     3 - Window size is 8192 frames.
+ *                     Late arrivals are always accepted.
+ *@oeane: Order restoration list (ORL) resource exhaustion
+ *                     advance NESN enable (0 disabled, 1 enabled)
+ *@oloe: OPR loose ordering enable (0 disabled, 1 enabled)
+ */
+struct opr_cfg {
+       uint8_t oprrws;
+       uint8_t oa;
+       uint8_t olws;
+       uint8_t oeane;
+       uint8_t oloe;
+};
+
+/**
+ * struct opr_qry - Structure representing OPR configuration
+ * @enable: Enabled state
+ * @rip: Retirement In Progress
+ * @ndsn: Next dispensed sequence number
+ * @nesn: Next expected sequence number
+ * @ea_hseq: Early arrival head sequence number
+ * @hseq_nlis: HSEQ not last in sequence
+ * @ea_tseq: Early arrival tail sequence number
+ * @tseq_nlis: TSEQ not last in sequence
+ * @ea_tptr: Early arrival tail pointer
+ * @ea_hptr: Early arrival head pointer
+ * @opr_id: Order Point Record ID
+ * @opr_vid: Order Point Record Virtual ID
+ */
+struct opr_qry {
+       char enable;
+       char rip;
+       uint16_t ndsn;
+       uint16_t nesn;
+       uint16_t ea_hseq;
+       char hseq_nlis;
+       uint16_t ea_tseq;
+       char tseq_nlis;
+       uint16_t ea_tptr;
+       uint16_t ea_hptr;
+       uint16_t opr_id;
+       uint16_t opr_vid;
+};
+
+#endif /* __FSL_DPOPR_H_ */
index b4a8817..8717373 100644 (file)
@@ -117,3 +117,13 @@ DPDK_18.05 {
        rte_dpaa2_memsegs;
 
 } DPDK_18.02;
+
+DPDK_18.11 {
+       global:
+
+       dpci_get_link_state;
+       dpci_get_opr;
+       dpci_get_peer_attributes;
+       dpci_set_opr;
+
+} DPDK_18.05;
index 1f951a1..8ab83c0 100644 (file)
@@ -41,7 +41,7 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal
 EXPORT_MAP := rte_pmd_dpaa2_sec_version.map
 
 # library version
-LIBABIVER := 1
+LIBABIVER := 2
 
 # library source files
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC) += dpaa2_sec_dpseci.c
index 01afc58..8fa4827 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
+version = 2
+
 if host_machine.system() != 'linux'
         build = false
 endif
index 7a71161..bf514f3 100644 (file)
@@ -28,7 +28,7 @@ CFLAGS += -I$(RTE_SDK)/drivers/net/dpaa2/mc
 # versioning export map
 EXPORT_MAP := rte_pmd_dpaa2_event_version.map
 
-LIBABIVER := 1
+LIBABIVER := 2
 
 # depends on fslmc bus which uses experimental API
 CFLAGS += -DALLOW_EXPERIMENTAL_API
index de7a461..c46b39e 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
+version = 2
+
 if host_machine.system() != 'linux'
        build = false
 endif
index 0fc69c3..96c0f2b 100644 (file)
@@ -19,7 +19,7 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal
 EXPORT_MAP := rte_mempool_dpaa2_version.map
 
 # Lbrary version
-LIBABIVER := 1
+LIBABIVER := 2
 
 # depends on fslmc bus which uses experimental API
 CFLAGS += -DALLOW_EXPERIMENTAL_API
index 90bab60..6b6ead6 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
+version = 2
+
 if host_machine.system() != 'linux'
         build = false
 endif
index 52649a9..ca5f7a3 100644 (file)
@@ -25,7 +25,7 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal
 EXPORT_MAP := rte_pmd_dpaa2_version.map
 
 # library version
-LIBABIVER := 1
+LIBABIVER := 2
 
 # depends on fslmc bus which uses experimental API
 CFLAGS += -DALLOW_EXPERIMENTAL_API
index 213f0d7..b345952 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
+version = 2
+
 if host_machine.system() != 'linux'
         build = false
 endif
index 3c56c4b..9bd5ff2 100644 (file)
@@ -25,7 +25,7 @@ LDLIBS += -lrte_common_dpaax
 
 EXPORT_MAP := rte_pmd_dpaa2_cmdif_version.map
 
-LIBABIVER := 1
+LIBABIVER := 2
 
 #
 # all source are stored in SRCS-y
index 1d14687..37bb24a 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
+version = 2
+
 build = dpdk_conf.has('RTE_LIBRTE_DPAA2_MEMPOOL')
 deps += ['rawdev', 'mempool_dpaa2', 'bus_vdev']
 sources = files('dpaa2_cmdif.c')
index 2f79a3f..bdd99c9 100644 (file)
@@ -26,7 +26,7 @@ LDLIBS += -lrte_common_dpaax
 
 EXPORT_MAP := rte_pmd_dpaa2_qdma_version.map
 
-LIBABIVER := 1
+LIBABIVER := 2
 
 #
 # all source are stored in SRCS-y
index 2787d30..4450333 100644 (file)
@@ -805,7 +805,7 @@ dpaa2_dpdmai_dev_uninit(struct rte_rawdev *rawdev)
                DPAA2_QDMA_ERR("dmdmai disable failed");
 
        /* Set up the DQRR storage for Rx */
-       for (i = 0; i < DPDMAI_PRIO_NUM; i++) {
+       for (i = 0; i < dpdmai_dev->num_queues; i++) {
                struct dpaa2_queue *rxq = &(dpdmai_dev->rx_queue[i]);
 
                if (rxq->q_storage) {
@@ -856,17 +856,17 @@ dpaa2_dpdmai_dev_init(struct rte_rawdev *rawdev, int dpdmai_id)
                               ret);
                goto init_err;
        }
-       dpdmai_dev->num_queues = attr.num_of_priorities;
+       dpdmai_dev->num_queues = attr.num_of_queues;
 
        /* Set up Rx Queues */
-       for (i = 0; i < attr.num_of_priorities; i++) {
+       for (i = 0; i < dpdmai_dev->num_queues; i++) {
                struct dpaa2_queue *rxq;
 
                memset(&rx_queue_cfg, 0, sizeof(struct dpdmai_rx_queue_cfg));
                ret = dpdmai_set_rx_queue(&dpdmai_dev->dpdmai,
                                          CMD_PRI_LOW,
                                          dpdmai_dev->token,
-                                         i, &rx_queue_cfg);
+                                         i, 0, &rx_queue_cfg);
                if (ret) {
                        DPAA2_QDMA_ERR("Setting Rx queue failed with err: %d",
                                       ret);
@@ -893,9 +893,9 @@ dpaa2_dpdmai_dev_init(struct rte_rawdev *rawdev, int dpdmai_id)
        }
 
        /* Get Rx and Tx queues FQID's */
-       for (i = 0; i < DPDMAI_PRIO_NUM; i++) {
+       for (i = 0; i < dpdmai_dev->num_queues; i++) {
                ret = dpdmai_get_rx_queue(&dpdmai_dev->dpdmai, CMD_PRI_LOW,
-                                         dpdmai_dev->token, i, &rx_attr);
+                                         dpdmai_dev->token, i, 0, &rx_attr);
                if (ret) {
                        DPAA2_QDMA_ERR("Reading device failed with err: %d",
                                       ret);
@@ -904,7 +904,7 @@ dpaa2_dpdmai_dev_init(struct rte_rawdev *rawdev, int dpdmai_id)
                dpdmai_dev->rx_queue[i].fqid = rx_attr.fqid;
 
                ret = dpdmai_get_tx_queue(&dpdmai_dev->dpdmai, CMD_PRI_LOW,
-                                         dpdmai_dev->token, i, &tx_attr);
+                                         dpdmai_dev->token, i, 0, &tx_attr);
                if (ret) {
                        DPAA2_QDMA_ERR("Reading device failed with err: %d",
                                       ret);
index c6a0578..0cbe902 100644 (file)
@@ -11,6 +11,8 @@ struct qdma_io_meta;
 #define DPAA2_QDMA_MAX_FLE 3
 #define DPAA2_QDMA_MAX_SDD 2
 
+#define DPAA2_DPDMAI_MAX_QUEUES        8
+
 /** FLE pool size: 3 Frame list + 2 source/destination descriptor */
 #define QDMA_FLE_POOL_SIZE (sizeof(struct qdma_io_meta) + \
                sizeof(struct qbman_fle) * DPAA2_QDMA_MAX_FLE + \
@@ -142,9 +144,9 @@ struct dpaa2_dpdmai_dev {
        /** Number of queue in this DPDMAI device */
        uint8_t num_queues;
        /** RX queues */
-       struct dpaa2_queue rx_queue[DPDMAI_PRIO_NUM];
+       struct dpaa2_queue rx_queue[DPAA2_DPDMAI_MAX_QUEUES];
        /** TX queues */
-       struct dpaa2_queue tx_queue[DPDMAI_PRIO_NUM];
+       struct dpaa2_queue tx_queue[DPAA2_DPDMAI_MAX_QUEUES];
 };
 
 #endif /* __DPAA2_QDMA_H__ */
index b6a081f..2a4b69c 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2018 NXP
 
+version = 2
+
 build = dpdk_conf.has('RTE_LIBRTE_DPAA2_MEMPOOL')
 deps += ['rawdev', 'mempool_dpaa2', 'ring']
 sources = files('dpaa2_qdma.c')