]> git.droids-corp.org - dpdk.git/commitdiff
dma/dpaa2: add driver-specific configuration API
authorNipun Gupta <nipun.gupta@nxp.com>
Thu, 5 May 2022 09:05:20 +0000 (14:35 +0530)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 1 Jun 2022 06:58:27 +0000 (08:58 +0200)
Add additional PMD APIs for DPAA2 QDMA driver for configuring
RBP, Ultra Short format, and Scatter Gather support

Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
doc/api/doxy-api-index.md
doc/api/doxy-api.conf.in
drivers/dma/dpaa2/dpaa2_qdma.c
drivers/dma/dpaa2/meson.build
drivers/dma/dpaa2/rte_pmd_dpaa2_qdma.h [new file with mode: 0644]
drivers/dma/dpaa2/version.map

index c19a72e4c8f7f9b1ce85e06311ccffd469dbbc40..2b78d796eaa37bf1fdfd1caedc697eab71713ec8 100644 (file)
@@ -54,6 +54,7 @@ The public API headers are grouped by topics:
   [mlx5]               (@ref rte_pmd_mlx5.h),
   [dpaa2_mempool]      (@ref rte_dpaa2_mempool.h),
   [dpaa2_cmdif]        (@ref rte_pmd_dpaa2_cmdif.h),
+  [dpaa2_qdma]         (@ref rte_pmd_dpaa2_qdma.h),
   [crypto_scheduler]   (@ref rte_cryptodev_scheduler.h),
   [dlb2]               (@ref rte_pmd_dlb2.h),
   [ifpga]              (@ref rte_pmd_ifpga.h)
index f376b15889e1099cb5a2dbc32b6ae01f0eb941d9..e355e66ba24bad0dcd3e1e785a2eda4248083143 100644 (file)
@@ -7,6 +7,7 @@ USE_MDFILE_AS_MAINPAGE  = @TOPDIR@/doc/api/doxy-api-index.md
 INPUT                   = @TOPDIR@/doc/api/doxy-api-index.md \
                           @TOPDIR@/drivers/bus/vdev \
                           @TOPDIR@/drivers/crypto/scheduler \
+                          @TOPDIR@/drivers/dma/dpaa2 \
                           @TOPDIR@/drivers/event/dlb2 \
                           @TOPDIR@/drivers/mempool/dpaa2 \
                           @TOPDIR@/drivers/net/ark \
index 785d8aea7b19dec7299152b54406367759a753ca..54db8067362673727fb906c4b705400783179ec6 100644 (file)
@@ -7,7 +7,10 @@
 #include <rte_dmadev.h>
 #include <rte_dmadev_pmd.h>
 #include <rte_kvargs.h>
+
 #include <mc/fsl_dpdmai.h>
+
+#include "rte_pmd_dpaa2_qdma.h"
 #include "dpaa2_qdma.h"
 #include "dpaa2_qdma_logs.h"
 /* Dynamic log type identifier */
@@ -71,6 +74,41 @@ dpaa2_qdma_configure(struct rte_dma_dev *dev,
        return 0;
 }
 
+/* Enable FD in Ultra Short format */
+void
+rte_dpaa2_qdma_vchan_fd_us_enable(int16_t dev_id, uint16_t vchan)
+{
+       struct rte_dma_fp_object *obj = &rte_dma_fp_objs[dev_id];
+       struct dpaa2_dpdmai_dev *dpdmai_dev = obj->dev_private;
+       struct qdma_device *qdma_dev = dpdmai_dev->qdma_dev;
+
+       qdma_dev->vqs[vchan].flags |= DPAA2_QDMA_VQ_FD_SHORT_FORMAT;
+}
+
+/* Enable internal SG processing */
+void
+rte_dpaa2_qdma_vchan_internal_sg_enable(int16_t dev_id, uint16_t vchan)
+{
+       struct rte_dma_fp_object *obj = &rte_dma_fp_objs[dev_id];
+       struct dpaa2_dpdmai_dev *dpdmai_dev = obj->dev_private;
+       struct qdma_device *qdma_dev = dpdmai_dev->qdma_dev;
+
+       qdma_dev->vqs[vchan].flags |= DPAA2_QDMA_VQ_FD_SG_FORMAT;
+}
+
+/* Enable RBP */
+void
+rte_dpaa2_qdma_vchan_rbp_enable(int16_t dev_id, uint16_t vchan,
+                               struct rte_dpaa2_qdma_rbp *rbp_config)
+{
+       struct rte_dma_fp_object *obj = &rte_dma_fp_objs[dev_id];
+       struct dpaa2_dpdmai_dev *dpdmai_dev = obj->dev_private;
+       struct qdma_device *qdma_dev = dpdmai_dev->qdma_dev;
+
+       memcpy(&qdma_dev->vqs[vchan].rbp, rbp_config,
+                       sizeof(struct rte_dpaa2_qdma_rbp));
+}
+
 static int
 dpaa2_qdma_vchan_setup(struct rte_dma_dev *dev, uint16_t vchan,
                       const struct rte_dma_vchan_conf *conf,
index 2b82563e85ce21c06a91b76a6487b2ec41ccf4e5..a99151e2a5b1c05b421d21dcaec457305e65e23f 100644 (file)
@@ -14,3 +14,5 @@ sources = files('dpaa2_qdma.c')
 if cc.has_argument('-Wno-pointer-arith')
     cflags += '-Wno-pointer-arith'
 endif
+
+headers = files('rte_pmd_dpaa2_qdma.h')
diff --git a/drivers/dma/dpaa2/rte_pmd_dpaa2_qdma.h b/drivers/dma/dpaa2/rte_pmd_dpaa2_qdma.h
new file mode 100644 (file)
index 0000000..a75cdd7
--- /dev/null
@@ -0,0 +1,96 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2021-2022 NXP
+ */
+
+#ifndef _RTE_PMD_DPAA2_QDMA_H_
+#define _RTE_PMD_DPAA2_QDMA_H_
+
+/** States if the source addresses is physical. */
+#define RTE_DPAA2_QDMA_JOB_SRC_PHY             (1ULL << 30)
+
+/** States if the destination addresses is physical. */
+#define RTE_DPAA2_QDMA_JOB_DEST_PHY            (1ULL << 31)
+
+struct rte_dpaa2_qdma_rbp {
+       uint32_t use_ultrashort:1;
+       uint32_t enable:1;
+       /**
+        * dportid:
+        * 0000 PCI-Express 1
+        * 0001 PCI-Express 2
+        * 0010 PCI-Express 3
+        * 0011 PCI-Express 4
+        * 0100 PCI-Express 5
+        * 0101 PCI-Express 6
+        */
+       uint32_t dportid:4;
+       uint32_t dpfid:2;
+       uint32_t dvfid:6;
+       /*using route by port for destination */
+       uint32_t drbp:1;
+       /**
+        * sportid:
+        * 0000 PCI-Express 1
+        * 0001 PCI-Express 2
+        * 0010 PCI-Express 3
+        * 0011 PCI-Express 4
+        * 0100 PCI-Express 5
+        * 0101 PCI-Express 6
+        */
+       uint32_t sportid:4;
+       uint32_t spfid:2;
+       uint32_t svfid:6;
+       /* using route by port for source */
+       uint32_t srbp:1;
+       uint32_t rsv:4;
+};
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Enable FD in Ultra Short format on a channel. This API should be
+ * called before calling 'rte_dma_vchan_setup()' API.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param vchan
+ *   The identifier of virtual DMA channel.
+ */
+__rte_experimental
+void rte_dpaa2_qdma_vchan_fd_us_enable(int16_t dev_id, uint16_t vchan);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Enable internal SG processing on a channel. This API should be
+ * called before calling 'rte_dma_vchan_setup()' API.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param vchan
+ *   The identifier of virtual DMA channel.
+ */
+__rte_experimental
+void rte_dpaa2_qdma_vchan_internal_sg_enable(int16_t dev_id, uint16_t vchan);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Enable Route-by-port on a channel. This API should be
+ * called before calling 'rte_dma_vchan_setup()' API.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param vchan
+ *   The identifier of virtual DMA channel.
+ * @param rbp_config
+ *   Configuration for route-by-port
+ */
+__rte_experimental
+void rte_dpaa2_qdma_vchan_rbp_enable(int16_t dev_id, uint16_t vchan,
+               struct rte_dpaa2_qdma_rbp *rbp_config);
+
+#endif /* _RTE_PMD_DPAA2_QDMA_H_ */
index c2e0723b4cad9d1046438cc7d1a4a5d9c08920d6..3b3019267f45ab12f875ce310b651d0a8e1d5860 100644 (file)
@@ -1,3 +1,9 @@
 DPDK_22 {
        local: *;
 };
+
+EXPERIMENTAL {
+       rte_dpaa2_qdma_vchan_fd_us_enable;
+       rte_dpaa2_qdma_vchan_internal_sg_enable;
+       rte_dpaa2_qdma_vchan_rbp_enable;
+};