[PATCH v3 0/3] dma/ae4dma: add AMD AE4DMA DMA PMD
Raghavendra Ningoji
raghavendra.ningoji at amd.com
Thu Jun 25 20:47:25 CEST 2026
This series adds a new dmadev poll-mode driver for the AMD AE4DMA
hardware DMA engine. An AE4DMA engine exposes 16 hardware command
queues, each with a 32-entry descriptor ring; the PMD maps each
hardware channel to its own dmadev with a single virtual channel,
so a PCI function appears as 16 dmadevs named "<pci-bdf>-ch0" ..
"<pci-bdf>-ch15".
Driver characteristics:
- Memory-to-memory copy operations only (RTE_DMA_CAPA_MEM_TO_MEM).
- Completion is detected via the hardware's per-queue read_idx
register, which the engine advances as it processes descriptors.
The descriptor status / err_code bytes are read only to classify
each drained slot as success or failure.
- vchan_status reports IDLE/ACTIVE based on HW read_idx vs write_idx
and HALTED_ERROR when the queue is not enabled.
- depends on bus_pci and dmadev.
The driver is introduced in three logical patches, following the
pattern of the recent hisi_acc dmadev driver:
1/3 - introduce driver (probe, remove, per-queue HW init)
2/3 - add control path operations (dev_ops)
3/3 - add data path operations (copy, submit, completion)
Changes in v3:
- Address review comments from David Marchand on patch 1/3 and 2/3:
* Track the descriptor-ring memzone in the queue structure and
free it directly in dev_close() instead of re-resolving it by
name (also fixes the potential leak noted on probe/unplug).
* Drop the unused back-references (ae4dma->dmadev, ae4dma->pci);
pass the rte_pci_device to ae4dma_add_queue() instead.
* Stop setting dev->device.driver in probe(); EAL sets it on
probe() success since commit f282771a04ef.
* Remove the redundant NULL name check in the single-caller
helper, the needless NULL initialisers and the __func__ in the
error log (already added by the log macro), and the NULL test
before rte_memzone_free().
* Remove the info->dev_name assignment (set by rte_dma_info_get()).
* Replace the unsigned-long low32_value()/high32_value() helpers
with lower_32_bits()/upper_32_bits() and drop the redundant
index casts.
* ae4dma_hw_defs.h: include <stdint.h>, drop the C++ guards and
add the missing trailing enum comma; ae4dma_internal.h: convert
doxygen comments to plain comments.
* Remove trivial "what" comments throughout.
- Reorder the .mailmap entry into alphabetical position.
- Naming/architecture (16 dmadevs per PCI function, "<bdf>-chX")
acknowledged as acceptable by Chengwen Feng and Bruce Richardson;
kept unchanged.
Changes in v2:
- Split the monolithic v1 patch into three logical patches
(introduce / control path / data path), mirroring the
structure used by drivers/dma/hisi_acc.
- Fix checkpatches.sh warnings in ae4dma_internal.h (RTE_LOG_LINE_PREFIX,
C99 __VA_ARGS__, __rte_cache_aligned placement).
v1: https://patches.dpdk.org/project/dpdk/patch/20260518181856.1228373-1-raghavendra.ningoji@amd.com/
v2: https://patches.dpdk.org/project/dpdk/patch/20260525184244.1758825-1-raghavendra.ningoji@amd.com/
Raghavendra Ningoji (3):
dma/ae4dma: introduce AMD AE4DMA DMA PMD
dma/ae4dma: add control path operations
dma/ae4dma: add data path operations
.mailmap | 1 +
MAINTAINERS | 5 +
doc/guides/dmadevs/ae4dma.rst | 75 +++
doc/guides/dmadevs/index.rst | 1 +
doc/guides/rel_notes/release_26_07.rst | 7 +
drivers/dma/ae4dma/ae4dma_dmadev.c | 718 +++++++++++++++++++++++++
drivers/dma/ae4dma/ae4dma_hw_defs.h | 154 ++++++
drivers/dma/ae4dma/ae4dma_internal.h | 97 ++++
drivers/dma/ae4dma/meson.build | 7 +
drivers/dma/meson.build | 1 +
usertools/dpdk-devbind.py | 5 +-
11 files changed, 1070 insertions(+), 1 deletion(-)
create mode 100644 doc/guides/dmadevs/ae4dma.rst
create mode 100644 drivers/dma/ae4dma/ae4dma_dmadev.c
create mode 100644 drivers/dma/ae4dma/ae4dma_hw_defs.h
create mode 100644 drivers/dma/ae4dma/ae4dma_internal.h
create mode 100644 drivers/dma/ae4dma/meson.build
base-commit: f724d1c0d1c1636b9c171c34db3f17c3defaa2f3
--
2.34.1
More information about the dev
mailing list