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 Aishengquoted
Kind regards Uffequoted
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.cb/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,6quoted
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,8quoted
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