On Fri, 27 Jun 2026 at 08:23, fengchengwen <[email protected]> wrote: > > > This commit adds: > > - copy enqueue (rte_dma_copy): ... > I don't think it's necessary to write in such detail because the ops > implemented are defined by the framework. If needed, you can supplement > by explaining what special features this driver has.
Condensed the commit log in v4. It now just lists the ops and explains the driver-specific completion handling (the engine signals completion by advancing read_idx rather than reliably writing a status word back). > > + cmd_q->next_write = (uint16_t)((write + 1) % nb); > the next_write is [0, nb_desc-1], and it will as return value as copy, > but the dmadev framework expect as [0, 0xFFFF], I doubt your drvier was > not passed in any DMA test (e.g. dpdk-test, dpdk-dma-perf or examples/dma) > ... > > + *last_idx = (uint16_t)((cmd_q->next_read - 1 + nb) % nb); > the last_idx should be in range of [0, 0xFFFF] Rather than having two counters,framework counter and h/w slot count in dricer, we had verified internally by wrapping counters of dma-test apps to h/w slots(32). But again as you mentioned everything has to go with framework.v4 reworks the indexing so next_write/next_read are free-running 16-bit counters in [0, 0xFFFF]: - rte_dma_copy() returns the pre-increment free-running ring_idx. - completed()/completed_status() always set last_idx to the last completed ring_idx (next_read - 1), even when no new op is reaped. - the HW ring slot is derived as (hw_base + idx) & (nb_desc - 1), and in-flight as (next_write - next_read), which is why the depth is kept a power of two. With this plus RTE_DMA_CAPA_OPS_COPY (patch 2/4), the driver follows the framework ring-index contract. > > + case AE4DMA_DMA_ERR_INV_ALIGN: > > + /* Name matches DPDK public enum spelling. */ > > + return RTE_DMA_STATUS_DATA_POISION; > Suggest add RTE_DMA_STATUS_INVALID_ALIGN enum in rte_dmadev.h Agreed that reusing DATA_POISION was wrong. For v4 the alignment error maps to RTE_DMA_STATUS_ERROR_UNKNOWN so we no longer misuse an unrelated code. Adding a dedicated RTE_DMA_STATUS_INVALID_ALIGNMENT to the public rte_dmadev.h touches the dmadev API, so I would prefer to do that as a separate follow-up patch with its own justification - happy to send it if you agree. > > + if (nb < 2 || !rte_is_power_of_2(nb)) > > + return 0; > No need to check this Removed; vchan_setup already guarantees a valid power-of-two depth. burst_capacity now just computes (nb - 1) - in_flight. Thanks, Raghavendra

