dmaengine: dw-axi-dmac: Add device_config operation
authorSia Jee Heng <jee.heng.sia@intel.com>
Mon, 25 Jan 2021 01:32:43 +0000 (09:32 +0800)
committerVinod Koul <vkoul@kernel.org>
Mon, 1 Feb 2021 09:38:15 +0000 (15:08 +0530)
Add device_config() callback function so that the device address
can be passed to the dma driver.

DMA clients use this interface to pass in the device address to the
AxiDMA. Without this interface, data transfer between device to memory
and memory to device would failed.

Signed-off-by: Sia Jee Heng <jee.heng.sia@intel.com>
Tested-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Link: https://lore.kernel.org/r/20210125013255.25799-6-jee.heng.sia@intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
drivers/dma/dw-axi-dmac/dw-axi-dmac.h

index 241ab7a24e2a035cdcaeff377b89fbb6172e3a3b..eaa7c4c404ca66fe04dd1c0e41f42d7820b1993e 100644 (file)
@@ -559,6 +559,16 @@ err_desc_get:
        return NULL;
 }
 
+static int dw_axi_dma_chan_slave_config(struct dma_chan *dchan,
+                                       struct dma_slave_config *config)
+{
+       struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
+
+       memcpy(&chan->config, config, sizeof(*config));
+
+       return 0;
+}
+
 static void axi_chan_dump_lli(struct axi_dma_chan *chan,
                              struct axi_dma_hw_desc *desc)
 {
@@ -948,6 +958,7 @@ static int dw_probe(struct platform_device *pdev)
 
        dw->dma.device_prep_dma_memcpy = dma_chan_prep_dma_memcpy;
        dw->dma.device_synchronize = dw_axi_dma_synchronize;
+       dw->dma.device_config = dw_axi_dma_chan_slave_config;
 
        platform_set_drvdata(pdev, chip);
 
index f886b2bb75dec5ee4f76153edd161da816dee713..a75b921d6b1ac0fed730ce8ff48577b229694df3 100644 (file)
@@ -43,6 +43,7 @@ struct axi_dma_chan {
        struct virt_dma_chan            vc;
 
        struct axi_dma_desc             *desc;
+       struct dma_slave_config         config;
        /* these other elements are all protected by vc.lock */
        bool                            is_paused;
 };