[PATCH v2 0/2] dmaengine: avalon: Support Avalon-MM DMA Interface for PCIe

From: Alexander Gordeev
Date: Wed Oct 09 2019 - 06:12:41 EST


This series is against v5.4-rc2

Changes since v1:
- "avalon-dma" converted to "dmaengine" model;
- "avalon-drv" renamed to "avalon-test";

The Avalon-MM DMA Interface for PCIe is a design used in hard IPs for
Intel Arria, Cyclone or Stratix FPGAs. It transfers data between on-chip
memory and system memory.

Patch 1. This patch introduces "avalon-dma" driver that conforms to
"dmaengine" model.

Patch 2. The existing "dmatest" is not meant for DMA_SLAVE type of
transfers needed by "avalon-dma". Instead, custom "avalon-test" driver
was used to debug and stress "avalon-dma". If it could be useful for a
wider audience, I can make it optional part of "avalon-dma" sources or
leave it as separate driver. Marking patch 2 as RFC for now.

Testing was done using a custom FPGA build with Arria 10 FPGA streaming
data to target device RAM:

+----------+ +----------+ +----------+ +----------+
| Nios CPU |<-->| RAM |<-->| Avalon |<-PCIe->| Host CPU |
+----------+ +----------+ +----------+ +----------+

The RAM was examined for data integrity by examining RAM contents
from host CPU (indirectly - checking data DMAed to the system) and
from Nios CPU that has direct access to the device RAM. A companion
tool using "avalon-test" driver was used to DMA files to the device:
https://github.com/a-gordeev/avalon-tool.git

CC: Michael Chen <micchen@xxxxxxxxxx>
CC: devel@xxxxxxxxxxxxxxxxxxxx
CC: dmaengine@xxxxxxxxxxxxxxx

Alexander Gordeev (2):
dmaengine: avalon: Intel Avalon-MM DMA Interface for PCIe
dmaengine: avalon: Intel Avalon-MM DMA Interface for PCIe test

drivers/dma/Kconfig | 3 +
drivers/dma/Makefile | 2 +
drivers/dma/avalon-test/Kconfig | 23 +
drivers/dma/avalon-test/Makefile | 14 +
drivers/dma/avalon-test/avalon-dev.c | 65 +++
drivers/dma/avalon-test/avalon-dev.h | 33 ++
drivers/dma/avalon-test/avalon-ioctl.c | 128 +++++
drivers/dma/avalon-test/avalon-ioctl.h | 12 +
drivers/dma/avalon-test/avalon-mmap.c | 93 ++++
drivers/dma/avalon-test/avalon-mmap.h | 12 +
drivers/dma/avalon-test/avalon-sg-buf.c | 132 +++++
drivers/dma/avalon-test/avalon-sg-buf.h | 26 +
drivers/dma/avalon-test/avalon-util.c | 54 ++
drivers/dma/avalon-test/avalon-util.h | 12 +
drivers/dma/avalon-test/avalon-xfer.c | 697 ++++++++++++++++++++++++
drivers/dma/avalon-test/avalon-xfer.h | 28 +
drivers/dma/avalon/Kconfig | 88 +++
drivers/dma/avalon/Makefile | 6 +
drivers/dma/avalon/avalon-core.c | 432 +++++++++++++++
drivers/dma/avalon/avalon-core.h | 90 +++
drivers/dma/avalon/avalon-hw.c | 212 +++++++
drivers/dma/avalon/avalon-hw.h | 86 +++
drivers/dma/avalon/avalon-pci.c | 150 +++++
include/uapi/linux/avalon-ioctl.h | 32 ++
24 files changed, 2430 insertions(+)
create mode 100644 drivers/dma/avalon-test/Kconfig
create mode 100644 drivers/dma/avalon-test/Makefile
create mode 100644 drivers/dma/avalon-test/avalon-dev.c
create mode 100644 drivers/dma/avalon-test/avalon-dev.h
create mode 100644 drivers/dma/avalon-test/avalon-ioctl.c
create mode 100644 drivers/dma/avalon-test/avalon-ioctl.h
create mode 100644 drivers/dma/avalon-test/avalon-mmap.c
create mode 100644 drivers/dma/avalon-test/avalon-mmap.h
create mode 100644 drivers/dma/avalon-test/avalon-sg-buf.c
create mode 100644 drivers/dma/avalon-test/avalon-sg-buf.h
create mode 100644 drivers/dma/avalon-test/avalon-util.c
create mode 100644 drivers/dma/avalon-test/avalon-util.h
create mode 100644 drivers/dma/avalon-test/avalon-xfer.c
create mode 100644 drivers/dma/avalon-test/avalon-xfer.h
create mode 100644 drivers/dma/avalon/Kconfig
create mode 100644 drivers/dma/avalon/Makefile
create mode 100644 drivers/dma/avalon/avalon-core.c
create mode 100644 drivers/dma/avalon/avalon-core.h
create mode 100644 drivers/dma/avalon/avalon-hw.c
create mode 100644 drivers/dma/avalon/avalon-hw.h
create mode 100644 drivers/dma/avalon/avalon-pci.c
create mode 100644 include/uapi/linux/avalon-ioctl.h

--
2.23.0