diff mbox series

[1/1] dmaengine: fsl-edma: merge mcf-edma into fsl-edma driver

Message ID 20240509193517.3571694-1-Frank.Li@nxp.com (mailing list archive)
State Changes Requested
Headers show
Series [1/1] dmaengine: fsl-edma: merge mcf-edma into fsl-edma driver | expand

Commit Message

Frank Li May 9, 2024, 7:35 p.m. UTC
MCF eDMA are almost the same as FSL eDMA driver. Previously link to two
kernel modules, fsl-edma.ko and mcf-edma.ko. These are not problem because
mcf-edma is for m68k ARCH and FSL eDMA is for arm/arm64 ARCH. But often
build both at PPC ARCH. It also makes sense to build two drivers at the
same time. It causes many build warning because share a fsl-edma-common.o.
such as:

   powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-common.o' being placed in section `.stubs'
   powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-trace.o' being placed in section `.stubs'

Merge mcf-edma into fsl-edma driver. So use one driver (fsl-edma.ko) for
MCF and FSL eDMA.

mcf-edma.ko should be replaced by fsl-edma.ko in modules, minimizing user
space impact because MCF eDMA remains confined to legacy ColdFire mcf5441x
production and mcf5441x has been in production for at least a decade and
NXP has long ceased ColdFire development.

Update Kconfig to make MCF_EDMA as feature of FSL_EDMA and change Makefile
to link mcl-edma-main.o to fsl-edma.o.

Create a common module init/exit functions, which call original's
fsl-edma-init[exit]() and mcf-edma-init[exit]().

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202405082029.Es9umH7n-lkp@intel.com/
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/dma/Kconfig           |  8 ++++----
 drivers/dma/Makefile          |  5 ++---
 drivers/dma/fsl-edma-common.c | 28 ++++++++++++++++++++++++++++
 drivers/dma/fsl-edma-common.h |  5 +++++
 drivers/dma/fsl-edma-main.c   |  6 ++----
 drivers/dma/mcf-edma-main.c   |  6 ++----
 6 files changed, 43 insertions(+), 15 deletions(-)

Comments

Geert Uytterhoeven May 13, 2024, 6:12 p.m. UTC | #1
CC coldfire

On Thu, May 9, 2024 at 9:35 PM Frank Li <Frank.Li@nxp.com> wrote:
> MCF eDMA are almost the same as FSL eDMA driver. Previously link to two
> kernel modules, fsl-edma.ko and mcf-edma.ko. These are not problem because
> mcf-edma is for m68k ARCH and FSL eDMA is for arm/arm64 ARCH. But often
> build both at PPC ARCH. It also makes sense to build two drivers at the
> same time. It causes many build warning because share a fsl-edma-common.o.
> such as:
>
>    powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-common.o' being placed in section `.stubs'
>    powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-trace.o' being placed in section `.stubs'
>
> Merge mcf-edma into fsl-edma driver. So use one driver (fsl-edma.ko) for
> MCF and FSL eDMA.
>
> mcf-edma.ko should be replaced by fsl-edma.ko in modules, minimizing user
> space impact because MCF eDMA remains confined to legacy ColdFire mcf5441x
> production and mcf5441x has been in production for at least a decade and
> NXP has long ceased ColdFire development.
>
> Update Kconfig to make MCF_EDMA as feature of FSL_EDMA and change Makefile
> to link mcl-edma-main.o to fsl-edma.o.
>
> Create a common module init/exit functions, which call original's
> fsl-edma-init[exit]() and mcf-edma-init[exit]().
>
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202405082029.Es9umH7n-lkp@intel.com/
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
>  drivers/dma/Kconfig           |  8 ++++----
>  drivers/dma/Makefile          |  5 ++---
>  drivers/dma/fsl-edma-common.c | 28 ++++++++++++++++++++++++++++
>  drivers/dma/fsl-edma-common.h |  5 +++++
>  drivers/dma/fsl-edma-main.c   |  6 ++----
>  drivers/dma/mcf-edma-main.c   |  6 ++----
>  6 files changed, 43 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
> index 002a5ec806207..45110520f6e68 100644
> --- a/drivers/dma/Kconfig
> +++ b/drivers/dma/Kconfig
> @@ -393,14 +393,14 @@ config LS2X_APB_DMA
>           It does not support memory to memory data transfer.
>
>  config MCF_EDMA
> -       tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
> +       bool "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
>         depends on M5441x || COMPILE_TEST
>         select DMA_ENGINE
>         select DMA_VIRTUAL_CHANNELS
>         help
> -         Support the Freescale ColdFire eDMA engine, 64-channel
> -         implementation that performs complex data transfers with
> -         minimal intervention from a host processor.
> +         Support the Freescale ColdFire eDMA engine in FSL_EDMA driver,
> +         64-channel implementation that performs complex data transfers
> +         with minimal intervention from a host processor.
>           This module can be found on Freescale ColdFire mcf5441x SoCs.
>
>  config MILBEAUT_HDMAC
> diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
> index 802ca916f05f5..0000922c7cbfe 100644
> --- a/drivers/dma/Makefile
> +++ b/drivers/dma/Makefile
> @@ -33,11 +33,10 @@ obj-$(CONFIG_DW_EDMA) += dw-edma/
>  obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o
>  fsl-edma-trace-$(CONFIG_TRACING) := fsl-edma-trace.o
>  CFLAGS_fsl-edma-trace.o := -I$(src)
> +mcf-edma-main-$(CONFIG_MCF_EDMA) := mcf-edma-main.o
>  obj-$(CONFIG_FSL_DMA) += fsldma.o
> -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
> +fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y} ${mcf-edma-main-y}
>  obj-$(CONFIG_FSL_EDMA) += fsl-edma.o
> -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
> -obj-$(CONFIG_MCF_EDMA) += mcf-edma.o
>  obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o
>  obj-$(CONFIG_FSL_RAID) += fsl_raid.o
>  obj-$(CONFIG_HISI_DMA) += hisi_dma.o
> diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
> index 3af4307873157..ac04a2ce4fa1f 100644
> --- a/drivers/dma/fsl-edma-common.c
> +++ b/drivers/dma/fsl-edma-common.c
> @@ -888,4 +888,32 @@ void fsl_edma_setup_regs(struct fsl_edma_engine *edma)
>         }
>  }
>
> +static int __init fsl_edma_common_init(void)
> +{
> +       int ret;
> +
> +       ret = fsl_edma_init();
> +       if (ret)
> +               return ret;
> +
> +#ifdef CONFIG_MCF_EDMA
> +       ret = mcf_edma_init();
> +       if (ret)
> +               return ret;
> +#endif
> +       return 0;
> +}
> +
> +subsys_initcall(fsl_edma_common_init);
> +
> +static void __exit fsl_edma_common_exit(void)
> +{
> +       fsl_edma_exit();
> +
> +#ifdef CONFIG_MCF_EDMA
> +       mcf_edma_exit();
> +#endif
> +}
> +module_exit(fsl_edma_common_exit);
> +
>  MODULE_LICENSE("GPL v2");
> diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
> index ac66222c16040..dfbdcc922ceea 100644
> --- a/drivers/dma/fsl-edma-common.h
> +++ b/drivers/dma/fsl-edma-common.h
> @@ -488,4 +488,9 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan);
>  void fsl_edma_cleanup_vchan(struct dma_device *dmadev);
>  void fsl_edma_setup_regs(struct fsl_edma_engine *edma);
>
> +int __init fsl_edma_init(void);
> +void __exit fsl_edma_exit(void);
> +int __init mcf_edma_init(void);
> +void __exit mcf_edma_exit(void);
> +
>  #endif /* _FSL_EDMA_COMMON_H_ */
> diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
> index 391e4f13dfeb0..a1c3c4ed869c5 100644
> --- a/drivers/dma/fsl-edma-main.c
> +++ b/drivers/dma/fsl-edma-main.c
> @@ -724,17 +724,15 @@ static struct platform_driver fsl_edma_driver = {
>         .remove_new     = fsl_edma_remove,
>  };
>
> -static int __init fsl_edma_init(void)
> +int __init fsl_edma_init(void)
>  {
>         return platform_driver_register(&fsl_edma_driver);
>  }
> -subsys_initcall(fsl_edma_init);
>
> -static void __exit fsl_edma_exit(void)
> +void __exit fsl_edma_exit(void)
>  {
>         platform_driver_unregister(&fsl_edma_driver);
>  }
> -module_exit(fsl_edma_exit);
>
>  MODULE_ALIAS("platform:fsl-edma");
>  MODULE_DESCRIPTION("Freescale eDMA engine driver");
> diff --git a/drivers/dma/mcf-edma-main.c b/drivers/dma/mcf-edma-main.c
> index 78c606f6d0026..d97991a1e9518 100644
> --- a/drivers/dma/mcf-edma-main.c
> +++ b/drivers/dma/mcf-edma-main.c
> @@ -284,17 +284,15 @@ bool mcf_edma_filter_fn(struct dma_chan *chan, void *param)
>  }
>  EXPORT_SYMBOL(mcf_edma_filter_fn);
>
> -static int __init mcf_edma_init(void)
> +int __init mcf_edma_init(void)
>  {
>         return platform_driver_register(&mcf_edma_driver);
>  }
> -subsys_initcall(mcf_edma_init);
>
> -static void __exit mcf_edma_exit(void)
> +void __exit mcf_edma_exit(void)
>  {
>         platform_driver_unregister(&mcf_edma_driver);
>  }
> -module_exit(mcf_edma_exit);
>
>  MODULE_ALIAS("platform:mcf-edma");
>  MODULE_DESCRIPTION("Freescale eDMA engine driver, ColdFire family");
> --
> 2.34.1
Angelo Dureghello May 14, 2024, 7:57 a.m. UTC | #2
Hi,

On 13/05/24 8:12 PM, Geert Uytterhoeven wrote:
> CC coldfire
>
> On Thu, May 9, 2024 at 9:35 PM Frank Li <Frank.Li@nxp.com> wrote:
>> MCF eDMA are almost the same as FSL eDMA driver. Previously link to two
>> kernel modules, fsl-edma.ko and mcf-edma.ko. These are not problem because
>> mcf-edma is for m68k ARCH and FSL eDMA is for arm/arm64 ARCH. But often
>> build both at PPC ARCH. It also makes sense to build two drivers at the
>> same time. It causes many build warning because share a fsl-edma-common.o.
>> such as:
>>
>>     powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-common.o' being placed in section `.stubs'
>>     powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-trace.o' being placed in section `.stubs'
>>
>> Merge mcf-edma into fsl-edma driver. So use one driver (fsl-edma.ko) for
>> MCF and FSL eDMA.
>>
>> mcf-edma.ko should be replaced by fsl-edma.ko in modules, minimizing user
>> space impact because MCF eDMA remains confined to legacy ColdFire mcf5441x
>> production and mcf5441x has been in production for at least a decade and
>> NXP has long ceased ColdFire development.

when i developed mcf-edma, i tried to modify fsl-edma first. Modules are
similar but there are various edma IP versions, and i remember minimal
differences in the CF version too, some register bits and, of course,
endianness.

If a merge is possible, welcome, i have here mcf5441x, can give a try to
this patch as soon as i can.


>> Update Kconfig to make MCF_EDMA as feature of FSL_EDMA and change Makefile
>> to link mcl-edma-main.o to fsl-edma.o.
>>
>> Create a common module init/exit functions, which call original's
>> fsl-edma-init[exit]() and mcf-edma-init[exit]().
>>
>> Reported-by: kernel test robot <lkp@intel.com>
>> Closes: https://lore.kernel.org/oe-kbuild-all/202405082029.Es9umH7n-lkp@intel.com/
>> Signed-off-by: Frank Li <Frank.Li@nxp.com>
>> ---
>>   drivers/dma/Kconfig           |  8 ++++----
>>   drivers/dma/Makefile          |  5 ++---
>>   drivers/dma/fsl-edma-common.c | 28 ++++++++++++++++++++++++++++
>>   drivers/dma/fsl-edma-common.h |  5 +++++
>>   drivers/dma/fsl-edma-main.c   |  6 ++----
>>   drivers/dma/mcf-edma-main.c   |  6 ++----
>>   6 files changed, 43 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
>> index 002a5ec806207..45110520f6e68 100644
>> --- a/drivers/dma/Kconfig
>> +++ b/drivers/dma/Kconfig
>> @@ -393,14 +393,14 @@ config LS2X_APB_DMA
>>            It does not support memory to memory data transfer.
>>
>>   config MCF_EDMA
>> -       tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
>> +       bool "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
>>          depends on M5441x || COMPILE_TEST
>>          select DMA_ENGINE
>>          select DMA_VIRTUAL_CHANNELS
>>          help
>> -         Support the Freescale ColdFire eDMA engine, 64-channel
>> -         implementation that performs complex data transfers with
>> -         minimal intervention from a host processor.
>> +         Support the Freescale ColdFire eDMA engine in FSL_EDMA driver,
>> +         64-channel implementation that performs complex data transfers
>> +         with minimal intervention from a host processor.
>>            This module can be found on Freescale ColdFire mcf5441x SoCs.
>>
>>   config MILBEAUT_HDMAC
>> diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
>> index 802ca916f05f5..0000922c7cbfe 100644
>> --- a/drivers/dma/Makefile
>> +++ b/drivers/dma/Makefile
>> @@ -33,11 +33,10 @@ obj-$(CONFIG_DW_EDMA) += dw-edma/
>>   obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o
>>   fsl-edma-trace-$(CONFIG_TRACING) := fsl-edma-trace.o
>>   CFLAGS_fsl-edma-trace.o := -I$(src)
>> +mcf-edma-main-$(CONFIG_MCF_EDMA) := mcf-edma-main.o
>>   obj-$(CONFIG_FSL_DMA) += fsldma.o
>> -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
>> +fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y} ${mcf-edma-main-y}
>>   obj-$(CONFIG_FSL_EDMA) += fsl-edma.o
>> -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
>> -obj-$(CONFIG_MCF_EDMA) += mcf-edma.o
>>   obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o
>>   obj-$(CONFIG_FSL_RAID) += fsl_raid.o
>>   obj-$(CONFIG_HISI_DMA) += hisi_dma.o
>> diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
>> index 3af4307873157..ac04a2ce4fa1f 100644
>> --- a/drivers/dma/fsl-edma-common.c
>> +++ b/drivers/dma/fsl-edma-common.c
>> @@ -888,4 +888,32 @@ void fsl_edma_setup_regs(struct fsl_edma_engine *edma)
>>          }
>>   }
>>
>> +static int __init fsl_edma_common_init(void)
>> +{
>> +       int ret;
>> +
>> +       ret = fsl_edma_init();
>> +       if (ret)
>> +               return ret;
>> +
>> +#ifdef CONFIG_MCF_EDMA
>> +       ret = mcf_edma_init();
>> +       if (ret)
>> +               return ret;
>> +#endif
>> +       return 0;
>> +}
>> +
>> +subsys_initcall(fsl_edma_common_init);
>> +
>> +static void __exit fsl_edma_common_exit(void)
>> +{
>> +       fsl_edma_exit();
>> +
>> +#ifdef CONFIG_MCF_EDMA
>> +       mcf_edma_exit();
>> +#endif
>> +}
>> +module_exit(fsl_edma_common_exit);
>> +
>>   MODULE_LICENSE("GPL v2");
>> diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
>> index ac66222c16040..dfbdcc922ceea 100644
>> --- a/drivers/dma/fsl-edma-common.h
>> +++ b/drivers/dma/fsl-edma-common.h
>> @@ -488,4 +488,9 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan);
>>   void fsl_edma_cleanup_vchan(struct dma_device *dmadev);
>>   void fsl_edma_setup_regs(struct fsl_edma_engine *edma);
>>
>> +int __init fsl_edma_init(void);
>> +void __exit fsl_edma_exit(void);
>> +int __init mcf_edma_init(void);
>> +void __exit mcf_edma_exit(void);
>> +
>>   #endif /* _FSL_EDMA_COMMON_H_ */
>> diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
>> index 391e4f13dfeb0..a1c3c4ed869c5 100644
>> --- a/drivers/dma/fsl-edma-main.c
>> +++ b/drivers/dma/fsl-edma-main.c
>> @@ -724,17 +724,15 @@ static struct platform_driver fsl_edma_driver = {
>>          .remove_new     = fsl_edma_remove,
>>   };
>>
>> -static int __init fsl_edma_init(void)
>> +int __init fsl_edma_init(void)
>>   {
>>          return platform_driver_register(&fsl_edma_driver);
>>   }
>> -subsys_initcall(fsl_edma_init);
>>
>> -static void __exit fsl_edma_exit(void)
>> +void __exit fsl_edma_exit(void)
>>   {
>>          platform_driver_unregister(&fsl_edma_driver);
>>   }
>> -module_exit(fsl_edma_exit);
>>
>>   MODULE_ALIAS("platform:fsl-edma");
>>   MODULE_DESCRIPTION("Freescale eDMA engine driver");
>> diff --git a/drivers/dma/mcf-edma-main.c b/drivers/dma/mcf-edma-main.c
>> index 78c606f6d0026..d97991a1e9518 100644
>> --- a/drivers/dma/mcf-edma-main.c
>> +++ b/drivers/dma/mcf-edma-main.c
>> @@ -284,17 +284,15 @@ bool mcf_edma_filter_fn(struct dma_chan *chan, void *param)
>>   }
>>   EXPORT_SYMBOL(mcf_edma_filter_fn);
>>
>> -static int __init mcf_edma_init(void)
>> +int __init mcf_edma_init(void)
>>   {
>>          return platform_driver_register(&mcf_edma_driver);
>>   }
>> -subsys_initcall(mcf_edma_init);
>>
>> -static void __exit mcf_edma_exit(void)
>> +void __exit mcf_edma_exit(void)
>>   {
>>          platform_driver_unregister(&mcf_edma_driver);
>>   }
>> -module_exit(mcf_edma_exit);
>>
>>   MODULE_ALIAS("platform:mcf-edma");
>>   MODULE_DESCRIPTION("Freescale eDMA engine driver, ColdFire family");
>> --
>> 2.34.1

Regards,
angelo
Frank Li May 14, 2024, 4:16 p.m. UTC | #3
On Tue, May 14, 2024 at 09:57:09AM +0200, Angelo Dureghello wrote:
> Hi,
> 
> On 13/05/24 8:12 PM, Geert Uytterhoeven wrote:
> > CC coldfire
> > 
> > On Thu, May 9, 2024 at 9:35 PM Frank Li <Frank.Li@nxp.com> wrote:
> > > MCF eDMA are almost the same as FSL eDMA driver. Previously link to two
> > > kernel modules, fsl-edma.ko and mcf-edma.ko. These are not problem because
> > > mcf-edma is for m68k ARCH and FSL eDMA is for arm/arm64 ARCH. But often
> > > build both at PPC ARCH. It also makes sense to build two drivers at the
> > > same time. It causes many build warning because share a fsl-edma-common.o.
> > > such as:
> > > 
> > >     powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-common.o' being placed in section `.stubs'
> > >     powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-trace.o' being placed in section `.stubs'
> > > 
> > > Merge mcf-edma into fsl-edma driver. So use one driver (fsl-edma.ko) for
> > > MCF and FSL eDMA.
> > > 
> > > mcf-edma.ko should be replaced by fsl-edma.ko in modules, minimizing user
> > > space impact because MCF eDMA remains confined to legacy ColdFire mcf5441x
> > > production and mcf5441x has been in production for at least a decade and
> > > NXP has long ceased ColdFire development.
> 
> when i developed mcf-edma, i tried to modify fsl-edma first. Modules are
> similar but there are various edma IP versions, and i remember minimal
> differences in the CF version too, some register bits and, of course,
> endianness.
> 
> If a merge is possible, welcome, i have here mcf5441x, can give a try to
> this patch as soon as i can.

Thanks. I am not sure if recent eDMAv3 and eDMAv5 patch impact mcf5441.
eDMAv3 is quite big change. If you can test on mcf5441x, can I send to you
a futher clean up for mcf5441x? This patch are just simple glue two
driver together to avoid a build warning. 

> 
> 
> > > Update Kconfig to make MCF_EDMA as feature of FSL_EDMA and change Makefile
> > > to link mcl-edma-main.o to fsl-edma.o.
> > > 
> > > Create a common module init/exit functions, which call original's
> > > fsl-edma-init[exit]() and mcf-edma-init[exit]().
> > > 
> > > Reported-by: kernel test robot <lkp@intel.com>
> > > Closes: https://lore.kernel.org/oe-kbuild-all/202405082029.Es9umH7n-lkp@intel.com/
> > > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > > ---
> > >   drivers/dma/Kconfig           |  8 ++++----
> > >   drivers/dma/Makefile          |  5 ++---
> > >   drivers/dma/fsl-edma-common.c | 28 ++++++++++++++++++++++++++++
> > >   drivers/dma/fsl-edma-common.h |  5 +++++
> > >   drivers/dma/fsl-edma-main.c   |  6 ++----
> > >   drivers/dma/mcf-edma-main.c   |  6 ++----
> > >   6 files changed, 43 insertions(+), 15 deletions(-)
> > > 
> > > diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
> > > index 002a5ec806207..45110520f6e68 100644
> > > --- a/drivers/dma/Kconfig
> > > +++ b/drivers/dma/Kconfig
> > > @@ -393,14 +393,14 @@ config LS2X_APB_DMA
> > >            It does not support memory to memory data transfer.
> > > 
> > >   config MCF_EDMA
> > > -       tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
> > > +       bool "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
> > >          depends on M5441x || COMPILE_TEST
> > >          select DMA_ENGINE
> > >          select DMA_VIRTUAL_CHANNELS
> > >          help
> > > -         Support the Freescale ColdFire eDMA engine, 64-channel
> > > -         implementation that performs complex data transfers with
> > > -         minimal intervention from a host processor.
> > > +         Support the Freescale ColdFire eDMA engine in FSL_EDMA driver,
> > > +         64-channel implementation that performs complex data transfers
> > > +         with minimal intervention from a host processor.
> > >            This module can be found on Freescale ColdFire mcf5441x SoCs.
> > > 
> > >   config MILBEAUT_HDMAC
> > > diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
> > > index 802ca916f05f5..0000922c7cbfe 100644
> > > --- a/drivers/dma/Makefile
> > > +++ b/drivers/dma/Makefile
> > > @@ -33,11 +33,10 @@ obj-$(CONFIG_DW_EDMA) += dw-edma/
> > >   obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o
> > >   fsl-edma-trace-$(CONFIG_TRACING) := fsl-edma-trace.o
> > >   CFLAGS_fsl-edma-trace.o := -I$(src)
> > > +mcf-edma-main-$(CONFIG_MCF_EDMA) := mcf-edma-main.o
> > >   obj-$(CONFIG_FSL_DMA) += fsldma.o
> > > -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
> > > +fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y} ${mcf-edma-main-y}
> > >   obj-$(CONFIG_FSL_EDMA) += fsl-edma.o
> > > -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
> > > -obj-$(CONFIG_MCF_EDMA) += mcf-edma.o
> > >   obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o
> > >   obj-$(CONFIG_FSL_RAID) += fsl_raid.o
> > >   obj-$(CONFIG_HISI_DMA) += hisi_dma.o
> > > diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
> > > index 3af4307873157..ac04a2ce4fa1f 100644
> > > --- a/drivers/dma/fsl-edma-common.c
> > > +++ b/drivers/dma/fsl-edma-common.c
> > > @@ -888,4 +888,32 @@ void fsl_edma_setup_regs(struct fsl_edma_engine *edma)
> > >          }
> > >   }
> > > 
> > > +static int __init fsl_edma_common_init(void)
> > > +{
> > > +       int ret;
> > > +
> > > +       ret = fsl_edma_init();
> > > +       if (ret)
> > > +               return ret;
> > > +
> > > +#ifdef CONFIG_MCF_EDMA
> > > +       ret = mcf_edma_init();
> > > +       if (ret)
> > > +               return ret;
> > > +#endif
> > > +       return 0;
> > > +}
> > > +
> > > +subsys_initcall(fsl_edma_common_init);
> > > +
> > > +static void __exit fsl_edma_common_exit(void)
> > > +{
> > > +       fsl_edma_exit();
> > > +
> > > +#ifdef CONFIG_MCF_EDMA
> > > +       mcf_edma_exit();
> > > +#endif
> > > +}
> > > +module_exit(fsl_edma_common_exit);
> > > +
> > >   MODULE_LICENSE("GPL v2");
> > > diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
> > > index ac66222c16040..dfbdcc922ceea 100644
> > > --- a/drivers/dma/fsl-edma-common.h
> > > +++ b/drivers/dma/fsl-edma-common.h
> > > @@ -488,4 +488,9 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan);
> > >   void fsl_edma_cleanup_vchan(struct dma_device *dmadev);
> > >   void fsl_edma_setup_regs(struct fsl_edma_engine *edma);
> > > 
> > > +int __init fsl_edma_init(void);
> > > +void __exit fsl_edma_exit(void);
> > > +int __init mcf_edma_init(void);
> > > +void __exit mcf_edma_exit(void);
> > > +
> > >   #endif /* _FSL_EDMA_COMMON_H_ */
> > > diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
> > > index 391e4f13dfeb0..a1c3c4ed869c5 100644
> > > --- a/drivers/dma/fsl-edma-main.c
> > > +++ b/drivers/dma/fsl-edma-main.c
> > > @@ -724,17 +724,15 @@ static struct platform_driver fsl_edma_driver = {
> > >          .remove_new     = fsl_edma_remove,
> > >   };
> > > 
> > > -static int __init fsl_edma_init(void)
> > > +int __init fsl_edma_init(void)
> > >   {
> > >          return platform_driver_register(&fsl_edma_driver);
> > >   }
> > > -subsys_initcall(fsl_edma_init);
> > > 
> > > -static void __exit fsl_edma_exit(void)
> > > +void __exit fsl_edma_exit(void)
> > >   {
> > >          platform_driver_unregister(&fsl_edma_driver);
> > >   }
> > > -module_exit(fsl_edma_exit);
> > > 
> > >   MODULE_ALIAS("platform:fsl-edma");
> > >   MODULE_DESCRIPTION("Freescale eDMA engine driver");
> > > diff --git a/drivers/dma/mcf-edma-main.c b/drivers/dma/mcf-edma-main.c
> > > index 78c606f6d0026..d97991a1e9518 100644
> > > --- a/drivers/dma/mcf-edma-main.c
> > > +++ b/drivers/dma/mcf-edma-main.c
> > > @@ -284,17 +284,15 @@ bool mcf_edma_filter_fn(struct dma_chan *chan, void *param)
> > >   }
> > >   EXPORT_SYMBOL(mcf_edma_filter_fn);
> > > 
> > > -static int __init mcf_edma_init(void)
> > > +int __init mcf_edma_init(void)
> > >   {
> > >          return platform_driver_register(&mcf_edma_driver);
> > >   }
> > > -subsys_initcall(mcf_edma_init);
> > > 
> > > -static void __exit mcf_edma_exit(void)
> > > +void __exit mcf_edma_exit(void)
> > >   {
> > >          platform_driver_unregister(&mcf_edma_driver);
> > >   }
> > > -module_exit(mcf_edma_exit);
> > > 
> > >   MODULE_ALIAS("platform:mcf-edma");
> > >   MODULE_DESCRIPTION("Freescale eDMA engine driver, ColdFire family");
> > > --
> > > 2.34.1
> 
> Regards,
> angelo
> 
>
Angelo Dureghello May 15, 2024, 8:17 a.m. UTC | #4
Hi,

On 14/05/24 6:16 PM, Frank Li wrote:
> On Tue, May 14, 2024 at 09:57:09AM +0200, Angelo Dureghello wrote:
>> Hi,
>>
>> On 13/05/24 8:12 PM, Geert Uytterhoeven wrote:
>>> CC coldfire
>>>
>>> On Thu, May 9, 2024 at 9:35 PM Frank Li <Frank.Li@nxp.com> wrote:
>>>> MCF eDMA are almost the same as FSL eDMA driver. Previously link to two
>>>> kernel modules, fsl-edma.ko and mcf-edma.ko. These are not problem because
>>>> mcf-edma is for m68k ARCH and FSL eDMA is for arm/arm64 ARCH. But often
>>>> build both at PPC ARCH. It also makes sense to build two drivers at the
>>>> same time. It causes many build warning because share a fsl-edma-common.o.
>>>> such as:
>>>>
>>>>      powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-common.o' being placed in section `.stubs'
>>>>      powerpc64le-linux-ld: warning: orphan section `.stubs' from `drivers/dma/fsl-edma-trace.o' being placed in section `.stubs'
>>>>
>>>> Merge mcf-edma into fsl-edma driver. So use one driver (fsl-edma.ko) for
>>>> MCF and FSL eDMA.
>>>>
>>>> mcf-edma.ko should be replaced by fsl-edma.ko in modules, minimizing user
>>>> space impact because MCF eDMA remains confined to legacy ColdFire mcf5441x
>>>> production and mcf5441x has been in production for at least a decade and
>>>> NXP has long ceased ColdFire development.
>> when i developed mcf-edma, i tried to modify fsl-edma first. Modules are
>> similar but there are various edma IP versions, and i remember minimal
>> differences in the CF version too, some register bits and, of course,
>> endianness.
>>
>> If a merge is possible, welcome, i have here mcf5441x, can give a try to
>> this patch as soon as i can.
> Thanks. I am not sure if recent eDMAv3 and eDMAv5 patch impact mcf5441.
> eDMAv3 is quite big change. If you can test on mcf5441x, can I send to you
> a futher clean up for mcf5441x?


sure


> This patch are just simple glue two
> driver together to avoid a build warning.



>>
>>>> Update Kconfig to make MCF_EDMA as feature of FSL_EDMA and change Makefile
>>>> to link mcl-edma-main.o to fsl-edma.o.
>>>>
>>>> Create a common module init/exit functions, which call original's
>>>> fsl-edma-init[exit]() and mcf-edma-init[exit]().
>>>>
>>>> Reported-by: kernel test robot <lkp@intel.com>
>>>> Closes: https://lore.kernel.org/oe-kbuild-all/202405082029.Es9umH7n-lkp@intel.com/
>>>> Signed-off-by: Frank Li <Frank.Li@nxp.com>
>>>> ---
>>>>    drivers/dma/Kconfig           |  8 ++++----
>>>>    drivers/dma/Makefile          |  5 ++---
>>>>    drivers/dma/fsl-edma-common.c | 28 ++++++++++++++++++++++++++++
>>>>    drivers/dma/fsl-edma-common.h |  5 +++++
>>>>    drivers/dma/fsl-edma-main.c   |  6 ++----
>>>>    drivers/dma/mcf-edma-main.c   |  6 ++----
>>>>    6 files changed, 43 insertions(+), 15 deletions(-)
>>>>
>>>> diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
>>>> index 002a5ec806207..45110520f6e68 100644
>>>> --- a/drivers/dma/Kconfig
>>>> +++ b/drivers/dma/Kconfig
>>>> @@ -393,14 +393,14 @@ config LS2X_APB_DMA
>>>>             It does not support memory to memory data transfer.
>>>>
>>>>    config MCF_EDMA
>>>> -       tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
>>>> +       bool "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
>>>>           depends on M5441x || COMPILE_TEST
>>>>           select DMA_ENGINE
>>>>           select DMA_VIRTUAL_CHANNELS
>>>>           help
>>>> -         Support the Freescale ColdFire eDMA engine, 64-channel
>>>> -         implementation that performs complex data transfers with
>>>> -         minimal intervention from a host processor.
>>>> +         Support the Freescale ColdFire eDMA engine in FSL_EDMA driver,
>>>> +         64-channel implementation that performs complex data transfers
>>>> +         with minimal intervention from a host processor.
>>>>             This module can be found on Freescale ColdFire mcf5441x SoCs.
>>>>
>>>>    config MILBEAUT_HDMAC
>>>> diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
>>>> index 802ca916f05f5..0000922c7cbfe 100644
>>>> --- a/drivers/dma/Makefile
>>>> +++ b/drivers/dma/Makefile
>>>> @@ -33,11 +33,10 @@ obj-$(CONFIG_DW_EDMA) += dw-edma/
>>>>    obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o
>>>>    fsl-edma-trace-$(CONFIG_TRACING) := fsl-edma-trace.o
>>>>    CFLAGS_fsl-edma-trace.o := -I$(src)
>>>> +mcf-edma-main-$(CONFIG_MCF_EDMA) := mcf-edma-main.o
>>>>    obj-$(CONFIG_FSL_DMA) += fsldma.o
>>>> -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
>>>> +fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y} ${mcf-edma-main-y}
>>>>    obj-$(CONFIG_FSL_EDMA) += fsl-edma.o
>>>> -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
>>>> -obj-$(CONFIG_MCF_EDMA) += mcf-edma.o
>>>>    obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o
>>>>    obj-$(CONFIG_FSL_RAID) += fsl_raid.o
>>>>    obj-$(CONFIG_HISI_DMA) += hisi_dma.o
>>>> diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
>>>> index 3af4307873157..ac04a2ce4fa1f 100644
>>>> --- a/drivers/dma/fsl-edma-common.c
>>>> +++ b/drivers/dma/fsl-edma-common.c
>>>> @@ -888,4 +888,32 @@ void fsl_edma_setup_regs(struct fsl_edma_engine *edma)
>>>>           }
>>>>    }
>>>>
>>>> +static int __init fsl_edma_common_init(void)
>>>> +{
>>>> +       int ret;
>>>> +
>>>> +       ret = fsl_edma_init();
>>>> +       if (ret)
>>>> +               return ret;
>>>> +
>>>> +#ifdef CONFIG_MCF_EDMA
>>>> +       ret = mcf_edma_init();
>>>> +       if (ret)
>>>> +               return ret;
>>>> +#endif
>>>> +       return 0;
>>>> +}
>>>> +
>>>> +subsys_initcall(fsl_edma_common_init);
>>>> +
>>>> +static void __exit fsl_edma_common_exit(void)
>>>> +{
>>>> +       fsl_edma_exit();
>>>> +
>>>> +#ifdef CONFIG_MCF_EDMA
>>>> +       mcf_edma_exit();
>>>> +#endif
>>>> +}
>>>> +module_exit(fsl_edma_common_exit);
>>>> +
>>>>    MODULE_LICENSE("GPL v2");
>>>> diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
>>>> index ac66222c16040..dfbdcc922ceea 100644
>>>> --- a/drivers/dma/fsl-edma-common.h
>>>> +++ b/drivers/dma/fsl-edma-common.h
>>>> @@ -488,4 +488,9 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan);
>>>>    void fsl_edma_cleanup_vchan(struct dma_device *dmadev);
>>>>    void fsl_edma_setup_regs(struct fsl_edma_engine *edma);
>>>>
>>>> +int __init fsl_edma_init(void);
>>>> +void __exit fsl_edma_exit(void);
>>>> +int __init mcf_edma_init(void);
>>>> +void __exit mcf_edma_exit(void);
>>>> +
>>>>    #endif /* _FSL_EDMA_COMMON_H_ */
>>>> diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
>>>> index 391e4f13dfeb0..a1c3c4ed869c5 100644
>>>> --- a/drivers/dma/fsl-edma-main.c
>>>> +++ b/drivers/dma/fsl-edma-main.c
>>>> @@ -724,17 +724,15 @@ static struct platform_driver fsl_edma_driver = {
>>>>           .remove_new     = fsl_edma_remove,
>>>>    };
>>>>
>>>> -static int __init fsl_edma_init(void)
>>>> +int __init fsl_edma_init(void)
>>>>    {
>>>>           return platform_driver_register(&fsl_edma_driver);
>>>>    }
>>>> -subsys_initcall(fsl_edma_init);
>>>>
>>>> -static void __exit fsl_edma_exit(void)
>>>> +void __exit fsl_edma_exit(void)
>>>>    {
>>>>           platform_driver_unregister(&fsl_edma_driver);
>>>>    }
>>>> -module_exit(fsl_edma_exit);
>>>>
>>>>    MODULE_ALIAS("platform:fsl-edma");
>>>>    MODULE_DESCRIPTION("Freescale eDMA engine driver");
>>>> diff --git a/drivers/dma/mcf-edma-main.c b/drivers/dma/mcf-edma-main.c
>>>> index 78c606f6d0026..d97991a1e9518 100644
>>>> --- a/drivers/dma/mcf-edma-main.c
>>>> +++ b/drivers/dma/mcf-edma-main.c
>>>> @@ -284,17 +284,15 @@ bool mcf_edma_filter_fn(struct dma_chan *chan, void *param)
>>>>    }
>>>>    EXPORT_SYMBOL(mcf_edma_filter_fn);
>>>>
>>>> -static int __init mcf_edma_init(void)
>>>> +int __init mcf_edma_init(void)
>>>>    {
>>>>           return platform_driver_register(&mcf_edma_driver);
>>>>    }
>>>> -subsys_initcall(mcf_edma_init);
>>>>
>>>> -static void __exit mcf_edma_exit(void)
>>>> +void __exit mcf_edma_exit(void)
>>>>    {
>>>>           platform_driver_unregister(&mcf_edma_driver);
>>>>    }
>>>> -module_exit(mcf_edma_exit);
>>>>
>>>>    MODULE_ALIAS("platform:mcf-edma");
>>>>    MODULE_DESCRIPTION("Freescale eDMA engine driver, ColdFire family");
>>>> --
>>>> 2.34.1
>> Regards,
>> angelo
>>
Regards,
angelo
diff mbox series

Patch

diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
index 002a5ec806207..45110520f6e68 100644
--- a/drivers/dma/Kconfig
+++ b/drivers/dma/Kconfig
@@ -393,14 +393,14 @@  config LS2X_APB_DMA
 	  It does not support memory to memory data transfer.
 
 config MCF_EDMA
-	tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
+	bool "Freescale eDMA engine support, ColdFire mcf5441x SoCs"
 	depends on M5441x || COMPILE_TEST
 	select DMA_ENGINE
 	select DMA_VIRTUAL_CHANNELS
 	help
-	  Support the Freescale ColdFire eDMA engine, 64-channel
-	  implementation that performs complex data transfers with
-	  minimal intervention from a host processor.
+	  Support the Freescale ColdFire eDMA engine in FSL_EDMA driver,
+	  64-channel implementation that performs complex data transfers
+	  with minimal intervention from a host processor.
 	  This module can be found on Freescale ColdFire mcf5441x SoCs.
 
 config MILBEAUT_HDMAC
diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
index 802ca916f05f5..0000922c7cbfe 100644
--- a/drivers/dma/Makefile
+++ b/drivers/dma/Makefile
@@ -33,11 +33,10 @@  obj-$(CONFIG_DW_EDMA) += dw-edma/
 obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o
 fsl-edma-trace-$(CONFIG_TRACING) := fsl-edma-trace.o
 CFLAGS_fsl-edma-trace.o := -I$(src)
+mcf-edma-main-$(CONFIG_MCF_EDMA) := mcf-edma-main.o
 obj-$(CONFIG_FSL_DMA) += fsldma.o
-fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
+fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y} ${mcf-edma-main-y}
 obj-$(CONFIG_FSL_EDMA) += fsl-edma.o
-mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o ${fsl-edma-trace-y}
-obj-$(CONFIG_MCF_EDMA) += mcf-edma.o
 obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o
 obj-$(CONFIG_FSL_RAID) += fsl_raid.o
 obj-$(CONFIG_HISI_DMA) += hisi_dma.o
diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
index 3af4307873157..ac04a2ce4fa1f 100644
--- a/drivers/dma/fsl-edma-common.c
+++ b/drivers/dma/fsl-edma-common.c
@@ -888,4 +888,32 @@  void fsl_edma_setup_regs(struct fsl_edma_engine *edma)
 	}
 }
 
+static int __init fsl_edma_common_init(void)
+{
+	int ret;
+
+	ret = fsl_edma_init();
+	if (ret)
+		return ret;
+
+#ifdef CONFIG_MCF_EDMA
+	ret = mcf_edma_init();
+	if (ret)
+		return ret;
+#endif
+	return 0;
+}
+
+subsys_initcall(fsl_edma_common_init);
+
+static void __exit fsl_edma_common_exit(void)
+{
+	fsl_edma_exit();
+
+#ifdef CONFIG_MCF_EDMA
+	mcf_edma_exit();
+#endif
+}
+module_exit(fsl_edma_common_exit);
+
 MODULE_LICENSE("GPL v2");
diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
index ac66222c16040..dfbdcc922ceea 100644
--- a/drivers/dma/fsl-edma-common.h
+++ b/drivers/dma/fsl-edma-common.h
@@ -488,4 +488,9 @@  void fsl_edma_free_chan_resources(struct dma_chan *chan);
 void fsl_edma_cleanup_vchan(struct dma_device *dmadev);
 void fsl_edma_setup_regs(struct fsl_edma_engine *edma);
 
+int __init fsl_edma_init(void);
+void __exit fsl_edma_exit(void);
+int __init mcf_edma_init(void);
+void __exit mcf_edma_exit(void);
+
 #endif /* _FSL_EDMA_COMMON_H_ */
diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
index 391e4f13dfeb0..a1c3c4ed869c5 100644
--- a/drivers/dma/fsl-edma-main.c
+++ b/drivers/dma/fsl-edma-main.c
@@ -724,17 +724,15 @@  static struct platform_driver fsl_edma_driver = {
 	.remove_new	= fsl_edma_remove,
 };
 
-static int __init fsl_edma_init(void)
+int __init fsl_edma_init(void)
 {
 	return platform_driver_register(&fsl_edma_driver);
 }
-subsys_initcall(fsl_edma_init);
 
-static void __exit fsl_edma_exit(void)
+void __exit fsl_edma_exit(void)
 {
 	platform_driver_unregister(&fsl_edma_driver);
 }
-module_exit(fsl_edma_exit);
 
 MODULE_ALIAS("platform:fsl-edma");
 MODULE_DESCRIPTION("Freescale eDMA engine driver");
diff --git a/drivers/dma/mcf-edma-main.c b/drivers/dma/mcf-edma-main.c
index 78c606f6d0026..d97991a1e9518 100644
--- a/drivers/dma/mcf-edma-main.c
+++ b/drivers/dma/mcf-edma-main.c
@@ -284,17 +284,15 @@  bool mcf_edma_filter_fn(struct dma_chan *chan, void *param)
 }
 EXPORT_SYMBOL(mcf_edma_filter_fn);
 
-static int __init mcf_edma_init(void)
+int __init mcf_edma_init(void)
 {
 	return platform_driver_register(&mcf_edma_driver);
 }
-subsys_initcall(mcf_edma_init);
 
-static void __exit mcf_edma_exit(void)
+void __exit mcf_edma_exit(void)
 {
 	platform_driver_unregister(&mcf_edma_driver);
 }
-module_exit(mcf_edma_exit);
 
 MODULE_ALIAS("platform:mcf-edma");
 MODULE_DESCRIPTION("Freescale eDMA engine driver, ColdFire family");