Re: [PATCH RFC v9 2/6] dma: mpc512x: add support for peripheral transfers
From: Vinod Koul <hidden>
Date: 2014-03-19 14:14:37
On Wed, Mar 19, 2014 at 05:26:47PM +0400, Alexander Popov wrote:
Hello Andy 2014-03-14 13:47 GMT+04:00 Andy Shevchenko [off-list ref]:quoted
On Wed, 2014-03-12 at 15:47 +0400, Alexander Popov wrote:quoted
+ case DMA_SLAVE_CONFIG: + /* Constraints: + * - only transfers between a peripheral device and + * memory are supported; + * - minimal transfer chunk is 4 bytes and consequently + * source and destination addresses must be 4-byte aligned + * and transfer size must be aligned on (4 * maxburst) + * boundary; + * - during the transfer RAM address is being incremented by + * the size of minimal transfer chunk; + * - peripheral port's address is constant during the transfer. + */ + + cfg = (void *)arg; + + if (!is_slave_direction(cfg->direction)) + return -EINVAL;As far as I understand the intention you have not to use direction field in the dma_slave_config. It will be removed once.quoted
+ + if (cfg->src_addr_width != DMA_SLAVE_BUSWIDTH_4_BYTES && + cfg->dst_addr_width != DMA_SLAVE_BUSWIDTH_4_BYTES) + return -EINVAL; + + spin_lock_irqsave(&mchan->lock, flags); + + if (cfg->direction == DMA_DEV_TO_MEM) { + mchan->per_paddr = cfg->src_addr; + mchan->tcd_nunits = cfg->src_maxburst; + } else { + mchan->per_paddr = cfg->dst_addr; + mchan->tcd_nunits = cfg->dst_maxburst; + }Ditto.Excuse me, I don't understand this point. I have to use cfg->direction because in case of DMA_DEV_TO_MEM I use cfg->SRC_addr and cfg->SRC_maxburst and in case of DMA_MEM_TO_DEV I use cfg->DST_addr and cfg->DST_maxburst. Is it correct?
You store the complete config for both source and destination. Then based on the descriptor direction you can retrive the values from channel context and program This way you _dont_ need to fix the direction and can use it both ways! -- ~Vinod