From: Radha Mohan Chintakuntla <radhac@marvell.com>
To: <thomas@monjalon.net>, <fengchengwen@huawei.com>,
<ndabilpuram@marvell.com>, <kirankumark@marvell.com>,
<skori@marvell.com>, <skoteshwar@marvell.com>,
<jerinj@marvell.com>, <sburla@marvell.com>
Cc: <dev@dpdk.org>, Radha Mohan Chintakuntla <radhac@marvell.com>
Subject: [dpdk-dev] [PATCH v2 2/4] dma/cnxk: create and initialize dmadev on pci probe
Date: Mon, 1 Nov 2021 20:40:17 -0700 [thread overview]
Message-ID: <20211102034019.28900-2-radhac@marvell.com> (raw)
In-Reply-To: <20211102034019.28900-1-radhac@marvell.com>
This patch creates and initializes a dmadev device on pci probe.
Signed-off-by: Radha Mohan Chintakuntla <radhac@marvell.com>
---
MAINTAINERS | 6 ++
doc/guides/dmadevs/cnxk.rst | 58 +++++++++++++++++++
doc/guides/dmadevs/index.rst | 1 +
drivers/dma/cnxk/cnxk_dmadev.c | 100 +++++++++++++++++++++++++++++++++
drivers/dma/cnxk/cnxk_dmadev.h | 11 ++++
drivers/dma/cnxk/meson.build | 7 +++
drivers/dma/meson.build | 1 +
7 files changed, 184 insertions(+)
create mode 100644 doc/guides/dmadevs/cnxk.rst
create mode 100644 drivers/dma/cnxk/cnxk_dmadev.c
create mode 100644 drivers/dma/cnxk/cnxk_dmadev.h
create mode 100644 drivers/dma/cnxk/meson.build
diff --git a/MAINTAINERS b/MAINTAINERS
index be2c9b6815..60560a6a3b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1202,6 +1202,12 @@ M: Conor Walsh <conor.walsh@intel.com>
F: drivers/dma/ioat/
F: doc/guides/dmadevs/ioat.rst
+Marvell CNXK DPI DMA
+M: Radha Mohan Chintakuntla <radhac@marvell.com>
+M: Veerasenareddy Burru <vburru@marvell.com>
+F: drivers/dma/cnxk/
+F: doc/guides/dmadevs/cnxk.rst
+
RegEx Drivers
-------------
diff --git a/doc/guides/dmadevs/cnxk.rst b/doc/guides/dmadevs/cnxk.rst
new file mode 100644
index 0000000000..b29bd59a01
--- /dev/null
+++ b/doc/guides/dmadevs/cnxk.rst
@@ -0,0 +1,58 @@
+.. SPDX-License-Identifier: BSD-3-Clause
+ Copyright(c) 2021 Marvell International Ltd.
+
+.. include:: <isonum.txt>
+
+CNXK DMA Device Driver
+======================
+
+The ``cnxk`` dmadev driver provides a poll-mode driver (PMD) for Marvell DPI DMA
+Hardware Accelerator block found in OCTEONTX2 and OCTEONTX3 family of SoCs. Each
+DMA queue is exposed as a VF function when SRIOV is enabled.
+
+The block supports following modes of DMA transfers
+
+#. Internal - DMA within SoC DRAM to DRAM
+
+#. Inbound - Host DRAM to SoC DRAM when SoC is in PCIe Endpoint
+
+#. Outbound - SoC DRAM to Host DRAM when SoC is in PCIe Endpoint
+
+Prerequisites and Compilation procedure
+---------------------------------------
+
+ See :doc:`../platform/cnxk` for setup information.
+
+Device Setup
+-------------
+The ``dpdk-devbind.py`` script, included with DPDK, can be used to show the
+presence of supported hardware. Running ``dpdk-devbind.py --status-dev dma``
+will show all the CNXK DMA devices.
+
+Devices using VFIO drivers
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The HW devices to be used will need to be bound to a user-space IO driver for use.
+The ``dpdk-devbind.py`` script can be used to view the state of the devices
+and to bind them to a suitable DPDK-supported driver, such as ``vfio-pci``.
+For example::
+
+ $ dpdk-devbind.py -b vfio-pci 0000:05:00.1
+
+Device Probing and Initialization
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To use the devices from an application, the dmadev API can be used.
+CNXK DMA device configuration requirements:
+
+* Only one ``vchan`` is supported per device.
+* CNXK DMA devices do not support silent mode.
+
+Once configured, the device can then be made ready for use by calling the
+ ``rte_dma_start()`` API.
+
+Performing Data Copies
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Refer to the :ref:`Enqueue / Dequeue APIs <dmadev_enqueue_dequeue>` section of the dmadev library
+documentation for details on operation enqueue and submission API usage.
diff --git a/doc/guides/dmadevs/index.rst b/doc/guides/dmadevs/index.rst
index 20476039a5..227fa00c68 100644
--- a/doc/guides/dmadevs/index.rst
+++ b/doc/guides/dmadevs/index.rst
@@ -11,5 +11,6 @@ an application through DMA API.
:maxdepth: 2
:numbered:
+ cnxk
idxd
ioat
diff --git a/drivers/dma/cnxk/cnxk_dmadev.c b/drivers/dma/cnxk/cnxk_dmadev.c
new file mode 100644
index 0000000000..268482677d
--- /dev/null
+++ b/drivers/dma/cnxk/cnxk_dmadev.c
@@ -0,0 +1,100 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C) 2021 Marvell International Ltd.
+ */
+
+#include <string.h>
+#include <unistd.h>
+
+#include <rte_bus.h>
+#include <rte_bus_pci.h>
+#include <rte_common.h>
+#include <rte_eal.h>
+#include <rte_lcore.h>
+#include <rte_mempool.h>
+#include <rte_pci.h>
+#include <rte_dmadev.h>
+#include <rte_dmadev_pmd.h>
+
+#include <roc_api.h>
+#include <cnxk_dmadev.h>
+
+static int
+cnxk_dmadev_probe(struct rte_pci_driver *pci_drv __rte_unused,
+ struct rte_pci_device *pci_dev)
+{
+ struct cnxk_dpi_vf_s *dpivf = NULL;
+ char name[RTE_DEV_NAME_MAX_LEN];
+ struct rte_dma_dev *dmadev;
+ struct roc_dpi *rdpi = NULL;
+ int rc;
+
+ if (!pci_dev->mem_resource[0].addr)
+ return -ENODEV;
+
+ rc = roc_plt_init();
+ if (rc) {
+ plt_err("Failed to initialize platform model, rc=%d", rc);
+ return rc;
+ }
+ memset(name, 0, sizeof(name));
+ rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
+
+ dmadev = rte_dma_pmd_allocate(name, pci_dev->device.numa_node,
+ sizeof(*dpivf));
+ if (dmadev == NULL) {
+ plt_err("dma device allocation failed for %s", name);
+ return -ENOMEM;
+ }
+
+ dpivf = dmadev->data->dev_private;
+
+ dmadev->device = &pci_dev->device;
+ dmadev->fp_obj->dev_private = dpivf;
+
+ rdpi = &dpivf->rdpi;
+
+ rdpi->pci_dev = pci_dev;
+ rc = roc_dpi_dev_init(rdpi);
+ if (rc < 0)
+ goto err_out_free;
+
+ return 0;
+
+err_out_free:
+ if (dmadev)
+ rte_dma_pmd_release(name);
+
+ return rc;
+}
+
+static int
+cnxk_dmadev_remove(struct rte_pci_device *pci_dev)
+{
+ char name[RTE_DEV_NAME_MAX_LEN];
+
+ memset(name, 0, sizeof(name));
+ rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
+
+ return rte_dma_pmd_release(name);
+}
+
+static const struct rte_pci_id cnxk_dma_pci_map[] = {
+ {
+ RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM,
+ PCI_DEVID_CNXK_DPI_VF)
+ },
+ {
+ .vendor_id = 0,
+ },
+};
+
+static struct rte_pci_driver cnxk_dmadev = {
+ .id_table = cnxk_dma_pci_map,
+ .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_NEED_IOVA_AS_VA,
+ .probe = cnxk_dmadev_probe,
+ .remove = cnxk_dmadev_remove,
+};
+
+RTE_PMD_REGISTER_PCI(cnxk_dmadev_pci_driver, cnxk_dmadev);
+RTE_PMD_REGISTER_PCI_TABLE(cnxk_dmadev_pci_driver, cnxk_dma_pci_map);
+RTE_PMD_REGISTER_KMOD_DEP(cnxk_dmadev_pci_driver, "vfio-pci");
diff --git a/drivers/dma/cnxk/cnxk_dmadev.h b/drivers/dma/cnxk/cnxk_dmadev.h
new file mode 100644
index 0000000000..9e0bb7b2ce
--- /dev/null
+++ b/drivers/dma/cnxk/cnxk_dmadev.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell International Ltd.
+ */
+#ifndef _CNXK_DMADEV_H_
+#define _CNXK_DMADEV_H_
+
+struct cnxk_dpi_vf_s {
+ struct roc_dpi rdpi;
+};
+
+#endif
diff --git a/drivers/dma/cnxk/meson.build b/drivers/dma/cnxk/meson.build
new file mode 100644
index 0000000000..9489d6e6dc
--- /dev/null
+++ b/drivers/dma/cnxk/meson.build
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(C) 2021 Marvell International Ltd.
+#
+
+deps += ['bus_pci', 'common_cnxk', 'dmadev']
+sources = files('cnxk_dmadev.c')
+headers = files('cnxk_dmadev.h')
diff --git a/drivers/dma/meson.build b/drivers/dma/meson.build
index a69418ce9b..c562c8b429 100644
--- a/drivers/dma/meson.build
+++ b/drivers/dma/meson.build
@@ -2,6 +2,7 @@
# Copyright 2021 HiSilicon Limited
drivers = [
+ 'cnxk',
'idxd',
'ioat',
'skeleton',
--
2.17.1
next prev parent reply other threads:[~2021-11-02 3:40 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-26 4:12 [dpdk-dev] [PATCH 1/4] common/cnxk: add DPI DMA support Radha Mohan Chintakuntla
2021-10-26 4:12 ` [dpdk-dev] [PATCH 2/4] dma/cnxk: create and initialize dmadev on pci probe Radha Mohan Chintakuntla
2021-10-26 8:36 ` Jerin Jacob
2021-10-26 21:05 ` Radha Mohan
2021-10-26 4:12 ` [dpdk-dev] [PATCH 3/4] dma/cnxk: add dma channel operations Radha Mohan Chintakuntla
2021-10-26 8:41 ` Jerin Jacob
2021-10-28 18:18 ` Radha Mohan
2021-10-29 14:54 ` Jerin Jacob
2021-10-29 18:02 ` Radha Mohan
2021-10-26 4:13 ` [dpdk-dev] [PATCH 4/4] dma/cnxk: add copy_sg function Radha Mohan Chintakuntla
2021-10-26 8:42 ` Jerin Jacob
2021-10-26 8:33 ` [dpdk-dev] [PATCH 1/4] common/cnxk: add DPI DMA support Jerin Jacob
2021-10-26 15:57 ` Radha Mohan
2021-11-02 3:40 ` [dpdk-dev] [PATCH v2 " Radha Mohan Chintakuntla
2021-11-02 3:40 ` Radha Mohan Chintakuntla [this message]
2021-11-02 4:02 ` [dpdk-dev] [PATCH v2 2/4] dma/cnxk: create and initialize dmadev on pci probe Jerin Jacob
2021-11-02 11:49 ` fengchengwen
2021-11-02 3:40 ` [dpdk-dev] [PATCH v2 3/4] dma/cnxk: add dma channel operations Radha Mohan Chintakuntla
2021-11-02 11:59 ` fengchengwen
2021-11-02 18:11 ` Radha Mohan
2021-11-02 3:40 ` [dpdk-dev] [PATCH v2 4/4] dma/cnxk: add copy_sg function Radha Mohan Chintakuntla
2021-11-02 12:02 ` fengchengwen
2021-11-02 11:45 ` [dpdk-dev] [PATCH v2 1/4] common/cnxk: add DPI DMA support fengchengwen
2021-11-03 18:01 ` [dpdk-dev] [PATCH v3 1/5] " Radha Mohan Chintakuntla
2021-11-03 18:01 ` [dpdk-dev] [PATCH v3 2/5] dma/cnxk: create and initialize dmadev on pci probe Radha Mohan Chintakuntla
2021-11-07 20:55 ` Thomas Monjalon
2021-11-07 23:04 ` Thomas Monjalon
2021-11-09 3:52 ` Radha Mohan
2021-11-09 8:11 ` Thomas Monjalon
2021-11-03 18:01 ` [dpdk-dev] [PATCH v3 3/5] dma/cnxk: add dma channel operations Radha Mohan Chintakuntla
2021-11-03 18:01 ` [dpdk-dev] [PATCH v3 4/5] dma/cnxk: add copy_sg function Radha Mohan Chintakuntla
2021-11-03 18:01 ` [dpdk-dev] [PATCH v3 5/5] dma/cnxk: add stats function Radha Mohan Chintakuntla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211102034019.28900-2-radhac@marvell.com \
--to=radhac@marvell.com \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=jerinj@marvell.com \
--cc=kirankumark@marvell.com \
--cc=ndabilpuram@marvell.com \
--cc=sburla@marvell.com \
--cc=skori@marvell.com \
--cc=skoteshwar@marvell.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 NNTP newsgroup(s).