dmaengine/dw_dmac: Add 64 bit access width support for slave xfers on mem side
authorViresh Kumar <viresh.kumar@st.com>
Wed, 1 Feb 2012 10:42:25 +0000 (16:12 +0530)
committerVinod Koul <vinod.koul@linux.intel.com>
Wed, 22 Feb 2012 12:45:38 +0000 (18:15 +0530)
64 bit transfers are possible on both sides in slave transfers (memory as well
as peripherals). This patch adds support for it memory side 64 bit transfers.

Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
drivers/dma/dw_dmac.c

index 5d7b199208d90c2ec86c164a8692f14aff820dfd..9f4310f013f5020029b89f72867ffcbfcc00d85c 100644 (file)
@@ -749,8 +749,14 @@ dwc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 
                        mem = sg_phys(sg);
                        len = sg_dma_len(sg);
-                       mem_width = 2;
-                       if (unlikely(mem & 3 || len & 3))
+
+                       if (!((mem | len) & 7))
+                               mem_width = 3;
+                       else if (!((mem | len) & 3))
+                               mem_width = 2;
+                       else if (!((mem | len) & 1))
+                               mem_width = 1;
+                       else
                                mem_width = 0;
 
 slave_sg_todev_fill_desc:
@@ -807,8 +813,14 @@ slave_sg_todev_fill_desc:
 
                        mem = sg_phys(sg);
                        len = sg_dma_len(sg);
-                       mem_width = 2;
-                       if (unlikely(mem & 3 || len & 3))
+
+                       if (!((mem | len) & 7))
+                               mem_width = 3;
+                       else if (!((mem | len) & 3))
+                               mem_width = 2;
+                       else if (!((mem | len) & 1))
+                               mem_width = 1;
+                       else
                                mem_width = 0;
 
 slave_sg_fromdev_fill_desc: