Thread (31 messages) 31 messages, 4 authors, 2025-05-30

Re: [PATCH v2 3/3] remoteproc: imx_rproc: add power mode check for remote core attachment

From: Hiago De Franco <hidden>
Date: 2025-05-28 17:38:20
Also in: imx, linux-pm, linux-remoteproc, lkml

On Tue, May 27, 2025 at 10:45:25AM -0300, Hiago De Franco wrote:

[...]
quoted
Thanks for the detailed analysis!

This is a very similar issue as many other genpd providers are
suffering from - and something that I have been working on recently to
fix.

A few days ago I posted a new version of a series [1], which is based
upon using the fw_devlink and ->sync_state() support. In principle, we
need to prevent genpd from power-off a PM domain if it was powered-on
during boot , until all the consumer-drivers of a PM domain have been
probed.

I had a look at the DT description of how imx describes power-domain
providers/consumers, along with the corresponding genpd provider
implementation in drivers/pmdomain/imx/scu-pd.c. Unless I missed
something, I think [1] should do the trick for you, without any
further changes. Can you please give it a try and see if that solves
this problem?
Cool! I can give a try and provide an answer soon. Thanks!
We are making progress ;-)

With the patches you shared Ulf (I added them on top of the current
master branch), it works as expected, dev_pm_genpd_is_on() returns 0
when I boot the kernel without M4 running and it returns 1 when I boot
the kernel with M4 running with a hello-world demo.

However now I tried to, if dev_pm_genpd_is_on() returns 1, put the
DETACHED state, something as

if (dev_pm_genpd_is_on(priv->pd_list->pd_devs[0]))
	priv->rproc->state = RPROC_DETACHED;

In this case I used 0 because I understand this is the
IMX_SC_R_M4_0_PID0 defined in my device tree overlay:

		power-domains = <&pd IMX_SC_R_M4_0_PID0>,
				<&pd IMX_SC_R_M4_0_MU_1A>;

But in this case, the kernel does not boot anymore, I see the "Starting
kernel..." and nothing else.

I am using the pm_runtime functions before rproc_add():
@@ -1146,6 +1154,9 @@ static int imx_rproc_probe(struct platform_device *pdev)
                }
        }

+       pm_runtime_enable(dev);
+       pm_runtime_get_sync(dev);
+
        ret = rproc_add(rproc);
        if (ret) {
                dev_err(dev, "rproc_add failed\n");
and calling dev_pm_genpd_is_on() after dev_pm_domain_attach_list() has
been called.

With kernel not starting I cannot even debug it. Do you have any
suggestion on why this might be happening?
quoted
[...]

Kind regards
Uffe

[1]
https://lore.kernel.org/all/20250523134025.75130-1-ulf.hansson@linaro.org/ (local)
Best regards,
Hiago
 
Best regards,
Hiago
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help