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

From: Folker Schwesinger

Date: Tue Mar 03 2026 - 15:24:18 EST


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<-->