firmware: imx: make sure MU irq can wake up system from suspend mode
authorAnson Huang <Anson.Huang@nxp.com>
Thu, 23 Apr 2020 23:07:10 +0000 (07:07 +0800)
committerShawn Guo <shawnguo@kernel.org>
Wed, 17 Jun 2020 13:46:09 +0000 (21:46 +0800)
IRQF_NO_SUSPEND flag is set for MU IRQ of IPC work, but with this
flag set, IRQD_WAKEUP_ARMED flag will NOT be set during
suspend_device_irq() phase, then when MU IRQ arrives, it will NOT
wake up system from suspend.

To fix this issue, pm_system_wakeup() is called in general MU IRQ
handler to make sure system can be waked up when MU IRQ arrives.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Reviewed-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
drivers/firmware/imx/imx-scu-irq.c

index db655e8..d9dcc20 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/firmware/imx/ipc.h>
 #include <linux/firmware/imx/sci.h>
 #include <linux/mailbox_client.h>
+#include <linux/suspend.h>
 
 #define IMX_SC_IRQ_FUNC_ENABLE 1
 #define IMX_SC_IRQ_FUNC_STATUS 2
@@ -91,6 +92,7 @@ static void imx_scu_irq_work_handler(struct work_struct *work)
                if (!irq_status)
                        continue;
 
+               pm_system_wakeup();
                imx_scu_irq_notifier_call_chain(irq_status, &i);
        }
 }