[PATCH v5 0/6] PCI: endpoint: Expose endpoint DMA resources (part 2/3)
From: Koichiro Den
Date: Fri Jul 17 2026 - 01:09:52 EST
Hi,
This is v5, part 2 of three series for PCI endpoint DMA.
The three series are:
* part 1: dmaengine: dw-edma: Prepare for PCI EP DMA
* part 2: PCI: endpoint: Expose endpoint DMA resources
* part 3: PCI: endpoint: Add PCI DMA endpoint function
This series defines the endpoint DMA BAR metadata and auxiliary
resources, adds EPC operations for DMA channel delegation, and teaches
the DesignWare endpoint controller to publish and delegate its
integrated DMA resources.
The metadata lives in a normal endpoint BAR, not in PCI config space.
This keeps discovery independent from controller-specific writable
extended capability storage.
This series depends on part 1:
[PATCH v5 00/14] dmaengine: dw-edma: Prepare for PCI EP DMA (part 1/3)
https://lore.kernel.org/r/20260717050308.2144108-1-den@xxxxxxxxxxxxx
Best regards,
Koichiro
---
Changes in v5:
- Keep reporting a standalone doorbell when linked-list DMA resources
are unavailable. (Sashiko)
- Serialize irq_mode restoration with channel state updates. (Sashiko)
- Clarify the provider-defined sharing-group quiesce contract.
- Use guard()/scoped_guard() for new code.
Changes in v4:
- Rebased onto the new part 1 series.
- "dmaengine: dw-edma: Add delegated channel request helpers" moved
from part 1 into this series, next to its only users; this also
resolves the undeclared-functions issue reported against v3 5/5.
(Sashiko)
- Lift the v3 PF0-only restriction on DMA resource exposure and
channel delegation: part 1 now programs the per-channel requester
function number. Delegation to PF1+ therefore requires part 1
applied on the host side.
- Move pci_epc_function_is_valid() up to avoid a potential error
pointer dereference. (Sashiko)
Changes in v3:
- Decouple logical DMA channel metadata from descriptor memory resources.
Logical channels now refer to descriptor memory by resource ID instead
of embedding descriptor metadata in each channel resource. (Sashiko)
- Replace the v2 DMAengine filter-callback metadata with EPC-level DMA
channel delegation/reclaim operations, keeping DMAengine provider
details out of generic EPC resource metadata.
- Add the DesignWare EPC backend for DMA channel delegation.
- Limit DesignWare endpoint DMA resource exposure to linked-list channels
until non-LL metadata and host-side parsing are added.
- Suppress DesignWare DMA auxiliary resources when the local DW eDMA
provider is not available.
- Reject VF DMA resource and delegation requests because the DWC
eDMA/HDMA register window exposed to the Root Complex is PF-only.
Changes in v2:
- Follow the part 1/3 v2 channel-claim model: EPC DMA resources now
carry DMAengine filter information instead of raw DMA channel
pointers. (Sashiko)
- Update the DesignWare endpoint resource provider accordingly. (Sashiko)
v4: https://lore.kernel.org/r/20260710082156.2395844-1-den@xxxxxxxxxxxxx/
v3: https://lore.kernel.org/r/20260620170438.3756593-1-den@xxxxxxxxxxxxx/
v2: https://lore.kernel.org/r/20260525063129.3316894-1-den@xxxxxxxxxxxxx/
v1: https://lore.kernel.org/r/20260521063405.2842644-1-den@xxxxxxxxxxxxx/
Koichiro Den (6):
PCI: endpoint: Define endpoint DMA BAR metadata format
PCI: endpoint: Add DMA auxiliary resource metadata
PCI: endpoint: Add API to delegate EPC DMA channels to the host
PCI: dwc: Expose endpoint DMA resources
dmaengine: dw-edma: Add delegated channel request helpers
PCI: dwc: Implement endpoint DMA channel delegation
MAINTAINERS | 1 +
drivers/dma/dw-edma/dw-edma-core.c | 91 +++++++++
.../pci/controller/dwc/pcie-designware-ep.c | 175 +++++++++++++++++-
drivers/pci/endpoint/pci-epc-core.c | 105 +++++++++++
include/linux/dma/edma.h | 14 ++
include/linux/pci-ep-dma.h | 170 +++++++++++++++++
include/linux/pci-epc.h | 62 +++++++
7 files changed, 614 insertions(+), 4 deletions(-)
create mode 100644 include/linux/pci-ep-dma.h
--
2.51.0