linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module
@ 2020-07-29 14:48 Anson Huang
  2020-07-29 14:48 ` [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits Anson Huang
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Anson Huang @ 2020-07-29 14:48 UTC (permalink / raw)
  To: mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
	aisheng.dong, arnd, peng.fan, abel.vesa, fugang.duan,
	daniel.baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: Linux-imx

Nowdays, there are more and more requirements of building SoC specific drivers as
modules, such as Android GKI (generic kernel image), this patch set supports building
i.MX ARMv8 SoCs clock drivers as modules,

The CLK_IMXxxx is introduced for i.MX ARMv7 platforms in order to make the build
options aligned, the reason why i.MX ARMv7 platforms clock driver do NOT support
module build and COMPILE_TEST is because, some drivers like i.MX GPT timer driver
depends on clock driver to be ready before it, GPT driver uses TIMER_OF_DECLARE(),
while i.MX6/7 clock drivers use CLK_OF_DECLARE(), and GPT driver is critical for
i.MX6/7 platforms kernel boot up, so GPT driver needs to be changed to support
loadable clock driver first, then the i.MX6/7 clock drivers can support loadable
module, this will be done later.

Changes since V6:
	- improve patch #6's subject and move it to be first patch of this series.

Anson Huang (6):
  clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31
    bits
  clk: composite: Export clk_hw_register_composite()
  clk: imx: Support building i.MX common clock driver as module
  clk: imx: Add clock configuration for ARMv7 platforms
  clk: imx8m: Support module build
  clk: imx8qxp: Support building i.MX8QXP clock driver as module

 drivers/clk/clk-composite.c        |  1 +
 drivers/clk/imx/Kconfig            | 94 ++++++++++++++++++++++++++++++++------
 drivers/clk/imx/Makefile           | 79 ++++++++++++++++----------------
 drivers/clk/imx/clk-composite-8m.c |  2 +
 drivers/clk/imx/clk-cpu.c          |  2 +
 drivers/clk/imx/clk-frac-pll.c     |  2 +
 drivers/clk/imx/clk-gate2.c        |  2 +
 drivers/clk/imx/clk-imx6sl.c       | 15 +++---
 drivers/clk/imx/clk-imx8mm.c       |  4 ++
 drivers/clk/imx/clk-imx8mn.c       |  4 ++
 drivers/clk/imx/clk-imx8mp.c       |  4 ++
 drivers/clk/imx/clk-imx8mq.c       |  4 ++
 drivers/clk/imx/clk-imx8qxp-lpcg.c |  4 ++
 drivers/clk/imx/clk-imx8qxp.c      |  4 ++
 drivers/clk/imx/clk-pll14xx.c      |  5 ++
 drivers/clk/imx/clk-sscg-pll.c     |  2 +
 drivers/clk/imx/clk.c              | 17 +++++--
 drivers/clk/imx/clk.h              |  6 +++
 18 files changed, 186 insertions(+), 65 deletions(-)

-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits
  2020-07-29 14:48 [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module Anson Huang
@ 2020-07-29 14:48 ` Anson Huang
  2020-07-29 15:49   ` Randy Dunlap
  2020-07-29 14:48 ` [PATCH V7 2/6] clk: composite: Export clk_hw_register_composite() Anson Huang
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: Anson Huang @ 2020-07-29 14:48 UTC (permalink / raw)
  To: mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
	aisheng.dong, arnd, peng.fan, abel.vesa, fugang.duan,
	daniel.baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: Linux-imx

Use readl_relaxed() instead of __raw_readl(), and use BIT(x)
instead of (1 << X) to fix below build warning reported by kernel
test robot:

drivers/clk/imx/clk-imx6sl.c:149:49: warning: Shifting signed 32-bit
value by 31 bits is undefined behaviour [shiftTooManyBitsSigned]
     while (!(__raw_readl(anatop_base + PLL_ARM) & BM_PLL_ARM_LOCK))

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reported-by: kernel test robot <lkp@intel.com>
---
Changes since V6:
	- improve the subject.
---
 drivers/clk/imx/clk-imx6sl.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/clk/imx/clk-imx6sl.c b/drivers/clk/imx/clk-imx6sl.c
index 0f647d1..e69dba1 100644
--- a/drivers/clk/imx/clk-imx6sl.c
+++ b/drivers/clk/imx/clk-imx6sl.c
@@ -3,6 +3,7 @@
  * Copyright 2013-2014 Freescale Semiconductor, Inc.
  */
 
+#include <linux/bitfield.h>
 #include <linux/clk.h>
 #include <linux/clkdev.h>
 #include <linux/err.h>
@@ -14,19 +15,19 @@
 #include "clk.h"
 
 #define CCSR			0xc
-#define BM_CCSR_PLL1_SW_CLK_SEL	(1 << 2)
+#define BM_CCSR_PLL1_SW_CLK_SEL	BIT(2)
 #define CACRR			0x10
 #define CDHIPR			0x48
-#define BM_CDHIPR_ARM_PODF_BUSY	(1 << 16)
+#define BM_CDHIPR_ARM_PODF_BUSY	BIT(16)
 #define ARM_WAIT_DIV_396M	2
 #define ARM_WAIT_DIV_792M	4
 #define ARM_WAIT_DIV_996M	6
 
 #define PLL_ARM			0x0
-#define BM_PLL_ARM_DIV_SELECT	(0x7f << 0)
-#define BM_PLL_ARM_POWERDOWN	(1 << 12)
-#define BM_PLL_ARM_ENABLE	(1 << 13)
-#define BM_PLL_ARM_LOCK		(1 << 31)
+#define BM_PLL_ARM_DIV_SELECT	0x7f
+#define BM_PLL_ARM_POWERDOWN	BIT(12)
+#define BM_PLL_ARM_ENABLE	BIT(13)
+#define BM_PLL_ARM_LOCK		BIT(31)
 #define PLL_ARM_DIV_792M	66
 
 static const char *step_sels[]		= { "osc", "pll2_pfd2", };
@@ -145,7 +146,7 @@ static void imx6sl_enable_pll_arm(bool enable)
 		val |= BM_PLL_ARM_ENABLE;
 		val &= ~BM_PLL_ARM_POWERDOWN;
 		writel_relaxed(val, anatop_base + PLL_ARM);
-		while (!(__raw_readl(anatop_base + PLL_ARM) & BM_PLL_ARM_LOCK))
+		while (!(readl_relaxed(anatop_base + PLL_ARM) & BM_PLL_ARM_LOCK))
 			;
 	} else {
 		 writel_relaxed(saved_pll_arm, anatop_base + PLL_ARM);
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V7 2/6] clk: composite: Export clk_hw_register_composite()
  2020-07-29 14:48 [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module Anson Huang
  2020-07-29 14:48 ` [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits Anson Huang
@ 2020-07-29 14:48 ` Anson Huang
  2020-07-29 14:48 ` [PATCH V7 3/6] clk: imx: Support building i.MX common clock driver as module Anson Huang
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Anson Huang @ 2020-07-29 14:48 UTC (permalink / raw)
  To: mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
	aisheng.dong, arnd, peng.fan, abel.vesa, fugang.duan,
	daniel.baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: Linux-imx

Export clk_hw_register_composite() to support user built as module.

ERROR: modpost: "clk_hw_register_composite" [drivers/clk/imx/mxc-clk.ko]
undefined!

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
---
no change.
---
 drivers/clk/clk-composite.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c
index 7376f57..2ddb54f 100644
--- a/drivers/clk/clk-composite.c
+++ b/drivers/clk/clk-composite.c
@@ -328,6 +328,7 @@ struct clk_hw *clk_hw_register_composite(struct device *dev, const char *name,
 					   rate_hw, rate_ops, gate_hw,
 					   gate_ops, flags);
 }
+EXPORT_SYMBOL_GPL(clk_hw_register_composite);
 
 struct clk_hw *clk_hw_register_composite_pdata(struct device *dev,
 			const char *name,
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V7 3/6] clk: imx: Support building i.MX common clock driver as module
  2020-07-29 14:48 [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module Anson Huang
  2020-07-29 14:48 ` [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits Anson Huang
  2020-07-29 14:48 ` [PATCH V7 2/6] clk: composite: Export clk_hw_register_composite() Anson Huang
@ 2020-07-29 14:48 ` Anson Huang
  2020-07-29 14:48 ` [PATCH V7 4/6] clk: imx: Add clock configuration for ARMv7 platforms Anson Huang
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Anson Huang @ 2020-07-29 14:48 UTC (permalink / raw)
  To: mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
	aisheng.dong, arnd, peng.fan, abel.vesa, fugang.duan,
	daniel.baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: Linux-imx

There are more and more requirements of building SoC specific drivers
as modules, add support for building i.MX common clock driver as module
to meet the requirement.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
---
no change.
---
 drivers/clk/imx/Kconfig            |  8 ++++++--
 drivers/clk/imx/Makefile           | 40 +++++++++++++++++++-------------------
 drivers/clk/imx/clk-composite-8m.c |  2 ++
 drivers/clk/imx/clk-cpu.c          |  2 ++
 drivers/clk/imx/clk-frac-pll.c     |  2 ++
 drivers/clk/imx/clk-gate2.c        |  2 ++
 drivers/clk/imx/clk-pll14xx.c      |  5 +++++
 drivers/clk/imx/clk-sscg-pll.c     |  2 ++
 drivers/clk/imx/clk.c              | 17 ++++++++++++----
 drivers/clk/imx/clk.h              |  6 ++++++
 10 files changed, 60 insertions(+), 26 deletions(-)

diff --git a/drivers/clk/imx/Kconfig b/drivers/clk/imx/Kconfig
index db0253f..ee854ac 100644
--- a/drivers/clk/imx/Kconfig
+++ b/drivers/clk/imx/Kconfig
@@ -1,8 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 # common clock support for NXP i.MX SoC family.
 config MXC_CLK
-	bool
-	def_bool ARCH_MXC
+	tristate "IMX clock"
+	depends on ARCH_MXC
 
 config MXC_CLK_SCU
 	bool
@@ -11,24 +11,28 @@ config MXC_CLK_SCU
 config CLK_IMX8MM
 	bool "IMX8MM CCM Clock Driver"
 	depends on ARCH_MXC
+	select MXC_CLK
 	help
 	    Build the driver for i.MX8MM CCM Clock Driver
 
 config CLK_IMX8MN
 	bool "IMX8MN CCM Clock Driver"
 	depends on ARCH_MXC
+	select MXC_CLK
 	help
 	    Build the driver for i.MX8MN CCM Clock Driver
 
 config CLK_IMX8MP
 	bool "IMX8MP CCM Clock Driver"
 	depends on ARCH_MXC
+	select MXC_CLK
 	help
 	    Build the driver for i.MX8MP CCM Clock Driver
 
 config CLK_IMX8MQ
 	bool "IMX8MQ CCM Clock Driver"
 	depends on ARCH_MXC
+	select MXC_CLK
 	help
 	    Build the driver for i.MX8MQ CCM Clock Driver
 
diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile
index 928f874..687207d 100644
--- a/drivers/clk/imx/Makefile
+++ b/drivers/clk/imx/Makefile
@@ -1,25 +1,25 @@
 # SPDX-License-Identifier: GPL-2.0
 
-obj-$(CONFIG_MXC_CLK) += \
-	clk.o \
-	clk-busy.o \
-	clk-composite-8m.o \
-	clk-cpu.o \
-	clk-composite-7ulp.o \
-	clk-divider-gate.o \
-	clk-fixup-div.o \
-	clk-fixup-mux.o \
-	clk-frac-pll.o \
-	clk-gate-exclusive.o \
-	clk-gate2.o \
-	clk-pfd.o \
-	clk-pfdv2.o \
-	clk-pllv1.o \
-	clk-pllv2.o \
-	clk-pllv3.o \
-	clk-pllv4.o \
-	clk-sscg-pll.o \
-	clk-pll14xx.o
+mxc-clk-objs += clk.o
+mxc-clk-objs += clk-busy.o
+mxc-clk-objs += clk-composite-7ulp.o
+mxc-clk-objs += clk-composite-8m.o
+mxc-clk-objs += clk-cpu.o
+mxc-clk-objs += clk-divider-gate.o
+mxc-clk-objs += clk-fixup-div.o
+mxc-clk-objs += clk-fixup-mux.o
+mxc-clk-objs += clk-frac-pll.o
+mxc-clk-objs += clk-gate2.o
+mxc-clk-objs += clk-gate-exclusive.o
+mxc-clk-objs += clk-pfd.o
+mxc-clk-objs += clk-pfdv2.o
+mxc-clk-objs += clk-pllv1.o
+mxc-clk-objs += clk-pllv2.o
+mxc-clk-objs += clk-pllv3.o
+mxc-clk-objs += clk-pllv4.o
+mxc-clk-objs += clk-pll14xx.o
+mxc-clk-objs += clk-sscg-pll.o
+obj-$(CONFIG_MXC_CLK) += mxc-clk.o
 
 obj-$(CONFIG_MXC_CLK_SCU) += \
 	clk-scu.o \
diff --git a/drivers/clk/imx/clk-composite-8m.c b/drivers/clk/imx/clk-composite-8m.c
index d2b5af8..78fb7e5 100644
--- a/drivers/clk/imx/clk-composite-8m.c
+++ b/drivers/clk/imx/clk-composite-8m.c
@@ -5,6 +5,7 @@
 
 #include <linux/clk-provider.h>
 #include <linux/errno.h>
+#include <linux/export.h>
 #include <linux/io.h>
 #include <linux/slab.h>
 
@@ -243,3 +244,4 @@ struct clk_hw *imx8m_clk_hw_composite_flags(const char *name,
 	kfree(mux);
 	return ERR_CAST(hw);
 }
+EXPORT_SYMBOL_GPL(imx8m_clk_hw_composite_flags);
diff --git a/drivers/clk/imx/clk-cpu.c b/drivers/clk/imx/clk-cpu.c
index cb182be..cb6ca4c 100644
--- a/drivers/clk/imx/clk-cpu.c
+++ b/drivers/clk/imx/clk-cpu.c
@@ -5,6 +5,7 @@
 
 #include <linux/clk.h>
 #include <linux/clk-provider.h>
+#include <linux/export.h>
 #include <linux/slab.h>
 #include "clk.h"
 
@@ -104,3 +105,4 @@ struct clk_hw *imx_clk_hw_cpu(const char *name, const char *parent_name,
 
 	return hw;
 }
+EXPORT_SYMBOL_GPL(imx_clk_hw_cpu);
diff --git a/drivers/clk/imx/clk-frac-pll.c b/drivers/clk/imx/clk-frac-pll.c
index 101e0a3..c703056 100644
--- a/drivers/clk/imx/clk-frac-pll.c
+++ b/drivers/clk/imx/clk-frac-pll.c
@@ -10,6 +10,7 @@
 
 #include <linux/clk-provider.h>
 #include <linux/err.h>
+#include <linux/export.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <linux/slab.h>
@@ -233,3 +234,4 @@ struct clk_hw *imx_clk_hw_frac_pll(const char *name,
 
 	return hw;
 }
+EXPORT_SYMBOL_GPL(imx_clk_hw_frac_pll);
diff --git a/drivers/clk/imx/clk-gate2.c b/drivers/clk/imx/clk-gate2.c
index b87ab3c..512f675 100644
--- a/drivers/clk/imx/clk-gate2.c
+++ b/drivers/clk/imx/clk-gate2.c
@@ -7,6 +7,7 @@
  */
 
 #include <linux/clk-provider.h>
+#include <linux/export.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/io.h>
@@ -177,3 +178,4 @@ struct clk_hw *clk_hw_register_gate2(struct device *dev, const char *name,
 
 	return hw;
 }
+EXPORT_SYMBOL_GPL(clk_hw_register_gate2);
diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c
index f9eb189..f5c3e7e 100644
--- a/drivers/clk/imx/clk-pll14xx.c
+++ b/drivers/clk/imx/clk-pll14xx.c
@@ -6,6 +6,7 @@
 #include <linux/bitops.h>
 #include <linux/clk-provider.h>
 #include <linux/err.h>
+#include <linux/export.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <linux/slab.h>
@@ -68,6 +69,7 @@ struct imx_pll14xx_clk imx_1443x_pll = {
 	.rate_table = imx_pll1443x_tbl,
 	.rate_count = ARRAY_SIZE(imx_pll1443x_tbl),
 };
+EXPORT_SYMBOL_GPL(imx_1443x_pll);
 
 struct imx_pll14xx_clk imx_1443x_dram_pll = {
 	.type = PLL_1443X,
@@ -75,12 +77,14 @@ struct imx_pll14xx_clk imx_1443x_dram_pll = {
 	.rate_count = ARRAY_SIZE(imx_pll1443x_tbl),
 	.flags = CLK_GET_RATE_NOCACHE,
 };
+EXPORT_SYMBOL_GPL(imx_1443x_dram_pll);
 
 struct imx_pll14xx_clk imx_1416x_pll = {
 	.type = PLL_1416X,
 	.rate_table = imx_pll1416x_tbl,
 	.rate_count = ARRAY_SIZE(imx_pll1416x_tbl),
 };
+EXPORT_SYMBOL_GPL(imx_1416x_pll);
 
 static const struct imx_pll14xx_rate_table *imx_get_pll_settings(
 		struct clk_pll14xx *pll, unsigned long rate)
@@ -436,3 +440,4 @@ struct clk_hw *imx_dev_clk_hw_pll14xx(struct device *dev, const char *name,
 
 	return hw;
 }
+EXPORT_SYMBOL_GPL(imx_dev_clk_hw_pll14xx);
diff --git a/drivers/clk/imx/clk-sscg-pll.c b/drivers/clk/imx/clk-sscg-pll.c
index 773d8a5..9d6cdff 100644
--- a/drivers/clk/imx/clk-sscg-pll.c
+++ b/drivers/clk/imx/clk-sscg-pll.c
@@ -10,6 +10,7 @@
 
 #include <linux/clk-provider.h>
 #include <linux/err.h>
+#include <linux/export.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <linux/slab.h>
@@ -537,3 +538,4 @@ struct clk_hw *imx_clk_hw_sscg_pll(const char *name,
 
 	return hw;
 }
+EXPORT_SYMBOL_GPL(imx_clk_hw_sscg_pll);
diff --git a/drivers/clk/imx/clk.c b/drivers/clk/imx/clk.c
index 87ab8db..547cade 100644
--- a/drivers/clk/imx/clk.c
+++ b/drivers/clk/imx/clk.c
@@ -3,6 +3,7 @@
 #include <linux/clk-provider.h>
 #include <linux/err.h>
 #include <linux/io.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
@@ -13,6 +14,7 @@
 #define CCDR_MMDC_CH1_MASK		BIT(16)
 
 DEFINE_SPINLOCK(imx_ccm_lock);
+EXPORT_SYMBOL_GPL(imx_ccm_lock);
 
 void imx_unregister_clocks(struct clk *clks[], unsigned int count)
 {
@@ -29,8 +31,9 @@ void imx_unregister_hw_clocks(struct clk_hw *hws[], unsigned int count)
 	for (i = 0; i < count; i++)
 		clk_hw_unregister(hws[i]);
 }
+EXPORT_SYMBOL_GPL(imx_unregister_hw_clocks);
 
-void __init imx_mmdc_mask_handshake(void __iomem *ccm_base,
+void imx_mmdc_mask_handshake(void __iomem *ccm_base,
 				    unsigned int chn)
 {
 	unsigned int reg;
@@ -59,8 +62,9 @@ void imx_check_clk_hws(struct clk_hw *clks[], unsigned int count)
 			pr_err("i.MX clk %u: register failed with %ld\n",
 			       i, PTR_ERR(clks[i]));
 }
+EXPORT_SYMBOL_GPL(imx_check_clk_hws);
 
-static struct clk * __init imx_obtain_fixed_clock_from_dt(const char *name)
+static struct clk *imx_obtain_fixed_clock_from_dt(const char *name)
 {
 	struct of_phandle_args phandle;
 	struct clk *clk = ERR_PTR(-ENODEV);
@@ -80,7 +84,7 @@ static struct clk * __init imx_obtain_fixed_clock_from_dt(const char *name)
 	return clk;
 }
 
-struct clk * __init imx_obtain_fixed_clock(
+struct clk *imx_obtain_fixed_clock(
 			const char *name, unsigned long rate)
 {
 	struct clk *clk;
@@ -91,7 +95,7 @@ struct clk * __init imx_obtain_fixed_clock(
 	return clk;
 }
 
-struct clk_hw * __init imx_obtain_fixed_clock_hw(
+struct clk_hw *imx_obtain_fixed_clock_hw(
 			const char *name, unsigned long rate)
 {
 	struct clk *clk;
@@ -113,6 +117,7 @@ struct clk_hw * imx_obtain_fixed_clk_hw(struct device_node *np,
 
 	return __clk_get_hw(clk);
 }
+EXPORT_SYMBOL_GPL(imx_obtain_fixed_clk_hw);
 
 /*
  * This fixups the register CCM_CSCMR1 write value.
@@ -140,6 +145,7 @@ void imx_cscmr1_fixup(u32 *val)
 	return;
 }
 
+#ifndef MODULE
 static int imx_keep_uart_clocks;
 static struct clk ** const *imx_uart_clocks;
 
@@ -177,3 +183,6 @@ static int __init imx_clk_disable_uart(void)
 	return 0;
 }
 late_initcall_sync(imx_clk_disable_uart);
+#endif
+
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h
index 16adbc3..dd47c19 100644
--- a/drivers/clk/imx/clk.h
+++ b/drivers/clk/imx/clk.h
@@ -11,7 +11,13 @@ extern spinlock_t imx_ccm_lock;
 
 void imx_check_clocks(struct clk *clks[], unsigned int count);
 void imx_check_clk_hws(struct clk_hw *clks[], unsigned int count);
+#ifndef MODULE
 void imx_register_uart_clocks(struct clk ** const clks[]);
+#else
+static inline void imx_register_uart_clocks(struct clk ** const clks[])
+{
+}
+#endif
 void imx_mmdc_mask_handshake(void __iomem *ccm_base, unsigned int chn);
 void imx_unregister_clocks(struct clk *clks[], unsigned int count);
 void imx_unregister_hw_clocks(struct clk_hw *hws[], unsigned int count);
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V7 4/6] clk: imx: Add clock configuration for ARMv7 platforms
  2020-07-29 14:48 [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module Anson Huang
                   ` (2 preceding siblings ...)
  2020-07-29 14:48 ` [PATCH V7 3/6] clk: imx: Support building i.MX common clock driver as module Anson Huang
@ 2020-07-29 14:48 ` Anson Huang
  2020-07-29 14:48 ` [PATCH V7 5/6] clk: imx8m: Support module build Anson Huang
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Anson Huang @ 2020-07-29 14:48 UTC (permalink / raw)
  To: mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
	aisheng.dong, arnd, peng.fan, abel.vesa, fugang.duan,
	daniel.baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: Linux-imx

Add CONFIG_CLK_xxx for i.MX ARMv7 platforms, and use it as build option
instead of CONFIG_SOC_xxx, the CONFIG_CLK_xxx will be selected by default
according to CONFIG_SOC_xxx.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Dong Aisheng <aisheng.dong@nxp.com>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
---
no change.
---
 drivers/clk/imx/Kconfig  | 62 +++++++++++++++++++++++++++++++++++++++++++++++-
 drivers/clk/imx/Makefile | 30 +++++++++++------------
 2 files changed, 76 insertions(+), 16 deletions(-)

diff --git a/drivers/clk/imx/Kconfig b/drivers/clk/imx/Kconfig
index ee854ac..e96bd38 100644
--- a/drivers/clk/imx/Kconfig
+++ b/drivers/clk/imx/Kconfig
@@ -2,12 +2,72 @@
 # common clock support for NXP i.MX SoC family.
 config MXC_CLK
 	tristate "IMX clock"
-	depends on ARCH_MXC
+	depends on ARCH_MXC || COMPILE_TEST
 
 config MXC_CLK_SCU
 	bool
 	depends on IMX_SCU
 
+config CLK_IMX1
+	def_bool SOC_IMX1
+	select MXC_CLK
+
+config CLK_IMX21
+	def_bool SOC_IMX21
+	select MXC_CLK
+
+config CLK_IMX25
+	def_bool SOC_IMX25
+	select MXC_CLK
+
+config CLK_IMX27
+	def_bool SOC_IMX27
+	select MXC_CLK
+
+config CLK_IMX31
+	def_bool SOC_IMX31
+	select MXC_CLK
+
+config CLK_IMX35
+	def_bool SOC_IMX35
+	select MXC_CLK
+
+config CLK_IMX5
+	def_bool SOC_IMX5
+	select MXC_CLK
+
+config CLK_IMX6Q
+	def_bool SOC_IMX6Q
+	select MXC_CLK
+
+config CLK_IMX6SL
+	def_bool SOC_IMX6SL
+	select MXC_CLK
+
+config CLK_IMX6SLL
+	def_bool SOC_IMX6SLL
+	select MXC_CLK
+
+config CLK_IMX6SX
+	def_bool SOC_IMX6SX
+	select MXC_CLK
+
+config CLK_IMX6UL
+	def_bool SOC_IMX6UL
+	select MXC_CLK
+
+config CLK_IMX7D
+	def_bool SOC_IMX7D
+	select MXC_CLK
+
+config CLK_IMX7ULP
+	def_bool SOC_IMX7ULP
+	select MXC_CLK
+
+config CLK_VF610
+	def_bool SOC_VF610
+	select MXC_CLK
+
 config CLK_IMX8MM
 	bool "IMX8MM CCM Clock Driver"
 	depends on ARCH_MXC
diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile
index 687207d..17f5d12 100644
--- a/drivers/clk/imx/Makefile
+++ b/drivers/clk/imx/Makefile
@@ -31,18 +31,18 @@ obj-$(CONFIG_CLK_IMX8MP) += clk-imx8mp.o
 obj-$(CONFIG_CLK_IMX8MQ) += clk-imx8mq.o
 obj-$(CONFIG_CLK_IMX8QXP) += clk-imx8qxp.o clk-imx8qxp-lpcg.o
 
-obj-$(CONFIG_SOC_IMX1)   += clk-imx1.o
-obj-$(CONFIG_SOC_IMX21)  += clk-imx21.o
-obj-$(CONFIG_SOC_IMX25)  += clk-imx25.o
-obj-$(CONFIG_SOC_IMX27)  += clk-imx27.o
-obj-$(CONFIG_SOC_IMX31)  += clk-imx31.o
-obj-$(CONFIG_SOC_IMX35)  += clk-imx35.o
-obj-$(CONFIG_SOC_IMX5)   += clk-imx5.o
-obj-$(CONFIG_SOC_IMX6Q)  += clk-imx6q.o
-obj-$(CONFIG_SOC_IMX6SL) += clk-imx6sl.o
-obj-$(CONFIG_SOC_IMX6SLL) += clk-imx6sll.o
-obj-$(CONFIG_SOC_IMX6SX) += clk-imx6sx.o
-obj-$(CONFIG_SOC_IMX6UL) += clk-imx6ul.o
-obj-$(CONFIG_SOC_IMX7D)  += clk-imx7d.o
-obj-$(CONFIG_SOC_IMX7ULP) += clk-imx7ulp.o
-obj-$(CONFIG_SOC_VF610)  += clk-vf610.o
+obj-$(CONFIG_CLK_IMX1)   += clk-imx1.o
+obj-$(CONFIG_CLK_IMX21)  += clk-imx21.o
+obj-$(CONFIG_CLK_IMX25)  += clk-imx25.o
+obj-$(CONFIG_CLK_IMX27)  += clk-imx27.o
+obj-$(CONFIG_CLK_IMX31)  += clk-imx31.o
+obj-$(CONFIG_CLK_IMX35)  += clk-imx35.o
+obj-$(CONFIG_CLK_IMX5)   += clk-imx5.o
+obj-$(CONFIG_CLK_IMX6Q)  += clk-imx6q.o
+obj-$(CONFIG_CLK_IMX6SL) += clk-imx6sl.o
+obj-$(CONFIG_CLK_IMX6SLL) += clk-imx6sll.o
+obj-$(CONFIG_CLK_IMX6SX) += clk-imx6sx.o
+obj-$(CONFIG_CLK_IMX6UL) += clk-imx6ul.o
+obj-$(CONFIG_CLK_IMX7D)  += clk-imx7d.o
+obj-$(CONFIG_CLK_IMX7ULP) += clk-imx7ulp.o
+obj-$(CONFIG_CLK_VF610)  += clk-vf610.o
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V7 5/6] clk: imx8m: Support module build
  2020-07-29 14:48 [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module Anson Huang
                   ` (3 preceding siblings ...)
  2020-07-29 14:48 ` [PATCH V7 4/6] clk: imx: Add clock configuration for ARMv7 platforms Anson Huang
@ 2020-07-29 14:48 ` Anson Huang
  2020-07-29 14:48 ` [PATCH V7 6/6] clk: imx8qxp: Support building i.MX8QXP clock driver as module Anson Huang
  2020-07-29 15:26 ` [PATCH V7 0/6] Support building i.MX ARMv8 platforms " Shawn Guo
  6 siblings, 0 replies; 14+ messages in thread
From: Anson Huang @ 2020-07-29 14:48 UTC (permalink / raw)
  To: mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
	aisheng.dong, arnd, peng.fan, abel.vesa, fugang.duan,
	daniel.baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: Linux-imx

Change configuration to "tristate", add module author, description
and license to support building i.MX8M SoCs clock driver as module.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Dong Aisheng <aisheng.dong@nxp.com>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
---
no change.
---
 drivers/clk/imx/Kconfig      | 16 ++++++++--------
 drivers/clk/imx/clk-imx8mm.c |  4 ++++
 drivers/clk/imx/clk-imx8mn.c |  4 ++++
 drivers/clk/imx/clk-imx8mp.c |  4 ++++
 drivers/clk/imx/clk-imx8mq.c |  4 ++++
 5 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/drivers/clk/imx/Kconfig b/drivers/clk/imx/Kconfig
index e96bd38..3897712 100644
--- a/drivers/clk/imx/Kconfig
+++ b/drivers/clk/imx/Kconfig
@@ -69,29 +69,29 @@ config CLK_VF610
 	select MXC_CLK
 
 config CLK_IMX8MM
-	bool "IMX8MM CCM Clock Driver"
-	depends on ARCH_MXC
+	tristate "IMX8MM CCM Clock Driver"
+	depends on ARCH_MXC || COMPILE_TEST
 	select MXC_CLK
 	help
 	    Build the driver for i.MX8MM CCM Clock Driver
 
 config CLK_IMX8MN
-	bool "IMX8MN CCM Clock Driver"
-	depends on ARCH_MXC
+	tristate "IMX8MN CCM Clock Driver"
+	depends on ARCH_MXC || COMPILE_TEST
 	select MXC_CLK
 	help
 	    Build the driver for i.MX8MN CCM Clock Driver
 
 config CLK_IMX8MP
-	bool "IMX8MP CCM Clock Driver"
-	depends on ARCH_MXC
+	tristate "IMX8MP CCM Clock Driver"
+	depends on ARCH_MXC || COMPILE_TEST
 	select MXC_CLK
 	help
 	    Build the driver for i.MX8MP CCM Clock Driver
 
 config CLK_IMX8MQ
-	bool "IMX8MQ CCM Clock Driver"
-	depends on ARCH_MXC
+	tristate "IMX8MQ CCM Clock Driver"
+	depends on ARCH_MXC || COMPILE_TEST
 	select MXC_CLK
 	help
 	    Build the driver for i.MX8MQ CCM Clock Driver
diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c
index b793264..0de0be0 100644
--- a/drivers/clk/imx/clk-imx8mm.c
+++ b/drivers/clk/imx/clk-imx8mm.c
@@ -657,3 +657,7 @@ static struct platform_driver imx8mm_clk_driver = {
 	},
 };
 module_platform_driver(imx8mm_clk_driver);
+
+MODULE_AUTHOR("Bai Ping <ping.bai@nxp.com>");
+MODULE_DESCRIPTION("NXP i.MX8MM clock driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/imx/clk-imx8mn.c b/drivers/clk/imx/clk-imx8mn.c
index 213cc37..e984de5 100644
--- a/drivers/clk/imx/clk-imx8mn.c
+++ b/drivers/clk/imx/clk-imx8mn.c
@@ -608,3 +608,7 @@ static struct platform_driver imx8mn_clk_driver = {
 	},
 };
 module_platform_driver(imx8mn_clk_driver);
+
+MODULE_AUTHOR("Anson Huang <Anson.Huang@nxp.com>");
+MODULE_DESCRIPTION("NXP i.MX8MN clock driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/imx/clk-imx8mp.c b/drivers/clk/imx/clk-imx8mp.c
index ca74771..f3cedf2 100644
--- a/drivers/clk/imx/clk-imx8mp.c
+++ b/drivers/clk/imx/clk-imx8mp.c
@@ -773,3 +773,7 @@ static struct platform_driver imx8mp_clk_driver = {
 	},
 };
 module_platform_driver(imx8mp_clk_driver);
+
+MODULE_AUTHOR("Anson Huang <Anson.Huang@nxp.com>");
+MODULE_DESCRIPTION("NXP i.MX8MP clock driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/imx/clk-imx8mq.c b/drivers/clk/imx/clk-imx8mq.c
index a64aace..a06cc21 100644
--- a/drivers/clk/imx/clk-imx8mq.c
+++ b/drivers/clk/imx/clk-imx8mq.c
@@ -643,3 +643,7 @@ static struct platform_driver imx8mq_clk_driver = {
 	},
 };
 module_platform_driver(imx8mq_clk_driver);
+
+MODULE_AUTHOR("Abel Vesa <abel.vesa@nxp.com>");
+MODULE_DESCRIPTION("NXP i.MX8MQ clock driver");
+MODULE_LICENSE("GPL v2");
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V7 6/6] clk: imx8qxp: Support building i.MX8QXP clock driver as module
  2020-07-29 14:48 [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module Anson Huang
                   ` (4 preceding siblings ...)
  2020-07-29 14:48 ` [PATCH V7 5/6] clk: imx8m: Support module build Anson Huang
@ 2020-07-29 14:48 ` Anson Huang
  2020-07-29 15:26 ` [PATCH V7 0/6] Support building i.MX ARMv8 platforms " Shawn Guo
  6 siblings, 0 replies; 14+ messages in thread
From: Anson Huang @ 2020-07-29 14:48 UTC (permalink / raw)
  To: mturquette, sboyd, shawnguo, s.hauer, kernel, festevam,
	aisheng.dong, arnd, peng.fan, abel.vesa, fugang.duan,
	daniel.baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: Linux-imx

Change configuration to "tristate", add module author, description and
license to support building i.MX8QXP clock drivers as module.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
---
no change.
---
 drivers/clk/imx/Kconfig            | 10 ++++++----
 drivers/clk/imx/Makefile           |  9 ++++-----
 drivers/clk/imx/clk-imx8qxp-lpcg.c |  4 ++++
 drivers/clk/imx/clk-imx8qxp.c      |  4 ++++
 4 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/clk/imx/Kconfig b/drivers/clk/imx/Kconfig
index 3897712..e7defba 100644
--- a/drivers/clk/imx/Kconfig
+++ b/drivers/clk/imx/Kconfig
@@ -5,8 +5,9 @@ config MXC_CLK
 	depends on ARCH_MXC || COMPILE_TEST
 
 config MXC_CLK_SCU
-	bool
-	depends on IMX_SCU
+	tristate "IMX SCU clock"
+	depends on ARCH_MXC || COMPILE_TEST
+	depends on IMX_SCU && HAVE_ARM_SMCCC
 
 config CLK_IMX1
 	def_bool SOC_IMX1
@@ -97,8 +98,9 @@ config CLK_IMX8MQ
 	    Build the driver for i.MX8MQ CCM Clock Driver
 
 config CLK_IMX8QXP
-	bool "IMX8QXP SCU Clock"
-	depends on ARCH_MXC && IMX_SCU && ARM64
+	tristate "IMX8QXP SCU Clock"
+	depends on (ARCH_MXC && ARM64) || COMPILE_TEST
+	depends on IMX_SCU && HAVE_ARM_SMCCC
 	select MXC_CLK_SCU
 	help
 	  Build the driver for IMX8QXP SCU based clocks.
diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile
index 17f5d12..79e53f2 100644
--- a/drivers/clk/imx/Makefile
+++ b/drivers/clk/imx/Makefile
@@ -21,15 +21,14 @@ mxc-clk-objs += clk-pll14xx.o
 mxc-clk-objs += clk-sscg-pll.o
 obj-$(CONFIG_MXC_CLK) += mxc-clk.o
 
-obj-$(CONFIG_MXC_CLK_SCU) += \
-	clk-scu.o \
-	clk-lpcg-scu.o
-
 obj-$(CONFIG_CLK_IMX8MM) += clk-imx8mm.o
 obj-$(CONFIG_CLK_IMX8MN) += clk-imx8mn.o
 obj-$(CONFIG_CLK_IMX8MP) += clk-imx8mp.o
 obj-$(CONFIG_CLK_IMX8MQ) += clk-imx8mq.o
-obj-$(CONFIG_CLK_IMX8QXP) += clk-imx8qxp.o clk-imx8qxp-lpcg.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_CLK_IMX1)   += clk-imx1.o
 obj-$(CONFIG_CLK_IMX21)  += clk-imx21.o
diff --git a/drivers/clk/imx/clk-imx8qxp-lpcg.c b/drivers/clk/imx/clk-imx8qxp-lpcg.c
index 04c8ee3..e947a70 100644
--- a/drivers/clk/imx/clk-imx8qxp-lpcg.c
+++ b/drivers/clk/imx/clk-imx8qxp-lpcg.c
@@ -232,3 +232,7 @@ static struct platform_driver imx8qxp_lpcg_clk_driver = {
 };
 
 builtin_platform_driver(imx8qxp_lpcg_clk_driver);
+
+MODULE_AUTHOR("Aisheng Dong <aisheng.dong@nxp.com>");
+MODULE_DESCRIPTION("NXP i.MX8QXP LPCG clock driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/imx/clk-imx8qxp.c b/drivers/clk/imx/clk-imx8qxp.c
index 5e2903e..d650ca3 100644
--- a/drivers/clk/imx/clk-imx8qxp.c
+++ b/drivers/clk/imx/clk-imx8qxp.c
@@ -152,3 +152,7 @@ static struct platform_driver imx8qxp_clk_driver = {
 	.probe = imx8qxp_clk_probe,
 };
 builtin_platform_driver(imx8qxp_clk_driver);
+
+MODULE_AUTHOR("Aisheng Dong <aisheng.dong@nxp.com>");
+MODULE_DESCRIPTION("NXP i.MX8QXP clock driver");
+MODULE_LICENSE("GPL v2");
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module
  2020-07-29 14:48 [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module Anson Huang
                   ` (5 preceding siblings ...)
  2020-07-29 14:48 ` [PATCH V7 6/6] clk: imx8qxp: Support building i.MX8QXP clock driver as module Anson Huang
@ 2020-07-29 15:26 ` Shawn Guo
  2020-08-01  0:04   ` Stephen Boyd
  6 siblings, 1 reply; 14+ messages in thread
From: Shawn Guo @ 2020-07-29 15:26 UTC (permalink / raw)
  To: Anson Huang
  Cc: aisheng.dong, peng.fan, fugang.duan, abel.vesa, arnd, sboyd,
	daniel.baluta, mturquette, yuehaibing, linux-kernel, linux-clk,
	Linux-imx, kernel, festevam, s.hauer, linux-arm-kernel

On Wed, Jul 29, 2020 at 10:48:31PM +0800, Anson Huang wrote:
> Nowdays, there are more and more requirements of building SoC specific drivers as
> modules, such as Android GKI (generic kernel image), this patch set supports building
> i.MX ARMv8 SoCs clock drivers as modules,
> 
> The CLK_IMXxxx is introduced for i.MX ARMv7 platforms in order to make the build
> options aligned, the reason why i.MX ARMv7 platforms clock driver do NOT support
> module build and COMPILE_TEST is because, some drivers like i.MX GPT timer driver
> depends on clock driver to be ready before it, GPT driver uses TIMER_OF_DECLARE(),
> while i.MX6/7 clock drivers use CLK_OF_DECLARE(), and GPT driver is critical for
> i.MX6/7 platforms kernel boot up, so GPT driver needs to be changed to support
> loadable clock driver first, then the i.MX6/7 clock drivers can support loadable
> module, this will be done later.
> 
> Changes since V6:
> 	- improve patch #6's subject and move it to be first patch of this series.
> 
> Anson Huang (6):
>   clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31
>     bits
>   clk: composite: Export clk_hw_register_composite()
>   clk: imx: Support building i.MX common clock driver as module
>   clk: imx: Add clock configuration for ARMv7 platforms
>   clk: imx8m: Support module build
>   clk: imx8qxp: Support building i.MX8QXP clock driver as module

Acked-by: Shawn Guo <shawnguo@kernel.org>

Stephen,

I had sent v5.9 material off my hand to you, so please pick this up
directly if it looks good to you.  Thanks!

Shawn

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits
  2020-07-29 14:48 ` [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits Anson Huang
@ 2020-07-29 15:49   ` Randy Dunlap
  2020-07-29 23:51     ` Anson Huang
  0 siblings, 1 reply; 14+ messages in thread
From: Randy Dunlap @ 2020-07-29 15:49 UTC (permalink / raw)
  To: Anson Huang, mturquette, sboyd, shawnguo, s.hauer, kernel,
	festevam, aisheng.dong, arnd, peng.fan, abel.vesa, fugang.duan,
	daniel.baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: Linux-imx

On 7/29/20 7:48 AM, Anson Huang wrote:
> Use readl_relaxed() instead of __raw_readl(), and use BIT(x)
> instead of (1 << X) to fix below build warning reported by kernel
> test robot:
> 
> drivers/clk/imx/clk-imx6sl.c:149:49: warning: Shifting signed 32-bit
> value by 31 bits is undefined behaviour [shiftTooManyBitsSigned]
>      while (!(__raw_readl(anatop_base + PLL_ARM) & BM_PLL_ARM_LOCK))
> 
> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
> Reported-by: kernel test robot <lkp@intel.com>
> ---
> Changes since V6:
> 	- improve the subject.
> ---
>  drivers/clk/imx/clk-imx6sl.c | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/clk/imx/clk-imx6sl.c b/drivers/clk/imx/clk-imx6sl.c
> index 0f647d1..e69dba1 100644
> --- a/drivers/clk/imx/clk-imx6sl.c
> +++ b/drivers/clk/imx/clk-imx6sl.c
> @@ -3,6 +3,7 @@
>   * Copyright 2013-2014 Freescale Semiconductor, Inc.
>   */
>  
> +#include <linux/bitfield.h>

Hi,
I think you want
#include <linux/bits.h>

for BIT() usage.

>  #include <linux/clk.h>
>  #include <linux/clkdev.h>
>  #include <linux/err.h>
> @@ -14,19 +15,19 @@
>  #include "clk.h"
>  
>  #define CCSR			0xc
> -#define BM_CCSR_PLL1_SW_CLK_SEL	(1 << 2)
> +#define BM_CCSR_PLL1_SW_CLK_SEL	BIT(2)
>  #define CACRR			0x10
>  #define CDHIPR			0x48
> -#define BM_CDHIPR_ARM_PODF_BUSY	(1 << 16)
> +#define BM_CDHIPR_ARM_PODF_BUSY	BIT(16)
>  #define ARM_WAIT_DIV_396M	2
>  #define ARM_WAIT_DIV_792M	4
>  #define ARM_WAIT_DIV_996M	6
>  
>  #define PLL_ARM			0x0
> -#define BM_PLL_ARM_DIV_SELECT	(0x7f << 0)
> -#define BM_PLL_ARM_POWERDOWN	(1 << 12)
> -#define BM_PLL_ARM_ENABLE	(1 << 13)
> -#define BM_PLL_ARM_LOCK		(1 << 31)
> +#define BM_PLL_ARM_DIV_SELECT	0x7f
> +#define BM_PLL_ARM_POWERDOWN	BIT(12)
> +#define BM_PLL_ARM_ENABLE	BIT(13)
> +#define BM_PLL_ARM_LOCK		BIT(31)
>  #define PLL_ARM_DIV_792M	66
>  
>  static const char *step_sels[]		= { "osc", "pll2_pfd2", };


thanks.
-- 
~Randy


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits
  2020-07-29 15:49   ` Randy Dunlap
@ 2020-07-29 23:51     ` Anson Huang
  2020-07-30  0:30       ` Randy Dunlap
  0 siblings, 1 reply; 14+ messages in thread
From: Anson Huang @ 2020-07-29 23:51 UTC (permalink / raw)
  To: Randy Dunlap, mturquette, sboyd, shawnguo, s.hauer, kernel,
	festevam, Aisheng Dong, arnd, Peng Fan, Abel Vesa, Andy Duan,
	Daniel Baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: dl-linux-imx

Hi, Randy


> Subject: Re: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed
> 32-bit value by 31 bits
> 
> On 7/29/20 7:48 AM, Anson Huang wrote:
> > Use readl_relaxed() instead of __raw_readl(), and use BIT(x) instead
> > of (1 << X) to fix below build warning reported by kernel test robot:
> >
> > drivers/clk/imx/clk-imx6sl.c:149:49: warning: Shifting signed 32-bit
> > value by 31 bits is undefined behaviour [shiftTooManyBitsSigned]
> >      while (!(__raw_readl(anatop_base + PLL_ARM) &
> BM_PLL_ARM_LOCK))
> >
> > Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
> > Reported-by: kernel test robot <lkp@intel.com>
> > ---
> > Changes since V6:
> > 	- improve the subject.
> > ---
> >  drivers/clk/imx/clk-imx6sl.c | 15 ++++++++-------
> >  1 file changed, 8 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/clk/imx/clk-imx6sl.c
> > b/drivers/clk/imx/clk-imx6sl.c index 0f647d1..e69dba1 100644
> > --- a/drivers/clk/imx/clk-imx6sl.c
> > +++ b/drivers/clk/imx/clk-imx6sl.c
> > @@ -3,6 +3,7 @@
> >   * Copyright 2013-2014 Freescale Semiconductor, Inc.
> >   */
> >
> > +#include <linux/bitfield.h>
> 
> Hi,
> I think you want
> #include <linux/bits.h>
> 
> for BIT() usage.

Actually, the linux/of.h already includes linux/bitops.h and linux/bitops.h includes
linux/bits.h, so I will just drop linux/bitfield.h and send a V8.

Thanks,
Anson




_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits
  2020-07-29 23:51     ` Anson Huang
@ 2020-07-30  0:30       ` Randy Dunlap
  2020-07-30  1:14         ` Anson Huang
  0 siblings, 1 reply; 14+ messages in thread
From: Randy Dunlap @ 2020-07-30  0:30 UTC (permalink / raw)
  To: Anson Huang, mturquette, sboyd, shawnguo, s.hauer, kernel,
	festevam, Aisheng Dong, arnd, Peng Fan, Abel Vesa, Andy Duan,
	Daniel Baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: dl-linux-imx

On 7/29/20 4:51 PM, Anson Huang wrote:
> Hi, Randy
> 
> 
>> Subject: Re: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed
>> 32-bit value by 31 bits
>>
>> On 7/29/20 7:48 AM, Anson Huang wrote:
>>> Use readl_relaxed() instead of __raw_readl(), and use BIT(x) instead
>>> of (1 << X) to fix below build warning reported by kernel test robot:
>>>
>>> drivers/clk/imx/clk-imx6sl.c:149:49: warning: Shifting signed 32-bit
>>> value by 31 bits is undefined behaviour [shiftTooManyBitsSigned]
>>>      while (!(__raw_readl(anatop_base + PLL_ARM) &
>> BM_PLL_ARM_LOCK))
>>>
>>> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
>>> Reported-by: kernel test robot <lkp@intel.com>
>>> ---
>>> Changes since V6:
>>> 	- improve the subject.
>>> ---
>>>  drivers/clk/imx/clk-imx6sl.c | 15 ++++++++-------
>>>  1 file changed, 8 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/clk/imx/clk-imx6sl.c
>>> b/drivers/clk/imx/clk-imx6sl.c index 0f647d1..e69dba1 100644
>>> --- a/drivers/clk/imx/clk-imx6sl.c
>>> +++ b/drivers/clk/imx/clk-imx6sl.c
>>> @@ -3,6 +3,7 @@
>>>   * Copyright 2013-2014 Freescale Semiconductor, Inc.
>>>   */
>>>
>>> +#include <linux/bitfield.h>
>>
>> Hi,
>> I think you want
>> #include <linux/bits.h>
>>
>> for BIT() usage.
> 
> Actually, the linux/of.h already includes linux/bitops.h and linux/bitops.h includes
> linux/bits.h, so I will just drop linux/bitfield.h and send a V8.

or you could read Documentation/process/submit-checklist.rst,
where rule #1 says:

1) If you use a facility then #include the file that defines/declares
   that facility.  Don't depend on other header files pulling in ones
   that you use.


-- 
~Randy


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits
  2020-07-30  0:30       ` Randy Dunlap
@ 2020-07-30  1:14         ` Anson Huang
  2020-07-30  7:25           ` Arnd Bergmann
  0 siblings, 1 reply; 14+ messages in thread
From: Anson Huang @ 2020-07-30  1:14 UTC (permalink / raw)
  To: Randy Dunlap, mturquette, sboyd, shawnguo, s.hauer, kernel,
	festevam, Aisheng Dong, arnd, Peng Fan, Abel Vesa, Andy Duan,
	Daniel Baluta, yuehaibing, linux-clk, linux-kernel,
	linux-arm-kernel
  Cc: dl-linux-imx

Hi, Randy


> Subject: Re: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed
> 32-bit value by 31 bits
> 
> On 7/29/20 4:51 PM, Anson Huang wrote:
> > Hi, Randy
> >
> >
> >> Subject: Re: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting
> >> signed 32-bit value by 31 bits
> >>
> >> On 7/29/20 7:48 AM, Anson Huang wrote:
> >>> Use readl_relaxed() instead of __raw_readl(), and use BIT(x) instead
> >>> of (1 << X) to fix below build warning reported by kernel test robot:
> >>>
> >>> drivers/clk/imx/clk-imx6sl.c:149:49: warning: Shifting signed 32-bit
> >>> value by 31 bits is undefined behaviour [shiftTooManyBitsSigned]
> >>>      while (!(__raw_readl(anatop_base + PLL_ARM) &
> >> BM_PLL_ARM_LOCK))
> >>>
> >>> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
> >>> Reported-by: kernel test robot <lkp@intel.com>
> >>> ---
> >>> Changes since V6:
> >>> 	- improve the subject.
> >>> ---
> >>>  drivers/clk/imx/clk-imx6sl.c | 15 ++++++++-------
> >>>  1 file changed, 8 insertions(+), 7 deletions(-)
> >>>
> >>> diff --git a/drivers/clk/imx/clk-imx6sl.c
> >>> b/drivers/clk/imx/clk-imx6sl.c index 0f647d1..e69dba1 100644
> >>> --- a/drivers/clk/imx/clk-imx6sl.c
> >>> +++ b/drivers/clk/imx/clk-imx6sl.c
> >>> @@ -3,6 +3,7 @@
> >>>   * Copyright 2013-2014 Freescale Semiconductor, Inc.
> >>>   */
> >>>
> >>> +#include <linux/bitfield.h>
> >>
> >> Hi,
> >> I think you want
> >> #include <linux/bits.h>
> >>
> >> for BIT() usage.
> >
> > Actually, the linux/of.h already includes linux/bitops.h and
> > linux/bitops.h includes linux/bits.h, so I will just drop linux/bitfield.h and
> send a V8.
> 
> or you could read Documentation/process/submit-checklist.rst,
> where rule #1 says:
> 
> 1) If you use a facility then #include the file that defines/declares
>    that facility.  Don't depend on other header files pulling in ones
>    that you use.

Understood, while I search "BIT()" in clk driver, most of the drivers does NOT include
linux/bits.h even they use it.

But OK, I will send V9 to include it.

Thanks,
Anson




_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits
  2020-07-30  1:14         ` Anson Huang
@ 2020-07-30  7:25           ` Arnd Bergmann
  0 siblings, 0 replies; 14+ messages in thread
From: Arnd Bergmann @ 2020-07-30  7:25 UTC (permalink / raw)
  To: Anson Huang
  Cc: Aisheng Dong, Peng Fan, Andy Duan, Abel Vesa, sboyd, festevam,
	mturquette, Randy Dunlap, yuehaibing, linux-kernel,
	Daniel Baluta, linux-clk, dl-linux-imx, kernel, shawnguo,
	s.hauer, linux-arm-kernel

On Thu, Jul 30, 2020 at 3:14 AM Anson Huang <anson.huang@nxp.com> wrote:
> > Subject: Re: [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed
> > 32-bit value by 31 bits

> > or you could read Documentation/process/submit-checklist.rst,
> > where rule #1 says:
> >
> > 1) If you use a facility then #include the file that defines/declares
> >    that facility.  Don't depend on other header files pulling in ones
> >    that you use.
>
> Understood, while I search "BIT()" in clk driver, most of the drivers does NOT include
> linux/bits.h even they use it.
>
> But OK, I will send V9 to include it.

Ok, good.

I have a patch series that adds it to a lot of files. Note that linux/bitops.h
itself is a fairly big header with everything else that it includes, and it
is included almost everywhere indirectly.  When we change the other
headers to not require linux/bitops.h any more, everything that uses BIT()
needs to include linux/bits.h.

     Arnd

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module
  2020-07-29 15:26 ` [PATCH V7 0/6] Support building i.MX ARMv8 platforms " Shawn Guo
@ 2020-08-01  0:04   ` Stephen Boyd
  0 siblings, 0 replies; 14+ messages in thread
From: Stephen Boyd @ 2020-08-01  0:04 UTC (permalink / raw)
  To: Anson Huang, Shawn Guo
  Cc: aisheng.dong, peng.fan, fugang.duan, abel.vesa, arnd,
	daniel.baluta, mturquette, yuehaibing, linux-kernel, linux-clk,
	Linux-imx, kernel, festevam, s.hauer, linux-arm-kernel

Quoting Shawn Guo (2020-07-29 08:26:35)
> On Wed, Jul 29, 2020 at 10:48:31PM +0800, Anson Huang wrote:
> > Nowdays, there are more and more requirements of building SoC specific drivers as
> > modules, such as Android GKI (generic kernel image), this patch set supports building
> > i.MX ARMv8 SoCs clock drivers as modules,
> > 
> > The CLK_IMXxxx is introduced for i.MX ARMv7 platforms in order to make the build
> > options aligned, the reason why i.MX ARMv7 platforms clock driver do NOT support
> > module build and COMPILE_TEST is because, some drivers like i.MX GPT timer driver
> > depends on clock driver to be ready before it, GPT driver uses TIMER_OF_DECLARE(),
> > while i.MX6/7 clock drivers use CLK_OF_DECLARE(), and GPT driver is critical for
> > i.MX6/7 platforms kernel boot up, so GPT driver needs to be changed to support
> > loadable clock driver first, then the i.MX6/7 clock drivers can support loadable
> > module, this will be done later.
> > 
> > Changes since V6:
> >       - improve patch #6's subject and move it to be first patch of this series.
> > 
> > Anson Huang (6):
> >   clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31
> >     bits
> >   clk: composite: Export clk_hw_register_composite()
> >   clk: imx: Support building i.MX common clock driver as module
> >   clk: imx: Add clock configuration for ARMv7 platforms
> >   clk: imx8m: Support module build
> >   clk: imx8qxp: Support building i.MX8QXP clock driver as module
> 
> Acked-by: Shawn Guo <shawnguo@kernel.org>
> 
> Stephen,
> 
> I had sent v5.9 material off my hand to you, so please pick this up
> directly if it looks good to you.  Thanks!
> 

Ok. At this point it's pretty late so I think it will have to wait to
after the merge window unless there's an rc8.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2020-08-01  0:06 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-29 14:48 [PATCH V7 0/6] Support building i.MX ARMv8 platforms clock driver as module Anson Huang
2020-07-29 14:48 ` [PATCH V7 1/6] clk: imx6sl: Use BIT(x) to avoid shifting signed 32-bit value by 31 bits Anson Huang
2020-07-29 15:49   ` Randy Dunlap
2020-07-29 23:51     ` Anson Huang
2020-07-30  0:30       ` Randy Dunlap
2020-07-30  1:14         ` Anson Huang
2020-07-30  7:25           ` Arnd Bergmann
2020-07-29 14:48 ` [PATCH V7 2/6] clk: composite: Export clk_hw_register_composite() Anson Huang
2020-07-29 14:48 ` [PATCH V7 3/6] clk: imx: Support building i.MX common clock driver as module Anson Huang
2020-07-29 14:48 ` [PATCH V7 4/6] clk: imx: Add clock configuration for ARMv7 platforms Anson Huang
2020-07-29 14:48 ` [PATCH V7 5/6] clk: imx8m: Support module build Anson Huang
2020-07-29 14:48 ` [PATCH V7 6/6] clk: imx8qxp: Support building i.MX8QXP clock driver as module Anson Huang
2020-07-29 15:26 ` [PATCH V7 0/6] Support building i.MX ARMv8 platforms " Shawn Guo
2020-08-01  0:04   ` Stephen Boyd

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).