aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/dmatest.c
diff options
context:
space:
mode:
authorSeraj Alijan <seraj.alijan@sondrel.com>2018-12-10 03:52:39 -0500
committerVinod Koul <vkoul@kernel.org>2018-12-17 01:15:11 -0500
commit13396a130ffec45a736bcc08ad92d35e45f67dd8 (patch)
treeb8b4c122ad6e55c2064f36557b7feddf7c1e52af /drivers/dma/dmatest.c
parenta875abfadf265cb1970036898068b34fc63759b7 (diff)
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: Seraj Alijan <seraj.alijan@sondrel.com> Signed-off-by: Vinod Koul <vkoul@kernel.org>
Diffstat (limited to 'drivers/dma/dmatest.c')
-rw-r--r--drivers/dma/dmatest.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
index 6302ebef2938..2eea4ef72915 100644
--- a/drivers/dma/dmatest.c
+++ b/drivers/dma/dmatest.c
@@ -83,6 +83,10 @@ static int alignment = -1;
83module_param(alignment, int, 0644); 83module_param(alignment, int, 0644);
84MODULE_PARM_DESC(alignment, "Custom data address alignment taken as 2^(alignment) (default: not used (-1))"); 84MODULE_PARM_DESC(alignment, "Custom data address alignment taken as 2^(alignment) (default: not used (-1))");
85 85
86static unsigned int transfer_size;
87module_param(transfer_size, uint, 0644);
88MODULE_PARM_DESC(transfer_size, "Optional custom transfer size in bytes (default: not used (0))");
89
86/** 90/**
87 * struct dmatest_params - test parameters. 91 * struct dmatest_params - test parameters.
88 * @buf_size: size of the memcpy test buffer 92 * @buf_size: size of the memcpy test buffer
@@ -108,6 +112,7 @@ struct dmatest_params {
108 bool noverify; 112 bool noverify;
109 bool norandom; 113 bool norandom;
110 int alignment; 114 int alignment;
115 unsigned int transfer_size;
111}; 116};
112 117
113/** 118/**
@@ -643,15 +648,25 @@ static int dmatest_func(void *data)
643 648
644 total_tests++; 649 total_tests++;
645 650
646 if (params->norandom) 651 if (params->transfer_size) {
652 if (params->transfer_size >= params->buf_size) {
653 pr_err("%u-byte transfer size must be lower than %u-buffer size\n",
654 params->transfer_size, params->buf_size);
655 break;
656 }
657 len = params->transfer_size;
658 } else if (params->norandom) {
647 len = params->buf_size; 659 len = params->buf_size;
648 else 660 } else {
649 len = dmatest_random() % params->buf_size + 1; 661 len = dmatest_random() % params->buf_size + 1;
662 }
650 663
651 len = (len >> align) << align; 664 /* Do not alter transfer size explicitly defined by user */
652 if (!len) 665 if (!params->transfer_size) {
653 len = 1 << align; 666 len = (len >> align) << align;
654 667 if (!len)
668 len = 1 << align;
669 }
655 total_len += len; 670 total_len += len;
656 671
657 if (params->norandom) { 672 if (params->norandom) {
@@ -1047,6 +1062,7 @@ static void add_threaded_test(struct dmatest_info *info)
1047 params->noverify = noverify; 1062 params->noverify = noverify;
1048 params->norandom = norandom; 1063 params->norandom = norandom;
1049 params->alignment = alignment; 1064 params->alignment = alignment;
1065 params->transfer_size = transfer_size;
1050 1066
1051 request_channels(info, DMA_MEMCPY); 1067 request_channels(info, DMA_MEMCPY);
1052 request_channels(info, DMA_MEMSET); 1068 request_channels(info, DMA_MEMSET);