|
@@ -925,10 +925,24 @@ static struct dma_async_tx_descriptor *sdma_prep_slave_sg(
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
goto err_out;
|
|
goto err_out;
|
|
}
|
|
}
|
|
- if (sdmac->word_size == DMA_SLAVE_BUSWIDTH_4_BYTES)
|
|
|
|
|
|
+
|
|
|
|
+ switch (sdmac->word_size) {
|
|
|
|
+ case DMA_SLAVE_BUSWIDTH_4_BYTES:
|
|
bd->mode.command = 0;
|
|
bd->mode.command = 0;
|
|
- else
|
|
|
|
- bd->mode.command = sdmac->word_size;
|
|
|
|
|
|
+ if (count & 3 || sg->dma_address & 3)
|
|
|
|
+ return NULL;
|
|
|
|
+ break;
|
|
|
|
+ case DMA_SLAVE_BUSWIDTH_2_BYTES:
|
|
|
|
+ bd->mode.command = 2;
|
|
|
|
+ if (count & 1 || sg->dma_address & 1)
|
|
|
|
+ return NULL;
|
|
|
|
+ break;
|
|
|
|
+ case DMA_SLAVE_BUSWIDTH_1_BYTE:
|
|
|
|
+ bd->mode.command = 1;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ return NULL;
|
|
|
|
+ }
|
|
|
|
|
|
param = BD_DONE | BD_EXTD | BD_CONT;
|
|
param = BD_DONE | BD_EXTD | BD_CONT;
|
|
|
|
|