Message ID | 20240110232255.1099757-1-arnd@kernel.org (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | dmaengine: fsl-edma: fix Makefile logic | expand |
On Thu, Jan 11, 2024 at 12:03:42AM +0100, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > A change to remove some unnecessary exports ended up removing some > necessary ones as well, and caused a build regression by trying to > link a single source file into two separate modules: You should fix Kconfig to provent fsl-edma and mcf-edma build at the same time. EXPORT_SYMBOL_GPL is not necesary at all. mcf-edma is quit old. ideally, it should be merged into fsl-edma. Frank Li > > scripts/Makefile.build:243: drivers/dma/Makefile: fsl-edma-common.o is added to multiple modules: fsl-edma mcf-edma > > While the two drivers cannot be used on the same CPU architecture, > building both is still possible for compile testing. > > Fixes: 66aac8ea0a6c ("dmaengine: fsl-edma: clean up EXPORT_SYMBOL_GPL in fsl-edma-common.c") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > drivers/dma/Makefile | 8 ++++---- > drivers/dma/fsl-edma-common.c | 17 +++++++++++++++++ > 2 files changed, 21 insertions(+), 4 deletions(-) > > diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile > index dfd40d14e408..302b7b0fbb8e 100644 > --- a/drivers/dma/Makefile > +++ b/drivers/dma/Makefile > @@ -31,10 +31,10 @@ obj-$(CONFIG_DW_AXI_DMAC) += dw-axi-dmac/ > obj-$(CONFIG_DW_DMAC_CORE) += dw/ > obj-$(CONFIG_DW_EDMA) += dw-edma/ > obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o > -obj-$(CONFIG_FSL_DMA) += fsldma.o > -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o > -obj-$(CONFIG_FSL_EDMA) += fsl-edma.o > -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o > +obj-$(CONFIG_FSL_DMA) += fsldma.o fsl-edma-common.o > +fsl-edma-objs := fsl-edma-main.o > +obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o > +mcf-edma-objs := mcf-edma-main.o > obj-$(CONFIG_MCF_EDMA) += mcf-edma.o > obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o > obj-$(CONFIG_FSL_RAID) += fsl_raid.o > diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c > index b53f46245c37..05b31985a93b 100644 > --- a/drivers/dma/fsl-edma-common.c > +++ b/drivers/dma/fsl-edma-common.c > @@ -67,6 +67,7 @@ void fsl_edma_tx_chan_handler(struct fsl_edma_chan *fsl_chan) > > spin_unlock(&fsl_chan->vchan.lock); > } > +EXPORT_SYMBOL_GPL(fsl_edma_tx_chan_handler); > > static void fsl_edma3_enable_request(struct fsl_edma_chan *fsl_chan) > { > @@ -159,6 +160,7 @@ void fsl_edma_disable_request(struct fsl_edma_chan *fsl_chan) > iowrite8(EDMA_CEEI_CEEI(ch), regs->ceei); > } > } > +EXPORT_SYMBOL_GPL(fsl_edma_disable_request); > > static void mux_configure8(struct fsl_edma_chan *fsl_chan, void __iomem *addr, > u32 off, u32 slot, bool enable) > @@ -212,6 +214,7 @@ void fsl_edma_chan_mux(struct fsl_edma_chan *fsl_chan, > else > mux_configure8(fsl_chan, muxaddr, ch_off, slot, enable); > } > +EXPORT_SYMBOL_GPL(fsl_edma_chan_mux); > > static unsigned int fsl_edma_get_tcd_attr(enum dma_slave_buswidth addr_width) > { > @@ -235,6 +238,7 @@ void fsl_edma_free_desc(struct virt_dma_desc *vdesc) > fsl_desc->tcd[i].ptcd); > kfree(fsl_desc); > } > +EXPORT_SYMBOL_GPL(fsl_edma_free_desc); > > int fsl_edma_terminate_all(struct dma_chan *chan) > { > @@ -255,6 +259,7 @@ int fsl_edma_terminate_all(struct dma_chan *chan) > > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_terminate_all); > > int fsl_edma_pause(struct dma_chan *chan) > { > @@ -270,6 +275,7 @@ int fsl_edma_pause(struct dma_chan *chan) > spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_pause); > > int fsl_edma_resume(struct dma_chan *chan) > { > @@ -285,6 +291,7 @@ int fsl_edma_resume(struct dma_chan *chan) > spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_resume); > > static void fsl_edma_unprep_slave_dma(struct fsl_edma_chan *fsl_chan) > { > @@ -345,6 +352,7 @@ int fsl_edma_slave_config(struct dma_chan *chan, > > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_slave_config); > > static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan, > struct virt_dma_desc *vdesc, bool in_progress) > @@ -425,6 +433,7 @@ enum dma_status fsl_edma_tx_status(struct dma_chan *chan, > > return fsl_chan->status; > } > +EXPORT_SYMBOL_GPL(fsl_edma_tx_status); > > static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan, > struct fsl_edma_hw_tcd *tcd) > @@ -644,6 +653,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic( > > return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); > } > +EXPORT_SYMBOL_GPL(fsl_edma_prep_dma_cyclic); > > struct dma_async_tx_descriptor *fsl_edma_prep_slave_sg( > struct dma_chan *chan, struct scatterlist *sgl, > @@ -740,6 +750,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_slave_sg( > > return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); > } > +EXPORT_SYMBOL_GPL(fsl_edma_prep_slave_sg); > > struct dma_async_tx_descriptor *fsl_edma_prep_memcpy(struct dma_chan *chan, > dma_addr_t dma_dst, dma_addr_t dma_src, > @@ -762,6 +773,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_memcpy(struct dma_chan *chan, > > return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); > } > +EXPORT_SYMBOL_GPL(fsl_edma_prep_memcpy); > > void fsl_edma_xfer_desc(struct fsl_edma_chan *fsl_chan) > { > @@ -797,6 +809,7 @@ void fsl_edma_issue_pending(struct dma_chan *chan) > > spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); > } > +EXPORT_SYMBOL_GPL(fsl_edma_issue_pending); > > int fsl_edma_alloc_chan_resources(struct dma_chan *chan) > { > @@ -807,6 +820,7 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *chan) > 32, 0); > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_alloc_chan_resources); > > void fsl_edma_free_chan_resources(struct dma_chan *chan) > { > @@ -830,6 +844,7 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan) > fsl_chan->is_sw = false; > fsl_chan->srcid = 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_free_chan_resources); > > void fsl_edma_cleanup_vchan(struct dma_device *dmadev) > { > @@ -841,6 +856,7 @@ void fsl_edma_cleanup_vchan(struct dma_device *dmadev) > tasklet_kill(&chan->vchan.task); > } > } > +EXPORT_SYMBOL_GPL(fsl_edma_cleanup_vchan); > > /* > * On the 32 channels Vybrid/mpc577x edma version, register offsets are > @@ -877,5 +893,6 @@ void fsl_edma_setup_regs(struct fsl_edma_engine *edma) > edma->regs.inth = edma->membase + EDMA64_INTH; > } > } > +EXPORT_SYMBOL_GPL(fsl_edma_setup_regs); > > MODULE_LICENSE("GPL v2"); > -- > 2.39.2 >
On Thu, Jan 11, 2024, at 01:02, Frank Li wrote: > On Thu, Jan 11, 2024 at 12:03:42AM +0100, Arnd Bergmann wrote: >> From: Arnd Bergmann <arnd@arndb.de> >> >> A change to remove some unnecessary exports ended up removing some >> necessary ones as well, and caused a build regression by trying to >> link a single source file into two separate modules: > > You should fix Kconfig to provent fsl-edma and mcf-edma build at the same > time. That sounds like the wrong approach since it prevents compile-testing one of the drivers in an allmodconfig build. > EXPORT_SYMBOL_GPL is not necesary at all. > > mcf-edma is quit old. ideally, it should be merged into fsl-edma. I have no specific interest in either of the drivers, just trying to fix the build regression. I see no harm in exporting the symbols, but I can refactor the drivers to link all three files into the same module and add a hack to register both platform_driver instances from a shared module_init() if you think that's better. Unfortunately we can't have more than one initcall in a loadable module. Arnd
On Thu, Jan 11, 2024 at 07:23:34AM +0100, Arnd Bergmann wrote: > On Thu, Jan 11, 2024, at 01:02, Frank Li wrote: > > On Thu, Jan 11, 2024 at 12:03:42AM +0100, Arnd Bergmann wrote: > >> From: Arnd Bergmann <arnd@arndb.de> > >> > >> A change to remove some unnecessary exports ended up removing some > >> necessary ones as well, and caused a build regression by trying to > >> link a single source file into two separate modules: > > > > You should fix Kconfig to provent fsl-edma and mcf-edma build at the same > > time. > > That sounds like the wrong approach since it prevents > compile-testing one of the drivers in an allmodconfig > build. > > > EXPORT_SYMBOL_GPL is not necesary at all. > > > > mcf-edma is quit old. ideally, it should be merged into fsl-edma. > > I have no specific interest in either of the drivers, just > trying to fix the build regression. I see no harm in exporting > the symbols, but I can refactor the drivers to link all three > files into the same module and add a hack to register both > platform_driver instances from a shared module_init() if > you think that's better. Unfortunately we can't have more > than one initcall in a loadable module. It should be better link into same module because some debugfs and trace improvement are on my TODO list. Export symbols will make more unnessary complex. Or simple exclude MCF_EDMA by change Kconfig config MCF_EDMA tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs" depends on !FSL_EDMA ^^^^^ depends on M5441x || COMPILE_TEST > > Arnd
On Thu, Jan 11, 2024, at 17:09, Frank Li wrote: > On Thu, Jan 11, 2024 at 07:23:34AM +0100, Arnd Bergmann wrote: >> On Thu, Jan 11, 2024, at 01:02, Frank Li wrote: > > It should be better link into same module because some debugfs and trace > improvement are on my TODO list. Export symbols will make more unnessary > complex. Ok, I'll see what I can come up with > Or simple exclude MCF_EDMA by change Kconfig > > config MCF_EDMA > tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs" > depends on !FSL_EDMA > ^^^^^ > depends on M5441x || COMPILE_TEST This does not actually prevent building both as modules, it only enforces that you can't have them both enabled if one of them is built-in. Arnd
Hi Arnd, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on v6.7 next-20240111] [cannot apply to vkoul-dmaengine/next] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Arnd-Bergmann/dmaengine-fsl-edma-fix-Makefile-logic/20240111-072410 base: linus/master patch link: https://lore.kernel.org/r/20240110232255.1099757-1-arnd%40kernel.org patch subject: [PATCH] dmaengine: fsl-edma: fix Makefile logic config: m68k-stmark2_defconfig (https://download.01.org/0day-ci/archive/20240112/202401120722.iFJbAOb8-lkp@intel.com/config) compiler: m68k-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240112/202401120722.iFJbAOb8-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202401120722.iFJbAOb8-lkp@intel.com/ All errors (new ones prefixed by >>): m68k-linux-ld: drivers/dma/mcf-edma-main.o: in function `mcf_edma_probe': >> mcf-edma-main.c:(.text+0x4de): undefined reference to `fsl_edma_alloc_chan_resources' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x4f8): undefined reference to `fsl_edma_slave_config' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x506): undefined reference to `fsl_edma_prep_slave_sg' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x516): undefined reference to `fsl_edma_pause' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x524): undefined reference to `fsl_edma_terminate_all' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x5d2): undefined reference to `fsl_edma_free_desc' m68k-linux-ld: drivers/dma/mcf-edma-main.o: in function `mcf_edma_remove': >> mcf-edma-main.c:(.text+0xb4): undefined reference to `fsl_edma_cleanup_vchan' m68k-linux-ld: drivers/dma/mcf-edma-main.o: in function `mcf_edma_err_handler': >> mcf-edma-main.c:(.text+0x12e): undefined reference to `fsl_edma_disable_request' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x17a): undefined reference to `fsl_edma_disable_request' m68k-linux-ld: drivers/dma/mcf-edma-main.o: in function `mcf_edma_tx_handler': >> mcf-edma-main.c:(.text+0x20e): undefined reference to `fsl_edma_tx_chan_handler' m68k-linux-ld: drivers/dma/mcf-edma-main.o: in function `mcf_edma_probe': >> mcf-edma-main.c:(.text+0x466): undefined reference to `fsl_edma_setup_regs' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x4d4): undefined reference to `fsl_edma_free_chan_resources' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x4e4): undefined reference to `fsl_edma_prep_dma_cyclic' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x4ee): undefined reference to `fsl_edma_tx_status' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x50c): undefined reference to `fsl_edma_resume' >> m68k-linux-ld: mcf-edma-main.c:(.text+0x52a): undefined reference to `fsl_edma_issue_pending'
Hi Arnd, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on v6.7 next-20240111] [cannot apply to vkoul-dmaengine/next] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Arnd-Bergmann/dmaengine-fsl-edma-fix-Makefile-logic/20240111-072410 base: linus/master patch link: https://lore.kernel.org/r/20240110232255.1099757-1-arnd%40kernel.org patch subject: [PATCH] dmaengine: fsl-edma: fix Makefile logic config: powerpc-ge_imp3a_defconfig (https://download.01.org/0day-ci/archive/20240112/202401121539.8Awy5Che-lkp@intel.com/config) compiler: powerpc-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240112/202401121539.8Awy5Che-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202401121539.8Awy5Che-lkp@intel.com/ All errors (new ones prefixed by >>): powerpc-linux-ld: drivers/dma/fsl-edma-common.o: in function `fsl_edma_prep_dma_cyclic': >> fsl-edma-common.c:(.text+0x85e): undefined reference to `vchan_tx_submit' >> powerpc-linux-ld: fsl-edma-common.c:(.text+0x866): undefined reference to `vchan_tx_desc_free' >> powerpc-linux-ld: fsl-edma-common.c:(.text+0x86e): undefined reference to `vchan_tx_submit' powerpc-linux-ld: fsl-edma-common.c:(.text+0x876): undefined reference to `vchan_tx_desc_free' powerpc-linux-ld: drivers/dma/fsl-edma-common.o: in function `fsl_edma_prep_memcpy': fsl-edma-common.c:(.text+0xa56): undefined reference to `vchan_tx_submit' powerpc-linux-ld: fsl-edma-common.c:(.text+0xa5a): undefined reference to `vchan_tx_desc_free' powerpc-linux-ld: fsl-edma-common.c:(.text+0xa66): undefined reference to `vchan_tx_submit' powerpc-linux-ld: fsl-edma-common.c:(.text+0xa6a): undefined reference to `vchan_tx_desc_free' powerpc-linux-ld: drivers/dma/fsl-edma-common.o: in function `fsl_edma_prep_slave_sg': fsl-edma-common.c:(.text+0xe32): undefined reference to `vchan_tx_submit' powerpc-linux-ld: fsl-edma-common.c:(.text+0xe36): undefined reference to `vchan_tx_desc_free' powerpc-linux-ld: fsl-edma-common.c:(.text+0xe42): undefined reference to `vchan_tx_submit' powerpc-linux-ld: fsl-edma-common.c:(.text+0xe46): undefined reference to `vchan_tx_desc_free' powerpc-linux-ld: drivers/dma/fsl-edma-common.o: in function `fsl_edma_terminate_all': >> fsl-edma-common.c:(.text+0x13c0): undefined reference to `vchan_dma_desc_free_list' powerpc-linux-ld: drivers/dma/fsl-edma-common.o: in function `fsl_edma_free_chan_resources': fsl-edma-common.c:(.text+0x15d4): undefined reference to `vchan_dma_desc_free_list' powerpc-linux-ld: drivers/dma/fsl-edma-common.o: in function `fsl_edma_tx_status': >> fsl-edma-common.c:(.text+0x1e10): undefined reference to `vchan_find_desc'
Hey Arnd, On 11-01-24, 00:03, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > A change to remove some unnecessary exports ended up removing some > necessary ones as well, and caused a build regression by trying to > link a single source file into two separate modules: > > scripts/Makefile.build:243: drivers/dma/Makefile: fsl-edma-common.o is added to multiple modules: fsl-edma mcf-edma > > While the two drivers cannot be used on the same CPU architecture, > building both is still possible for compile testing. Do you have an update for this patch? I noticed kbot complain as well > > Fixes: 66aac8ea0a6c ("dmaengine: fsl-edma: clean up EXPORT_SYMBOL_GPL in fsl-edma-common.c") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > drivers/dma/Makefile | 8 ++++---- > drivers/dma/fsl-edma-common.c | 17 +++++++++++++++++ > 2 files changed, 21 insertions(+), 4 deletions(-) > > diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile > index dfd40d14e408..302b7b0fbb8e 100644 > --- a/drivers/dma/Makefile > +++ b/drivers/dma/Makefile > @@ -31,10 +31,10 @@ obj-$(CONFIG_DW_AXI_DMAC) += dw-axi-dmac/ > obj-$(CONFIG_DW_DMAC_CORE) += dw/ > obj-$(CONFIG_DW_EDMA) += dw-edma/ > obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o > -obj-$(CONFIG_FSL_DMA) += fsldma.o > -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o > -obj-$(CONFIG_FSL_EDMA) += fsl-edma.o > -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o > +obj-$(CONFIG_FSL_DMA) += fsldma.o fsl-edma-common.o > +fsl-edma-objs := fsl-edma-main.o > +obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o > +mcf-edma-objs := mcf-edma-main.o > obj-$(CONFIG_MCF_EDMA) += mcf-edma.o > obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o > obj-$(CONFIG_FSL_RAID) += fsl_raid.o > diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c > index b53f46245c37..05b31985a93b 100644 > --- a/drivers/dma/fsl-edma-common.c > +++ b/drivers/dma/fsl-edma-common.c > @@ -67,6 +67,7 @@ void fsl_edma_tx_chan_handler(struct fsl_edma_chan *fsl_chan) > > spin_unlock(&fsl_chan->vchan.lock); > } > +EXPORT_SYMBOL_GPL(fsl_edma_tx_chan_handler); > > static void fsl_edma3_enable_request(struct fsl_edma_chan *fsl_chan) > { > @@ -159,6 +160,7 @@ void fsl_edma_disable_request(struct fsl_edma_chan *fsl_chan) > iowrite8(EDMA_CEEI_CEEI(ch), regs->ceei); > } > } > +EXPORT_SYMBOL_GPL(fsl_edma_disable_request); > > static void mux_configure8(struct fsl_edma_chan *fsl_chan, void __iomem *addr, > u32 off, u32 slot, bool enable) > @@ -212,6 +214,7 @@ void fsl_edma_chan_mux(struct fsl_edma_chan *fsl_chan, > else > mux_configure8(fsl_chan, muxaddr, ch_off, slot, enable); > } > +EXPORT_SYMBOL_GPL(fsl_edma_chan_mux); > > static unsigned int fsl_edma_get_tcd_attr(enum dma_slave_buswidth addr_width) > { > @@ -235,6 +238,7 @@ void fsl_edma_free_desc(struct virt_dma_desc *vdesc) > fsl_desc->tcd[i].ptcd); > kfree(fsl_desc); > } > +EXPORT_SYMBOL_GPL(fsl_edma_free_desc); > > int fsl_edma_terminate_all(struct dma_chan *chan) > { > @@ -255,6 +259,7 @@ int fsl_edma_terminate_all(struct dma_chan *chan) > > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_terminate_all); > > int fsl_edma_pause(struct dma_chan *chan) > { > @@ -270,6 +275,7 @@ int fsl_edma_pause(struct dma_chan *chan) > spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_pause); > > int fsl_edma_resume(struct dma_chan *chan) > { > @@ -285,6 +291,7 @@ int fsl_edma_resume(struct dma_chan *chan) > spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_resume); > > static void fsl_edma_unprep_slave_dma(struct fsl_edma_chan *fsl_chan) > { > @@ -345,6 +352,7 @@ int fsl_edma_slave_config(struct dma_chan *chan, > > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_slave_config); > > static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan, > struct virt_dma_desc *vdesc, bool in_progress) > @@ -425,6 +433,7 @@ enum dma_status fsl_edma_tx_status(struct dma_chan *chan, > > return fsl_chan->status; > } > +EXPORT_SYMBOL_GPL(fsl_edma_tx_status); > > static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan, > struct fsl_edma_hw_tcd *tcd) > @@ -644,6 +653,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic( > > return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); > } > +EXPORT_SYMBOL_GPL(fsl_edma_prep_dma_cyclic); > > struct dma_async_tx_descriptor *fsl_edma_prep_slave_sg( > struct dma_chan *chan, struct scatterlist *sgl, > @@ -740,6 +750,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_slave_sg( > > return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); > } > +EXPORT_SYMBOL_GPL(fsl_edma_prep_slave_sg); > > struct dma_async_tx_descriptor *fsl_edma_prep_memcpy(struct dma_chan *chan, > dma_addr_t dma_dst, dma_addr_t dma_src, > @@ -762,6 +773,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_memcpy(struct dma_chan *chan, > > return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); > } > +EXPORT_SYMBOL_GPL(fsl_edma_prep_memcpy); > > void fsl_edma_xfer_desc(struct fsl_edma_chan *fsl_chan) > { > @@ -797,6 +809,7 @@ void fsl_edma_issue_pending(struct dma_chan *chan) > > spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); > } > +EXPORT_SYMBOL_GPL(fsl_edma_issue_pending); > > int fsl_edma_alloc_chan_resources(struct dma_chan *chan) > { > @@ -807,6 +820,7 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *chan) > 32, 0); > return 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_alloc_chan_resources); > > void fsl_edma_free_chan_resources(struct dma_chan *chan) > { > @@ -830,6 +844,7 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan) > fsl_chan->is_sw = false; > fsl_chan->srcid = 0; > } > +EXPORT_SYMBOL_GPL(fsl_edma_free_chan_resources); > > void fsl_edma_cleanup_vchan(struct dma_device *dmadev) > { > @@ -841,6 +856,7 @@ void fsl_edma_cleanup_vchan(struct dma_device *dmadev) > tasklet_kill(&chan->vchan.task); > } > } > +EXPORT_SYMBOL_GPL(fsl_edma_cleanup_vchan); > > /* > * On the 32 channels Vybrid/mpc577x edma version, register offsets are > @@ -877,5 +893,6 @@ void fsl_edma_setup_regs(struct fsl_edma_engine *edma) > edma->regs.inth = edma->membase + EDMA64_INTH; > } > } > +EXPORT_SYMBOL_GPL(fsl_edma_setup_regs); > > MODULE_LICENSE("GPL v2"); > -- > 2.39.2 >
diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile index dfd40d14e408..302b7b0fbb8e 100644 --- a/drivers/dma/Makefile +++ b/drivers/dma/Makefile @@ -31,10 +31,10 @@ obj-$(CONFIG_DW_AXI_DMAC) += dw-axi-dmac/ obj-$(CONFIG_DW_DMAC_CORE) += dw/ obj-$(CONFIG_DW_EDMA) += dw-edma/ obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o -obj-$(CONFIG_FSL_DMA) += fsldma.o -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o -obj-$(CONFIG_FSL_EDMA) += fsl-edma.o -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o +obj-$(CONFIG_FSL_DMA) += fsldma.o fsl-edma-common.o +fsl-edma-objs := fsl-edma-main.o +obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o +mcf-edma-objs := mcf-edma-main.o obj-$(CONFIG_MCF_EDMA) += mcf-edma.o obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o obj-$(CONFIG_FSL_RAID) += fsl_raid.o diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c index b53f46245c37..05b31985a93b 100644 --- a/drivers/dma/fsl-edma-common.c +++ b/drivers/dma/fsl-edma-common.c @@ -67,6 +67,7 @@ void fsl_edma_tx_chan_handler(struct fsl_edma_chan *fsl_chan) spin_unlock(&fsl_chan->vchan.lock); } +EXPORT_SYMBOL_GPL(fsl_edma_tx_chan_handler); static void fsl_edma3_enable_request(struct fsl_edma_chan *fsl_chan) { @@ -159,6 +160,7 @@ void fsl_edma_disable_request(struct fsl_edma_chan *fsl_chan) iowrite8(EDMA_CEEI_CEEI(ch), regs->ceei); } } +EXPORT_SYMBOL_GPL(fsl_edma_disable_request); static void mux_configure8(struct fsl_edma_chan *fsl_chan, void __iomem *addr, u32 off, u32 slot, bool enable) @@ -212,6 +214,7 @@ void fsl_edma_chan_mux(struct fsl_edma_chan *fsl_chan, else mux_configure8(fsl_chan, muxaddr, ch_off, slot, enable); } +EXPORT_SYMBOL_GPL(fsl_edma_chan_mux); static unsigned int fsl_edma_get_tcd_attr(enum dma_slave_buswidth addr_width) { @@ -235,6 +238,7 @@ void fsl_edma_free_desc(struct virt_dma_desc *vdesc) fsl_desc->tcd[i].ptcd); kfree(fsl_desc); } +EXPORT_SYMBOL_GPL(fsl_edma_free_desc); int fsl_edma_terminate_all(struct dma_chan *chan) { @@ -255,6 +259,7 @@ int fsl_edma_terminate_all(struct dma_chan *chan) return 0; } +EXPORT_SYMBOL_GPL(fsl_edma_terminate_all); int fsl_edma_pause(struct dma_chan *chan) { @@ -270,6 +275,7 @@ int fsl_edma_pause(struct dma_chan *chan) spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); return 0; } +EXPORT_SYMBOL_GPL(fsl_edma_pause); int fsl_edma_resume(struct dma_chan *chan) { @@ -285,6 +291,7 @@ int fsl_edma_resume(struct dma_chan *chan) spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); return 0; } +EXPORT_SYMBOL_GPL(fsl_edma_resume); static void fsl_edma_unprep_slave_dma(struct fsl_edma_chan *fsl_chan) { @@ -345,6 +352,7 @@ int fsl_edma_slave_config(struct dma_chan *chan, return 0; } +EXPORT_SYMBOL_GPL(fsl_edma_slave_config); static size_t fsl_edma_desc_residue(struct fsl_edma_chan *fsl_chan, struct virt_dma_desc *vdesc, bool in_progress) @@ -425,6 +433,7 @@ enum dma_status fsl_edma_tx_status(struct dma_chan *chan, return fsl_chan->status; } +EXPORT_SYMBOL_GPL(fsl_edma_tx_status); static void fsl_edma_set_tcd_regs(struct fsl_edma_chan *fsl_chan, struct fsl_edma_hw_tcd *tcd) @@ -644,6 +653,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic( return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); } +EXPORT_SYMBOL_GPL(fsl_edma_prep_dma_cyclic); struct dma_async_tx_descriptor *fsl_edma_prep_slave_sg( struct dma_chan *chan, struct scatterlist *sgl, @@ -740,6 +750,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_slave_sg( return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); } +EXPORT_SYMBOL_GPL(fsl_edma_prep_slave_sg); struct dma_async_tx_descriptor *fsl_edma_prep_memcpy(struct dma_chan *chan, dma_addr_t dma_dst, dma_addr_t dma_src, @@ -762,6 +773,7 @@ struct dma_async_tx_descriptor *fsl_edma_prep_memcpy(struct dma_chan *chan, return vchan_tx_prep(&fsl_chan->vchan, &fsl_desc->vdesc, flags); } +EXPORT_SYMBOL_GPL(fsl_edma_prep_memcpy); void fsl_edma_xfer_desc(struct fsl_edma_chan *fsl_chan) { @@ -797,6 +809,7 @@ void fsl_edma_issue_pending(struct dma_chan *chan) spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); } +EXPORT_SYMBOL_GPL(fsl_edma_issue_pending); int fsl_edma_alloc_chan_resources(struct dma_chan *chan) { @@ -807,6 +820,7 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *chan) 32, 0); return 0; } +EXPORT_SYMBOL_GPL(fsl_edma_alloc_chan_resources); void fsl_edma_free_chan_resources(struct dma_chan *chan) { @@ -830,6 +844,7 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan) fsl_chan->is_sw = false; fsl_chan->srcid = 0; } +EXPORT_SYMBOL_GPL(fsl_edma_free_chan_resources); void fsl_edma_cleanup_vchan(struct dma_device *dmadev) { @@ -841,6 +856,7 @@ void fsl_edma_cleanup_vchan(struct dma_device *dmadev) tasklet_kill(&chan->vchan.task); } } +EXPORT_SYMBOL_GPL(fsl_edma_cleanup_vchan); /* * On the 32 channels Vybrid/mpc577x edma version, register offsets are @@ -877,5 +893,6 @@ void fsl_edma_setup_regs(struct fsl_edma_engine *edma) edma->regs.inth = edma->membase + EDMA64_INTH; } } +EXPORT_SYMBOL_GPL(fsl_edma_setup_regs); MODULE_LICENSE("GPL v2");