dmaengine: amd: qdma: Add AMD QDMA driver
authorNishad Saraf <nishads@amd.com>
Mon, 19 Aug 2024 21:19:48 +0000 (14:19 -0700)
committerVinod Koul <vkoul@kernel.org>
Wed, 28 Aug 2024 18:04:13 +0000 (23:34 +0530)
commit73d5fc92a11cacb73a1aac0b5793c47e48c5b537
treea353630e02fd58b6149a17d676668cdf779b1b93
parent51c42ae3d76a16167abbde7dc19b7220c5786d35
dmaengine: amd: qdma: Add AMD QDMA driver

Adds driver to enable PCIe board which uses AMD QDMA (the Queue-based
Direct Memory Access) subsystem. For example, Xilinx Alveo V70 AI
Accelerator devices.
    https://www.xilinx.com/applications/data-center/v70.html

The QDMA subsystem is used in conjunction with the PCI Express IP block
to provide high performance data transfer between host memory and the
card's DMA subsystem.

            +-------+       +-------+       +-----------+
   PCIe     |       |       |       |       |           |
   Tx/Rx    |       |       |       |  AXI  |           |
 <=======>  | PCIE  | <===> | QDMA  | <====>| User Logic|
            |       |       |       |       |           |
            +-------+       +-------+       +-----------+

The primary mechanism to transfer data using the QDMA is for the QDMA
engine to operate on instructions (descriptors) provided by the host
operating system. Using the descriptors, the QDMA can move data in both
the Host to Card (H2C) direction, or the Card to Host (C2H) direction.
The QDMA provides a per-queue basis option whether DMA traffic goes
to an AXI4 memory map (MM) interface or to an AXI4-Stream interface.

The hardware detail is provided by
    https://docs.xilinx.com/r/en-US/pg302-qdma

Implements dmaengine APIs to support MM DMA transfers.
- probe the available DMA channels
- use dma_slave_map for channel lookup
- use virtual channel to manage dmaengine tx descriptors
- implement device_prep_slave_sg callback to handle host scatter gather
  list

Signed-off-by: Nishad Saraf <nishads@amd.com>
Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
Link: https://lore.kernel.org/r/20240819211948.688786-2-lizhi.hou@amd.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
MAINTAINERS
drivers/dma/Kconfig
drivers/dma/Makefile
drivers/dma/amd/Kconfig [new file with mode: 0644]
drivers/dma/amd/Makefile [new file with mode: 0644]
drivers/dma/amd/qdma/Makefile [new file with mode: 0644]
drivers/dma/amd/qdma/qdma-comm-regs.c [new file with mode: 0644]
drivers/dma/amd/qdma/qdma.c [new file with mode: 0644]
drivers/dma/amd/qdma/qdma.h [new file with mode: 0644]
include/linux/platform_data/amd_qdma.h [new file with mode: 0644]