* [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements
@ 2025-09-23 8:23 Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 1/4] dma: dma-axi-dmac: fix SW cyclic transfers Nuno Sá via B4 Relay
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-09-23 8:23 UTC (permalink / raw)
To: dmaengine; +Cc: Vinod Koul, Lars-Peter Clausen, Paul Cercueil
This series adds some fixes to the DMA core with respect with cyclic
transfer and HW scatter gather.
It also adds some improvements. Most notably for allowing bigger that
32bits DMA masks so we do not have to rely on bounce buffers from
swiotlb.
---
Nuno Sá (4):
dma: dma-axi-dmac: fix SW cyclic transfers
dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
dma: dma-axi-dmac: support bigger than 32bits addresses
dma: dma-axi-dmac: simplify axi_dmac_parse_dt()
drivers/dma/dma-axi-dmac.c | 48 +++++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 15 deletions(-)
---
base-commit: cc0bacac6de7763a038550cf43cb94634d8be9cd
change-id: 20250922-b4-dev-axi-dmac-fixes-bbf62fd5ee9c
--
Thanks!
- Nuno Sá
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH RESEND 1/4] dma: dma-axi-dmac: fix SW cyclic transfers
2025-09-23 8:23 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
@ 2025-09-23 8:23 ` Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-09-23 8:23 UTC (permalink / raw)
To: dmaengine; +Cc: Vinod Koul, Lars-Peter Clausen, Paul Cercueil
From: Nuno Sá <nuno.sa@analog.com>
If 'hw_cyclic' is false we should still be able to do cyclic transfers in
"software". That was not working for the case where 'desc->num_sgs' is 1
because 'chan->next_desc' is never set with the current desc which means
that the cyclic transfer only runs once and in the next SOT interrupt we
do nothing since vchan_next_desc() will return NULL.
Fix it by setting 'chan->next_desc' as soon as we get a new desc via
vchan_next_desc().
Fixes: 0e3b67b348b8 ("dmaengine: Add support for the Analog Devices AXI-DMAC DMA controller")
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 5b06b0dc67ee12017c165bf815fb7c0e1bf5abd8..e22639822045f237ebcd1fa012a75bbe7dc536c5 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -247,6 +247,7 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
return;
list_move_tail(&vdesc->node, &chan->active_descs);
desc = to_axi_dmac_desc(vdesc);
+ chan->next_desc = desc;
}
sg = &desc->sg[desc->num_submitted];
@@ -265,8 +266,6 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
else
chan->next_desc = NULL;
flags |= AXI_DMAC_FLAG_LAST;
- } else {
- chan->next_desc = desc;
}
sg->hw->id = axi_dmac_read(dmac, AXI_DMAC_REG_TRANSFER_ID);
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
2025-09-23 8:23 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 1/4] dma: dma-axi-dmac: fix SW cyclic transfers Nuno Sá via B4 Relay
@ 2025-09-23 8:23 ` Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 3/4] dma: dma-axi-dmac: support bigger than 32bits addresses Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 4/4] dma: dma-axi-dmac: simplify axi_dmac_parse_dt() Nuno Sá via B4 Relay
3 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-09-23 8:23 UTC (permalink / raw)
To: dmaengine; +Cc: Vinod Koul, Lars-Peter Clausen, Paul Cercueil
From: Nuno Sá <nuno.sa@analog.com>
For HW scatter gather transfers we still need to look for the queue. The
HW is capable of queueing 3 concurrent transfers and if we try more than
that we'll get the submit queue full and should return. Otherwise, if we
go ahead and program the new transfer, we end up discarding it.
Fixes: e97dc7435972 ("dmaengine: axi-dmac: Add support for scatter-gather transfers")
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index e22639822045f237ebcd1fa012a75bbe7dc536c5..0f25f6d8ae71fa73fb24c58b3e2ecfea452cd158 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -233,11 +233,9 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
unsigned int flags = 0;
unsigned int val;
- if (!chan->hw_sg) {
- val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
- if (val) /* Queue is full, wait for the next SOT IRQ */
- return;
- }
+ val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
+ if (val) /* Queue is full, wait for the next SOT IRQ */
+ return;
desc = chan->next_desc;
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH RESEND 3/4] dma: dma-axi-dmac: support bigger than 32bits addresses
2025-09-23 8:23 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 1/4] dma: dma-axi-dmac: fix SW cyclic transfers Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
@ 2025-09-23 8:23 ` Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 4/4] dma: dma-axi-dmac: simplify axi_dmac_parse_dt() Nuno Sá via B4 Relay
3 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-09-23 8:23 UTC (permalink / raw)
To: dmaengine; +Cc: Vinod Koul, Lars-Peter Clausen, Paul Cercueil
From: Nuno Sá <nuno.sa@analog.com>
In some supported platforms as ARCH_ZYNQMP, part of the memory is mapped
above 32bit addresses and since the DMA mask, by default, is set to 32bits,
we would need to rely on swiotlb (which incurs a performance penalty)
for the DMA mappings. Thus, we can write either the SRC or DEST high
addresses with 1's and read them back. The last bit set on the return
value will reflect the IP address bus width and so we can update the
device DMA mask accordingly.
While at it, support bigger that 32 bits transfers in IP without HW
scatter gather support.
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 0f25f6d8ae71fa73fb24c58b3e2ecfea452cd158..15c569449a28493bd00e9b320ed83aa2a13144e2 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -69,7 +69,9 @@
#define AXI_DMAC_REG_START_TRANSFER 0x408
#define AXI_DMAC_REG_FLAGS 0x40c
#define AXI_DMAC_REG_DEST_ADDRESS 0x410
+#define AXI_DMAC_REG_DEST_ADDRESS_HIGH 0x490
#define AXI_DMAC_REG_SRC_ADDRESS 0x414
+#define AXI_DMAC_REG_SRC_ADDRESS_HIGH 0x494
#define AXI_DMAC_REG_X_LENGTH 0x418
#define AXI_DMAC_REG_Y_LENGTH 0x41c
#define AXI_DMAC_REG_DEST_STRIDE 0x420
@@ -271,11 +273,14 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
if (!chan->hw_sg) {
if (axi_dmac_dest_is_mem(chan)) {
axi_dmac_write(dmac, AXI_DMAC_REG_DEST_ADDRESS, sg->hw->dest_addr);
+ axi_dmac_write(dmac, AXI_DMAC_REG_DEST_ADDRESS_HIGH,
+ sg->hw->dest_addr >> 32);
axi_dmac_write(dmac, AXI_DMAC_REG_DEST_STRIDE, sg->hw->dst_stride);
}
if (axi_dmac_src_is_mem(chan)) {
axi_dmac_write(dmac, AXI_DMAC_REG_SRC_ADDRESS, sg->hw->src_addr);
+ axi_dmac_write(dmac, AXI_DMAC_REG_SRC_ADDRESS_HIGH, sg->hw->src_addr >> 32);
axi_dmac_write(dmac, AXI_DMAC_REG_SRC_STRIDE, sg->hw->src_stride);
}
}
@@ -990,6 +995,9 @@ static int axi_dmac_read_chan_config(struct device *dev, struct axi_dmac *dmac)
static int axi_dmac_detect_caps(struct axi_dmac *dmac, unsigned int version)
{
struct axi_dmac_chan *chan = &dmac->chan;
+ struct device *dev = dmac->dma_dev.dev;
+ u32 mask;
+ int ret;
axi_dmac_write(dmac, AXI_DMAC_REG_FLAGS, AXI_DMAC_FLAG_CYCLIC);
if (axi_dmac_read(dmac, AXI_DMAC_REG_FLAGS) == AXI_DMAC_FLAG_CYCLIC)
@@ -1024,6 +1032,22 @@ static int axi_dmac_detect_caps(struct axi_dmac *dmac, unsigned int version)
return -ENODEV;
}
+ if (axi_dmac_dest_is_mem(chan)) {
+ axi_dmac_write(dmac, AXI_DMAC_REG_DEST_ADDRESS_HIGH, 0xffffffff);
+ mask = axi_dmac_read(dmac, AXI_DMAC_REG_DEST_ADDRESS_HIGH);
+ } else {
+ axi_dmac_write(dmac, AXI_DMAC_REG_SRC_ADDRESS_HIGH, 0xffffffff);
+ mask = axi_dmac_read(dmac, AXI_DMAC_REG_SRC_ADDRESS_HIGH);
+ }
+
+ mask = 32 + fls(mask);
+
+ ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(mask));
+ if (ret) {
+ dev_err(dev, "DMA mask set error %d\n", ret);
+ return ret;
+ }
+
if (version >= ADI_AXI_PCORE_VER(4, 2, 'a'))
chan->hw_partial_xfer = true;
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH RESEND 4/4] dma: dma-axi-dmac: simplify axi_dmac_parse_dt()
2025-09-23 8:23 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
` (2 preceding siblings ...)
2025-09-23 8:23 ` [PATCH RESEND 3/4] dma: dma-axi-dmac: support bigger than 32bits addresses Nuno Sá via B4 Relay
@ 2025-09-23 8:23 ` Nuno Sá via B4 Relay
3 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-09-23 8:23 UTC (permalink / raw)
To: dmaengine; +Cc: Vinod Koul, Lars-Peter Clausen, Paul Cercueil
From: Nuno Sá <nuno.sa@analog.com>
Simplify axi_dmac_parse_dt() by using the cleanup device_node class for
automatically releasing the of_node reference when going out of scope.
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 15c569449a28493bd00e9b320ed83aa2a13144e2..045e9b9a90df562073c078835584a23f26d47350 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -8,6 +8,7 @@
#include <linux/adi-axi-common.h>
#include <linux/bitfield.h>
+#include <linux/cleanup.h>
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/dma-mapping.h>
@@ -927,22 +928,18 @@ static int axi_dmac_parse_chan_dt(struct device_node *of_chan,
static int axi_dmac_parse_dt(struct device *dev, struct axi_dmac *dmac)
{
- struct device_node *of_channels, *of_chan;
int ret;
- of_channels = of_get_child_by_name(dev->of_node, "adi,channels");
+ struct device_node *of_channels __free(device_node) = of_get_child_by_name(dev->of_node,
+ "adi,channels");
if (of_channels == NULL)
return -ENODEV;
- for_each_child_of_node(of_channels, of_chan) {
+ for_each_child_of_node_scoped(of_channels, of_chan) {
ret = axi_dmac_parse_chan_dt(of_chan, &dmac->chan);
- if (ret) {
- of_node_put(of_chan);
- of_node_put(of_channels);
+ if (ret)
return -EINVAL;
- }
}
- of_node_put(of_channels);
return 0;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements
@ 2025-11-04 16:22 Nuno Sá via B4 Relay
2025-11-04 16:22 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
0 siblings, 1 reply; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-11-04 16:22 UTC (permalink / raw)
To: Vinod Koul, Lars-Peter Clausen, Paul Cercueil
Cc: Michael Hennerich, dmaengine, linux-kernel
This series adds some fixes to the DMA core with respect with cyclic
transfer and HW scatter gather.
It also adds some improvements. Most notably for allowing bigger that
32bits DMA masks so we do not have to rely on bounce buffers from
swiotlb.
---
Nuno Sá (4):
dma: dma-axi-dmac: fix SW cyclic transfers
dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
dma: dma-axi-dmac: support bigger than 32bits addresses
dma: dma-axi-dmac: simplify axi_dmac_parse_dt()
drivers/dma/dma-axi-dmac.c | 48 +++++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 15 deletions(-)
---
base-commit: 398035178503bf662281bbffb4bebce1460a4bc5
change-id: 20251104-axi-dmac-fixes-and-improvs-e3ad512a329c
--
Thanks!
- Nuno Sá
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
2025-11-04 16:22 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
@ 2025-11-04 16:22 ` Nuno Sá via B4 Relay
0 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-11-04 16:22 UTC (permalink / raw)
To: Vinod Koul, Lars-Peter Clausen, Paul Cercueil
Cc: Michael Hennerich, dmaengine, linux-kernel
From: Nuno Sá <nuno.sa@analog.com>
For HW scatter gather transfers we still need to look for the queue. The
HW is capable of queueing 3 concurrent transfers and if we try more than
that we'll get the submit queue full and should return. Otherwise, if we
go ahead and program the new transfer, we end up discarding it.
Fixes: e97dc7435972 ("dmaengine: axi-dmac: Add support for scatter-gather transfers")
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index e22639822045..0f25f6d8ae71 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -233,11 +233,9 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
unsigned int flags = 0;
unsigned int val;
- if (!chan->hw_sg) {
- val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
- if (val) /* Queue is full, wait for the next SOT IRQ */
- return;
- }
+ val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
+ if (val) /* Queue is full, wait for the next SOT IRQ */
+ return;
desc = chan->next_desc;
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements
@ 2025-08-11 15:56 Nuno Sá via B4 Relay
2025-08-11 15:56 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
0 siblings, 1 reply; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-08-11 15:56 UTC (permalink / raw)
To: dmaengine; +Cc: Paul Cercueil, Lars-Peter Clausen, Vinod Koul
This series adds some fixes to the DMA core with respect with cyclic
transfer and HW scatter gather.
It also adds some improvements. Most notably for allowing bigger that
32bits DMA masks so we do not have to rely on bounce buffers from
swiotlb.
---
Nuno Sá (4):
dma: dma-axi-dmac: fix SW cyclic transfers
dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
dma: dma-axi-dmac: support bigger than 32bits addresses
dma: dma-axi-dmac: simplify axi_dmac_parse_dt()
drivers/dma/dma-axi-dmac.c | 48 +++++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 15 deletions(-)
---
base-commit: 3c018bf5a0ee3abe8d579d6a0dda616c3858d7b2
change-id: 20250520-dev-axi-dmac-fixes-41502e41d982
--
Thanks!
- Nuno Sá
--
Nuno Sá <nuno.sa@analog.com>
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
2025-08-11 15:56 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
@ 2025-08-11 15:56 ` Nuno Sá via B4 Relay
0 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-08-11 15:56 UTC (permalink / raw)
To: dmaengine; +Cc: Paul Cercueil, Lars-Peter Clausen, Vinod Koul
From: Nuno Sá <nuno.sa@analog.com>
For HW scatter gather transfers we still need to look for the queue. The
HW is capable of queueing 3 concurrent transfers and if we try more than
that we'll get the submit queue full and should return. Otherwise, if we
go ahead and program the new transfer, we end up discarding it.
Fixes: e97dc7435972 ("dmaengine: axi-dmac: Add support for scatter-gather transfers")
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 2aa06f66624ba5749e7e7f24b55416f96064b82f..47d95d2d743b1b939ed0ec79ee29763843bcdc09 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -233,11 +233,9 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
unsigned int flags = 0;
unsigned int val;
- if (!chan->hw_sg) {
- val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
- if (val) /* Queue is full, wait for the next SOT IRQ */
- return;
- }
+ val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
+ if (val) /* Queue is full, wait for the next SOT IRQ */
+ return;
desc = chan->next_desc;
--
2.50.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements
@ 2025-07-14 15:39 Nuno Sá via B4 Relay
2025-07-14 15:39 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
0 siblings, 1 reply; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-07-14 15:39 UTC (permalink / raw)
To: dmaengine; +Cc: Paul Cercueil, Lars-Peter Clausen, Vinod Koul
This series adds some fixes to the DMA core with respect with cyclic
transfer and HW scatter gather.
It also adds some improvements. Most notably for allowing bigger that
32bits DMA masks so we do not have to rely on bounce buffers from
swiotlb.
---
Nuno Sá (4):
dma: dma-axi-dmac: fix SW cyclic transfers
dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
dma: dma-axi-dmac: support bigger than 32bits addresses
dma: dma-axi-dmac: simplify axi_dmac_parse_dt()
drivers/dma/dma-axi-dmac.c | 48 +++++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 15 deletions(-)
---
base-commit: 3c018bf5a0ee3abe8d579d6a0dda616c3858d7b2
change-id: 20250520-dev-axi-dmac-fixes-41502e41d982
--
Thanks!
- Nuno Sá
--
Nuno Sá <nuno.sa@analog.com>
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
2025-07-14 15:39 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
@ 2025-07-14 15:39 ` Nuno Sá via B4 Relay
0 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-07-14 15:39 UTC (permalink / raw)
To: dmaengine; +Cc: Paul Cercueil, Lars-Peter Clausen, Vinod Koul
From: Nuno Sá <nuno.sa@analog.com>
For HW scatter gather transfers we still need to look for the queue. The
HW is capable of queueing 3 concurrent transfers and if we try more than
that we'll get the submit queue full and should return. Otherwise, if we
go ahead and program the new transfer, we end up discarding it.
Fixes: e97dc7435972 ("dmaengine: axi-dmac: Add support for scatter-gather transfers")
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 2aa06f66624ba5749e7e7f24b55416f96064b82f..47d95d2d743b1b939ed0ec79ee29763843bcdc09 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -233,11 +233,9 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
unsigned int flags = 0;
unsigned int val;
- if (!chan->hw_sg) {
- val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
- if (val) /* Queue is full, wait for the next SOT IRQ */
- return;
- }
+ val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
+ if (val) /* Queue is full, wait for the next SOT IRQ */
+ return;
desc = chan->next_desc;
--
2.50.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements
@ 2025-06-27 15:00 Nuno Sá via B4 Relay
2025-06-27 15:00 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
0 siblings, 1 reply; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-06-27 15:00 UTC (permalink / raw)
To: dmaengine; +Cc: Paul Cercueil, Lars-Peter Clausen, Vinod Koul
This series adds some fixes to the DMA core with respect with cyclic
transfer and HW scatter gather.
It also adds some improvements. Most notably for allowing bigger that
32bits DMA masks so we do not have to rely on bounce buffers from
swiotlb.
---
Nuno Sá (4):
dma: dma-axi-dmac: fix SW cyclic transfers
dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
dma: dma-axi-dmac: support bigger than 32bits addresses
dma: dma-axi-dmac: simplify axi_dmac_parse_dt()
drivers/dma/dma-axi-dmac.c | 48 +++++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 15 deletions(-)
---
base-commit: 3c018bf5a0ee3abe8d579d6a0dda616c3858d7b2
change-id: 20250520-dev-axi-dmac-fixes-41502e41d982
--
Thanks!
- Nuno Sá
--
Nuno Sá <nuno.sa@analog.com>
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
2025-06-27 15:00 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
@ 2025-06-27 15:00 ` Nuno Sá via B4 Relay
0 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-06-27 15:00 UTC (permalink / raw)
To: dmaengine; +Cc: Paul Cercueil, Lars-Peter Clausen, Vinod Koul
From: Nuno Sá <nuno.sa@analog.com>
For HW scatter gather transfers we still need to look for the queue. The
HW is capable of queueing 3 concurrent transfers and if we try more than
that we'll get the submit queue full and should return. Otherwise, if we
go ahead and program the new transfer, we end up discarding it.
Fixes: e97dc7435972 ("dmaengine: axi-dmac: Add support for scatter-gather transfers")
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 2aa06f66624ba5749e7e7f24b55416f96064b82f..47d95d2d743b1b939ed0ec79ee29763843bcdc09 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -233,11 +233,9 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
unsigned int flags = 0;
unsigned int val;
- if (!chan->hw_sg) {
- val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
- if (val) /* Queue is full, wait for the next SOT IRQ */
- return;
- }
+ val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
+ if (val) /* Queue is full, wait for the next SOT IRQ */
+ return;
desc = chan->next_desc;
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements
@ 2025-06-11 16:16 Nuno Sá via B4 Relay
2025-06-11 16:16 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
0 siblings, 1 reply; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-06-11 16:16 UTC (permalink / raw)
To: dmaengine; +Cc: Paul Cercueil, Lars-Peter Clausen, Vinod Koul
This series adds some fixes to the DMA core with respect with cyclic
transfer and HW scatter gather.
It also adds some improvements. Most notably for allowing bigger that
32bits DMA masks so we do not have to rely on bounce buffers from
swiotlb.
---
Nuno Sá (4):
dma: dma-axi-dmac: fix SW cyclic transfers
dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
dma: dma-axi-dmac: support bigger than 32bits addresses
dma: dma-axi-dmac: simplify axi_dmac_parse_dt()
drivers/dma/dma-axi-dmac.c | 48 +++++++++++++++++++++++++++++++---------------
1 file changed, 33 insertions(+), 15 deletions(-)
---
base-commit: 3c018bf5a0ee3abe8d579d6a0dda616c3858d7b2
change-id: 20250520-dev-axi-dmac-fixes-41502e41d982
--
Thanks!
- Nuno Sá
--
Nuno Sá <nuno.sa@analog.com>
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue
2025-06-11 16:16 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
@ 2025-06-11 16:16 ` Nuno Sá via B4 Relay
0 siblings, 0 replies; 10+ messages in thread
From: Nuno Sá via B4 Relay @ 2025-06-11 16:16 UTC (permalink / raw)
To: dmaengine; +Cc: Paul Cercueil, Lars-Peter Clausen, Vinod Koul
From: Nuno Sá <nuno.sa@analog.com>
For HW scatter gather transfers we still need to look for the queue. The
HW is capable of queueing 3 concurrent transfers and if we try more than
that we'll get the submit queue full and should return. Otherwise, if we
go ahead and program the new transfer, we end up discarding it.
Fixes: e97dc7435972 ("dmaengine: axi-dmac: Add support for scatter-gather transfers")
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
---
drivers/dma/dma-axi-dmac.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 2aa06f66624ba5749e7e7f24b55416f96064b82f..47d95d2d743b1b939ed0ec79ee29763843bcdc09 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -233,11 +233,9 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
unsigned int flags = 0;
unsigned int val;
- if (!chan->hw_sg) {
- val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
- if (val) /* Queue is full, wait for the next SOT IRQ */
- return;
- }
+ val = axi_dmac_read(dmac, AXI_DMAC_REG_START_TRANSFER);
+ if (val) /* Queue is full, wait for the next SOT IRQ */
+ return;
desc = chan->next_desc;
--
2.49.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-11-04 16:21 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-23 8:23 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 1/4] dma: dma-axi-dmac: fix SW cyclic transfers Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 3/4] dma: dma-axi-dmac: support bigger than 32bits addresses Nuno Sá via B4 Relay
2025-09-23 8:23 ` [PATCH RESEND 4/4] dma: dma-axi-dmac: simplify axi_dmac_parse_dt() Nuno Sá via B4 Relay
-- strict thread matches above, loose matches on Subject: below --
2025-11-04 16:22 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
2025-11-04 16:22 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
2025-08-11 15:56 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
2025-08-11 15:56 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
2025-07-14 15:39 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
2025-07-14 15:39 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
2025-06-27 15:00 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
2025-06-27 15:00 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
2025-06-11 16:16 [PATCH RESEND 0/4] dma: dma-axi-dmac: fixes and improvements Nuno Sá via B4 Relay
2025-06-11 16:16 ` [PATCH RESEND 2/4] dma: dma-axi-dmac: fix HW scatter-gather not looking at the queue Nuno Sá via B4 Relay
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).