mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 07:33:19 +02:00
firmware: imx: scu-pd: do not power off console domain
Do not power off console domain in runtime pm. Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> Signed-off-by: Shawn Guo <shawnguo@kernel.org>
This commit is contained in:
parent
1168935b96
commit
893cfb9973
|
|
@ -86,6 +86,8 @@ struct imx_sc_pd_soc {
|
||||||
u8 num_ranges;
|
u8 num_ranges;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int imx_con_rsrc;
|
||||||
|
|
||||||
static const struct imx_sc_pd_range imx8qxp_scu_pd_ranges[] = {
|
static const struct imx_sc_pd_range imx8qxp_scu_pd_ranges[] = {
|
||||||
/* LSIO SS */
|
/* LSIO SS */
|
||||||
{ "pwm", IMX_SC_R_PWM_0, 8, true, 0 },
|
{ "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);
|
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)
|
static int imx_sc_pd_power(struct generic_pm_domain *domain, bool power_on)
|
||||||
{
|
{
|
||||||
struct imx_sc_msg_req_set_resource_power_mode msg;
|
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)
|
const struct imx_sc_pd_range *pd_ranges)
|
||||||
{
|
{
|
||||||
struct imx_sc_pm_domain *sc_pd;
|
struct imx_sc_pm_domain *sc_pd;
|
||||||
|
bool is_off = true;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!imx_sc_rm_is_resource_owned(pm_ipc_handle, pd_ranges->rsrc + idx))
|
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);
|
"%s", pd_ranges->name);
|
||||||
|
|
||||||
sc_pd->pd.name = sc_pd->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) {
|
if (sc_pd->rsrc >= IMX_SC_R_LAST) {
|
||||||
dev_warn(dev, "invalid pd %s rsrc id %d found",
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pm_genpd_init(&sc_pd->pd, NULL, true);
|
ret = pm_genpd_init(&sc_pd->pd, NULL, is_off);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_warn(dev, "failed to init pd %s rsrc id %d",
|
dev_warn(dev, "failed to init pd %s rsrc id %d",
|
||||||
sc_pd->name, sc_pd->rsrc);
|
sc_pd->name, sc_pd->rsrc);
|
||||||
|
|
@ -363,6 +387,8 @@ static int imx_sc_pd_probe(struct platform_device *pdev)
|
||||||
if (!pd_soc)
|
if (!pd_soc)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
imx_sc_pd_get_console_rsrc();
|
||||||
|
|
||||||
return imx_scu_init_pm_domains(&pdev->dev, pd_soc);
|
return imx_scu_init_pm_domains(&pdev->dev, pd_soc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user