Commit 13396a13 authored by Seraj Alijan's avatar Seraj Alijan Committed by Vinod Koul

dmaengine: dmatest: Add transfer_size parameter

Existing transfer size "len" is either generated randomly or set to the
size of test_buf_size. In some cases we need to explicitly specify a
transfer size that is different from the buffer size and non aligned to
test the target device's ability to handle unaligned transfers.

This patch adds optional parameter "transfer_size" to allow setting
explicit transfer size for dma transfers.
Signed-off-by: default avatarSeraj Alijan <seraj.alijan@sondrel.com>
Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent a875abfa
...@@ -83,6 +83,10 @@ static int alignment = -1; ...@@ -83,6 +83,10 @@ static int alignment = -1;
module_param(alignment, int, 0644); module_param(alignment, int, 0644);
MODULE_PARM_DESC(alignment, "Custom data address alignment taken as 2^(alignment) (default: not used (-1))"); MODULE_PARM_DESC(alignment, "Custom data address alignment taken as 2^(alignment) (default: not used (-1))");
static unsigned int transfer_size;
module_param(transfer_size, uint, 0644);
MODULE_PARM_DESC(transfer_size, "Optional custom transfer size in bytes (default: not used (0))");
/** /**
* struct dmatest_params - test parameters. * struct dmatest_params - test parameters.
* @buf_size: size of the memcpy test buffer * @buf_size: size of the memcpy test buffer
...@@ -108,6 +112,7 @@ struct dmatest_params { ...@@ -108,6 +112,7 @@ struct dmatest_params {
bool noverify; bool noverify;
bool norandom; bool norandom;
int alignment; int alignment;
unsigned int transfer_size;
}; };
/** /**
...@@ -643,15 +648,25 @@ static int dmatest_func(void *data) ...@@ -643,15 +648,25 @@ static int dmatest_func(void *data)
total_tests++; total_tests++;
if (params->norandom) if (params->transfer_size) {
if (params->transfer_size >= params->buf_size) {
pr_err("%u-byte transfer size must be lower than %u-buffer size\n",
params->transfer_size, params->buf_size);
break;
}
len = params->transfer_size;
} else if (params->norandom) {
len = params->buf_size; len = params->buf_size;
else } else {
len = dmatest_random() % params->buf_size + 1; len = dmatest_random() % params->buf_size + 1;
}
len = (len >> align) << align; /* Do not alter transfer size explicitly defined by user */
if (!len) if (!params->transfer_size) {
len = 1 << align; len = (len >> align) << align;
if (!len)
len = 1 << align;
}
total_len += len; total_len += len;
if (params->norandom) { if (params->norandom) {
...@@ -1047,6 +1062,7 @@ static void add_threaded_test(struct dmatest_info *info) ...@@ -1047,6 +1062,7 @@ static void add_threaded_test(struct dmatest_info *info)
params->noverify = noverify; params->noverify = noverify;
params->norandom = norandom; params->norandom = norandom;
params->alignment = alignment; params->alignment = alignment;
params->transfer_size = transfer_size;
request_channels(info, DMA_MEMCPY); request_channels(info, DMA_MEMCPY);
request_channels(info, DMA_MEMSET); request_channels(info, DMA_MEMSET);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment