From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 70FE7A0C4D; Tue, 2 Nov 2021 04:40:32 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 829BD41100; Tue, 2 Nov 2021 04:40:28 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id E74214068F for ; Tue, 2 Nov 2021 04:40:25 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 1A1JQkJu001065; Mon, 1 Nov 2021 20:40:25 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0220; bh=Nkfo16KwUAD7MbmgVa7EnAqS1ifbG89mj0cjPagqnsU=; b=OQbQZY+AGbWvygDMwEg5JPTpesVXBi3FCamhYFmy0mNDZRQg/Po132dQlL4OAr/btNU/ TSKcZcKlu0pt3b8AVvwxYyTbRah6uGdv5YzqBXaPvBgJNA+brTyLUWK+vWq3uwrOaBmn XcDXxoVBcrGGzyedKFaM+5V+v1Ky3Y+5PkdIjbltD8c5gwfCi2LfeJ2efyWJfpmLjvXJ jAF8pZq5FZ2dWKNSw4OHqOYUW2XEoQn37SsF4KCSIsRLOIjzFzYQu4KuA33gG/Mt0nqY 2FXXOVNWJAyiEkbKlle7CXA+18hN7yVlYITU0xwW5xjyIT9hzIJucdSAAhyAnNmCNHVp aA== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3c25c4dmej-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 01 Nov 2021 20:40:25 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Mon, 1 Nov 2021 20:40:22 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Mon, 1 Nov 2021 20:40:22 -0700 Received: from rchintakuntla-lnx3.caveonetworks.com (unknown [10.111.140.81]) by maili.marvell.com (Postfix) with ESMTP id 76ACF3F70BF; Mon, 1 Nov 2021 20:40:22 -0700 (PDT) From: Radha Mohan Chintakuntla To: , , , , , , , CC: , Radha Mohan Chintakuntla Date: Mon, 1 Nov 2021 20:40:17 -0700 Message-ID: <20211102034019.28900-2-radhac@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20211102034019.28900-1-radhac@marvell.com> References: <20211026041300.28924-1-radhac@marvell.com> <20211102034019.28900-1-radhac@marvell.com> MIME-Version: 1.0 Content-Type: text/plain X-Proofpoint-ORIG-GUID: 4r-ZnTpXWTu5p9YAi5MhXvL31Ib7rT9- X-Proofpoint-GUID: 4r-ZnTpXWTu5p9YAi5MhXvL31Ib7rT9- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.182.1,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-02_01,2021-11-01_01,2020-04-07_01 Subject: [dpdk-dev] [PATCH v2 2/4] dma/cnxk: create and initialize dmadev on pci probe X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch creates and initializes a dmadev device on pci probe. Signed-off-by: Radha Mohan Chintakuntla --- 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 F: drivers/dma/ioat/ F: doc/guides/dmadevs/ioat.rst +Marvell CNXK DPI DMA +M: Radha Mohan Chintakuntla +M: Veerasenareddy Burru +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:: + +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 ` 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 +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +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