The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH v5 0/3] pmdomain: imx: build the SCU power domain driver as a module
@ 2026-07-23  2:05 Zhipeng.wang_1
  2026-07-23  2:05 ` [PATCH v5 1/3] of: export of_stdout symbol Zhipeng.wang_1
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Zhipeng.wang_1 @ 2026-07-23  2:05 UTC (permalink / raw)
  To: robh, saravanak, ulfh, Frank.Li, s.hauer
  Cc: kernel, festevam, peng.fan, aisheng.dong, jindong.yue,
	xuegang.liu, devicetree, linux-pm, imx, linux-arm-kernel,
	linux-kernel, linux-clk

From: Zhipeng Wang <zhipeng.wang_1@nxp.com>

This series makes the i.MX SCU power domain driver buildable as a
loadable module, which is required for Android devices using the
Generic Kernel Image (GKI) where SoC-specific drivers must be modules.

Patch 1 exports of_stdout (which the driver references to find the
console's power domain) from the OF core with EXPORT_SYMBOL_GPL().

Patch 2 converts CONFIG_IMX_SCU_PD from bool to tristate and adds
MODULE_DEVICE_TABLE() for autoloading. subsys_initcall() is used so
that when built-in the provider probes before its consumers (e.g. the
SCU clock driver at device_initcall level). No module_exit() is
provided since the provider cannot be safely removed at runtime.

Patch 3 adds MODULE_SOFTDEP("pre: scu_pd") to the i.MX8QXP clock
driver so that modprobe loads the power domain module first when both
are built as modules.

Because of the cross-subsystem dependency (patches touch drivers/of,
drivers/pmdomain, and drivers/clk), I would suggest taking the whole
series through one tree.

Changes in v5:
- Fix MODULE_SOFTDEP module name from imx_scu_pd to scu_pd. (Sashiko
  bot)
- Add Acked-by from Rob Herring for patch 1.

Changes in v4:
- Add patch 3: MODULE_SOFTDEP in clk-imx8qxp to guarantee module load
  order when both drivers are modules. (Sashiko bot)

Changes in v3:
- Use subsys_initcall() instead of module_init() to fix probe ordering
  between the power domain provider and the SCU clock consumer when
  both are built-in. (Sashiko bot)

Changes in v2:
- Drop module_platform_driver() which provides module_exit() and could
  lead to use-after-free on module unload. Use module_init() only, so
  the module cannot be unloaded. (Sashiko bot)

Zhipeng Wang (3):
  of: export of_stdout symbol
  pmdomain: imx: scu-pd: allow building as a module
  clk: imx: imx8qxp: add soft dependency on SCU power domain driver

 drivers/clk/imx/clk-imx8qxp.c | 1 +
 drivers/of/base.c             | 1 +
 drivers/pmdomain/imx/Kconfig  | 2 +-
 drivers/pmdomain/imx/scu-pd.c | 8 +++++++-
 4 files changed, 10 insertions(+), 2 deletions(-)

-- 
2.34.1

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

* [PATCH v5 1/3] of: export of_stdout symbol
  2026-07-23  2:05 [PATCH v5 0/3] pmdomain: imx: build the SCU power domain driver as a module Zhipeng.wang_1
@ 2026-07-23  2:05 ` Zhipeng.wang_1
  2026-07-23  2:05 ` [PATCH v5 2/3] pmdomain: imx: scu-pd: allow building as a module Zhipeng.wang_1
  2026-07-23  2:05 ` [PATCH v5 3/3] clk: imx: imx8qxp: add soft dependency on SCU power domain driver Zhipeng.wang_1
  2 siblings, 0 replies; 5+ messages in thread
From: Zhipeng.wang_1 @ 2026-07-23  2:05 UTC (permalink / raw)
  To: robh, saravanak, ulfh, Frank.Li, s.hauer
  Cc: kernel, festevam, peng.fan, aisheng.dong, jindong.yue,
	xuegang.liu, devicetree, linux-pm, imx, linux-arm-kernel,
	linux-kernel, linux-clk

From: Zhipeng Wang <zhipeng.wang_1@nxp.com>

of_stdout is declared extern in include/linux/of.h alongside of_root
and of_chosen, but unlike those two it is not exported, preventing
modules from referencing it.

Export it with EXPORT_SYMBOL_GPL() so drivers that need the stdout
device node can be built as modules.

Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
---
 drivers/of/base.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/of/base.c b/drivers/of/base.c
index 6e7a42dedad3..a25c95800719 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -39,6 +39,7 @@ struct device_node *of_chosen;
 EXPORT_SYMBOL(of_chosen);
 struct device_node *of_aliases;
 struct device_node *of_stdout;
+EXPORT_SYMBOL_GPL(of_stdout);
 static const char *of_stdout_options;
 
 struct kset *of_kset;
-- 
2.34.1


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

* [PATCH v5 2/3] pmdomain: imx: scu-pd: allow building as a module
  2026-07-23  2:05 [PATCH v5 0/3] pmdomain: imx: build the SCU power domain driver as a module Zhipeng.wang_1
  2026-07-23  2:05 ` [PATCH v5 1/3] of: export of_stdout symbol Zhipeng.wang_1
@ 2026-07-23  2:05 ` Zhipeng.wang_1
  2026-07-23  2:05 ` [PATCH v5 3/3] clk: imx: imx8qxp: add soft dependency on SCU power domain driver Zhipeng.wang_1
  2 siblings, 0 replies; 5+ messages in thread
From: Zhipeng.wang_1 @ 2026-07-23  2:05 UTC (permalink / raw)
  To: robh, saravanak, ulfh, Frank.Li, s.hauer
  Cc: kernel, festevam, peng.fan, aisheng.dong, jindong.yue,
	xuegang.liu, devicetree, linux-pm, imx, linux-arm-kernel,
	linux-kernel, linux-clk

From: Zhipeng Wang <zhipeng.wang_1@nxp.com>

Convert CONFIG_IMX_SCU_PD from bool to tristate to allow building as a
loadable module. This is needed on Android devices using the Generic
Kernel Image (GKI), where SoC-specific drivers must be built as modules
rather than built into the core kernel image.

For i.MX8Q devices running Android with a GKI kernel, the SCU power
domain driver must be loadable. Without tristate support, power domains
cannot be properly initialized, preventing these systems from
functioning under GKI.

Use subsys_initcall() so that when built-in the power domain provider
probes before its consumers (e.g. the SCU clock driver at
device_initcall level), fixing "failed to attached the power domain"
warnings at boot. When built as a module, subsys_initcall() is
equivalent to module_init(). No module_exit() is provided because the
SCU power domain provider is a system-level resource that cannot be
safely removed at runtime.

Add MODULE_DEVICE_TABLE() for OF-based module autoloading.

Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com>
---
 drivers/pmdomain/imx/Kconfig  | 2 +-
 drivers/pmdomain/imx/scu-pd.c | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/pmdomain/imx/Kconfig b/drivers/pmdomain/imx/Kconfig
index 00203615c65e..472e9dec6bd4 100644
--- a/drivers/pmdomain/imx/Kconfig
+++ b/drivers/pmdomain/imx/Kconfig
@@ -21,7 +21,7 @@ config IMX9_BLK_CTRL
 	depends on PM_GENERIC_DOMAINS
 
 config IMX_SCU_PD
-	bool "IMX SCU Power Domain driver"
+	tristate "IMX SCU Power Domain driver"
 	depends on IMX_SCU
 	help
 	  The System Controller Firmware (SCFW) based power domain driver.
diff --git a/drivers/pmdomain/imx/scu-pd.c b/drivers/pmdomain/imx/scu-pd.c
index 3ec33667a308..e3f9e741daf7 100644
--- a/drivers/pmdomain/imx/scu-pd.c
+++ b/drivers/pmdomain/imx/scu-pd.c
@@ -531,6 +531,7 @@ static const struct of_device_id imx_sc_pd_match[] = {
 	{ .compatible = "fsl,scu-pd", &imx8qxp_scu_pd},
 	{ /* sentinel */ }
 };
+MODULE_DEVICE_TABLE(of, imx_sc_pd_match);
 
 static struct platform_driver imx_sc_pd_driver = {
 	.driver = {
@@ -540,7 +541,12 @@ static struct platform_driver imx_sc_pd_driver = {
 	},
 	.probe = imx_sc_pd_probe,
 };
-builtin_platform_driver(imx_sc_pd_driver);
+
+static int __init imx_sc_pd_driver_init(void)
+{
+	return platform_driver_register(&imx_sc_pd_driver);
+}
+subsys_initcall(imx_sc_pd_driver_init);
 
 MODULE_AUTHOR("Dong Aisheng <aisheng.dong@nxp.com>");
 MODULE_DESCRIPTION("IMX SCU Power Domain driver");
-- 
2.34.1


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

* [PATCH v5 3/3] clk: imx: imx8qxp: add soft dependency on SCU power domain driver
  2026-07-23  2:05 [PATCH v5 0/3] pmdomain: imx: build the SCU power domain driver as a module Zhipeng.wang_1
  2026-07-23  2:05 ` [PATCH v5 1/3] of: export of_stdout symbol Zhipeng.wang_1
  2026-07-23  2:05 ` [PATCH v5 2/3] pmdomain: imx: scu-pd: allow building as a module Zhipeng.wang_1
@ 2026-07-23  2:05 ` Zhipeng.wang_1
  2026-07-23 16:03   ` Brian Masney
  2 siblings, 1 reply; 5+ messages in thread
From: Zhipeng.wang_1 @ 2026-07-23  2:05 UTC (permalink / raw)
  To: robh, saravanak, ulfh, Frank.Li, s.hauer
  Cc: kernel, festevam, peng.fan, aisheng.dong, jindong.yue,
	xuegang.liu, devicetree, linux-pm, imx, linux-arm-kernel,
	linux-kernel, linux-clk

From: Zhipeng Wang <zhipeng.wang_1@nxp.com>

The i.MX8QXP SCU clock driver manually attaches power domains to each
clock device via of_genpd_add_device() in imx_clk_scu_attach_pd().
If the SCU power domain provider has not probed yet, the attachment
fails silently with a pr_warn() and the clock device is registered
without a power domain.

When both drivers are built as modules, there is no implicit
dependency to guarantee load order. Add MODULE_SOFTDEP("pre:
scu_pd") so that modprobe loads the SCU power domain module
before the clock module.

Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com>
---
 drivers/clk/imx/clk-imx8qxp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/clk/imx/clk-imx8qxp.c b/drivers/clk/imx/clk-imx8qxp.c
index c781425a005e..17302ee628b7 100644
--- a/drivers/clk/imx/clk-imx8qxp.c
+++ b/drivers/clk/imx/clk-imx8qxp.c
@@ -373,3 +373,4 @@ module_exit(imx8qxp_clk_exit);
 MODULE_AUTHOR("Aisheng Dong <aisheng.dong@nxp.com>");
 MODULE_DESCRIPTION("NXP i.MX8QXP clock driver");
 MODULE_LICENSE("GPL v2");
+MODULE_SOFTDEP("pre: scu_pd");
-- 
2.34.1


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

* Re: [PATCH v5 3/3] clk: imx: imx8qxp: add soft dependency on SCU power domain driver
  2026-07-23  2:05 ` [PATCH v5 3/3] clk: imx: imx8qxp: add soft dependency on SCU power domain driver Zhipeng.wang_1
@ 2026-07-23 16:03   ` Brian Masney
  0 siblings, 0 replies; 5+ messages in thread
From: Brian Masney @ 2026-07-23 16:03 UTC (permalink / raw)
  To: Zhipeng.wang_1
  Cc: robh, saravanak, ulfh, Frank.Li, s.hauer, kernel, festevam,
	peng.fan, aisheng.dong, jindong.yue, xuegang.liu, devicetree,
	linux-pm, imx, linux-arm-kernel, linux-kernel, linux-clk

On Thu, Jul 23, 2026 at 11:05:24AM +0900, Zhipeng.wang_1@oss.nxp.com wrote:
> From: Zhipeng Wang <zhipeng.wang_1@nxp.com>
> 
> The i.MX8QXP SCU clock driver manually attaches power domains to each
> clock device via of_genpd_add_device() in imx_clk_scu_attach_pd().
> If the SCU power domain provider has not probed yet, the attachment
> fails silently with a pr_warn() and the clock device is registered
> without a power domain.
> 
> When both drivers are built as modules, there is no implicit
> dependency to guarantee load order. Add MODULE_SOFTDEP("pre:
> scu_pd") so that modprobe loads the SCU power domain module
> before the clock module.
> 
> Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com>

Reviewed-by: Brian Masney <bmasney@redhat.com>

Long term, it would be nice to fix the probe deferral issues via a
separate series.


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

end of thread, other threads:[~2026-07-23 16:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-23  2:05 [PATCH v5 0/3] pmdomain: imx: build the SCU power domain driver as a module Zhipeng.wang_1
2026-07-23  2:05 ` [PATCH v5 1/3] of: export of_stdout symbol Zhipeng.wang_1
2026-07-23  2:05 ` [PATCH v5 2/3] pmdomain: imx: scu-pd: allow building as a module Zhipeng.wang_1
2026-07-23  2:05 ` [PATCH v5 3/3] clk: imx: imx8qxp: add soft dependency on SCU power domain driver Zhipeng.wang_1
2026-07-23 16:03   ` Brian Masney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox