* [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode
@ 2016-04-25 8:48 Kedareswara rao Appana
2016-04-25 14:01 ` Ramon Fried
2016-06-07 5:34 ` Vinod Koul
0 siblings, 2 replies; 5+ messages in thread
From: Kedareswara rao Appana @ 2016-04-25 8:48 UTC (permalink / raw)
To: vinod.koul, dan.j.williams, ramon.fried
Cc: dmaengine, linux-kernel, Kedareswara rao Appana
This patch updates the dmatest client to support
scatter-gather dma mode.
Signed-off-by: Kedareswara rao Appana <appanad@xilinx.com>
---
drivers/dma/dmatest.c | 38 ++++++++++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
index b8576fd..6f259d8 100644
--- a/drivers/dma/dmatest.c
+++ b/drivers/dma/dmatest.c
@@ -51,6 +51,14 @@ module_param(iterations, uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(iterations,
"Iterations before stopping test (default: infinite)");
+static unsigned int sg_sources = 1;
+module_param(sg_sources, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(sg_sources,
+ "Number of scatter gather buffers (default: 1)");
+static unsigned int dmatest = 1;
+module_param(dmatest, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(dmatest,
+ "dmatest 0-memcpy 1-slave_sg (default: 1)");
static unsigned int xor_sources = 3;
module_param(xor_sources, uint, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(xor_sources,
@@ -431,6 +439,8 @@ static int dmatest_func(void *data)
dev = chan->device;
if (thread->type == DMA_MEMCPY)
src_cnt = dst_cnt = 1;
+ else if (thread->type == DMA_SG)
+ src_cnt = dst_cnt = sg_sources;
else if (thread->type == DMA_XOR) {
/* force odd to ensure dst = src */
src_cnt = min_odd(params->xor_sources | 1, dev->max_xor);
@@ -485,6 +495,8 @@ static int dmatest_func(void *data)
dma_addr_t *dsts;
unsigned int src_off, dst_off, len;
u8 align = 0;
+ struct scatterlist tx_sg[src_cnt];
+ struct scatterlist rx_sg[src_cnt];
total_tests++;
@@ -577,10 +589,21 @@ static int dmatest_func(void *data)
um->bidi_cnt++;
}
+ sg_init_table(tx_sg, src_cnt);
+ sg_init_table(rx_sg, dst_cnt);
+ for (i = 0; i < src_cnt; i++) {
+ sg_dma_address(&rx_sg[i]) = srcs[i];
+ sg_dma_address(&tx_sg[i]) = dsts[i] + dst_off;
+ sg_dma_len(&tx_sg[i]) = len;
+ sg_dma_len(&rx_sg[i]) = len;
+ }
if (thread->type == DMA_MEMCPY)
tx = dev->device_prep_dma_memcpy(chan,
dsts[0] + dst_off,
srcs[0], len, flags);
+ else if (thread->type == DMA_SG)
+ tx = dev->device_prep_dma_sg(chan, tx_sg,
+ dst_cnt, rx_sg, src_cnt, flags);
else if (thread->type == DMA_XOR)
tx = dev->device_prep_dma_xor(chan,
dsts[0] + dst_off,
@@ -748,6 +771,8 @@ static int dmatest_add_threads(struct dmatest_info *info,
if (type == DMA_MEMCPY)
op = "copy";
+ else if (type == DMA_SG)
+ op = "sg";
else if (type == DMA_XOR)
op = "xor";
else if (type == DMA_PQ)
@@ -802,8 +827,16 @@ static int dmatest_add_channel(struct dmatest_info *info,
INIT_LIST_HEAD(&dtc->threads);
if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask)) {
- cnt = dmatest_add_threads(info, dtc, DMA_MEMCPY);
- thread_count += cnt > 0 ? cnt : 0;
+ if (dmatest == 0) {
+ cnt = dmatest_add_threads(info, dtc, DMA_MEMCPY);
+ thread_count += cnt > 0 ? cnt : 0;
+ }
+ }
+ if (dma_has_cap(DMA_SG, dma_dev->cap_mask)) {
+ if (dmatest == 1) {
+ cnt = dmatest_add_threads(info, dtc, DMA_SG);
+ thread_count += cnt > 0 ? cnt : 0;
+ }
}
if (dma_has_cap(DMA_XOR, dma_dev->cap_mask)) {
cnt = dmatest_add_threads(info, dtc, DMA_XOR);
@@ -877,6 +910,7 @@ static void run_threaded_test(struct dmatest_info *info)
request_channels(info, DMA_MEMCPY);
request_channels(info, DMA_XOR);
+ request_channels(info, DMA_SG);
request_channels(info, DMA_PQ);
}
--
2.1.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* RE: [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode
2016-04-25 8:48 [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode Kedareswara rao Appana
@ 2016-04-25 14:01 ` Ramon Fried
2016-06-07 5:27 ` Vinod Koul
2016-06-07 5:34 ` Vinod Koul
1 sibling, 1 reply; 5+ messages in thread
From: Ramon Fried @ 2016-04-25 14:01 UTC (permalink / raw)
To: Kedareswara rao Appana; +Cc: dmaengine, linux-kernel
Wow. Thanks a lot !
-----Original Message-----
From: Kedareswara rao Appana [mailto:appana.durga.rao@xilinx.com]
Sent: Monday, April 25, 2016 11:48 AM
To: vinod.koul@intel.com; dan.j.williams@intel.com; Ramon Fried <ramon.fried@tandemg.com>
Cc: dmaengine@vger.kernel.org; linux-kernel@vger.kernel.org; Kedareswara rao Appana <appanad@xilinx.com>
Subject: [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode
This patch updates the dmatest client to support scatter-gather dma mode.
Signed-off-by: Kedareswara rao Appana <appanad@xilinx.com>
---
drivers/dma/dmatest.c | 38 ++++++++++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index b8576fd..6f259d8 100644
--- a/drivers/dma/dmatest.c
+++ b/drivers/dma/dmatest.c
@@ -51,6 +51,14 @@ module_param(iterations, uint, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(iterations,
"Iterations before stopping test (default: infinite)");
+static unsigned int sg_sources = 1;
+module_param(sg_sources, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(sg_sources,
+ "Number of scatter gather buffers (default: 1)"); static unsigned int
+dmatest = 1; module_param(dmatest, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(dmatest,
+ "dmatest 0-memcpy 1-slave_sg (default: 1)");
static unsigned int xor_sources = 3;
module_param(xor_sources, uint, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(xor_sources, @@ -431,6 +439,8 @@ static int dmatest_func(void *data)
dev = chan->device;
if (thread->type == DMA_MEMCPY)
src_cnt = dst_cnt = 1;
+ else if (thread->type == DMA_SG)
+ src_cnt = dst_cnt = sg_sources;
else if (thread->type == DMA_XOR) {
/* force odd to ensure dst = src */
src_cnt = min_odd(params->xor_sources | 1, dev->max_xor); @@ -485,6 +495,8 @@ static int dmatest_func(void *data)
dma_addr_t *dsts;
unsigned int src_off, dst_off, len;
u8 align = 0;
+ struct scatterlist tx_sg[src_cnt];
+ struct scatterlist rx_sg[src_cnt];
total_tests++;
@@ -577,10 +589,21 @@ static int dmatest_func(void *data)
um->bidi_cnt++;
}
+ sg_init_table(tx_sg, src_cnt);
+ sg_init_table(rx_sg, dst_cnt);
+ for (i = 0; i < src_cnt; i++) {
+ sg_dma_address(&rx_sg[i]) = srcs[i];
+ sg_dma_address(&tx_sg[i]) = dsts[i] + dst_off;
+ sg_dma_len(&tx_sg[i]) = len;
+ sg_dma_len(&rx_sg[i]) = len;
+ }
if (thread->type == DMA_MEMCPY)
tx = dev->device_prep_dma_memcpy(chan,
dsts[0] + dst_off,
srcs[0], len, flags);
+ else if (thread->type == DMA_SG)
+ tx = dev->device_prep_dma_sg(chan, tx_sg,
+ dst_cnt, rx_sg, src_cnt, flags);
else if (thread->type == DMA_XOR)
tx = dev->device_prep_dma_xor(chan,
dsts[0] + dst_off,
@@ -748,6 +771,8 @@ static int dmatest_add_threads(struct dmatest_info *info,
if (type == DMA_MEMCPY)
op = "copy";
+ else if (type == DMA_SG)
+ op = "sg";
else if (type == DMA_XOR)
op = "xor";
else if (type == DMA_PQ)
@@ -802,8 +827,16 @@ static int dmatest_add_channel(struct dmatest_info *info,
INIT_LIST_HEAD(&dtc->threads);
if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask)) {
- cnt = dmatest_add_threads(info, dtc, DMA_MEMCPY);
- thread_count += cnt > 0 ? cnt : 0;
+ if (dmatest == 0) {
+ cnt = dmatest_add_threads(info, dtc, DMA_MEMCPY);
+ thread_count += cnt > 0 ? cnt : 0;
+ }
+ }
+ if (dma_has_cap(DMA_SG, dma_dev->cap_mask)) {
+ if (dmatest == 1) {
+ cnt = dmatest_add_threads(info, dtc, DMA_SG);
+ thread_count += cnt > 0 ? cnt : 0;
+ }
}
if (dma_has_cap(DMA_XOR, dma_dev->cap_mask)) {
cnt = dmatest_add_threads(info, dtc, DMA_XOR); @@ -877,6 +910,7 @@ static void run_threaded_test(struct dmatest_info *info)
request_channels(info, DMA_MEMCPY);
request_channels(info, DMA_XOR);
+ request_channels(info, DMA_SG);
request_channels(info, DMA_PQ);
}
--
2.1.2
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode
2016-04-25 14:01 ` Ramon Fried
@ 2016-06-07 5:27 ` Vinod Koul
0 siblings, 0 replies; 5+ messages in thread
From: Vinod Koul @ 2016-06-07 5:27 UTC (permalink / raw)
To: Ramon Fried; +Cc: Kedareswara rao Appana, dmaengine, linux-kernel
On Mon, Apr 25, 2016 at 02:01:59PM +0000, Ramon Fried wrote:
> Wow. Thanks a lot !
care to give tested-by ?
--
~Vinod
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode
2016-04-25 8:48 [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode Kedareswara rao Appana
2016-04-25 14:01 ` Ramon Fried
@ 2016-06-07 5:34 ` Vinod Koul
2016-06-07 6:08 ` Appana Durga Kedareswara Rao
1 sibling, 1 reply; 5+ messages in thread
From: Vinod Koul @ 2016-06-07 5:34 UTC (permalink / raw)
To: Kedareswara rao Appana
Cc: dan.j.williams, ramon.fried, dmaengine, linux-kernel,
Kedareswara rao Appana
On Mon, Apr 25, 2016 at 02:18:05PM +0530, Kedareswara rao Appana wrote:
> This patch updates the dmatest client to support
> scatter-gather dma mode.
>
> Signed-off-by: Kedareswara rao Appana <appanad@xilinx.com>
> ---
> drivers/dma/dmatest.c | 38 ++++++++++++++++++++++++++++++++++++--
> 1 file changed, 36 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
> index b8576fd..6f259d8 100644
> --- a/drivers/dma/dmatest.c
> +++ b/drivers/dma/dmatest.c
> @@ -51,6 +51,14 @@ module_param(iterations, uint, S_IRUGO | S_IWUSR);
> MODULE_PARM_DESC(iterations,
> "Iterations before stopping test (default: infinite)");
>
> +static unsigned int sg_sources = 1;
> +module_param(sg_sources, uint, S_IRUGO | S_IWUSR);
> +MODULE_PARM_DESC(sg_sources,
sg_buffers rather?
> + "Number of scatter gather buffers (default: 1)");
blank line please
> +static unsigned int dmatest = 1;
> +module_param(dmatest, uint, S_IRUGO | S_IWUSR);
> +MODULE_PARM_DESC(dmatest,
> + "dmatest 0-memcpy 1-slave_sg (default: 1)");
dmatest? What does this mean!
> static unsigned int xor_sources = 3;
> module_param(xor_sources, uint, S_IRUGO | S_IWUSR);
> MODULE_PARM_DESC(xor_sources,
> @@ -431,6 +439,8 @@ static int dmatest_func(void *data)
> dev = chan->device;
> if (thread->type == DMA_MEMCPY)
> src_cnt = dst_cnt = 1;
> + else if (thread->type == DMA_SG)
> + src_cnt = dst_cnt = sg_sources;
> else if (thread->type == DMA_XOR) {
> /* force odd to ensure dst = src */
> src_cnt = min_odd(params->xor_sources | 1, dev->max_xor);
> @@ -485,6 +495,8 @@ static int dmatest_func(void *data)
> dma_addr_t *dsts;
> unsigned int src_off, dst_off, len;
> u8 align = 0;
> + struct scatterlist tx_sg[src_cnt];
> + struct scatterlist rx_sg[src_cnt];
>
> total_tests++;
>
> @@ -577,10 +589,21 @@ static int dmatest_func(void *data)
> um->bidi_cnt++;
> }
>
> + sg_init_table(tx_sg, src_cnt);
> + sg_init_table(rx_sg, dst_cnt);
why dst_cnt here wheras you used src_cnt to create the list!
> + for (i = 0; i < src_cnt; i++) {
> + sg_dma_address(&rx_sg[i]) = srcs[i];
> + sg_dma_address(&tx_sg[i]) = dsts[i] + dst_off;
> + sg_dma_len(&tx_sg[i]) = len;
> + sg_dma_len(&rx_sg[i]) = len;
> + }
> if (thread->type == DMA_MEMCPY)
> tx = dev->device_prep_dma_memcpy(chan,
> dsts[0] + dst_off,
> srcs[0], len, flags);
> + else if (thread->type == DMA_SG)
> + tx = dev->device_prep_dma_sg(chan, tx_sg,
> + dst_cnt, rx_sg, src_cnt, flags);
again dst_cnt
> else if (thread->type == DMA_XOR)
> tx = dev->device_prep_dma_xor(chan,
> dsts[0] + dst_off,
> @@ -748,6 +771,8 @@ static int dmatest_add_threads(struct dmatest_info *info,
>
> if (type == DMA_MEMCPY)
> op = "copy";
> + else if (type == DMA_SG)
> + op = "sg";
> else if (type == DMA_XOR)
> op = "xor";
> else if (type == DMA_PQ)
> @@ -802,8 +827,16 @@ static int dmatest_add_channel(struct dmatest_info *info,
> INIT_LIST_HEAD(&dtc->threads);
>
> if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask)) {
> - cnt = dmatest_add_threads(info, dtc, DMA_MEMCPY);
> - thread_count += cnt > 0 ? cnt : 0;
> + if (dmatest == 0) {
> + cnt = dmatest_add_threads(info, dtc, DMA_MEMCPY);
> + thread_count += cnt > 0 ? cnt : 0;
> + }
> + }
blank line
--
~Vinod
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode
2016-06-07 5:34 ` Vinod Koul
@ 2016-06-07 6:08 ` Appana Durga Kedareswara Rao
0 siblings, 0 replies; 5+ messages in thread
From: Appana Durga Kedareswara Rao @ 2016-06-07 6:08 UTC (permalink / raw)
To: Vinod Koul; +Cc: dan.j.williams, ramon.fried, dmaengine, linux-kernel
Hi Vinod,
> >
> > +static unsigned int sg_sources = 1;
> > +module_param(sg_sources, uint, S_IRUGO | S_IWUSR);
> > +MODULE_PARM_DESC(sg_sources,
>
> sg_buffers rather?
Ok sure will fix...
>
> > + "Number of scatter gather buffers (default: 1)");
>
> blank line please
Ok
>
> > +static unsigned int dmatest = 1;
> > +module_param(dmatest, uint, S_IRUGO | S_IWUSR);
> > +MODULE_PARM_DESC(dmatest,
> > + "dmatest 0-memcpy 1-slave_sg (default: 1)");
>
> dmatest? What does this mean!
To differentiate b/w the memcpy and slave_sg transfers using this dmatest
Sysfs entry.
>
> > static unsigned int xor_sources = 3;
> > module_param(xor_sources, uint, S_IRUGO | S_IWUSR);
> > MODULE_PARM_DESC(xor_sources, @@ -431,6 +439,8 @@ static int
> > dmatest_func(void *data)
> > dev = chan->device;
> > if (thread->type == DMA_MEMCPY)
> > src_cnt = dst_cnt = 1;
> > + else if (thread->type == DMA_SG)
> > + src_cnt = dst_cnt = sg_sources;
> > else if (thread->type == DMA_XOR) {
> > /* force odd to ensure dst = src */
> > src_cnt = min_odd(params->xor_sources | 1, dev->max_xor);
> @@ -485,6
> > +495,8 @@ static int dmatest_func(void *data)
> > dma_addr_t *dsts;
> > unsigned int src_off, dst_off, len;
> > u8 align = 0;
> > + struct scatterlist tx_sg[src_cnt];
> > + struct scatterlist rx_sg[src_cnt];
> >
> > total_tests++;
> >
> > @@ -577,10 +589,21 @@ static int dmatest_func(void *data)
> > um->bidi_cnt++;
> > }
> >
> > + sg_init_table(tx_sg, src_cnt);
> > + sg_init_table(rx_sg, dst_cnt);
>
> why dst_cnt here wheras you used src_cnt to create the list!
dst_cnt is used in prep_dma_sg will use dst_cnt to created list for rx buffers
Will fix this in v2.
>
> > + for (i = 0; i < src_cnt; i++) {
> > + sg_dma_address(&rx_sg[i]) = srcs[i];
> > + sg_dma_address(&tx_sg[i]) = dsts[i] + dst_off;
> > + sg_dma_len(&tx_sg[i]) = len;
> > + sg_dma_len(&rx_sg[i]) = len;
> > + }
> > if (thread->type == DMA_MEMCPY)
> > tx = dev->device_prep_dma_memcpy(chan,
> > dsts[0] + dst_off,
> > srcs[0], len, flags);
> > + else if (thread->type == DMA_SG)
> > + tx = dev->device_prep_dma_sg(chan, tx_sg,
> > + dst_cnt, rx_sg, src_cnt, flags);
>
> again dst_cnt
Will fix in v2.
>
> > else if (thread->type == DMA_XOR)
> > tx = dev->device_prep_dma_xor(chan,
> > dsts[0] + dst_off,
> > @@ -748,6 +771,8 @@ static int dmatest_add_threads(struct dmatest_info
> > *info,
> >
> > if (type == DMA_MEMCPY)
> > op = "copy";
> > + else if (type == DMA_SG)
> > + op = "sg";
> > else if (type == DMA_XOR)
> > op = "xor";
> > else if (type == DMA_PQ)
> > @@ -802,8 +827,16 @@ static int dmatest_add_channel(struct dmatest_info
> *info,
> > INIT_LIST_HEAD(&dtc->threads);
> >
> > if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask)) {
> > - cnt = dmatest_add_threads(info, dtc, DMA_MEMCPY);
> > - thread_count += cnt > 0 ? cnt : 0;
> > + if (dmatest == 0) {
> > + cnt = dmatest_add_threads(info, dtc, DMA_MEMCPY);
> > + thread_count += cnt > 0 ? cnt : 0;
> > + }
> > + }
>
> blank line
Ok sure will fix in v2...
Thanks,
Kedar.
>
> --
> ~Vinod
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-06-07 6:09 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-25 8:48 [PATCH] dmaengine: dmatest: Add support for scatter-gather DMA mode Kedareswara rao Appana
2016-04-25 14:01 ` Ramon Fried
2016-06-07 5:27 ` Vinod Koul
2016-06-07 5:34 ` Vinod Koul
2016-06-07 6:08 ` Appana Durga Kedareswara Rao
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).