* [PATCH v3 0/2] pmdomain: imx: build the SCU power domain driver as a module @ 2026-07-22 7:15 Zhipeng.wang_1 2026-07-22 7:15 ` [PATCH v3 1/2] of: export of_stdout symbol Zhipeng.wang_1 2026-07-22 7:15 ` [PATCH v3 2/2] pmdomain: imx: scu-pd: allow building as a module Zhipeng.wang_1 0 siblings, 2 replies; 4+ messages in thread From: Zhipeng.wang_1 @ 2026-07-22 7:15 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 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), fixing existing "failed to attached the power domain" warnings. No module_exit() is provided since the provider cannot be safely removed at runtime. Because of the cross-subsystem dependency (patch 1 touches drivers/of, patch 2 touches drivers/pmdomain), I would suggest taking the whole series through one tree. 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 (2): of: export of_stdout symbol pmdomain: imx: scu-pd: allow building as a module drivers/of/base.c | 1 + drivers/pmdomain/imx/Kconfig | 2 +- drivers/pmdomain/imx/scu-pd.c | 8 +++++++- 3 files changed, 9 insertions(+), 2 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 1/2] of: export of_stdout symbol 2026-07-22 7:15 [PATCH v3 0/2] pmdomain: imx: build the SCU power domain driver as a module Zhipeng.wang_1 @ 2026-07-22 7:15 ` Zhipeng.wang_1 2026-07-22 7:15 ` [PATCH v3 2/2] pmdomain: imx: scu-pd: allow building as a module Zhipeng.wang_1 1 sibling, 0 replies; 4+ messages in thread From: Zhipeng.wang_1 @ 2026-07-22 7:15 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 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> --- 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] 4+ messages in thread
* [PATCH v3 2/2] pmdomain: imx: scu-pd: allow building as a module 2026-07-22 7:15 [PATCH v3 0/2] pmdomain: imx: build the SCU power domain driver as a module Zhipeng.wang_1 2026-07-22 7:15 ` [PATCH v3 1/2] of: export of_stdout symbol Zhipeng.wang_1 @ 2026-07-22 7:15 ` Zhipeng.wang_1 2026-07-22 7:35 ` sashiko-bot 1 sibling, 1 reply; 4+ messages in thread From: Zhipeng.wang_1 @ 2026-07-22 7:15 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 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] 4+ messages in thread
* Re: [PATCH v3 2/2] pmdomain: imx: scu-pd: allow building as a module 2026-07-22 7:15 ` [PATCH v3 2/2] pmdomain: imx: scu-pd: allow building as a module Zhipeng.wang_1 @ 2026-07-22 7:35 ` sashiko-bot 0 siblings, 0 replies; 4+ messages in thread From: sashiko-bot @ 2026-07-22 7:35 UTC (permalink / raw) To: Zhipeng.wang_1; +Cc: conor+dt, Frank.Li, imx, devicetree, robh Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [High] Building the SCU PM domain driver as a module breaks power domain attachment for SCU clocks due to unhandled deferred probing. -- --- Patch [2]: [PATCH v3 2/2] pmdomain: imx: scu-pd: allow building as a module --- commit 8b0026aca4b6a877c269d6333189db725f3c6d76 Author: Zhipeng Wang <zhipeng.wang_1@nxp.com> pmdomain: imx: scu-pd: allow building as a module This commit converts the IMX_SCU_PD config from bool to tristate to allow building the SCU power domain driver as a loadable module, which is required for Android GKI kernels. > diff --git a/drivers/pmdomain/imx/Kconfig b/drivers/pmdomain/imx/Kconfig > index 00203615c65e9..472e9dec6bd4e 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" [Severity: High] Does building the power domain driver as a module break power domain attachment for SCU clocks? If IMX_SCU_PD is built as a module, there are no explicit symbol dependencies or softdeps between the SCU clock driver and the PD provider, meaning the clock driver might be loaded first. Looking at the consumer side in drivers/clk/imx/clk-scu.c: imx_clk_scu_alloc_dev() { ... ret = imx_clk_scu_attach_pd(&pdev->dev, rsrc_id); if (ret) pr_warn("%s: failed to attached the power domain %d\n", name, ret); ret = platform_device_add(pdev); ... } Since the consumer ignores the return value from the attachment attempt, an error like -ENOENT (when the provider is not registered yet) will not trigger a deferred probe. Furthermore, because these software-created clock devices lack an of_node, the device core's standard deferred probing mechanisms cannot retry the attachment later. Will this leave the SCU clocks permanently registered without their power domains attached, potentially causing hardware malfunctions or continuous power waste? > depends on IMX_SCU > help > The System Controller Firmware (SCFW) based power domain driver. [ ... ] -- Sashiko AI review · https://sashiko.dev/#/patchset/20260722071512.3494011-1-Zhipeng.wang_1@oss.nxp.com?part=2 ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-07-22 7:35 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-22 7:15 [PATCH v3 0/2] pmdomain: imx: build the SCU power domain driver as a module Zhipeng.wang_1 2026-07-22 7:15 ` [PATCH v3 1/2] of: export of_stdout symbol Zhipeng.wang_1 2026-07-22 7:15 ` [PATCH v3 2/2] pmdomain: imx: scu-pd: allow building as a module Zhipeng.wang_1 2026-07-22 7:35 ` sashiko-bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox