summaryrefslogtreecommitdiff
path: root/drivers/firmware/imx/imx-scu.c
diff options
context:
space:
mode:
authorAnson Huang <anson.huang@nxp.com>2019-04-09 07:59:55 +0300
committerShawn Guo <shawnguo@kernel.org>2019-04-11 10:31:02 +0300
commit851826c7566e9bb4d03eb050634031ecc802affb (patch)
treee1a7fddbc34e3dab2899e98412c70591f20d5397 /drivers/firmware/imx/imx-scu.c
parent9f735c4e94fcbec66aa282eebb92c4aa3de88c6d (diff)
downloadlinux-851826c7566e9bb4d03eb050634031ecc802affb.tar.xz
firmware: imx: enable imx scu general irq function
The System Controller Firmware (SCFW) controls RTC, thermal and WDOG etc., these resources' interrupt function are managed by SCU. When any IRQ pending, SCU will notify Linux via MU general interrupt channel #3, and Linux kernel needs to call SCU APIs to get IRQ status and notify each module to handle the interrupt. Since there is no data transmission for SCU IRQ notification, so doorbell mode is used for this MU channel, and SCU driver will use notifier mechanism to broadcast to every module which registers the SCU block notifier. 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>
Diffstat (limited to 'drivers/firmware/imx/imx-scu.c')
-rw-r--r--drivers/firmware/imx/imx-scu.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/firmware/imx/imx-scu.c b/drivers/firmware/imx/imx-scu.c
index 2bb1a19c413f..04a24a863d6e 100644
--- a/drivers/firmware/imx/imx-scu.c
+++ b/drivers/firmware/imx/imx-scu.c
@@ -10,6 +10,7 @@
#include <linux/err.h>
#include <linux/firmware/imx/types.h>
#include <linux/firmware/imx/ipc.h>
+#include <linux/firmware/imx/sci.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/kernel.h>
@@ -246,6 +247,11 @@ static int imx_scu_probe(struct platform_device *pdev)
imx_sc_ipc_handle = sc_ipc;
+ ret = imx_scu_enable_general_irq_channel(dev);
+ if (ret)
+ dev_warn(dev,
+ "failed to enable general irq channel: %d\n", ret);
+
dev_info(dev, "NXP i.MX SCU Initialized\n");
return devm_of_platform_populate(dev);