[PATCH v2 0/7] dmaengine: dw-edma, PCI: dwc: Enable remote use of integrated DesignWare eDMA

From: Koichiro Den

Date: Mon Jan 26 2026 - 22:35:36 EST


Hi,

Per Frank Li's suggestion [1], this revision combines the previously posted
PCI/dwc helper series and the dmaengine/dw-edma series into a single
7-patch set. This series therefore supersedes the two earlier postings:

- [PATCH 0/5] dmaengine: dw-edma: Add helpers for remote eDMA use scenarios
https://lore.kernel.org/dmaengine/20260126073652.3293564-1-den@xxxxxxxxxxxxx/
- [PATCH 0/2] PCI: dwc: Expose integrated DesignWare eDMA windows
https://lore.kernel.org/linux-pci/20260126071550.3233631-1-den@xxxxxxxxxxxxx/

[1] https://lore.kernel.org/linux-pci/aXeoxxG+9cFML1sx@lizhi-Precision-Tower-5810/

Some DesignWare PCIe endpoint platforms integrate a DesignWare eDMA
instance alongside the PCIe controller. In remote eDMA use cases, the host
needs access to the eDMA register block and the per-channel linked-list
(LL) regions via PCIe BARs, while the endpoint may still boot with a
standard EP configuration (and may also use dw-edma locally).

This series provides the following building blocks:

* dmaengine: Add an optional dma_slave_caps.hw_id so DMA providers can expose
a provider-defined hardware channel identifier to clients, and report it
from dw-edma. This allows users to correlate a DMA channel with
hardware-specific resources such as per-channel LL regions.

* dmaengine/dw-edma: Add features useful for remote-controlled EP eDMA usage:
- per-channel interrupt routing control (configured via dmaengine_slave_config(),
passing a small dw-edma-specific structure through
dma_slave_config.peripheral_config / dma_slave_config.peripheral_size),
- optional completion polling when local IRQ handling is disabled, and
- notify-only channels for cases where the local side needs interrupt
notification without cookie-based accounting (i.e. its peer
prepares and submits the descriptors), useful when host-to-endpoint
interrupt delivery is difficult or unavailable without it.

* PCI: dwc: Add query-only helper APIs to expose resources of an integrated
DesignWare eDMA instance:
- the physical base/size of the eDMA register window, and
- the per-channel LL region base/size, keyed by transfer direction and
the hardware channel identifier (hw_id).

The first real user will likely be the DesignWare backend in the NTB transport work:

[RFC PATCH v4 25/38] NTB: hw: Add remote eDMA backend registry and DesignWare backend
https://lore.kernel.org/linux-pci/20260118135440.1958279-26-den@xxxxxxxxxxxxx/

(Note: the implementation in this series has been updated since that
RFC v4, so the RFC series will also need some adjustments. I have an
updated RFC series locally and can post an RFC v5 if that would help
review/testing.)

Apply/merge notes:
- Patches 1-5 apply cleanly on dmaengine.git next.
- Patches 6-7 apply cleanly on pci.git controller/dwc.

Changes in v2:
- Combine the two previously posted series into a single set (per Frank's
suggestion). Order dmaengine/dw-edma patches first so hw_id support
lands before the PCI LL-region helper, which assumes
dma_slave_caps.hw_id availability.

Thanks for reviewing,


Koichiro Den (7):
dmaengine: Add hw_id to dma_slave_caps
dmaengine: dw-edma: Report channel hw_id in dma_slave_caps
dmaengine: dw-edma: Add per-channel interrupt routing control
dmaengine: dw-edma: Poll completion when local IRQ handling is
disabled
dmaengine: dw-edma: Add notify-only channels support
PCI: dwc: Add helper to query integrated dw-edma register window
PCI: dwc: Add helper to query integrated dw-edma linked-list region

MAINTAINERS | 2 +-
drivers/dma/dmaengine.c | 1 +
drivers/dma/dw-edma/dw-edma-core.c | 167 +++++++++++++++++--
drivers/dma/dw-edma/dw-edma-core.h | 21 +++
drivers/dma/dw-edma/dw-edma-v0-core.c | 26 ++-
drivers/pci/controller/dwc/pcie-designware.c | 74 ++++++++
drivers/pci/controller/dwc/pcie-designware.h | 2 +
include/linux/dma/edma.h | 57 +++++++
include/linux/dmaengine.h | 2 +
include/linux/pcie-dwc-edma.h | 72 ++++++++
10 files changed, 398 insertions(+), 26 deletions(-)
create mode 100644 include/linux/pcie-dwc-edma.h

--
2.51.0