diff mbox series

[RFC] clk: imx8qxp: Unbreak auto module building for MXC_CLK_SCU

Message ID 20201124121740.ytag7rm53umi2qvm@linutronix.de (mailing list archive)
State Superseded, archived
Headers show
Series [RFC] clk: imx8qxp: Unbreak auto module building for MXC_CLK_SCU | expand

Commit Message

Sebastian Andrzej Siewior Nov. 24, 2020, 12:17 p.m. UTC
Automatic moudule building is broken by adding module support to
i.MX8QXP clock driver. It can be tested by ARM defconfig +
CONFIG_IMX_MBOX=m and CONFIG_MXC_CLK_SCU=m.

The compile breaks because the modules and source files are mixed.
After fixing that, the build breaks because the SCU driver has no
license or symbols, which are required by the CLK_IMX8QXP driver, are
not properly exported.

The following patch is against -rc5:

Compile module clk-imx-scu.o which contains of clk-scu.o clk-lpcg-scu.o
if CONFIG_MXC_CLK_SCU is enabled.
Compile modules clk-imx8qxp.o and clk-imx8qxp-lpcg.o if
CONFIG_CLK_IMX8QXP is enabled.
Add EXPORT_SYMBOL_GPL() to functions which fail to resolve once
CONFIG_CLK_IMX8QXP is enabled as module.
Add License GPL to clk-scu.c.

In -next it breaks additionally because device_is_bound() is not made available
to modules.
Any suggestions? Should the original commit be revoked?

Fixes: e0d0d4d86c766 ("clk: imx8qxp: Support building i.MX8QXP clock driver as module")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---

 drivers/clk/imx/Makefile       | 6 +++---
 drivers/clk/imx/clk-lpcg-scu.c | 1 +
 drivers/clk/imx/clk-scu.c      | 4 ++++
 3 files changed, 8 insertions(+), 3 deletions(-)

Comments

Aisheng Dong Nov. 25, 2020, 7:15 a.m. UTC | #1
> From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> Sent: Tuesday, November 24, 2020 8:18 PM
> 
> Automatic moudule building is broken by adding module support to i.MX8QXP
> clock driver. It can be tested by ARM defconfig + CONFIG_IMX_MBOX=m and
> CONFIG_MXC_CLK_SCU=m.
> 
> The compile breaks because the modules and source files are mixed.
> After fixing that, the build breaks because the SCU driver has no license or
> symbols, which are required by the CLK_IMX8QXP driver, are not properly
> exported.
> 
> The following patch is against -rc5:
> 
> Compile module clk-imx-scu.o which contains of clk-scu.o clk-lpcg-scu.o if
> CONFIG_MXC_CLK_SCU is enabled.
> Compile modules clk-imx8qxp.o and clk-imx8qxp-lpcg.o if
> CONFIG_CLK_IMX8QXP is enabled.
> Add EXPORT_SYMBOL_GPL() to functions which fail to resolve once
> CONFIG_CLK_IMX8QXP is enabled as module.
> Add License GPL to clk-scu.c.
> 

I think the simplest solution is make MXC_CLK_SCU to be invisible to users and can only
be selected by CLK_IMX8QXP option because currently clk-scu.o and clk-imx8qxp.o are built
together, it's meaningless and buggy to separate them. Longtermly they will be combined into
one driver file.

E.g
diff --git a/drivers/clk/imx/Kconfig b/drivers/clk/imx/Kconfig
index 3b393cb07295..dbacdd70af2e 100644
--- a/drivers/clk/imx/Kconfig
+++ b/drivers/clk/imx/Kconfig
@@ -5,7 +5,7 @@ config MXC_CLK
        depends on ARCH_MXC || COMPILE_TEST
 
 config MXC_CLK_SCU
-       tristate "IMX SCU clock"
+       tristate
        depends on ARCH_MXC || COMPILE_TEST
        depends on IMX_SCU && HAVE_ARM_SMCCC

> In -next it breaks additionally because device_is_bound() is not made available
> to modules.
> Any suggestions? Should the original commit be revoked?

See fixes here:
https://patchwork.kernel.org/project/linux-clk/cover/20201124100802.22775-1-aisheng.dong@nxp.com/

> 
> Fixes: e0d0d4d86c766 ("clk: imx8qxp: Support building i.MX8QXP clock driver
> as module")
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
> 
>  drivers/clk/imx/Makefile       | 6 +++---
>  drivers/clk/imx/clk-lpcg-scu.c | 1 +
>  drivers/clk/imx/clk-scu.c      | 4 ++++
>  3 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile index
> dd6a737d060b4..b8bf9460c91d7 100644
> --- a/drivers/clk/imx/Makefile
> +++ b/drivers/clk/imx/Makefile
> @@ -26,9 +26,9 @@ obj-$(CONFIG_CLK_IMX8MN) += clk-imx8mn.o
>  obj-$(CONFIG_CLK_IMX8MP) += clk-imx8mp.o
>  obj-$(CONFIG_CLK_IMX8MQ) += clk-imx8mq.o
> 
> -obj-$(CONFIG_MXC_CLK_SCU) += clk-imx-scu.o clk-imx-lpcg-scu.o
> -clk-imx-scu-$(CONFIG_CLK_IMX8QXP) += clk-scu.o clk-imx8qxp.o
> -clk-imx-lpcg-scu-$(CONFIG_CLK_IMX8QXP) += clk-lpcg-scu.o
> clk-imx8qxp-lpcg.o
> +obj-$(CONFIG_MXC_CLK_SCU)	+= clk-imx-scu.o
> +clk-imx-scu-y			:= clk-scu.o clk-lpcg-scu.o

We can't do this because clk-scu  and clk-lpcg-scu are separate drivers.

Regards
Aisheng

> +obj-$(CONFIG_CLK_IMX8QXP)	+= clk-imx8qxp.o clk-imx8qxp-lpcg.o
> 
>  obj-$(CONFIG_CLK_IMX1)   += clk-imx1.o
>  obj-$(CONFIG_CLK_IMX25)  += clk-imx25.o diff --git
> a/drivers/clk/imx/clk-lpcg-scu.c b/drivers/clk/imx/clk-lpcg-scu.c index
> 1f0e44f921aee..336dce43da82d 100644
> --- a/drivers/clk/imx/clk-lpcg-scu.c
> +++ b/drivers/clk/imx/clk-lpcg-scu.c
> @@ -115,3 +115,4 @@ struct clk_hw *imx_clk_lpcg_scu(const char *name,
> const char *parent_name,
> 
>  	return hw;
>  }
> +EXPORT_SYMBOL_GPL(imx_clk_lpcg_scu);
> diff --git a/drivers/clk/imx/clk-scu.c b/drivers/clk/imx/clk-scu.c index
> b8b2072742a56..026a33606ae53 100644
> --- a/drivers/clk/imx/clk-scu.c
> +++ b/drivers/clk/imx/clk-scu.c
> @@ -9,6 +9,7 @@
>  #include <linux/clk-provider.h>
>  #include <linux/err.h>
>  #include <linux/slab.h>
> +#include <linux/module.h>
> 
>  #include "clk-scu.h"
> 
> @@ -132,6 +133,7 @@ int imx_clk_scu_init(void)  {
>  	return imx_scu_get_handle(&ccm_ipc_handle);
>  }
> +EXPORT_SYMBOL_GPL(imx_clk_scu_init);
> 
>  /*
>   * clk_scu_recalc_rate - Get clock rate for a SCU clock @@ -387,3 +389,5 @@
> struct clk_hw *__imx_clk_scu(const char *name, const char * const *parents,
> 
>  	return hw;
>  }
> +EXPORT_SYMBOL_GPL(__imx_clk_scu);
> +MODULE_LICENSE("GPL");
> --
> 2.29.2
Sebastian Andrzej Siewior Nov. 25, 2020, 8:40 a.m. UTC | #2
On 2020-11-25 07:15:24 [+0000], Aisheng Dong wrote:
> I think the simplest solution is make MXC_CLK_SCU to be invisible to users and can only
> be selected by CLK_IMX8QXP option because currently clk-scu.o and clk-imx8qxp.o are built
> together, it's meaningless and buggy to separate them. Longtermly they will be combined into
> one driver file.
> 
> E.g
> diff --git a/drivers/clk/imx/Kconfig b/drivers/clk/imx/Kconfig
> index 3b393cb07295..dbacdd70af2e 100644
> --- a/drivers/clk/imx/Kconfig
> +++ b/drivers/clk/imx/Kconfig
> @@ -5,7 +5,7 @@ config MXC_CLK
>         depends on ARCH_MXC || COMPILE_TEST
>  
>  config MXC_CLK_SCU
> -       tristate "IMX SCU clock"
> +       tristate
>         depends on ARCH_MXC || COMPILE_TEST
>         depends on IMX_SCU && HAVE_ARM_SMCCC

So it still becomes a module if it gets selected by one, like
CLK_IMX8QXP.

> See fixes here:
> https://patchwork.kernel.org/project/linux-clk/cover/20201124100802.22775-1-aisheng.dong@nxp.com/

Whatever you do, please make sure the issue in v5.10 gets also addressed.

Sebastian
Aisheng Dong Nov. 25, 2020, 9:53 a.m. UTC | #3
> From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> Sent: Wednesday, November 25, 2020 4:40 PM
> 
> On 2020-11-25 07:15:24 [+0000], Aisheng Dong wrote:
> > I think the simplest solution is make MXC_CLK_SCU to be invisible to
> > users and can only be selected by CLK_IMX8QXP option because currently
> > clk-scu.o and clk-imx8qxp.o are built together, it's meaningless and
> > buggy to separate them. Longtermly they will be combined into one driver file.
> >
> > E.g
> > diff --git a/drivers/clk/imx/Kconfig b/drivers/clk/imx/Kconfig index
> > 3b393cb07295..dbacdd70af2e 100644
> > --- a/drivers/clk/imx/Kconfig
> > +++ b/drivers/clk/imx/Kconfig
> > @@ -5,7 +5,7 @@ config MXC_CLK
> >         depends on ARCH_MXC || COMPILE_TEST
> >
> >  config MXC_CLK_SCU
> > -       tristate "IMX SCU clock"
> > +       tristate
> >         depends on ARCH_MXC || COMPILE_TEST
> >         depends on IMX_SCU && HAVE_ARM_SMCCC
> 
> So it still becomes a module if it gets selected by one, like CLK_IMX8QXP.
> 

Yes, as MXC_CLK_SCU and CLK_IMX8QXP will be enabled at the same time and
clk-scu.o and clk-imx8qxp.o are compiled together into one module,
there will be no such issues reported in this email.


> > See fixes here:
...
> 
> Whatever you do, please make sure the issue in v5.10 gets also addressed.

Will you send out above patch if you're ok?
Or I will do it now if you don't mind.

Regards
Aisheng

> 
> Sebastian
Aisheng Dong Nov. 25, 2020, 11:08 a.m. UTC | #4
Hi Sebastian

> From: Aisheng Dong <aisheng.dong@nxp.com>
> Sent: Wednesday, November 25, 2020 5:53 PM
> 
> > From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> > Sent: Wednesday, November 25, 2020 4:40 PM
> >
> > On 2020-11-25 07:15:24 [+0000], Aisheng Dong wrote:
> > > I think the simplest solution is make MXC_CLK_SCU to be invisible to
> > > users and can only be selected by CLK_IMX8QXP option because
> > > currently clk-scu.o and clk-imx8qxp.o are built together, it's
> > > meaningless and buggy to separate them. Longtermly they will be combined
> into one driver file.
> > >
> > > E.g
> > > diff --git a/drivers/clk/imx/Kconfig b/drivers/clk/imx/Kconfig index
> > > 3b393cb07295..dbacdd70af2e 100644
> > > --- a/drivers/clk/imx/Kconfig
> > > +++ b/drivers/clk/imx/Kconfig
> > > @@ -5,7 +5,7 @@ config MXC_CLK
> > >         depends on ARCH_MXC || COMPILE_TEST
> > >
> > >  config MXC_CLK_SCU
> > > -       tristate "IMX SCU clock"
> > > +       tristate
> > >         depends on ARCH_MXC || COMPILE_TEST
> > >         depends on IMX_SCU && HAVE_ARM_SMCCC
> >
> > So it still becomes a module if it gets selected by one, like CLK_IMX8QXP.
> >
> 
> Yes, as MXC_CLK_SCU and CLK_IMX8QXP will be enabled at the same time and
> clk-scu.o and clk-imx8qxp.o are compiled together into one module, there will
> be no such issues reported in this email.
> 
> 
> > > See fixes here:
> ...
> >
> > Whatever you do, please make sure the issue in v5.10 gets also addressed.
> 
> Will you send out above patch if you're ok?
> Or I will do it now if you don't mind.

I just sent out the fix with you CCed.

Regards
Aisheng

> 
> Regards
> Aisheng
> 
> >
> > Sebastian
diff mbox series

Patch

diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile
index dd6a737d060b4..b8bf9460c91d7 100644
--- a/drivers/clk/imx/Makefile
+++ b/drivers/clk/imx/Makefile
@@ -26,9 +26,9 @@  obj-$(CONFIG_CLK_IMX8MN) += clk-imx8mn.o
 obj-$(CONFIG_CLK_IMX8MP) += clk-imx8mp.o
 obj-$(CONFIG_CLK_IMX8MQ) += clk-imx8mq.o
 
-obj-$(CONFIG_MXC_CLK_SCU) += clk-imx-scu.o clk-imx-lpcg-scu.o
-clk-imx-scu-$(CONFIG_CLK_IMX8QXP) += clk-scu.o clk-imx8qxp.o
-clk-imx-lpcg-scu-$(CONFIG_CLK_IMX8QXP) += clk-lpcg-scu.o clk-imx8qxp-lpcg.o
+obj-$(CONFIG_MXC_CLK_SCU)	+= clk-imx-scu.o
+clk-imx-scu-y			:= clk-scu.o clk-lpcg-scu.o
+obj-$(CONFIG_CLK_IMX8QXP)	+= clk-imx8qxp.o clk-imx8qxp-lpcg.o
 
 obj-$(CONFIG_CLK_IMX1)   += clk-imx1.o
 obj-$(CONFIG_CLK_IMX25)  += clk-imx25.o
diff --git a/drivers/clk/imx/clk-lpcg-scu.c b/drivers/clk/imx/clk-lpcg-scu.c
index 1f0e44f921aee..336dce43da82d 100644
--- a/drivers/clk/imx/clk-lpcg-scu.c
+++ b/drivers/clk/imx/clk-lpcg-scu.c
@@ -115,3 +115,4 @@  struct clk_hw *imx_clk_lpcg_scu(const char *name, const char *parent_name,
 
 	return hw;
 }
+EXPORT_SYMBOL_GPL(imx_clk_lpcg_scu);
diff --git a/drivers/clk/imx/clk-scu.c b/drivers/clk/imx/clk-scu.c
index b8b2072742a56..026a33606ae53 100644
--- a/drivers/clk/imx/clk-scu.c
+++ b/drivers/clk/imx/clk-scu.c
@@ -9,6 +9,7 @@ 
 #include <linux/clk-provider.h>
 #include <linux/err.h>
 #include <linux/slab.h>
+#include <linux/module.h>
 
 #include "clk-scu.h"
 
@@ -132,6 +133,7 @@  int imx_clk_scu_init(void)
 {
 	return imx_scu_get_handle(&ccm_ipc_handle);
 }
+EXPORT_SYMBOL_GPL(imx_clk_scu_init);
 
 /*
  * clk_scu_recalc_rate - Get clock rate for a SCU clock
@@ -387,3 +389,5 @@  struct clk_hw *__imx_clk_scu(const char *name, const char * const *parents,
 
 	return hw;
 }
+EXPORT_SYMBOL_GPL(__imx_clk_scu);
+MODULE_LICENSE("GPL");