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.
v4 addresses the v3 review comments from Chengwen Feng. Changes since v3: Patch 1/4 (introduce): - Fix copyright years (2025/2024 -> 2026) in ae4dma.rst and meson.build. - Drop the unnecessary memzone lookup/reuse logic in ae4dma_queue_dma_zone_reserve(); the rings are reserved once at probe. - Trim ae4dma_hw_defs.h includes to only what the header needs (stdint.h and rte_bitops.h); move the rest to ae4dma_internal.h. - Remove the redundant double blank lines in ae4dma_internal.h. - Use an initialiser instead of memset() to zero hwq_dev_name and reorder local variable 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 the command queue to anchor the free-running ring index to the HW consumer slot (see patch 2). Patch 2/4 (control path): - dev_info_get now also advertises RTE_DMA_CAPA_OPS_COPY so the device correctly reports memory-to-memory copy operation support. - Use 'conf_sz < sizeof(...)' instead of '!=' in dev_configure and vchan_setup to stay ABI compatible. - Drop the checks already performed by the dmadev framework (nb_desc bounds in vchan_setup, NULL/size checks in stats_get, size check in dev_info_get). - Reset the free-running ring indices in vchan_setup and dev_start so ring_idx restarts from 0 on every (re)start, as expected by the dmadev API. read_idx is HW-owned (read-only), so index 0 is anchored to the current HW consumer slot (hw_base) and dev_start (re)enables the queue and sets write_idx == read_idx to start empty. - Reword the commit log: the device supports a 2 to 32 descriptor range, not a fixed depth. Patch 3/4 (data path): - Fix the framework ring-index contract: rte_dma_copy() now returns, and completed()/completed_status() now report last_idx as, a free-running 16-bit value in [0, 0xFFFF] instead of a [0, nb_desc-1] ring slot. The HW ring slot is derived as (hw_base + idx) & mask. - last_idx is always set to the last completed ring_idx, including when completed()/completed_status() reap nothing, matching the dmadev API and the ioat/idxd drivers. - Map the AE4DMA alignment error to RTE_DMA_STATUS_ERROR_UNKNOWN instead of reusing RTE_DMA_STATUS_DATA_POISION. Adding a dedicated RTE_DMA_STATUS_INVALID_ALIGNMENT to the public API can be a separate follow-up. - Drop the redundant power-of-two/range check in burst_capacity(). - Document the ring-depth limitation: the hardware fixes the ring at 32 descriptors and reserves one slot, so at most 31 operations can be outstanding (burst_capacity() returns at most 31). - Condense the commit log. Patch 4/4 (test) - new in v4: - test/dma: return TEST_SKIPPED instead of failing the instance suite when a device reports a burst capacity below 32. The AE4DMA ring holds 32 descriptors and reserves one slot, so at most 31 can be outstanding; the instance suite enqueues 32-deep bursts and is now skipped rather than reported as a failure on such hardware, 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 | 673 +++++++++++++++++++++++++ drivers/dma/ae4dma/ae4dma_hw_defs.h | 151 ++++++ drivers/dma/ae4dma/ae4dma_internal.h | 114 +++++ drivers/dma/ae4dma/meson.build | 13 + drivers/dma/meson.build | 1 + usertools/dpdk-devbind.py | 5 +- 12 files changed, 1053 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

