dmaengine: edma: Implement protection for invalid max_burst
the device's max_burst to 32767 (CIDX is 16bit signed value) so clients can take this into consideration when setting up the transfer. During slave transfer preparation check if the requested maxburst is valid. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
2bd6bf03f4
commit
ea09ea51dd
|
@ -891,6 +891,10 @@ static int edma_slave_config(struct dma_chan *chan,
|
|||
cfg->dst_addr_width == DMA_SLAVE_BUSWIDTH_8_BYTES)
|
||||
return -EINVAL;
|
||||
|
||||
if (cfg->src_maxburst > chan->device->max_burst ||
|
||||
cfg->dst_maxburst > chan->device->max_burst)
|
||||
return -EINVAL;
|
||||
|
||||
memcpy(&echan->cfg, cfg, sizeof(echan->cfg));
|
||||
|
||||
return 0;
|
||||
|
@ -1855,6 +1859,7 @@ static void edma_dma_init(struct edma_cc *ecc, bool legacy_mode)
|
|||
s_ddev->dst_addr_widths = EDMA_DMA_BUSWIDTHS;
|
||||
s_ddev->directions |= (BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV));
|
||||
s_ddev->residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
|
||||
s_ddev->max_burst = SZ_32K - 1; /* CIDX: 16bit signed */
|
||||
|
||||
s_ddev->dev = ecc->dev;
|
||||
INIT_LIST_HEAD(&s_ddev->channels);
|
||||
|
|
Loading…
Reference in New Issue