mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
dmaengine, async_tx: support alignment checks
Some engines have transfer size and address alignment restrictions. Add a per-operation alignment property to struct dma_device that the async routines and dmatest can use to check alignment capabilities. Signed-off-by: Dan Williams <[email protected]>
This commit is contained in:
parent
9308add6ea
commit
83544ae9f3
6 changed files with 67 additions and 6 deletions
|
|
@ -288,6 +288,7 @@ static int dmatest_func(void *data)
|
|||
dma_addr_t dma_dsts[dst_cnt];
|
||||
struct completion cmp;
|
||||
unsigned long tmo = msecs_to_jiffies(3000);
|
||||
u8 align = 0;
|
||||
|
||||
total_tests++;
|
||||
|
||||
|
|
@ -295,6 +296,18 @@ static int dmatest_func(void *data)
|
|||
src_off = dmatest_random() % (test_buf_size - len + 1);
|
||||
dst_off = dmatest_random() % (test_buf_size - len + 1);
|
||||
|
||||
/* honor alignment restrictions */
|
||||
if (thread->type == DMA_MEMCPY)
|
||||
align = dev->copy_align;
|
||||
else if (thread->type == DMA_XOR)
|
||||
align = dev->xor_align;
|
||||
else if (thread->type == DMA_PQ)
|
||||
align = dev->pq_align;
|
||||
|
||||
len = (len >> align) << align;
|
||||
src_off = (src_off >> align) << align;
|
||||
dst_off = (dst_off >> align) << align;
|
||||
|
||||
dmatest_init_srcs(thread->srcs, src_off, len);
|
||||
dmatest_init_dsts(thread->dsts, dst_off, len);
|
||||
|
||||
|
|
@ -311,6 +324,7 @@ static int dmatest_func(void *data)
|
|||
DMA_BIDIRECTIONAL);
|
||||
}
|
||||
|
||||
|
||||
if (thread->type == DMA_MEMCPY)
|
||||
tx = dev->device_prep_dma_memcpy(chan,
|
||||
dma_dsts[0] + dst_off,
|
||||
|
|
|
|||
Loading…
Reference in a new issue