summaryrefslogtreecommitdiff
path: root/drivers/soc/imx
diff options
context:
space:
mode:
authorAnson Huang <Anson.Huang@nxp.com>2018-06-14 14:41:23 +0800
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:32:19 +0800
commit440fdc2869f7637e64fad3cdbf4d9db5d479f586 (patch)
tree455e18f0d4b9f35163f7259bc6a237f838356554 /drivers/soc/imx
parent7e5abc21dda7a82900b6337360361ae0226b1876 (diff)
MLK-18611-1 soc: imx: support MU off in suspend
Add MU restore function to support MU power off in system suspend mode, need to re-initialize MU after resume, since MU might lose power when suspend. Signed-off-by: Anson Huang <Anson.Huang@nxp.com> Reviewed-by: Bai Ping <ping.bai@nxp.com>
Diffstat (limited to 'drivers/soc/imx')
-rw-r--r--drivers/soc/imx/sc/main/ipc.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/soc/imx/sc/main/ipc.c b/drivers/soc/imx/sc/main/ipc.c
index 05ae70202e78..924f7a6c0d25 100644
--- a/drivers/soc/imx/sc/main/ipc.c
+++ b/drivers/soc/imx/sc/main/ipc.c
@@ -16,6 +16,7 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/mx8_mu.h>
+#include <linux/syscore_ops.h>
#include <soc/imx8/sc/svc/irq/api.h>
#include <soc/imx8/sc/ipc.h>
@@ -283,6 +284,19 @@ static irqreturn_t imx8_scu_mu_isr(int irq, void *param)
return IRQ_HANDLED;
}
+static void imx8_mu_resume(void)
+{
+ int i;
+
+ MU_Init(mu_base_virtaddr);
+ for (i = 0; i < MU_RR_COUNT; i++)
+ MU_EnableGeneralInt(mu_base_virtaddr, i);
+}
+
+struct syscore_ops imx8_mu_syscore_ops = {
+ .resume = imx8_mu_resume,
+};
+
/*Initialization of the MU code. */
int __init imx8_mu_init(void)
{
@@ -383,6 +397,8 @@ int __init imx8_mu_init(void)
if (sciErr)
pr_info("Cannot request WDOG interrupt\n");
+ register_syscore_ops(&imx8_mu_syscore_ops);
+
pr_info("*****Initialized MU\n");
return scu_mu_id;
}