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

Reply via email to