| From 950fda253507ddf8aaf3b84e713c7595851611bd Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 14 Nov 2020 11:55:06 +0800 |
| Subject: dmaengine: pl330: _prep_dma_memcpy: Fix wrong burst size |
| |
| From: Sugar Zhang <sugar.zhang@rock-chips.com> |
| |
| [ Upstream commit e773ca7da8beeca7f17fe4c9d1284a2b66839cc1 ] |
| |
| Actually, burst size is equal to '1 << desc->rqcfg.brst_size'. |
| we should use burst size, not desc->rqcfg.brst_size. |
| |
| dma memcpy performance on Rockchip RV1126 |
| @ 1512MHz A7, 1056MHz LPDDR3, 200MHz DMA: |
| |
| dmatest: |
| |
| /# echo dma0chan0 > /sys/module/dmatest/parameters/channel |
| /# echo 4194304 > /sys/module/dmatest/parameters/test_buf_size |
| /# echo 8 > /sys/module/dmatest/parameters/iterations |
| /# echo y > /sys/module/dmatest/parameters/norandom |
| /# echo y > /sys/module/dmatest/parameters/verbose |
| /# echo 1 > /sys/module/dmatest/parameters/run |
| |
| dmatest: dma0chan0-copy0: result #1: 'test passed' with src_off=0x0 dst_off=0x0 len=0x400000 |
| dmatest: dma0chan0-copy0: result #2: 'test passed' with src_off=0x0 dst_off=0x0 len=0x400000 |
| dmatest: dma0chan0-copy0: result #3: 'test passed' with src_off=0x0 dst_off=0x0 len=0x400000 |
| dmatest: dma0chan0-copy0: result #4: 'test passed' with src_off=0x0 dst_off=0x0 len=0x400000 |
| dmatest: dma0chan0-copy0: result #5: 'test passed' with src_off=0x0 dst_off=0x0 len=0x400000 |
| dmatest: dma0chan0-copy0: result #6: 'test passed' with src_off=0x0 dst_off=0x0 len=0x400000 |
| dmatest: dma0chan0-copy0: result #7: 'test passed' with src_off=0x0 dst_off=0x0 len=0x400000 |
| dmatest: dma0chan0-copy0: result #8: 'test passed' with src_off=0x0 dst_off=0x0 len=0x400000 |
| |
| Before: |
| |
| dmatest: dma0chan0-copy0: summary 8 tests, 0 failures 48 iops 200338 KB/s (0) |
| |
| After this patch: |
| |
| dmatest: dma0chan0-copy0: summary 8 tests, 0 failures 179 iops 734873 KB/s (0) |
| |
| After this patch and increase dma clk to 400MHz: |
| |
| dmatest: dma0chan0-copy0: summary 8 tests, 0 failures 259 iops 1062929 KB/s (0) |
| |
| Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com> |
| Link: https://lore.kernel.org/r/1605326106-55681-1-git-send-email-sugar.zhang@rock-chips.com |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/dma/pl330.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c |
| index cd81d10974a29..57b6555d6d042 100644 |
| --- a/drivers/dma/pl330.c |
| +++ b/drivers/dma/pl330.c |
| @@ -2793,7 +2793,7 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst, |
| * If burst size is smaller than bus width then make sure we only |
| * transfer one at a time to avoid a burst stradling an MFIFO entry. |
| */ |
| - if (desc->rqcfg.brst_size * 8 < pl330->pcfg.data_bus_width) |
| + if (burst * 8 < pl330->pcfg.data_bus_width) |
| desc->rqcfg.brst_len = 1; |
| |
| desc->bytes_requested = len; |
| -- |
| 2.27.0 |
| |