LKML Archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x
@ 2024-03-20 19:39 Frank Li
  2024-03-20 19:39 ` [PATCH 1/4] dmaengine: fsl-dpaa2-qdma: clean up unused macro Frank Li
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Frank Li @ 2024-03-20 19:39 UTC (permalink / raw
  To: Vinod Koul; +Cc: dmaengine, linux-kernel, imx, Frank Li

First do some clear up. Remove unused macro and function
Then update DPMAI API to support MC firmware 10.1x.x

To: Vinod Koul <vkoul@kernel.org>
Cc: dmaengine@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: imx@lists.linux.dev

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Frank Li (4):
      dmaengine: fsl-dpaa2-qdma: clean up unused macro
      dmaengine: fsl-dpaa2-qdma: Remove unused function dpdmai_create()
      dmaengine: fsl-dpaa2-qdma: Add dpdmai_cmd_open
      dmaengine: fsl-dpaa2-qdma: Update DPDMAI interfaces to version 3

 drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c |  14 ++--
 drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h |   5 +-
 drivers/dma/fsl-dpaa2-qdma/dpdmai.c     | 113 +++++++++++++-------------------
 drivers/dma/fsl-dpaa2-qdma/dpdmai.h     |  46 ++++++-------
 4 files changed, 77 insertions(+), 101 deletions(-)
---
base-commit: f4385d26e50bac22f8dba08727e9a32a0ab6b9ea
change-id: 20240320-dpaa2-0d861c2756de

Best regards,
---
Frank Li <Frank.Li@nxp.com>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/4] dmaengine: fsl-dpaa2-qdma: clean up unused macro
  2024-03-20 19:39 [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Frank Li
@ 2024-03-20 19:39 ` Frank Li
  2024-03-20 19:39 ` [PATCH 2/4] dmaengine: fsl-dpaa2-qdma: Remove unused function dpdmai_create() Frank Li
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Frank Li @ 2024-03-20 19:39 UTC (permalink / raw
  To: Vinod Koul; +Cc: dmaengine, linux-kernel, imx, Frank Li

Remove unused macro definition.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/dma/fsl-dpaa2-qdma/dpdmai.h | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/drivers/dma/fsl-dpaa2-qdma/dpdmai.h b/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
index b13b9bf0c003e..2749608575f0d 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
+++ b/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
@@ -26,15 +26,6 @@
 #define DPDMAI_CMDID_RESET              DPDMAI_CMDID_FORMAT(0x005)
 #define DPDMAI_CMDID_IS_ENABLED         DPDMAI_CMDID_FORMAT(0x006)
 
-#define DPDMAI_CMDID_SET_IRQ            DPDMAI_CMDID_FORMAT(0x010)
-#define DPDMAI_CMDID_GET_IRQ            DPDMAI_CMDID_FORMAT(0x011)
-#define DPDMAI_CMDID_SET_IRQ_ENABLE     DPDMAI_CMDID_FORMAT(0x012)
-#define DPDMAI_CMDID_GET_IRQ_ENABLE     DPDMAI_CMDID_FORMAT(0x013)
-#define DPDMAI_CMDID_SET_IRQ_MASK       DPDMAI_CMDID_FORMAT(0x014)
-#define DPDMAI_CMDID_GET_IRQ_MASK       DPDMAI_CMDID_FORMAT(0x015)
-#define DPDMAI_CMDID_GET_IRQ_STATUS     DPDMAI_CMDID_FORMAT(0x016)
-#define DPDMAI_CMDID_CLEAR_IRQ_STATUS	DPDMAI_CMDID_FORMAT(0x017)
-
 #define DPDMAI_CMDID_SET_RX_QUEUE	DPDMAI_CMDID_FORMAT(0x1A0)
 #define DPDMAI_CMDID_GET_RX_QUEUE       DPDMAI_CMDID_FORMAT(0x1A1)
 #define DPDMAI_CMDID_GET_TX_QUEUE       DPDMAI_CMDID_FORMAT(0x1A2)

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/4] dmaengine: fsl-dpaa2-qdma: Remove unused function dpdmai_create()
  2024-03-20 19:39 [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Frank Li
  2024-03-20 19:39 ` [PATCH 1/4] dmaengine: fsl-dpaa2-qdma: clean up unused macro Frank Li
@ 2024-03-20 19:39 ` Frank Li
  2024-03-20 19:39 ` [PATCH 3/4] dmaengine: fsl-dpaa2-qdma: Add dpdmai_cmd_open Frank Li
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Frank Li @ 2024-03-20 19:39 UTC (permalink / raw
  To: Vinod Koul; +Cc: dmaengine, linux-kernel, imx, Frank Li

Remove unused function dpdmai_create();

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/dma/fsl-dpaa2-qdma/dpdmai.c | 54 -------------------------------------
 drivers/dma/fsl-dpaa2-qdma/dpdmai.h |  2 --
 2 files changed, 56 deletions(-)

diff --git a/drivers/dma/fsl-dpaa2-qdma/dpdmai.c b/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
index 878662aaa1c2f..66a3953f0e3b1 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
+++ b/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
@@ -33,16 +33,6 @@ struct dpdmai_rsp_get_tx_queue {
 	__le32 fqid;
 };
 
-#define MC_CMD_OP(_cmd, _param, _offset, _width, _type, _arg) \
-	((_cmd).params[_param] |= mc_enc((_offset), (_width), _arg))
-
-/* cmd, param, offset, width, type, arg_name */
-#define DPDMAI_CMD_CREATE(cmd, cfg) \
-do { \
-	MC_CMD_OP(cmd, 0, 8,  8,  u8,  (cfg)->priorities[0]);\
-	MC_CMD_OP(cmd, 0, 16, 8,  u8,  (cfg)->priorities[1]);\
-} while (0)
-
 static inline u64 mc_enc(int lsoffset, int width, u64 val)
 {
 	return (val & MAKE_UMASK64(width)) << lsoffset;
@@ -115,50 +105,6 @@ int dpdmai_close(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token)
 }
 EXPORT_SYMBOL_GPL(dpdmai_close);
 
-/**
- * dpdmai_create() - Create the DPDMAI object
- * @mc_io:	Pointer to MC portal's I/O object
- * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
- * @cfg:	Configuration structure
- * @token:	Returned token; use in subsequent API calls
- *
- * Create the DPDMAI object, allocate required resources and
- * perform required initialization.
- *
- * The object can be created either by declaring it in the
- * DPL file, or by calling this function.
- *
- * This function returns a unique authentication token,
- * associated with the specific object ID and the specific MC
- * portal; this token must be used in all subsequent calls to
- * this specific object. For objects that are created using the
- * DPL file, call dpdmai_open() function to get an authentication
- * token first.
- *
- * Return:	'0' on Success; Error code otherwise.
- */
-int dpdmai_create(struct fsl_mc_io *mc_io, u32 cmd_flags,
-		  const struct dpdmai_cfg *cfg, u16 *token)
-{
-	struct fsl_mc_command cmd = { 0 };
-	int err;
-
-	/* prepare command */
-	cmd.header = mc_encode_cmd_header(DPDMAI_CMDID_CREATE,
-					  cmd_flags, 0);
-	DPDMAI_CMD_CREATE(cmd, cfg);
-
-	/* send command to mc*/
-	err = mc_send_command(mc_io, &cmd);
-	if (err)
-		return err;
-
-	/* retrieve response parameters */
-	*token = mc_cmd_hdr_read_token(&cmd);
-
-	return 0;
-}
-
 /**
  * dpdmai_destroy() - Destroy the DPDMAI object and release all its resources.
  * @mc_io:      Pointer to MC portal's I/O object
diff --git a/drivers/dma/fsl-dpaa2-qdma/dpdmai.h b/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
index 2749608575f0d..3f2db582509a1 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
+++ b/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
@@ -153,8 +153,6 @@ int dpdmai_open(struct fsl_mc_io *mc_io, u32 cmd_flags,
 		int dpdmai_id, u16 *token);
 int dpdmai_close(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
 int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
-int dpdmai_create(struct fsl_mc_io *mc_io, u32 cmd_flags,
-		  const struct dpdmai_cfg *cfg, u16 *token);
 int dpdmai_enable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
 int dpdmai_disable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
 int dpdmai_reset(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/4] dmaengine: fsl-dpaa2-qdma: Add dpdmai_cmd_open
  2024-03-20 19:39 [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Frank Li
  2024-03-20 19:39 ` [PATCH 1/4] dmaengine: fsl-dpaa2-qdma: clean up unused macro Frank Li
  2024-03-20 19:39 ` [PATCH 2/4] dmaengine: fsl-dpaa2-qdma: Remove unused function dpdmai_create() Frank Li
@ 2024-03-20 19:39 ` Frank Li
  2024-03-20 19:39 ` [PATCH 4/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI interfaces to version 3 Frank Li
  2024-04-07 16:39 ` (subset) [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Vinod Koul
  4 siblings, 0 replies; 7+ messages in thread
From: Frank Li @ 2024-03-20 19:39 UTC (permalink / raw
  To: Vinod Koul; +Cc: dmaengine, linux-kernel, imx, Frank Li

Introduce the structures dpdmai_cmd_open to maintain consistency within the
API calls of the driver.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/dma/fsl-dpaa2-qdma/dpdmai.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/dma/fsl-dpaa2-qdma/dpdmai.c b/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
index 66a3953f0e3b1..610f6231835a8 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
+++ b/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
@@ -33,6 +33,10 @@ struct dpdmai_rsp_get_tx_queue {
 	__le32 fqid;
 };
 
+struct dpdmai_cmd_open {
+	__le32 dpdmai_id;
+} __packed;
+
 static inline u64 mc_enc(int lsoffset, int width, u64 val)
 {
 	return (val & MAKE_UMASK64(width)) << lsoffset;
@@ -58,16 +62,16 @@ static inline u64 mc_enc(int lsoffset, int width, u64 val)
 int dpdmai_open(struct fsl_mc_io *mc_io, u32 cmd_flags,
 		int dpdmai_id, u16 *token)
 {
+	struct dpdmai_cmd_open *cmd_params;
 	struct fsl_mc_command cmd = { 0 };
-	__le64 *cmd_dpdmai_id;
 	int err;
 
 	/* prepare command */
 	cmd.header = mc_encode_cmd_header(DPDMAI_CMDID_OPEN,
 					  cmd_flags, 0);
 
-	cmd_dpdmai_id = cmd.params;
-	*cmd_dpdmai_id = cpu_to_le32(dpdmai_id);
+	cmd_params = (struct dpdmai_cmd_open *)&cmd.params;
+	cmd_params->dpdmai_id = cpu_to_le32(dpdmai_id);
 
 	/* send command to mc*/
 	err = mc_send_command(mc_io, &cmd);

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 4/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI interfaces to version 3
  2024-03-20 19:39 [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Frank Li
                   ` (2 preceding siblings ...)
  2024-03-20 19:39 ` [PATCH 3/4] dmaengine: fsl-dpaa2-qdma: Add dpdmai_cmd_open Frank Li
@ 2024-03-20 19:39 ` Frank Li
  2024-04-07 12:22   ` Vinod Koul
  2024-04-07 16:39 ` (subset) [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Vinod Koul
  4 siblings, 1 reply; 7+ messages in thread
From: Frank Li @ 2024-03-20 19:39 UTC (permalink / raw
  To: Vinod Koul; +Cc: dmaengine, linux-kernel, imx, Frank Li

Update the DPDMAI interfaces to support MC firmware up to 10.1x.x.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c | 14 ++++-----
 drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h |  5 ++--
 drivers/dma/fsl-dpaa2-qdma/dpdmai.c     | 53 ++++++++++++++++++++++++---------
 drivers/dma/fsl-dpaa2-qdma/dpdmai.h     | 35 ++++++++++++++--------
 4 files changed, 72 insertions(+), 35 deletions(-)

diff --git a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
index 5a8061a307cda..36384d0192636 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
+++ b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
@@ -362,7 +362,7 @@ static int __cold dpaa2_qdma_setup(struct fsl_mc_device *ls_dev)
 
 	for (i = 0; i < priv->num_pairs; i++) {
 		err = dpdmai_get_rx_queue(priv->mc_io, 0, ls_dev->mc_handle,
-					  i, &priv->rx_queue_attr[i]);
+					  i, 0, &priv->rx_queue_attr[i]);
 		if (err) {
 			dev_err(dev, "dpdmai_get_rx_queue() failed\n");
 			goto exit;
@@ -370,13 +370,13 @@ static int __cold dpaa2_qdma_setup(struct fsl_mc_device *ls_dev)
 		ppriv->rsp_fqid = priv->rx_queue_attr[i].fqid;
 
 		err = dpdmai_get_tx_queue(priv->mc_io, 0, ls_dev->mc_handle,
-					  i, &priv->tx_fqid[i]);
+					  i, 0, &priv->tx_queue_attr[i]);
 		if (err) {
 			dev_err(dev, "dpdmai_get_tx_queue() failed\n");
 			goto exit;
 		}
-		ppriv->req_fqid = priv->tx_fqid[i];
-		ppriv->prio = i;
+		ppriv->req_fqid = priv->tx_queue_attr[i].fqid;
+		ppriv->prio = DPAA2_QDMA_DEFAULT_PRIORITY;
 		ppriv->priv = priv;
 		ppriv++;
 	}
@@ -542,7 +542,7 @@ static int __cold dpaa2_dpdmai_bind(struct dpaa2_qdma_priv *priv)
 		rx_queue_cfg.dest_cfg.dest_id = ppriv->nctx.dpio_id;
 		rx_queue_cfg.dest_cfg.priority = ppriv->prio;
 		err = dpdmai_set_rx_queue(priv->mc_io, 0, ls_dev->mc_handle,
-					  rx_queue_cfg.dest_cfg.priority,
+					  rx_queue_cfg.dest_cfg.priority, 0,
 					  &rx_queue_cfg);
 		if (err) {
 			dev_err(dev, "dpdmai_set_rx_queue() failed\n");
@@ -642,7 +642,7 @@ static int dpaa2_dpdmai_init_channels(struct dpaa2_qdma_engine *dpaa2_qdma)
 	for (i = 0; i < dpaa2_qdma->n_chans; i++) {
 		dpaa2_chan = &dpaa2_qdma->chans[i];
 		dpaa2_chan->qdma = dpaa2_qdma;
-		dpaa2_chan->fqid = priv->tx_fqid[i % num];
+		dpaa2_chan->fqid = priv->tx_queue_attr[i % num].fqid;
 		dpaa2_chan->vchan.desc_free = dpaa2_qdma_free_desc;
 		vchan_init(&dpaa2_chan->vchan, &dpaa2_qdma->dma_dev);
 		spin_lock_init(&dpaa2_chan->queue_lock);
@@ -802,7 +802,7 @@ static void dpaa2_qdma_shutdown(struct fsl_mc_device *ls_dev)
 	dpdmai_disable(priv->mc_io, 0, ls_dev->mc_handle);
 	dpaa2_dpdmai_dpio_unbind(priv);
 	dpdmai_close(priv->mc_io, 0, ls_dev->mc_handle);
-	dpdmai_destroy(priv->mc_io, 0, ls_dev->mc_handle);
+	dpdmai_destroy(priv->mc_io, 0, priv->dpqdma_id, ls_dev->mc_handle);
 }
 
 static const struct fsl_mc_device_id dpaa2_qdma_id_table[] = {
diff --git a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
index 03e2f4e0baca8..2c80077cb7c0a 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
+++ b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
@@ -6,6 +6,7 @@
 
 #define DPAA2_QDMA_STORE_SIZE 16
 #define NUM_CH 8
+#define DPAA2_QDMA_DEFAULT_PRIORITY 0
 
 struct dpaa2_qdma_sd_d {
 	u32 rsv:32;
@@ -122,8 +123,8 @@ struct dpaa2_qdma_priv {
 	struct dpaa2_qdma_engine	*dpaa2_qdma;
 	struct dpaa2_qdma_priv_per_prio	*ppriv;
 
-	struct dpdmai_rx_queue_attr rx_queue_attr[DPDMAI_PRIO_NUM];
-	u32 tx_fqid[DPDMAI_PRIO_NUM];
+	struct dpdmai_rx_queue_attr rx_queue_attr[DPDMAI_MAX_QUEUE_NUM];
+	struct dpdmai_tx_queue_attr tx_queue_attr[DPDMAI_MAX_QUEUE_NUM];
 };
 
 struct dpaa2_qdma_priv_per_prio {
diff --git a/drivers/dma/fsl-dpaa2-qdma/dpdmai.c b/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
index 610f6231835a8..7fbe925831b8b 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
+++ b/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
@@ -1,42 +1,58 @@
 // SPDX-License-Identifier: GPL-2.0
 // Copyright 2019 NXP
 
+#include <linux/bitfield.h>
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/io.h>
 #include <linux/fsl/mc.h>
 #include "dpdmai.h"
 
+#define DEST_TYPE_MASK 0xF
+
 struct dpdmai_rsp_get_attributes {
 	__le32 id;
 	u8 num_of_priorities;
-	u8 pad0[3];
+	u8 num_of_queues;
+	u8 pad0[2];
 	__le16 major;
 	__le16 minor;
 };
 
 struct dpdmai_cmd_queue {
 	__le32 dest_id;
-	u8 priority;
-	u8 queue;
+	u8 dest_priority;
+	union {
+		u8 queue;
+		u8 pri;
+	};
 	u8 dest_type;
-	u8 pad;
+	u8 queue_idx;
 	__le64 user_ctx;
 	union {
 		__le32 options;
 		__le32 fqid;
 	};
-};
+} __packed;
 
 struct dpdmai_rsp_get_tx_queue {
 	__le64 pad;
 	__le32 fqid;
 };
 
+struct dpdmai_rsp_is_enabled {
+	/* only the LSB bit */
+	u8 en;
+} __packed;
+
 struct dpdmai_cmd_open {
 	__le32 dpdmai_id;
 } __packed;
 
+struct dpdmai_cmd_destroy {
+	__le32 dpdmai_id;
+} __packed;
+
 static inline u64 mc_enc(int lsoffset, int width, u64 val)
 {
 	return (val & MAKE_UMASK64(width)) << lsoffset;
@@ -113,18 +129,23 @@ EXPORT_SYMBOL_GPL(dpdmai_close);
  * dpdmai_destroy() - Destroy the DPDMAI object and release all its resources.
  * @mc_io:      Pointer to MC portal's I/O object
  * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
+ * @dpdmai_id:	The object id; it must be a valid id within the container that created this object;
  * @token:      Token of DPDMAI object
  *
  * Return:      '0' on Success; error code otherwise.
  */
-int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token)
+int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u32 dpdmai_id, u16 token)
 {
+	struct dpdmai_cmd_destroy *cmd_params;
 	struct fsl_mc_command cmd = { 0 };
 
 	/* prepare command */
 	cmd.header = mc_encode_cmd_header(DPDMAI_CMDID_DESTROY,
 					  cmd_flags, token);
 
+	cmd_params = (struct dpdmai_cmd_destroy *)&cmd.params;
+	cmd_params->dpdmai_id = cpu_to_le32(dpdmai_id);
+
 	/* send command to mc*/
 	return mc_send_command(mc_io, &cmd);
 }
@@ -224,6 +245,7 @@ int dpdmai_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags,
 	attr->version.major = le16_to_cpu(rsp_params->major);
 	attr->version.minor = le16_to_cpu(rsp_params->minor);
 	attr->num_of_priorities = rsp_params->num_of_priorities;
+	attr->num_of_queues = rsp_params->num_of_queues;
 
 	return 0;
 }
@@ -240,7 +262,7 @@ EXPORT_SYMBOL_GPL(dpdmai_get_attributes);
  *
  * Return:	'0' on Success; Error code otherwise.
  */
-int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
+int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u8 queue_idx,
 			u8 priority, const struct dpdmai_rx_queue_cfg *cfg)
 {
 	struct dpdmai_cmd_queue *cmd_params;
@@ -252,11 +274,12 @@ int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
 
 	cmd_params = (struct dpdmai_cmd_queue *)cmd.params;
 	cmd_params->dest_id = cpu_to_le32(cfg->dest_cfg.dest_id);
-	cmd_params->priority = cfg->dest_cfg.priority;
-	cmd_params->queue = priority;
+	cmd_params->dest_priority = cfg->dest_cfg.priority;
+	cmd_params->pri = priority;
 	cmd_params->dest_type = cfg->dest_cfg.dest_type;
 	cmd_params->user_ctx = cpu_to_le64(cfg->user_ctx);
 	cmd_params->options = cpu_to_le32(cfg->options);
+	cmd_params->queue_idx = queue_idx;
 
 	/* send command to mc*/
 	return mc_send_command(mc_io, &cmd);
@@ -274,7 +297,7 @@ EXPORT_SYMBOL_GPL(dpdmai_set_rx_queue);
  *
  * Return:	'0' on Success; Error code otherwise.
  */
-int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
+int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u8 queue_idx,
 			u8 priority, struct dpdmai_rx_queue_attr *attr)
 {
 	struct dpdmai_cmd_queue *cmd_params;
@@ -287,6 +310,7 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
 
 	cmd_params = (struct dpdmai_cmd_queue *)cmd.params;
 	cmd_params->queue = priority;
+	cmd_params->queue_idx = queue_idx;
 
 	/* send command to mc*/
 	err = mc_send_command(mc_io, &cmd);
@@ -295,8 +319,8 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
 
 	/* retrieve response parameters */
 	attr->dest_cfg.dest_id = le32_to_cpu(cmd_params->dest_id);
-	attr->dest_cfg.priority = cmd_params->priority;
-	attr->dest_cfg.dest_type = cmd_params->dest_type;
+	attr->dest_cfg.priority = cmd_params->dest_priority;
+	attr->dest_cfg.dest_type = FIELD_GET(DEST_TYPE_MASK, cmd_params->dest_type);
 	attr->user_ctx = le64_to_cpu(cmd_params->user_ctx);
 	attr->fqid = le32_to_cpu(cmd_params->fqid);
 
@@ -316,7 +340,7 @@ EXPORT_SYMBOL_GPL(dpdmai_get_rx_queue);
  * Return:	'0' on Success; Error code otherwise.
  */
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
-			u16 token, u8 priority, u32 *fqid)
+			u16 token, u8 queue_idx, u8 priority, struct dpdmai_tx_queue_attr *attr)
 {
 	struct dpdmai_rsp_get_tx_queue *rsp_params;
 	struct dpdmai_cmd_queue *cmd_params;
@@ -329,6 +353,7 @@ int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
 
 	cmd_params = (struct dpdmai_cmd_queue *)cmd.params;
 	cmd_params->queue = priority;
+	cmd_params->queue_idx = queue_idx;
 
 	/* send command to mc*/
 	err = mc_send_command(mc_io, &cmd);
@@ -338,7 +363,7 @@ int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
 	/* retrieve response parameters */
 
 	rsp_params = (struct dpdmai_rsp_get_tx_queue *)cmd.params;
-	*fqid = le32_to_cpu(rsp_params->fqid);
+	attr->fqid = le32_to_cpu(rsp_params->fqid);
 
 	return 0;
 }
diff --git a/drivers/dma/fsl-dpaa2-qdma/dpdmai.h b/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
index 3f2db582509a1..1efca2a305334 100644
--- a/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
+++ b/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
@@ -5,14 +5,19 @@
 #define __FSL_DPDMAI_H
 
 /* DPDMAI Version */
-#define DPDMAI_VER_MAJOR	2
-#define DPDMAI_VER_MINOR	2
+#define DPDMAI_VER_MAJOR	3
+#define DPDMAI_VER_MINOR	3
 
-#define DPDMAI_CMD_BASE_VERSION	0
+#define DPDMAI_CMD_BASE_VERSION	1
 #define DPDMAI_CMD_ID_OFFSET	4
 
-#define DPDMAI_CMDID_FORMAT(x)	(((x) << DPDMAI_CMD_ID_OFFSET) | \
-				DPDMAI_CMD_BASE_VERSION)
+/*
+ * Maximum number of Tx/Rx queues per DPDMAI object
+ */
+#define DPDMAI_MAX_QUEUE_NUM	8
+
+#define DPDMAI_CMDID_FORMAT_V(x, v)	(((x) << DPDMAI_CMD_ID_OFFSET) | (v))
+#define DPDMAI_CMDID_FORMAT(x)		DPDMAI_CMDID_FORMAT_V(x, DPDMAI_CMD_BASE_VERSION)
 
 /* Command IDs */
 #define DPDMAI_CMDID_CLOSE		DPDMAI_CMDID_FORMAT(0x800)
@@ -26,9 +31,9 @@
 #define DPDMAI_CMDID_RESET              DPDMAI_CMDID_FORMAT(0x005)
 #define DPDMAI_CMDID_IS_ENABLED         DPDMAI_CMDID_FORMAT(0x006)
 
-#define DPDMAI_CMDID_SET_RX_QUEUE	DPDMAI_CMDID_FORMAT(0x1A0)
-#define DPDMAI_CMDID_GET_RX_QUEUE       DPDMAI_CMDID_FORMAT(0x1A1)
-#define DPDMAI_CMDID_GET_TX_QUEUE       DPDMAI_CMDID_FORMAT(0x1A2)
+#define DPDMAI_CMDID_SET_RX_QUEUE	DPDMAI_CMDID_FORMAT_V(0x1A0, 2)
+#define DPDMAI_CMDID_GET_RX_QUEUE       DPDMAI_CMDID_FORMAT_V(0x1A1, 2)
+#define DPDMAI_CMDID_GET_TX_QUEUE       DPDMAI_CMDID_FORMAT_V(0x1A2, 2)
 
 #define MC_CMD_HDR_TOKEN_O 32  /* Token field offset */
 #define MC_CMD_HDR_TOKEN_S 16  /* Token field size */
@@ -64,6 +69,7 @@
  *	should be configured with 0
  */
 struct dpdmai_cfg {
+	u8 num_queues;
 	u8 priorities[DPDMAI_PRIO_NUM];
 };
 
@@ -85,6 +91,7 @@ struct dpdmai_attr {
 		u16 minor;
 	} version;
 	u8 num_of_priorities;
+	u8 num_of_queues;
 };
 
 /**
@@ -149,20 +156,24 @@ struct dpdmai_rx_queue_attr {
 	u32 fqid;
 };
 
+struct dpdmai_tx_queue_attr {
+	u32 fqid;
+};
+
 int dpdmai_open(struct fsl_mc_io *mc_io, u32 cmd_flags,
 		int dpdmai_id, u16 *token);
 int dpdmai_close(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
-int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
+int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u32 dpdmai_id, u16 token);
 int dpdmai_enable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
 int dpdmai_disable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
 int dpdmai_reset(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags,
 			  u16 token, struct dpdmai_attr	*attr);
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
-			u8 priority, const struct dpdmai_rx_queue_cfg *cfg);
+			u8 queue_idx, u8 priority, const struct dpdmai_rx_queue_cfg *cfg);
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
-			u8 priority, struct dpdmai_rx_queue_attr *attr);
+			u8 queue_idx, u8 priority, struct dpdmai_rx_queue_attr *attr);
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
-			u16 token, u8 priority, u32 *fqid);
+			u16 token, u8 queue_idx, u8 priority, struct dpdmai_tx_queue_attr *attr);
 
 #endif /* __FSL_DPDMAI_H */

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 4/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI interfaces to version 3
  2024-03-20 19:39 ` [PATCH 4/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI interfaces to version 3 Frank Li
@ 2024-04-07 12:22   ` Vinod Koul
  0 siblings, 0 replies; 7+ messages in thread
From: Vinod Koul @ 2024-04-07 12:22 UTC (permalink / raw
  To: Frank Li; +Cc: dmaengine, linux-kernel, imx

On 20-03-24, 15:39, Frank Li wrote:
> Update the DPDMAI interfaces to support MC firmware up to 10.1x.x.

and what are these changes? Pls add them to log here...

> 
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
>  drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c | 14 ++++-----
>  drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h |  5 ++--
>  drivers/dma/fsl-dpaa2-qdma/dpdmai.c     | 53 ++++++++++++++++++++++++---------
>  drivers/dma/fsl-dpaa2-qdma/dpdmai.h     | 35 ++++++++++++++--------
>  4 files changed, 72 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
> index 5a8061a307cda..36384d0192636 100644
> --- a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
> +++ b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
> @@ -362,7 +362,7 @@ static int __cold dpaa2_qdma_setup(struct fsl_mc_device *ls_dev)
>  
>  	for (i = 0; i < priv->num_pairs; i++) {
>  		err = dpdmai_get_rx_queue(priv->mc_io, 0, ls_dev->mc_handle,
> -					  i, &priv->rx_queue_attr[i]);
> +					  i, 0, &priv->rx_queue_attr[i]);
>  		if (err) {
>  			dev_err(dev, "dpdmai_get_rx_queue() failed\n");
>  			goto exit;
> @@ -370,13 +370,13 @@ static int __cold dpaa2_qdma_setup(struct fsl_mc_device *ls_dev)
>  		ppriv->rsp_fqid = priv->rx_queue_attr[i].fqid;
>  
>  		err = dpdmai_get_tx_queue(priv->mc_io, 0, ls_dev->mc_handle,
> -					  i, &priv->tx_fqid[i]);
> +					  i, 0, &priv->tx_queue_attr[i]);
>  		if (err) {
>  			dev_err(dev, "dpdmai_get_tx_queue() failed\n");
>  			goto exit;
>  		}
> -		ppriv->req_fqid = priv->tx_fqid[i];
> -		ppriv->prio = i;
> +		ppriv->req_fqid = priv->tx_queue_attr[i].fqid;
> +		ppriv->prio = DPAA2_QDMA_DEFAULT_PRIORITY;
>  		ppriv->priv = priv;
>  		ppriv++;
>  	}
> @@ -542,7 +542,7 @@ static int __cold dpaa2_dpdmai_bind(struct dpaa2_qdma_priv *priv)
>  		rx_queue_cfg.dest_cfg.dest_id = ppriv->nctx.dpio_id;
>  		rx_queue_cfg.dest_cfg.priority = ppriv->prio;
>  		err = dpdmai_set_rx_queue(priv->mc_io, 0, ls_dev->mc_handle,
> -					  rx_queue_cfg.dest_cfg.priority,
> +					  rx_queue_cfg.dest_cfg.priority, 0,
>  					  &rx_queue_cfg);
>  		if (err) {
>  			dev_err(dev, "dpdmai_set_rx_queue() failed\n");
> @@ -642,7 +642,7 @@ static int dpaa2_dpdmai_init_channels(struct dpaa2_qdma_engine *dpaa2_qdma)
>  	for (i = 0; i < dpaa2_qdma->n_chans; i++) {
>  		dpaa2_chan = &dpaa2_qdma->chans[i];
>  		dpaa2_chan->qdma = dpaa2_qdma;
> -		dpaa2_chan->fqid = priv->tx_fqid[i % num];
> +		dpaa2_chan->fqid = priv->tx_queue_attr[i % num].fqid;
>  		dpaa2_chan->vchan.desc_free = dpaa2_qdma_free_desc;
>  		vchan_init(&dpaa2_chan->vchan, &dpaa2_qdma->dma_dev);
>  		spin_lock_init(&dpaa2_chan->queue_lock);
> @@ -802,7 +802,7 @@ static void dpaa2_qdma_shutdown(struct fsl_mc_device *ls_dev)
>  	dpdmai_disable(priv->mc_io, 0, ls_dev->mc_handle);
>  	dpaa2_dpdmai_dpio_unbind(priv);
>  	dpdmai_close(priv->mc_io, 0, ls_dev->mc_handle);
> -	dpdmai_destroy(priv->mc_io, 0, ls_dev->mc_handle);
> +	dpdmai_destroy(priv->mc_io, 0, priv->dpqdma_id, ls_dev->mc_handle);
>  }
>  
>  static const struct fsl_mc_device_id dpaa2_qdma_id_table[] = {
> diff --git a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
> index 03e2f4e0baca8..2c80077cb7c0a 100644
> --- a/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
> +++ b/drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
> @@ -6,6 +6,7 @@
>  
>  #define DPAA2_QDMA_STORE_SIZE 16
>  #define NUM_CH 8
> +#define DPAA2_QDMA_DEFAULT_PRIORITY 0
>  
>  struct dpaa2_qdma_sd_d {
>  	u32 rsv:32;
> @@ -122,8 +123,8 @@ struct dpaa2_qdma_priv {
>  	struct dpaa2_qdma_engine	*dpaa2_qdma;
>  	struct dpaa2_qdma_priv_per_prio	*ppriv;
>  
> -	struct dpdmai_rx_queue_attr rx_queue_attr[DPDMAI_PRIO_NUM];
> -	u32 tx_fqid[DPDMAI_PRIO_NUM];
> +	struct dpdmai_rx_queue_attr rx_queue_attr[DPDMAI_MAX_QUEUE_NUM];
> +	struct dpdmai_tx_queue_attr tx_queue_attr[DPDMAI_MAX_QUEUE_NUM];
>  };
>  
>  struct dpaa2_qdma_priv_per_prio {
> diff --git a/drivers/dma/fsl-dpaa2-qdma/dpdmai.c b/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
> index 610f6231835a8..7fbe925831b8b 100644
> --- a/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
> +++ b/drivers/dma/fsl-dpaa2-qdma/dpdmai.c
> @@ -1,42 +1,58 @@
>  // SPDX-License-Identifier: GPL-2.0
>  // Copyright 2019 NXP
>  
> +#include <linux/bitfield.h>
>  #include <linux/module.h>
>  #include <linux/types.h>
>  #include <linux/io.h>
>  #include <linux/fsl/mc.h>
>  #include "dpdmai.h"
>  
> +#define DEST_TYPE_MASK 0xF
> +
>  struct dpdmai_rsp_get_attributes {
>  	__le32 id;
>  	u8 num_of_priorities;
> -	u8 pad0[3];
> +	u8 num_of_queues;
> +	u8 pad0[2];
>  	__le16 major;
>  	__le16 minor;
>  };
>  
>  struct dpdmai_cmd_queue {
>  	__le32 dest_id;
> -	u8 priority;
> -	u8 queue;
> +	u8 dest_priority;
> +	union {
> +		u8 queue;
> +		u8 pri;
> +	};
>  	u8 dest_type;
> -	u8 pad;
> +	u8 queue_idx;
>  	__le64 user_ctx;
>  	union {
>  		__le32 options;
>  		__le32 fqid;
>  	};
> -};
> +} __packed;
>  
>  struct dpdmai_rsp_get_tx_queue {
>  	__le64 pad;
>  	__le32 fqid;
>  };
>  
> +struct dpdmai_rsp_is_enabled {
> +	/* only the LSB bit */
> +	u8 en;
> +} __packed;
> +
>  struct dpdmai_cmd_open {
>  	__le32 dpdmai_id;
>  } __packed;
>  
> +struct dpdmai_cmd_destroy {
> +	__le32 dpdmai_id;
> +} __packed;
> +
>  static inline u64 mc_enc(int lsoffset, int width, u64 val)
>  {
>  	return (val & MAKE_UMASK64(width)) << lsoffset;
> @@ -113,18 +129,23 @@ EXPORT_SYMBOL_GPL(dpdmai_close);
>   * dpdmai_destroy() - Destroy the DPDMAI object and release all its resources.
>   * @mc_io:      Pointer to MC portal's I/O object
>   * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
> + * @dpdmai_id:	The object id; it must be a valid id within the container that created this object;
>   * @token:      Token of DPDMAI object
>   *
>   * Return:      '0' on Success; error code otherwise.
>   */
> -int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token)
> +int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u32 dpdmai_id, u16 token)
>  {
> +	struct dpdmai_cmd_destroy *cmd_params;
>  	struct fsl_mc_command cmd = { 0 };
>  
>  	/* prepare command */
>  	cmd.header = mc_encode_cmd_header(DPDMAI_CMDID_DESTROY,
>  					  cmd_flags, token);
>  
> +	cmd_params = (struct dpdmai_cmd_destroy *)&cmd.params;
> +	cmd_params->dpdmai_id = cpu_to_le32(dpdmai_id);
> +
>  	/* send command to mc*/
>  	return mc_send_command(mc_io, &cmd);
>  }
> @@ -224,6 +245,7 @@ int dpdmai_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags,
>  	attr->version.major = le16_to_cpu(rsp_params->major);
>  	attr->version.minor = le16_to_cpu(rsp_params->minor);
>  	attr->num_of_priorities = rsp_params->num_of_priorities;
> +	attr->num_of_queues = rsp_params->num_of_queues;
>  
>  	return 0;
>  }
> @@ -240,7 +262,7 @@ EXPORT_SYMBOL_GPL(dpdmai_get_attributes);
>   *
>   * Return:	'0' on Success; Error code otherwise.
>   */
> -int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
> +int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u8 queue_idx,
>  			u8 priority, const struct dpdmai_rx_queue_cfg *cfg)
>  {
>  	struct dpdmai_cmd_queue *cmd_params;
> @@ -252,11 +274,12 @@ int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
>  
>  	cmd_params = (struct dpdmai_cmd_queue *)cmd.params;
>  	cmd_params->dest_id = cpu_to_le32(cfg->dest_cfg.dest_id);
> -	cmd_params->priority = cfg->dest_cfg.priority;
> -	cmd_params->queue = priority;
> +	cmd_params->dest_priority = cfg->dest_cfg.priority;
> +	cmd_params->pri = priority;
>  	cmd_params->dest_type = cfg->dest_cfg.dest_type;
>  	cmd_params->user_ctx = cpu_to_le64(cfg->user_ctx);
>  	cmd_params->options = cpu_to_le32(cfg->options);
> +	cmd_params->queue_idx = queue_idx;
>  
>  	/* send command to mc*/
>  	return mc_send_command(mc_io, &cmd);
> @@ -274,7 +297,7 @@ EXPORT_SYMBOL_GPL(dpdmai_set_rx_queue);
>   *
>   * Return:	'0' on Success; Error code otherwise.
>   */
> -int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
> +int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u8 queue_idx,
>  			u8 priority, struct dpdmai_rx_queue_attr *attr)
>  {
>  	struct dpdmai_cmd_queue *cmd_params;
> @@ -287,6 +310,7 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
>  
>  	cmd_params = (struct dpdmai_cmd_queue *)cmd.params;
>  	cmd_params->queue = priority;
> +	cmd_params->queue_idx = queue_idx;
>  
>  	/* send command to mc*/
>  	err = mc_send_command(mc_io, &cmd);
> @@ -295,8 +319,8 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
>  
>  	/* retrieve response parameters */
>  	attr->dest_cfg.dest_id = le32_to_cpu(cmd_params->dest_id);
> -	attr->dest_cfg.priority = cmd_params->priority;
> -	attr->dest_cfg.dest_type = cmd_params->dest_type;
> +	attr->dest_cfg.priority = cmd_params->dest_priority;
> +	attr->dest_cfg.dest_type = FIELD_GET(DEST_TYPE_MASK, cmd_params->dest_type);
>  	attr->user_ctx = le64_to_cpu(cmd_params->user_ctx);
>  	attr->fqid = le32_to_cpu(cmd_params->fqid);
>  
> @@ -316,7 +340,7 @@ EXPORT_SYMBOL_GPL(dpdmai_get_rx_queue);
>   * Return:	'0' on Success; Error code otherwise.
>   */
>  int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
> -			u16 token, u8 priority, u32 *fqid)
> +			u16 token, u8 queue_idx, u8 priority, struct dpdmai_tx_queue_attr *attr)
>  {
>  	struct dpdmai_rsp_get_tx_queue *rsp_params;
>  	struct dpdmai_cmd_queue *cmd_params;
> @@ -329,6 +353,7 @@ int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
>  
>  	cmd_params = (struct dpdmai_cmd_queue *)cmd.params;
>  	cmd_params->queue = priority;
> +	cmd_params->queue_idx = queue_idx;
>  
>  	/* send command to mc*/
>  	err = mc_send_command(mc_io, &cmd);
> @@ -338,7 +363,7 @@ int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
>  	/* retrieve response parameters */
>  
>  	rsp_params = (struct dpdmai_rsp_get_tx_queue *)cmd.params;
> -	*fqid = le32_to_cpu(rsp_params->fqid);
> +	attr->fqid = le32_to_cpu(rsp_params->fqid);
>  
>  	return 0;
>  }
> diff --git a/drivers/dma/fsl-dpaa2-qdma/dpdmai.h b/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
> index 3f2db582509a1..1efca2a305334 100644
> --- a/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
> +++ b/drivers/dma/fsl-dpaa2-qdma/dpdmai.h
> @@ -5,14 +5,19 @@
>  #define __FSL_DPDMAI_H
>  
>  /* DPDMAI Version */
> -#define DPDMAI_VER_MAJOR	2
> -#define DPDMAI_VER_MINOR	2
> +#define DPDMAI_VER_MAJOR	3
> +#define DPDMAI_VER_MINOR	3
>  
> -#define DPDMAI_CMD_BASE_VERSION	0
> +#define DPDMAI_CMD_BASE_VERSION	1
>  #define DPDMAI_CMD_ID_OFFSET	4
>  
> -#define DPDMAI_CMDID_FORMAT(x)	(((x) << DPDMAI_CMD_ID_OFFSET) | \
> -				DPDMAI_CMD_BASE_VERSION)
> +/*
> + * Maximum number of Tx/Rx queues per DPDMAI object
> + */
> +#define DPDMAI_MAX_QUEUE_NUM	8
> +
> +#define DPDMAI_CMDID_FORMAT_V(x, v)	(((x) << DPDMAI_CMD_ID_OFFSET) | (v))
> +#define DPDMAI_CMDID_FORMAT(x)		DPDMAI_CMDID_FORMAT_V(x, DPDMAI_CMD_BASE_VERSION)
>  
>  /* Command IDs */
>  #define DPDMAI_CMDID_CLOSE		DPDMAI_CMDID_FORMAT(0x800)
> @@ -26,9 +31,9 @@
>  #define DPDMAI_CMDID_RESET              DPDMAI_CMDID_FORMAT(0x005)
>  #define DPDMAI_CMDID_IS_ENABLED         DPDMAI_CMDID_FORMAT(0x006)
>  
> -#define DPDMAI_CMDID_SET_RX_QUEUE	DPDMAI_CMDID_FORMAT(0x1A0)
> -#define DPDMAI_CMDID_GET_RX_QUEUE       DPDMAI_CMDID_FORMAT(0x1A1)
> -#define DPDMAI_CMDID_GET_TX_QUEUE       DPDMAI_CMDID_FORMAT(0x1A2)
> +#define DPDMAI_CMDID_SET_RX_QUEUE	DPDMAI_CMDID_FORMAT_V(0x1A0, 2)
> +#define DPDMAI_CMDID_GET_RX_QUEUE       DPDMAI_CMDID_FORMAT_V(0x1A1, 2)
> +#define DPDMAI_CMDID_GET_TX_QUEUE       DPDMAI_CMDID_FORMAT_V(0x1A2, 2)
>  
>  #define MC_CMD_HDR_TOKEN_O 32  /* Token field offset */
>  #define MC_CMD_HDR_TOKEN_S 16  /* Token field size */
> @@ -64,6 +69,7 @@
>   *	should be configured with 0
>   */
>  struct dpdmai_cfg {
> +	u8 num_queues;
>  	u8 priorities[DPDMAI_PRIO_NUM];
>  };
>  
> @@ -85,6 +91,7 @@ struct dpdmai_attr {
>  		u16 minor;
>  	} version;
>  	u8 num_of_priorities;
> +	u8 num_of_queues;
>  };
>  
>  /**
> @@ -149,20 +156,24 @@ struct dpdmai_rx_queue_attr {
>  	u32 fqid;
>  };
>  
> +struct dpdmai_tx_queue_attr {
> +	u32 fqid;
> +};
> +
>  int dpdmai_open(struct fsl_mc_io *mc_io, u32 cmd_flags,
>  		int dpdmai_id, u16 *token);
>  int dpdmai_close(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
> -int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
> +int dpdmai_destroy(struct fsl_mc_io *mc_io, u32 cmd_flags, u32 dpdmai_id, u16 token);
>  int dpdmai_enable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
>  int dpdmai_disable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
>  int dpdmai_reset(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);
>  int dpdmai_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags,
>  			  u16 token, struct dpdmai_attr	*attr);
>  int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
> -			u8 priority, const struct dpdmai_rx_queue_cfg *cfg);
> +			u8 queue_idx, u8 priority, const struct dpdmai_rx_queue_cfg *cfg);
>  int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
> -			u8 priority, struct dpdmai_rx_queue_attr *attr);
> +			u8 queue_idx, u8 priority, struct dpdmai_rx_queue_attr *attr);
>  int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
> -			u16 token, u8 priority, u32 *fqid);
> +			u16 token, u8 queue_idx, u8 priority, struct dpdmai_tx_queue_attr *attr);
>  
>  #endif /* __FSL_DPDMAI_H */
> 
> -- 
> 2.34.1

-- 
~Vinod

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: (subset) [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x
  2024-03-20 19:39 [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Frank Li
                   ` (3 preceding siblings ...)
  2024-03-20 19:39 ` [PATCH 4/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI interfaces to version 3 Frank Li
@ 2024-04-07 16:39 ` Vinod Koul
  4 siblings, 0 replies; 7+ messages in thread
From: Vinod Koul @ 2024-04-07 16:39 UTC (permalink / raw
  To: Frank Li; +Cc: dmaengine, linux-kernel, imx


On Wed, 20 Mar 2024 15:39:18 -0400, Frank Li wrote:
> First do some clear up. Remove unused macro and function
> Then update DPMAI API to support MC firmware 10.1x.x
> 
> To: Vinod Koul <vkoul@kernel.org>
> Cc: dmaengine@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: imx@lists.linux.dev
> 
> [...]

Applied, thanks!

[1/4] dmaengine: fsl-dpaa2-qdma: clean up unused macro
      commit: 06db9ee8b42ef833e3941ef3c7795c1bea37212c
[2/4] dmaengine: fsl-dpaa2-qdma: Remove unused function dpdmai_create()
      commit: 26a4d2aedac28640c1fbb3761d940d99eff44488
[3/4] dmaengine: fsl-dpaa2-qdma: Add dpdmai_cmd_open
      commit: ebf850697a9daa9f59b902ea1e547079d426618b

Best regards,
-- 
~Vinod



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-04-07 16:39 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-20 19:39 [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Frank Li
2024-03-20 19:39 ` [PATCH 1/4] dmaengine: fsl-dpaa2-qdma: clean up unused macro Frank Li
2024-03-20 19:39 ` [PATCH 2/4] dmaengine: fsl-dpaa2-qdma: Remove unused function dpdmai_create() Frank Li
2024-03-20 19:39 ` [PATCH 3/4] dmaengine: fsl-dpaa2-qdma: Add dpdmai_cmd_open Frank Li
2024-03-20 19:39 ` [PATCH 4/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI interfaces to version 3 Frank Li
2024-04-07 12:22   ` Vinod Koul
2024-04-07 16:39 ` (subset) [PATCH 0/4] dmaengine: fsl-dpaa2-qdma: Update DPDMAI to support MC firmware 10.1x.x Vinod Koul

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 read-only IMAP folder(s) and NNTP newsgroup(s).