From: Hemant Agrawal <hemant.agra...@nxp.com>

Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com>
---
 drivers/bus/fslmc/mc/dpdmai.c         | 14 ++++++++++++++
 drivers/bus/fslmc/mc/fsl_dpdmai.h     |  5 +++++
 drivers/bus/fslmc/mc/fsl_dpdmai_cmd.h | 21 +++++++++++++--------
 drivers/raw/dpaa2_qdma/dpaa2_qdma.c   | 14 +++++++-------
 drivers/raw/dpaa2_qdma/dpaa2_qdma.h   |  6 ++++--
 5 files changed, 43 insertions(+), 17 deletions(-)

diff --git a/drivers/bus/fslmc/mc/dpdmai.c b/drivers/bus/fslmc/mc/dpdmai.c
index 528889df3..dcb9d516a 100644
--- a/drivers/bus/fslmc/mc/dpdmai.c
+++ b/drivers/bus/fslmc/mc/dpdmai.c
@@ -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);
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h 
b/drivers/bus/fslmc/mc/fsl_dpdmai.h
index 03e46ec14..40469cc13 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
@@ -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);
 
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai_cmd.h 
b/drivers/bus/fslmc/mc/fsl_dpdmai_cmd.h
index 618e19eae..6c3602c1c 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai_cmd.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai_cmd.h
@@ -7,30 +7,33 @@
 
 /* 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 +50,7 @@ struct dpdmai_cmd_open {
 };
 
 struct dpdmai_cmd_create {
-       uint8_t pad;
+       uint8_t num_queues;
        uint8_t priorities[2];
 };
 
@@ -66,6 +69,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 +81,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 +89,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 {
diff --git a/drivers/raw/dpaa2_qdma/dpaa2_qdma.c 
b/drivers/raw/dpaa2_qdma/dpaa2_qdma.c
index 2787d3028..44503331e 100644
--- a/drivers/raw/dpaa2_qdma/dpaa2_qdma.c
+++ b/drivers/raw/dpaa2_qdma/dpaa2_qdma.c
@@ -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);
diff --git a/drivers/raw/dpaa2_qdma/dpaa2_qdma.h 
b/drivers/raw/dpaa2_qdma/dpaa2_qdma.h
index c6a057806..0cbe90255 100644
--- a/drivers/raw/dpaa2_qdma/dpaa2_qdma.h
+++ b/drivers/raw/dpaa2_qdma/dpaa2_qdma.h
@@ -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__ */
-- 
2.17.1

Reply via email to