diff options
| author | Seraj Alijan <seraj.alijan@sondrel.com> | 2018-12-10 03:52:39 -0500 |
|---|---|---|
| committer | Vinod Koul <vkoul@kernel.org> | 2018-12-17 01:15:11 -0500 |
| commit | 13396a130ffec45a736bcc08ad92d35e45f67dd8 (patch) | |
| tree | b8b4c122ad6e55c2064f36557b7feddf7c1e52af /drivers/dma/dmatest.c | |
| parent | a875abfadf265cb1970036898068b34fc63759b7 (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.c | 28 |
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; | |||
| 83 | module_param(alignment, int, 0644); | 83 | module_param(alignment, int, 0644); |
| 84 | MODULE_PARM_DESC(alignment, "Custom data address alignment taken as 2^(alignment) (default: not used (-1))"); | 84 | MODULE_PARM_DESC(alignment, "Custom data address alignment taken as 2^(alignment) (default: not used (-1))"); |
| 85 | 85 | ||
| 86 | static unsigned int transfer_size; | ||
| 87 | module_param(transfer_size, uint, 0644); | ||
| 88 | MODULE_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); |
