[PATCH v3 0/9] dmaengine: sun6i: fix interrupt routing and channel lifetime
From: James Hilliard
Date: Fri Oct 23 2026 - 19:38:54 EST
Correct interrupt routing and serialize physical-channel ownership across
allocation, completion, pause and termination. Keep paused virtual channels
off the allocator, drain completion callbacks before releasing resources,
and associate cyclic state with the descriptor that owns it.
The first patch carries Hongling Zeng's physical-channel indexing fix [0],
adapted to the configurable interrupt-bank size introduced for A733. The
second handles partially populated banks, including H3's twelve channels.
The ownership work is split into lock ordering, physical-channel locking,
completed-descriptor retirement and interrupt cleanup. Pause bookkeeping,
callback synchronization and per-descriptor cyclic state follow separately.
Based on DMAengine next at aff5e6a77fc6, which includes A733 support, with
the posted IRQ-safe locking fix [1], channel pause-bit fix [2], and the
virt-dma synchronization helper from [3] applied first. The synchronization
patch uses that shared helper for the sun6i device_synchronize callback.
[0] https://lore.kernel.org/r/20260706064123.66035-1-zenghongling@xxxxxxxxxx
[1] https://lore.kernel.org/r/20260926171049.841335-1-tien.nguyenminh@xxxxxxxxxxxxxxxxxx
[2] https://lore.kernel.org/r/20261021-submit-sun6i-dma-pause-bit-v1-v1-1-38d286b69dab@xxxxxxxxx
[3] https://lore.kernel.org/r/20261022-submit-mtk-uart-dma-synchronize-v1-v2-1-fdaef0e2edd6@xxxxxxxxx
Assisted-by: Codex:gpt-6-astra
Signed-off-by: James Hilliard <james.hilliard1@xxxxxxxxx>
---
Changes in v3:
- Split the ownership patch into four commits covering lock ordering,
physical-channel locking, completed-descriptor retirement and interrupt
cleanup, following Frank Li's review.
- Document why virt-dma still takes vc.lock independently of sdev->lock.
- Check pending interrupt status first in the per-bank loop condition.
- Link to v2: https://lore.kernel.org/r/20261023-submit-sun6i-dma-lifetime-next-v1-v2-0-c9e07cc44bf8@xxxxxxxxx
Changes in v2:
- Clear the active descriptor pointer before handing finite completion to
virt-dma, replacing the completed-descriptor pointer.
- Release completed physical channels while their virtual channels remain
paused, and clear the hardware pause request before reassignment.
- Keep the ownership changes in patch 3 and the pause policy in patch 4.
- Link to v1: https://lore.kernel.org/r/20261022-submit-sun6i-dma-lifetime-next-v1-v1-0-01085f684c9f@xxxxxxxxx
---
Hongling Zeng (1):
dmaengine: sun6i: fix physical channel index in interrupt handler
James Hilliard (8):
dmaengine: sun6i: handle the last partial interrupt bank
dmaengine: sun6i: take the device lock before the virtual channel lock
dmaengine: sun6i: serialize physical channel ownership
dmaengine: sun6i: detach completed descriptors before invoking callbacks
dmaengine: sun6i: retire interrupt state before reusing physical channels
dmaengine: sun6i: track paused virtual channels
dmaengine: sun6i: synchronize callbacks before releasing channel resources
dmaengine: sun6i: keep cyclic state with the prepared descriptor
drivers/dma/sun6i-dma.c | 183 ++++++++++++++++++++++++++++--------------------
1 file changed, 106 insertions(+), 77 deletions(-)
---
base-commit: aff5e6a77fc69a7c490246465940d18422d7c631
change-id: 20261022-submit-sun6i-dma-lifetime-next-v1-53c3158f4841
prerequisite-patch-id: d6398447647aa0dbb005b5e6dc6ba96e642efa86
prerequisite-patch-id: f67c1f8d8d9e014cc650f2f37648662430c3b77b
prerequisite-patch-id: 8522878df4ecd4fb007cfd32611359e6eb58a1ef
Best regards,
--
James Hilliard <james.hilliard1@xxxxxxxxx>