[PATCH v5 0/4] dma/ae4dma: add AMD AE4DMA DMA PMD
Raghavendra Ningoji
raghavendra.ningoji at amd.com
Fri Jul 10 09:36:04 CEST 2026
This series adds a new dmadev poll-mode driver for the AMD AE4DMA
hardware DMA engine, split into introduction, control path and data
path patches, plus a small dmadev test-suite patch.
v5 addresses the v4 review comments from Chengwen Feng.
Changes since v4:
Patch 1/4 (introduce):
- Drop the custom AE4DMA_BIT() macro and use RTE_BIT32() from
rte_bitops.h for the DWORD0 control-bit and memory-type defines.
- Remove the now-unused per-queue status[] array from
struct ae4dma_cmd_queue (completion status is derived directly from
the descriptors in patch 3).
Patch 3/4 (data path):
- Fix rte_dma_completed(): stop at the first failed descriptor and
return only the run of successful ops preceding it, set *has_error,
and leave the failed op to be reported by rte_dma_completed_status().
last_idx now reports the last successfully completed ring_idx.
- Drop the redundant 'if (last_idx != NULL)' check; the framework
always passes a non-NULL last_idx.
Patch 4/4 (test):
- Unchanged; retains TEST_SKIPPED for sub-32 burst capacity.
Changes since v3 (carried over, for reference):
Patch 1/4 (introduce):
- Fix copyright years (2025/2024 -> 2026) in ae4dma.rst and meson.build.
- Drop the unnecessary memzone lookup/reuse logic; rings are reserved
once at probe.
- Trim ae4dma_hw_defs.h includes; move the rest to ae4dma_internal.h.
- Remove redundant double blank lines in ae4dma_internal.h.
- Use an initialiser instead of memset() for hwq_dev_name and reorder
local declarations in descending length.
- Make the probe-failure log message more descriptive.
- Build only on Linux (add the is_linux guard to meson.build).
- Add a hw_base field to anchor the free-running ring index.
Patch 2/4 (control path):
- Advertise RTE_DMA_CAPA_OPS_COPY in dev_info_get.
- Use 'conf_sz < sizeof(...)' instead of '!=' to stay ABI compatible.
- Drop checks already performed by the dmadev framework.
- Reset the free-running ring indices in vchan_setup and dev_start,
anchoring index 0 to the current HW consumer slot (hw_base).
- Reword the commit log for the 2 to 32 descriptor range.
Patch 3/4 (data path):
- Return free-running 16-bit ring_idx values from rte_dma_copy() and
completed()/completed_status(); HW slot = (hw_base + idx) & mask.
- Map the AE4DMA alignment error to RTE_DMA_STATUS_ERROR_UNKNOWN.
- Drop the redundant power-of-two/range check in burst_capacity().
- Document the 32-descriptor / 31-outstanding ring-depth limitation.
Patch 4/4 (test) - added in v4:
- Return TEST_SKIPPED instead of failing the instance suite when a
device reports burst capacity below 32, matching the existing < 64
skip used by the burst_capacity test.
Note: the power-of-two rounding of nb_desc in vchan_setup is retained
on purpose: the free-running ring index is mapped to a HW ring slot by
masking, which is only correct for a power-of-two depth.
Raghavendra Ningoji (4):
dma/ae4dma: introduce AMD AE4DMA DMA PMD
dma/ae4dma: add control path operations
dma/ae4dma: add data path operations
test/dma: skip instance suite on low burst capacity
.mailmap | 1 +
MAINTAINERS | 5 +
app/test/test_dmadev.c | 8 +-
doc/guides/dmadevs/ae4dma.rst | 77 +++
doc/guides/dmadevs/index.rst | 1 +
doc/guides/rel_notes/release_26_07.rst | 7 +
drivers/dma/ae4dma/ae4dma_dmadev.c | 677 +++++++++++++++++++++++++
drivers/dma/ae4dma/ae4dma_hw_defs.h | 149 ++++++
drivers/dma/ae4dma/ae4dma_internal.h | 113 +++++
drivers/dma/ae4dma/meson.build | 13 +
drivers/dma/meson.build | 1 +
usertools/dpdk-devbind.py | 5 +-
12 files changed, 1054 insertions(+), 3 deletions(-)
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
--
2.34.1
More information about the dev
mailing list