[RFC PATCH] dmaengine: xilinx_dma: Fix per-channel direction reporting via device_caps

Folker Schwesinger dev at folker-schwesinger.de
Tue Mar 3 12:19:35 PST 2026


On Tue Mar 3, 2026 at 9:09 PM CET, Folker Schwesinger wrote:
> So I think it's reasonable to assume that either (1) the change in
> return value of dma_get_slave_caps() causes different behaviour in the
> callers (possibly [2][3]; needs verification) or that (2) dma_slave_caps
> *caps, whose fields now get populated in dma_get_slave_caps() cause
> different behavior in downstream users of said caps.
>
> For the next debugging step I suggest that we focus on (2) but also on
> getting some insight into the callers. Could you please reapply
> 7e01511443c3, keep the RFC patch in place...

To quickly test theory (2), you could then comment out the caps->
assignments in dma_get_slave_caps() and check if this fixes your issue
or not.

<-->8-->

diff --git i/drivers/dma/dmaengine.c w/drivers/dma/dmaengine.c
index ca13cd39330b..91c5d7abb028 100644
--- i/drivers/dma/dmaengine.c
+++ w/drivers/dma/dmaengine.c
@@ -592,6 +592,7 @@ int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps)
 	if (!device->directions)
 		return -ENXIO;

+	/*
 	caps->src_addr_widths = device->src_addr_widths;
 	caps->dst_addr_widths = device->dst_addr_widths;
 	caps->directions = device->directions;
@@ -603,6 +604,7 @@ int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps)
 	caps->cmd_pause = !!device->device_pause;
 	caps->cmd_resume = !!device->device_resume;
 	caps->cmd_terminate = !!device->device_terminate_all;
+	*/

 	/*
 	 * DMA engine device might be configured with non-uniformly

<--8<-->



More information about the linux-arm-kernel mailing list