[PATCH v5 0/4] dmaengine: zynqmp_dma: Add reset support for Versal Gen2 and Versal Net

From: Golla Nagendra

Date: Fri Nov 06 2026 - 05:16:30 EST


This series adds per-channel reset support for Versal Gen2 and Versal Net
DMA channels.

Patch 1 requires the resets property for Versal Gen2 DMA devices.

Patch 2 adds the amd,versal-net-dma-1.0 compatible with
xlnx,zynqmp-dma-1.0 as its fallback and requires the resets property for
Versal Net devices.

Patch 3 adds the Versal Net compatible to the driver match table and
introduces match data to identify devices that support per-channel reset.

Patch 4 resets each Versal Gen2 and Versal Net DMA channel during probe.
Probe fails if the required reset property is missing or the reset fails.
Legacy SoCs skip the per-channel reset path.

Changes in V5:
- Drop the probe-time PM and unrelated IRQ-guard patches; retain only the
patches required for reset support
- Split the Versal Gen2 reset requirement and Versal Net compatible into
separate binding patches

Changes in V4:
- Patch 1: Use PM_RUNTIME_ACQUIRE_AUTOSUSPEND() instead of
pm_runtime_resume_and_get(), and fail probe immediately if the guard
acquire fails. Add zynqmp_dma_probe_pm_put()/_fail()
helpers so every error path releases the reference and gates the
clocks without goto-based cleanup, and pair every direct
zynqmp_dma_runtime_suspend() call with pm_runtime_set_suspended() to
keep the runtime PM status in sync with the clocks
- Patch 2: Bypass the guard when pm_runtime_get_if_active() returns
-EINVAL, covering disabled runtime PM and CONFIG_PM=n, so interrupt
handlers keep servicing interrupts instead of bailing out
- Patch 3: Remove the IS_ENABLED(CONFIG_PM) condition from the guard
error check, since patch 2 already handles disabled runtime PM and
CONFIG_PM=n inside the guard itself
- Patch 4: Move the allOf block under the required field
Add the new compatible string and the resets property in the example
- Patch 5: No change
- Patch 6: No change

Changes in V3:
- Patch 1: New patch - split PM usage count fix into a separate patch as
- Patch 2: New patch - add PM_RUNTIME_ACQUIRE_IF_ACTIVE() guard and its
backing infrastructure to pm_runtime.h
- Patch 3: Use PM_RUNTIME_ACQUIRE_IF_ACTIVE() guard instead of the manual
pm_runtime_get_if_active()/pm_runtime_put() pair from V2
- Patch 4: Use allOf:if:then: to restrict the resets property per-
compatible with resets: false for non-matching platforms
also expand to include amd,versal-net-dma-1.0
- Patch 5: New patch - add amd,versal-net-dma-1.0 compatible to driver
- Patch 6: Introduce has_reset flag in zynqmp_dma_config to gate the
reset path; PM usage count fix split into patch 1/6

Link to V4:
-----------
https://lore.kernel.org/all/20261009-adma-pm-fix-and-per-channel-reset-v4-0-55f5fe409c55@xxxxxxx/

Signed-off-by: Golla Nagendra <nagendra.golla@xxxxxxx>
---
Golla Nagendra (4):
dt-bindings: dma: xlnx,zynqmp-dma: Require resets for Versal Gen2
dt-bindings: dma: xlnx,zynqmp-dma: Add Versal Net compatible
dmaengine: zynqmp_dma: Add new compatible string for Versal Net
dmaengine: zynqmp_dma: Add per-channel reset support

.../bindings/dma/xilinx/xlnx,zynqmp-dma-1.0.yaml | 35 +++++++++++++++++-----
drivers/dma/xilinx/zynqmp_dma.c | 18 ++++++++++-
2 files changed, 45 insertions(+), 8 deletions(-)
---
base-commit: 2576c937f7b442df7de8e39332ff585f08b666b8
change-id: 20261106-adma_per_channel_reset_v5-f826adb1314b

Best regards,
--
Golla Nagendra <nagendra.golla@xxxxxxx>