Thread (8 messages) 8 messages, 4 authors, 2014-03-19

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help