Loading drivers/dma/fsldma.c +15 −10 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ #include <linux/of_address.h> #include <linux/of_irq.h> #include <linux/of_platform.h> #include <linux/fsldma.h> #include "dmaengine.h" #include "fsldma.h" Loading Loading @@ -367,6 +367,20 @@ static void fsl_chan_toggle_ext_start(struct fsldma_chan *chan, int enable) chan->feature &= ~FSL_DMA_CHAN_START_EXT; } int fsl_dma_external_start(struct dma_chan *dchan, int enable) { struct fsldma_chan *chan; if (!dchan) return -EINVAL; chan = to_fsl_chan(dchan); fsl_chan_toggle_ext_start(chan, enable); return 0; } EXPORT_SYMBOL_GPL(fsl_dma_external_start); static void append_ld_queue(struct fsldma_chan *chan, struct fsl_desc_sw *desc) { struct fsl_desc_sw *tail = to_fsl_desc(chan->ld_pending.prev); Loading Loading @@ -998,15 +1012,6 @@ static int fsl_dma_device_control(struct dma_chan *dchan, chan->set_request_count(chan, size); return 0; case FSLDMA_EXTERNAL_START: /* make sure the channel supports external start */ if (!chan->toggle_ext_start) return -ENXIO; chan->toggle_ext_start(chan, arg); return 0; default: return -ENXIO; } Loading drivers/misc/carma/carma-fpga-program.c +6 −6 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <linux/completion.h> #include <linux/miscdevice.h> #include <linux/dmaengine.h> #include <linux/fsldma.h> #include <linux/interrupt.h> #include <linux/highmem.h> #include <linux/kernel.h> Loading Loading @@ -518,22 +519,21 @@ static noinline int fpga_program_dma(struct fpga_dev *priv) config.direction = DMA_MEM_TO_DEV; config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; config.dst_maxburst = fpga_fifo_size(priv->regs) / 2 / 4; ret = chan->device->device_control(chan, DMA_SLAVE_CONFIG, (unsigned long)&config); ret = dmaengine_slave_config(chan, &config); if (ret) { dev_err(priv->dev, "DMA slave configuration failed\n"); goto out_dma_unmap; } ret = chan->device->device_control(chan, FSLDMA_EXTERNAL_START, 1); ret = fsl_dma_external_start(chan, 1) if (ret) { dev_err(priv->dev, "DMA external control setup failed\n"); goto out_dma_unmap; } /* setup and submit the DMA transaction */ tx = chan->device->device_prep_dma_sg(chan, table.sgl, num_pages, tx = dmaengine_prep_dma_sg(chan, table.sgl, num_pages, vb->sglist, vb->sglen, 0); if (!tx) { dev_err(priv->dev, "Unable to prep DMA transaction\n"); Loading include/linux/dmaengine.h +10 −3 Original line number Diff line number Diff line Loading @@ -199,15 +199,12 @@ enum dma_ctrl_flags { * configuration data in statically from the platform). An additional * argument of struct dma_slave_config must be passed in with this * command. * @FSLDMA_EXTERNAL_START: this command will put the Freescale DMA controller * into external start mode. */ enum dma_ctrl_cmd { DMA_TERMINATE_ALL, DMA_PAUSE, DMA_RESUME, DMA_SLAVE_CONFIG, FSLDMA_EXTERNAL_START, }; /** Loading Loading @@ -757,6 +754,16 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_interleaved_dma( return chan->device->device_prep_interleaved_dma(chan, xt, flags); } static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_sg( struct dma_chan *chan, struct scatterlist *dst_sg, unsigned int dst_nents, struct scatterlist *src_sg, unsigned int src_nents, unsigned long flags) { return chan->device->device_prep_dma_sg(chan, dst_sg, dst_nents, src_sg, src_nents, flags); } static inline int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps) { if (!chan || !caps) Loading include/linux/fsldma.h 0 → 100644 +13 −0 Original line number Diff line number Diff line /* * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef FSL_DMA_H #define FSL_DMA_H /* fsl dma API for enxternal start */ int fsl_dma_external_start(struct dma_chan *dchan, int enable); #endif Loading
drivers/dma/fsldma.c +15 −10 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ #include <linux/of_address.h> #include <linux/of_irq.h> #include <linux/of_platform.h> #include <linux/fsldma.h> #include "dmaengine.h" #include "fsldma.h" Loading Loading @@ -367,6 +367,20 @@ static void fsl_chan_toggle_ext_start(struct fsldma_chan *chan, int enable) chan->feature &= ~FSL_DMA_CHAN_START_EXT; } int fsl_dma_external_start(struct dma_chan *dchan, int enable) { struct fsldma_chan *chan; if (!dchan) return -EINVAL; chan = to_fsl_chan(dchan); fsl_chan_toggle_ext_start(chan, enable); return 0; } EXPORT_SYMBOL_GPL(fsl_dma_external_start); static void append_ld_queue(struct fsldma_chan *chan, struct fsl_desc_sw *desc) { struct fsl_desc_sw *tail = to_fsl_desc(chan->ld_pending.prev); Loading Loading @@ -998,15 +1012,6 @@ static int fsl_dma_device_control(struct dma_chan *dchan, chan->set_request_count(chan, size); return 0; case FSLDMA_EXTERNAL_START: /* make sure the channel supports external start */ if (!chan->toggle_ext_start) return -ENXIO; chan->toggle_ext_start(chan, arg); return 0; default: return -ENXIO; } Loading
drivers/misc/carma/carma-fpga-program.c +6 −6 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <linux/completion.h> #include <linux/miscdevice.h> #include <linux/dmaengine.h> #include <linux/fsldma.h> #include <linux/interrupt.h> #include <linux/highmem.h> #include <linux/kernel.h> Loading Loading @@ -518,22 +519,21 @@ static noinline int fpga_program_dma(struct fpga_dev *priv) config.direction = DMA_MEM_TO_DEV; config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; config.dst_maxburst = fpga_fifo_size(priv->regs) / 2 / 4; ret = chan->device->device_control(chan, DMA_SLAVE_CONFIG, (unsigned long)&config); ret = dmaengine_slave_config(chan, &config); if (ret) { dev_err(priv->dev, "DMA slave configuration failed\n"); goto out_dma_unmap; } ret = chan->device->device_control(chan, FSLDMA_EXTERNAL_START, 1); ret = fsl_dma_external_start(chan, 1) if (ret) { dev_err(priv->dev, "DMA external control setup failed\n"); goto out_dma_unmap; } /* setup and submit the DMA transaction */ tx = chan->device->device_prep_dma_sg(chan, table.sgl, num_pages, tx = dmaengine_prep_dma_sg(chan, table.sgl, num_pages, vb->sglist, vb->sglen, 0); if (!tx) { dev_err(priv->dev, "Unable to prep DMA transaction\n"); Loading
include/linux/dmaengine.h +10 −3 Original line number Diff line number Diff line Loading @@ -199,15 +199,12 @@ enum dma_ctrl_flags { * configuration data in statically from the platform). An additional * argument of struct dma_slave_config must be passed in with this * command. * @FSLDMA_EXTERNAL_START: this command will put the Freescale DMA controller * into external start mode. */ enum dma_ctrl_cmd { DMA_TERMINATE_ALL, DMA_PAUSE, DMA_RESUME, DMA_SLAVE_CONFIG, FSLDMA_EXTERNAL_START, }; /** Loading Loading @@ -757,6 +754,16 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_interleaved_dma( return chan->device->device_prep_interleaved_dma(chan, xt, flags); } static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_sg( struct dma_chan *chan, struct scatterlist *dst_sg, unsigned int dst_nents, struct scatterlist *src_sg, unsigned int src_nents, unsigned long flags) { return chan->device->device_prep_dma_sg(chan, dst_sg, dst_nents, src_sg, src_nents, flags); } static inline int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps) { if (!chan || !caps) Loading
include/linux/fsldma.h 0 → 100644 +13 −0 Original line number Diff line number Diff line /* * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef FSL_DMA_H #define FSL_DMA_H /* fsl dma API for enxternal start */ int fsl_dma_external_start(struct dma_chan *dchan, int enable); #endif