dmaengine: dw-axi-dmac: Add device_config operation

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>
This commit is contained in:
Sia Jee Heng 2021-01-25 09:32:43 +08:00 committed by Vinod Koul
parent 67b2e39f4a
commit 66c6c9455e
2 changed files with 12 additions and 0 deletions

View 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);

View 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;
};