Thread (1 message) 1 message, 1 author, 2020-01-02

RE: [EXT] Re: [PATCH 1/1] firmware: imx: scu-pd: do not power off console domain

From: Andy Duan <hidden>
Date: 2020-01-02 10:23:54
Also in: linux-pm

From: Dong Aisheng <redacted> Sent: Thursday, January 2, 2020 6:03 PM
On Tue, Nov 19, 2019 at 12:13 AM Ulf Hansson [off-list ref]
wrote:
quoted
On Sun, 17 Nov 2019 at 14:07, Dong Aisheng [off-list ref]
wrote:
quoted
quoted
Do not power off console domain in runtime pm.
Would it be possible to configure a remote wakeup for the console
while the device becomes runtime suspended, rather than preventing the
power off altogether?
From HW view, the wakeup features requires power on, but clocks can be off.

In fact, the standard flow is power domain driver should not power off the devices
that enable the wakeup feature.

NXP internal tree already supported runtime pm. I will upstream the patch.

Andy
quoted
Remote wakeup usually requires clock and power.
Not sure if this device can support it. Copy module owner (Fugang
Duan) to confirm.

The current lpuart driver seems not support.

Regards
Aisheng
quoted
Kind regards
Uffe
quoted
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Ulf Hansson <redacted>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
---
 drivers/firmware/imx/scu-pd.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/imx/scu-pd.c
b/drivers/firmware/imx/scu-pd.c index b556612207e5..770e3681bbbf
100644
--- a/drivers/firmware/imx/scu-pd.c
+++ b/drivers/firmware/imx/scu-pd.c
@@ -85,6 +85,8 @@ struct imx_sc_pd_soc {
        u8 num_ranges;
 };

+int imx_con_rsrc;
+
 static const struct imx_sc_pd_range imx8qxp_scu_pd_ranges[] = {
        /* LSIO SS */
        { "pwm", IMX_SC_R_PWM_0, 8, true, 0 }, @@ -173,6 +175,23
@@
quoted
quoted
to_imx_sc_pd(struct generic_pm_domain *genpd)
        return container_of(genpd, struct imx_sc_pm_domain, pd);  }

+static void imx_sc_pd_get_console_rsrc(void) {
+       struct of_phandle_args specs;
+       int ret;
+
+       if (!of_stdout)
+               return;
+
+       ret = of_parse_phandle_with_args(of_stdout, "power-domains",
+
"#power-domain-cells",
quoted
quoted
+                                        0, &specs);
+       if (ret)
+               return;
+
+       imx_con_rsrc = specs.args[0]; }
+
 static int imx_sc_pd_power(struct generic_pm_domain *domain, bool
power_on)  {
        struct imx_sc_msg_req_set_resource_power_mode msg; @@
-233,6
quoted
quoted
+252,7 @@ imx_scu_add_pm_domain(struct device *dev, int idx,
                      const struct imx_sc_pd_range *pd_ranges)  {
        struct imx_sc_pm_domain *sc_pd;
+       bool is_off = true;
        int ret;

        sc_pd = devm_kzalloc(dev, sizeof(*sc_pd), GFP_KERNEL); @@
-251,6 +271,10 @@ imx_scu_add_pm_domain(struct device *dev, int idx,
                         "%s", pd_ranges->name);

        sc_pd->pd.name = sc_pd->name;
+       if (imx_con_rsrc == sc_pd->rsrc) {
+               sc_pd->pd.flags = GENPD_FLAG_RPM_ALWAYS_ON;
+               is_off = false;
+       }

        if (sc_pd->rsrc >= IMX_SC_R_LAST) {
                dev_warn(dev, "invalid pd %s rsrc id %d found", @@
-260,7 +284,7 @@ imx_scu_add_pm_domain(struct device *dev, int idx,
                return NULL;
        }

-       ret = pm_genpd_init(&sc_pd->pd, NULL, true);
+       ret = pm_genpd_init(&sc_pd->pd, NULL, is_off);
        if (ret) {
                dev_warn(dev, "failed to init pd %s rsrc id %d",
                         sc_pd->name, sc_pd->rsrc); @@ -326,6
+350,8
quoted
quoted
@@ static int imx_sc_pd_probe(struct platform_device *pdev)
        if (!pd_soc)
                return -ENODEV;

+       imx_sc_pd_get_console_rsrc();
+
        return imx_scu_init_pm_domains(&pdev->dev, pd_soc);  }

--
2.23.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help