On 11/25/2016 08:12 AM, Vinod Koul wrote: > On Thu, Nov 17, 2016 at 02:50:17PM +0200, Peter Ujfalusi wrote: >> @@ -921,11 +931,45 @@ static struct dma_async_tx_descriptor *omap_dma_prep_slave_sg( >> >> d->ccr = c->ccr | CCR_SYNC_FRAME; >> if (dir == DMA_DEV_TO_MEM) { >> - d->ccr |= CCR_DST_AMODE_POSTINC | CCR_SRC_AMODE_CONSTANT; >> d->csdp = CSDP_DST_BURST_64 | CSDP_DST_PACKED; >> + >> + d->ccr |= CCR_DST_AMODE_POSTINC; >> + if (port_window) { >> + d->ccr |= CCR_SRC_AMODE_DBLIDX; >> + d->ei = 1; >> + /* >> + * One frame covers the port_window and by configure >> + * the source frame index to be -1 * (port_window - 1) >> + * we instruct the sDMA that after a frame is processed >> + * it should move back to the start of the window. >> + */ >> + d->fi = -(port_window - 1); >> + >> + if (port_window >= 64) >> + d->csdp = CSDP_SRC_BURST_64 | CSDP_SRC_PACKED; >> + else if (port_window >= 32) >> + d->csdp = CSDP_SRC_BURST_32 | CSDP_SRC_PACKED; >> + else if (port_window >= 16) >> + d->csdp = CSDP_SRC_BURST_16 | CSDP_SRC_PACKED; > > this and other would look better with a switch.. I'm not sure if it will be any better: switch (port_window) { case 0 ... 15: break; case 16 ... 31: d->csdp = CSDP_SRC_BURST_16 | CSDP_SRC_PACKED; break; case 32 ... 63: d->csdp = CSDP_SRC_BURST_32 | CSDP_SRC_PACKED; break; default: d->csdp = CSDP_SRC_BURST_64 | CSDP_SRC_PACKED; break; } -- Péter -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html