Commit 893cfb99 authored by Dong Aisheng's avatar Dong Aisheng Committed by Shawn Guo
Browse files

firmware: imx: scu-pd: do not power off console domain



Do not power off console domain in runtime pm.

Signed-off-by: default avatarDong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
parent 1168935b
Loading
Loading
Loading
Loading
+27 −1
Original line number Diff line number Diff line
@@ -86,6 +86,8 @@ struct imx_sc_pd_soc {
	u8 num_ranges;
};

static 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 },
@@ -207,6 +209,23 @@ 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",
					 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;
@@ -267,6 +286,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;

	if (!imx_sc_rm_is_resource_owned(pm_ipc_handle, pd_ranges->rsrc + idx))
@@ -288,6 +308,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",
@@ -297,7 +321,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);
@@ -363,6 +387,8 @@ 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);
}