Re: [PATCH v3 0/3] Add AMD PassThru DMA Engine driver

From: Vitaly Mayatskih
Date: Thu Mar 26 2020 - 12:06:05 EST


dmatest measures around 30 MB/s for one ptdma channel in EPYC 7302p
and 11 GB/s for ioatdma channel in Xeon Gold 6248. Is it a driver
limitation?

I run dmatest as modprobe dmatest timeout=10000 transfer_size=512
test_buf_size=1048576 threads_per_chan=1 iterations=1000 run=1 wait=1


On Tue, Jan 21, 2020 at 4:06 AM Sanjay R Mehta <Sanju.Mehta@xxxxxxx> wrote:
>
> From: Sanjay R Mehta <sanju.mehta@xxxxxxx>
>
> This patch series adds support for AMD PassThru DMA Engine which
> performs high bandwidth memory-to-memory and IO copy operation and
> performs DMA transfer through queue based descriptor management.
>
> AMD Processor has multiple ptdma device instances and each engine has
> single queue. The driver also adds support for for multiple PTDMA
> instances, each device will get an unique identifier and uniquely
> named resources.
>
> v3:
> - Fixed the sparse warnings.
>
> v2:
> - Added controller description in cover letter
> - Removed "default m" from Kconfig
> - Replaced low_address() and high_address() functions with kernel
> API's lower_32_bits & upper_32_bits().
> - Removed the BH handler function pt_core_irq_bh() and instead
> handling transaction in irq handler itself.
> - Moved presetting of command queue registers into new function
> "init_cmdq_regs()"
> - Removed the kernel thread dependency to submit transaction.
> - Increased the hardware command queue size to 32 and adding it
> as a module parameter.
> - Removed backlog command queue handling mechanism.
> - Removed software command queue handling and instead submitting
> transaction command directly to
> hardware command queue.
> - Added tasklet structure variable in "struct pt_device".
> This is used to invoke pt_do_cmd_complete() upon receiving interrupt
> for command completion.
> - pt_core_perform_passthru() function parameters are modified and it is
> now used to submit command directly to hardware from dmaengine framework.
> - Removed below structures, enums, macros and functions, as these values are
> constants. Making command submission simple,
> - Removed "union pt_function" and several macros like PT_VERSION,
> PT_BYTESWAP, PT_CMD_* etc..
> - enum pt_passthru_bitwise, enum pt_passthru_byteswap, enum pt_memtype
> struct pt_dma_info, struct pt_data, struct pt_mem, struct pt_passthru_op,
> struct pt_op,
> - Removed functions -> pt_cmd_queue_thread() pt_run_passthru_cmd(),
> pt_run_cmd(), pt_dev_init(), pt_dequeue_cmd(), pt_do_cmd_backlog(),
> pt_enqueue_cmd(),
> - Below functions, stuctures and variables moved from ptdma-ops.c
> - Moved function pt_alloc_struct() to ptdma-pci.c as its used only there.
> - Moved "struct pt_tasklet_data" structure to ptdma.h
> - Moved functions pt_do_cmd_complete(), pt_present(), pt_get_device(),
> pt_add_device(), pt_del_device(), pt_log_error() and its dependent
> static variables pt_unit_lock, pt_units, pt_rr_lock, pt_rr, pt_error_codes,
> pt_ordinal to ptdma-dev.c as they are used only in that file.
>
> Links of the review comments for v2:
> 1. https://lkml.org/lkml/2019/12/27/630
> 2. https://lkml.org/lkml/2020/1/3/23
> 3. https://lkml.org/lkml/2020/1/3/314
> 4. https://lkml.org/lkml/2020/1/10/100
>
>
> Links of the review comments for v1:
>
> 1. https://lkml.org/lkml/2019/9/24/490
> 2. https://lkml.org/lkml/2019/9/24/399
> 3. https://lkml.org/lkml/2019/9/24/862
> 4. https://lkml.org/lkml/2019/9/24/122
>
> Sanjay R Mehta (3):
> dmaengine: ptdma: Initial driver for the AMD PassThru DMA engine
> dmaengine: ptdma: Register pass-through engine as a DMA resource
> dmaengine: ptdma: Add debugfs entries for PTDMA information
>
> MAINTAINERS | 6 +
> drivers/dma/Kconfig | 2 +
> drivers/dma/Makefile | 1 +
> drivers/dma/ptdma/Kconfig | 7 +
> drivers/dma/ptdma/Makefile | 12 +
> drivers/dma/ptdma/ptdma-debugfs.c | 237 ++++++++++++
> drivers/dma/ptdma/ptdma-dev.c | 448 +++++++++++++++++++++++
> drivers/dma/ptdma/ptdma-dmaengine.c | 704 ++++++++++++++++++++++++++++++++++++
> drivers/dma/ptdma/ptdma-pci.c | 269 ++++++++++++++
> drivers/dma/ptdma/ptdma.h | 378 +++++++++++++++++++
> 10 files changed, 2064 insertions(+)
> create mode 100644 drivers/dma/ptdma/Kconfig
> create mode 100644 drivers/dma/ptdma/Makefile
> create mode 100644 drivers/dma/ptdma/ptdma-debugfs.c
> create mode 100644 drivers/dma/ptdma/ptdma-dev.c
> create mode 100644 drivers/dma/ptdma/ptdma-dmaengine.c
> create mode 100644 drivers/dma/ptdma/ptdma-pci.c
> create mode 100644 drivers/dma/ptdma/ptdma.h
>
> --
> 2.7.4
>


--
wbr, Vitaly