mailbox: imx: fix suspend failue
imx_mu_isr() always calls pm_system_wakeup() even when it should not,
making the system unable to enter sleep.
Suspend fails as follows:
armadillo:~# echo mem > /sys/power/state
[ 2614.602432] PM: suspend entry (deep)
[ 2614.610640] Filesystems sync: 0.004 seconds
[ 2614.618016] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 2614.626555] OOM killer disabled.
[ 2614.629792] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[ 2614.638456] printk: Suspending console(s) (use no_console_suspend to debug)
[ 2614.649504] PM: Some devices failed to suspend, or early wake event detected
[ 2614.730103] PM: resume devices took 0.080 seconds
[ 2614.741924] OOM killer enabled.
[ 2614.745073] Restarting tasks ... done.
[ 2614.754532] PM: suspend exit
ash: write error: Resource busy
armadillo:~#
Upstream commit 892cb524ae8a is correct, so this seems to be a
mistake during cherry-pick.
Cc: <stable@vger.kernel.org>
Fixes: a16f5ae8ad
("mailbox: imx: fix wakeup failure from freeze mode")
Signed-off-by: Daisuke Mizobuchi <mizo@atmark-techno.com>
Reviewed-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5ef15c06ac
commit
b43ff11736
@ -331,8 +331,6 @@ static int imx_mu_startup(struct mbox_chan *chan)
|
||||
break;
|
||||
}
|
||||
|
||||
priv->suspend = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -550,8 +548,6 @@ static int imx_mu_probe(struct platform_device *pdev)
|
||||
|
||||
clk_disable_unprepare(priv->clk);
|
||||
|
||||
priv->suspend = false;
|
||||
|
||||
return 0;
|
||||
|
||||
disable_runtime_pm:
|
||||
@ -614,6 +610,8 @@ static int __maybe_unused imx_mu_suspend_noirq(struct device *dev)
|
||||
if (!priv->clk)
|
||||
priv->xcr = imx_mu_read(priv, priv->dcfg->xCR);
|
||||
|
||||
priv->suspend = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -632,6 +630,8 @@ static int __maybe_unused imx_mu_resume_noirq(struct device *dev)
|
||||
if (!imx_mu_read(priv, priv->dcfg->xCR) && !priv->clk)
|
||||
imx_mu_write(priv, priv->xcr, priv->dcfg->xCR);
|
||||
|
||||
priv->suspend = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user