MLK-11358-1: dma: imx-sdma: support dmatest module
authorRobin Gong <b38343@freescale.com>
Fri, 14 Aug 2015 04:51:45 +0000 (12:51 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 19:47:32 +0000 (14:47 -0500)
dmatest is a common dma test module for dma driver which support mem_2_mem copy
.Since  SDMA driver has the mem_2_mem interface, make little code change to
support this feature rather than our internal  mxc_sdma_memcopy_test test
module.

Signed-off-by: Robin Gong <b38343@freescale.com>
drivers/dma/imx-sdma.c

index 9f9fa37..2ec9411 100644 (file)
@@ -1172,10 +1172,28 @@ static int sdma_alloc_chan_resources(struct dma_chan *chan)
 {
        struct sdma_channel *sdmac = to_sdma_chan(chan);
        struct imx_dma_data *data = chan->private;
+       struct imx_dma_data default_data;
        int prio, ret;
 
-       if (!data)
-               return -EINVAL;
+       clk_enable(sdmac->sdma->clk_ipg);
+       clk_enable(sdmac->sdma->clk_ahb);
+
+       /*
+        * dmatest(memcpy) will never call slave_config before prep, so we need
+        * do some job in slave_config in this case.
+        */
+       if (!data) {
+               sdmac->word_size  =  sdmac->sdma->dma_device.copy_align;
+               default_data.priority = 2;
+               default_data.peripheral_type = IMX_DMATYPE_MEMORY;
+               default_data.dma_request = 0;
+               default_data.dma_request2 = 0;
+               data = &default_data;
+
+               sdma_config_ownership(sdmac, false, true, false);
+               sdma_get_pc(sdmac, IMX_DMATYPE_MEMORY);
+               sdma_load_context(sdmac);
+       }
 
        switch (data->priority) {
        case DMA_PRIO_HIGH:
@@ -2071,6 +2089,7 @@ static int sdma_probe(struct platform_device *pdev)
        sdma->dma_device.device_prep_dma_sg = sdma_prep_memcpy_sg;
        sdma->dma_device.device_issue_pending = sdma_issue_pending;
        sdma->dma_device.dev->dma_parms = &sdma->dma_parms;
+       sdma->dma_device.copy_align = 2;
        dma_set_max_seg_size(sdma->dma_device.dev, 65535);
 
        platform_set_drvdata(pdev, sdma);