* [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update
@ 2023-07-24 1:47 Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 1/8] firmware: imx: scu: change init level to subsys_initcall_sync Peng Fan (OSS)
` (9 more replies)
0 siblings, 10 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
V3:
Fix build error reported by kernel robot
Add patch subject-prefix
V2:
Fix build warning
Dong Aisheng (2):
firmware: imx: scu: change init level to subsys_initcall_sync
firmware: imx: scu: increase RPC timeout
Peng Fan (4):
firmware: imx: scu: drop return value check
firmware: imx: scu: use soc name for soc_id
firmware: imx: scu-irq: export imx_scu_irq_get_status
firmware: imx: scu-irq: enlarge the IMX_SC_IRQ_NUM_GROUP
Ranjani Vaidyanathan (1):
firmware: imx: scu-irq: support identifying SCU wakeup source from
sysfs
Robin Gong (1):
firmware: imx: scu-irq: fix RCU complains after M4 partition reset
drivers/firmware/imx/imx-scu-irq.c | 116 +++++++++++++++++++++++------
drivers/firmware/imx/imx-scu-soc.c | 19 ++---
drivers/firmware/imx/imx-scu.c | 9 ++-
include/linux/firmware/imx/sci.h | 6 ++
4 files changed, 114 insertions(+), 36 deletions(-)
--
2.37.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH V3 1/8] firmware: imx: scu: change init level to subsys_initcall_sync
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 2/8] firmware: imx: scu: increase RPC timeout Peng Fan (OSS)
` (8 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Dong Aisheng <aisheng.dong@nxp.com>
Change firmware init level to subsys_initcall_sync to ensure it's
probed before most devices to avoid unnecessary defer probe.
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/imx-scu.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/imx/imx-scu.c b/drivers/firmware/imx/imx-scu.c
index 47db49911e7b..2d24359420d8 100644
--- a/drivers/firmware/imx/imx-scu.c
+++ b/drivers/firmware/imx/imx-scu.c
@@ -353,7 +353,12 @@ static struct platform_driver imx_scu_driver = {
},
.probe = imx_scu_probe,
};
-builtin_platform_driver(imx_scu_driver);
+
+static int __init imx_scu_driver_init(void)
+{
+ return platform_driver_register(&imx_scu_driver);
+}
+subsys_initcall_sync(imx_scu_driver_init);
MODULE_AUTHOR("Dong Aisheng <aisheng.dong@nxp.com>");
MODULE_DESCRIPTION("IMX SCU firmware protocol driver");
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V3 2/8] firmware: imx: scu: increase RPC timeout
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 1/8] firmware: imx: scu: change init level to subsys_initcall_sync Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 3/8] firmware: imx: scu: drop return value check Peng Fan (OSS)
` (7 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Dong Aisheng <aisheng.dong@nxp.com>
When system loading is high, we can met some command timeout
issue occasionaly, so increase the timeout to a more safe value.
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/imx-scu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/firmware/imx/imx-scu.c b/drivers/firmware/imx/imx-scu.c
index 2d24359420d8..14ff9d3504bf 100644
--- a/drivers/firmware/imx/imx-scu.c
+++ b/drivers/firmware/imx/imx-scu.c
@@ -20,7 +20,7 @@
#include <linux/platform_device.h>
#define SCU_MU_CHAN_NUM 8
-#define MAX_RX_TIMEOUT (msecs_to_jiffies(30))
+#define MAX_RX_TIMEOUT (msecs_to_jiffies(3000))
struct imx_sc_chan {
struct imx_sc_ipc *sc_ipc;
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V3 3/8] firmware: imx: scu: drop return value check
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 1/8] firmware: imx: scu: change init level to subsys_initcall_sync Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 2/8] firmware: imx: scu: increase RPC timeout Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 4/8] firmware: imx: scu: use soc name for soc_id Peng Fan (OSS)
` (6 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
For IMX_SC_MISC_FUNC_UNIQUE_ID, the scfw has a return value,
and the imx-scu always return 0. So drop the return value check.
BTW, also initialize msg to 0.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/imx-scu-soc.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/firmware/imx/imx-scu-soc.c b/drivers/firmware/imx/imx-scu-soc.c
index 2f32353de2c9..ef9103987e76 100644
--- a/drivers/firmware/imx/imx-scu-soc.c
+++ b/drivers/firmware/imx/imx-scu-soc.c
@@ -33,20 +33,15 @@ struct imx_sc_msg_misc_get_soc_uid {
static int imx_scu_soc_uid(u64 *soc_uid)
{
- struct imx_sc_msg_misc_get_soc_uid msg;
+ struct imx_sc_msg_misc_get_soc_uid msg = { 0 };
struct imx_sc_rpc_msg *hdr = &msg.hdr;
- int ret;
hdr->ver = IMX_SC_RPC_VERSION;
hdr->svc = IMX_SC_RPC_SVC_MISC;
hdr->func = IMX_SC_MISC_FUNC_UNIQUE_ID;
hdr->size = 1;
- ret = imx_scu_call_rpc(imx_sc_soc_ipc_handle, &msg, true);
- if (ret) {
- pr_err("%s: get soc uid failed, ret %d\n", __func__, ret);
- return ret;
- }
+ imx_scu_call_rpc(imx_sc_soc_ipc_handle, &msg, true);
*soc_uid = msg.uid_high;
*soc_uid <<= 32;
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V3 4/8] firmware: imx: scu: use soc name for soc_id
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
` (2 preceding siblings ...)
2023-07-24 1:47 ` [PATCH V3 3/8] firmware: imx: scu: drop return value check Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 5/8] firmware: imx: scu-irq: fix RCU complains after M4 partition reset Peng Fan (OSS)
` (5 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Same as soc-imx8m and soc-imx driver, use soc name for soc_id
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/imx-scu-soc.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/firmware/imx/imx-scu-soc.c b/drivers/firmware/imx/imx-scu-soc.c
index ef9103987e76..cb8377670a7d 100644
--- a/drivers/firmware/imx/imx-scu-soc.c
+++ b/drivers/firmware/imx/imx-scu-soc.c
@@ -107,10 +107,12 @@ int imx_scu_soc_init(struct device *dev)
return -EINVAL;
/* format soc_id value passed from SCU firmware */
- val = id & 0x1f;
- soc_dev_attr->soc_id = devm_kasprintf(dev, GFP_KERNEL, "0x%x", val);
- if (!soc_dev_attr->soc_id)
- return -ENOMEM;
+ if (of_machine_is_compatible("fsl,imx8qm"))
+ soc_dev_attr->soc_id = "i.MX8QM";
+ else if (of_machine_is_compatible("fsl,imx8qxp"))
+ soc_dev_attr->soc_id = "i.MX8QXP";
+ else if (of_machine_is_compatible("fsl,imx8dxl"))
+ soc_dev_attr->soc_id = "i.MX8DXL";
/* format revision value passed from SCU firmware */
val = (id >> 5) & 0xf;
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V3 5/8] firmware: imx: scu-irq: fix RCU complains after M4 partition reset
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
` (3 preceding siblings ...)
2023-07-24 1:47 ` [PATCH V3 4/8] firmware: imx: scu: use soc name for soc_id Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status Peng Fan (OSS)
` (4 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Robin Gong, Peng Fan
From: Robin Gong <yibin.gong@nxp.com>
Use blocking_notifier_chain instead of atomic_notifier_chain, otherwise
below RCU complains would come out since unregister/register_virtio_device
() will issue mbox message (mbox_send_message() is blocking) again after
received M4 partition reset. Actually, no need atomic for notifier which
is so tough for user since this notifier is called in worker instead of
interrupt handler directly.
[ 389.706645] i2c-rpmsg virtio0.rpmsg-i2c-channel.-1.2: i2c rpmsg driver is removed
[ 389.767362] Wait for remote ready timeout, use first_notify.
[ 389.774084] ------------[ cut here ]------------
[ 389.778729] WARNING: CPU: 0 PID: 397 at kernel/rcu/tree_plugin.h:293 rcu_note_context_switch+0x34/0x338
[ 389.788131] Modules linked in:
[ 389.791195] CPU: 0 PID: 397 Comm: kworker/0:13 Not tainted 5.4.0-rc5-02977-g08f78722f07b #26
[ 389.799633] Hardware name: Freescale i.MX8DXL Phantom MEK (DT)
[ 389.805481] Workqueue: events imx_scu_irq_work_handler
Signed-off-by: Robin Gong <yibin.gong@nxp.com>
Reviewed-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/imx-scu-irq.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/firmware/imx/imx-scu-irq.c b/drivers/firmware/imx/imx-scu-irq.c
index d9dcc20945c6..4408f150b3d5 100644
--- a/drivers/firmware/imx/imx-scu-irq.c
+++ b/drivers/firmware/imx/imx-scu-irq.c
@@ -42,25 +42,25 @@ struct imx_sc_msg_irq_enable {
static struct imx_sc_ipc *imx_sc_irq_ipc_handle;
static struct work_struct imx_sc_irq_work;
-static ATOMIC_NOTIFIER_HEAD(imx_scu_irq_notifier_chain);
+static BLOCKING_NOTIFIER_HEAD(imx_scu_irq_notifier_chain);
int imx_scu_irq_register_notifier(struct notifier_block *nb)
{
- return atomic_notifier_chain_register(
+ return blocking_notifier_chain_register(
&imx_scu_irq_notifier_chain, nb);
}
EXPORT_SYMBOL(imx_scu_irq_register_notifier);
int imx_scu_irq_unregister_notifier(struct notifier_block *nb)
{
- return atomic_notifier_chain_unregister(
+ return blocking_notifier_chain_unregister(
&imx_scu_irq_notifier_chain, nb);
}
EXPORT_SYMBOL(imx_scu_irq_unregister_notifier);
static int imx_scu_irq_notifier_call_chain(unsigned long status, u8 *group)
{
- return atomic_notifier_call_chain(&imx_scu_irq_notifier_chain,
+ return blocking_notifier_call_chain(&imx_scu_irq_notifier_chain,
status, (void *)group);
}
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
` (4 preceding siblings ...)
2023-07-24 1:47 ` [PATCH V3 5/8] firmware: imx: scu-irq: fix RCU complains after M4 partition reset Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 3:48 ` kernel test robot
2023-07-24 6:34 ` kernel test robot
2023-07-24 1:47 ` [PATCH V3 7/8] firmware: imx: scu-irq: enlarge the IMX_SC_IRQ_NUM_GROUP Peng Fan (OSS)
` (3 subsequent siblings)
9 siblings, 2 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Cleanup code to export imx_scu_irq_get_status API to make it could
be used by others, such as SECO.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/imx-scu-irq.c | 40 ++++++++++++++++++++----------
include/linux/firmware/imx/sci.h | 6 +++++
2 files changed, 33 insertions(+), 13 deletions(-)
diff --git a/drivers/firmware/imx/imx-scu-irq.c b/drivers/firmware/imx/imx-scu-irq.c
index 4408f150b3d5..6549f3792a0f 100644
--- a/drivers/firmware/imx/imx-scu-irq.c
+++ b/drivers/firmware/imx/imx-scu-irq.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0+
/*
- * Copyright 2019 NXP
+ * Copyright 2019,2023 NXP
*
* Implementation of the SCU IRQ functions using MU.
*
@@ -66,29 +66,18 @@ static int imx_scu_irq_notifier_call_chain(unsigned long status, u8 *group)
static void imx_scu_irq_work_handler(struct work_struct *work)
{
- struct imx_sc_msg_irq_get_status msg;
- struct imx_sc_rpc_msg *hdr = &msg.hdr;
u32 irq_status;
int ret;
u8 i;
for (i = 0; i < IMX_SC_IRQ_NUM_GROUP; i++) {
- hdr->ver = IMX_SC_RPC_VERSION;
- hdr->svc = IMX_SC_RPC_SVC_IRQ;
- hdr->func = IMX_SC_IRQ_FUNC_STATUS;
- hdr->size = 2;
-
- msg.data.req.resource = mu_resource_id;
- msg.data.req.group = i;
-
- ret = imx_scu_call_rpc(imx_sc_irq_ipc_handle, &msg, true);
+ ret = imx_scu_irq_get_status(i, &irq_status);
if (ret) {
pr_err("get irq group %d status failed, ret %d\n",
i, ret);
return;
}
- irq_status = msg.data.resp.status;
if (!irq_status)
continue;
@@ -97,6 +86,31 @@ static void imx_scu_irq_work_handler(struct work_struct *work)
}
}
+int imx_scu_irq_get_status(u8 group, u32 *irq_status)
+{
+ struct imx_sc_msg_irq_get_status msg;
+ struct imx_sc_rpc_msg *hdr = &msg.hdr;
+ int ret;
+
+ hdr->ver = IMX_SC_RPC_VERSION;
+ hdr->svc = IMX_SC_RPC_SVC_IRQ;
+ hdr->func = IMX_SC_IRQ_FUNC_STATUS;
+ hdr->size = 2;
+
+ msg.data.req.resource = mu_resource_id;
+ msg.data.req.group = group;
+
+ ret = imx_scu_call_rpc(imx_sc_irq_ipc_handle, &msg, true);
+ if (ret)
+ return ret;
+
+ if (irq_status)
+ *irq_status = msg.data.resp.status;
+
+ return 0;
+}
+EXPORT_SYMBOL(imx_scu_irq_get_status);
+
int imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable)
{
struct imx_sc_msg_irq_enable msg;
diff --git a/include/linux/firmware/imx/sci.h b/include/linux/firmware/imx/sci.h
index 5cc63fe7e84d..db72f2bc6a26 100644
--- a/include/linux/firmware/imx/sci.h
+++ b/include/linux/firmware/imx/sci.h
@@ -21,6 +21,7 @@ int imx_scu_enable_general_irq_channel(struct device *dev);
int imx_scu_irq_register_notifier(struct notifier_block *nb);
int imx_scu_irq_unregister_notifier(struct notifier_block *nb);
int imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable);
+int imx_scu_irq_get_status(u8 group, u32 *irq_status);
int imx_scu_soc_init(struct device *dev);
#else
static inline int imx_scu_soc_init(struct device *dev)
@@ -47,5 +48,10 @@ static inline int imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable)
{
return -ENOTSUPP;
}
+
+int imx_scu_irq_get_status(u8 group, u32 *irq_status)
+{
+ return -EOPNOTSUPP;
+}
#endif
#endif /* _SC_SCI_H */
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V3 7/8] firmware: imx: scu-irq: enlarge the IMX_SC_IRQ_NUM_GROUP
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
` (5 preceding siblings ...)
2023-07-24 1:47 ` [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 8/8] firmware: imx: scu-irq: support identifying SCU wakeup source from sysfs Peng Fan (OSS)
` (2 subsequent siblings)
9 siblings, 0 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Per SCFW update, update the IMX_SC_IRQ_NUM_GROUP to 9.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/imx-scu-irq.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/firmware/imx/imx-scu-irq.c b/drivers/firmware/imx/imx-scu-irq.c
index 6549f3792a0f..8d902db1daf2 100644
--- a/drivers/firmware/imx/imx-scu-irq.c
+++ b/drivers/firmware/imx/imx-scu-irq.c
@@ -14,7 +14,7 @@
#define IMX_SC_IRQ_FUNC_ENABLE 1
#define IMX_SC_IRQ_FUNC_STATUS 2
-#define IMX_SC_IRQ_NUM_GROUP 4
+#define IMX_SC_IRQ_NUM_GROUP 9
static u32 mu_resource_id;
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V3 8/8] firmware: imx: scu-irq: support identifying SCU wakeup source from sysfs
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
` (6 preceding siblings ...)
2023-07-24 1:47 ` [PATCH V3 7/8] firmware: imx: scu-irq: enlarge the IMX_SC_IRQ_NUM_GROUP Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH 09/10] dt-bindings: power: fsl,scu-pd: support i.MX8DXL Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH 10/10] arm64: dts: imx8dxl: update scu-pd compatible Peng Fan (OSS)
9 siblings, 0 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Ranjani Vaidyanathan, Peng Fan
From: Ranjani Vaidyanathan <ranjani.vaidyanathan@nxp.com>
Record SCU wakeup interrupt in /sys/power/pm_wakeup_irq
The user can further identify the exact wakeup source by using the
following interface:
cat /sys/firmware/scu_wakeup_source/wakeup_src
The above will print the wake groups and the irqs that could have
contributed to waking up the kernel. For example if ON/OFF button was the
wakeup source:
cat /sys/firmware/scu_wakeup_source/wakeup_src
Wakeup source group = 3, irq = 0x1
The user can refer to the SCFW API documentation to identify all the
wake groups and irqs.
Signed-off-by: Ranjani Vaidyanathan <ranjani.vaidyanathan@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/imx-scu-irq.c | 66 +++++++++++++++++++++++++++---
1 file changed, 61 insertions(+), 5 deletions(-)
diff --git a/drivers/firmware/imx/imx-scu-irq.c b/drivers/firmware/imx/imx-scu-irq.c
index 8d902db1daf2..79efbf259dd7 100644
--- a/drivers/firmware/imx/imx-scu-irq.c
+++ b/drivers/firmware/imx/imx-scu-irq.c
@@ -11,6 +11,8 @@
#include <linux/firmware/imx/sci.h>
#include <linux/mailbox_client.h>
#include <linux/suspend.h>
+#include <linux/sysfs.h>
+#include <linux/kobject.h>
#define IMX_SC_IRQ_FUNC_ENABLE 1
#define IMX_SC_IRQ_FUNC_STATUS 2
@@ -40,6 +42,20 @@ struct imx_sc_msg_irq_enable {
u8 enable;
} __packed;
+struct scu_wakeup {
+ u32 mask;
+ u32 wakeup_src;
+ bool valid;
+};
+
+/* Sysfs functions */
+struct kobject *wakeup_obj;
+static ssize_t wakeup_source_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf);
+static struct kobj_attribute wakeup_source_attr =
+ __ATTR(wakeup_src, 0660, wakeup_source_show, NULL);
+
+static struct scu_wakeup scu_irq_wakeup[IMX_SC_IRQ_NUM_GROUP];
+
static struct imx_sc_ipc *imx_sc_irq_ipc_handle;
static struct work_struct imx_sc_irq_work;
static BLOCKING_NOTIFIER_HEAD(imx_scu_irq_notifier_chain);
@@ -71,16 +87,24 @@ static void imx_scu_irq_work_handler(struct work_struct *work)
u8 i;
for (i = 0; i < IMX_SC_IRQ_NUM_GROUP; i++) {
+ if (scu_irq_wakeup[i].mask) {
+ scu_irq_wakeup[i].valid = false;
+ scu_irq_wakeup[i].wakeup_src = 0;
+ }
ret = imx_scu_irq_get_status(i, &irq_status);
if (ret) {
- pr_err("get irq group %d status failed, ret %d\n",
- i, ret);
+ pr_err("get irq group %d status failed, ret %d\n", i, ret);
return;
}
if (!irq_status)
continue;
-
+ if (scu_irq_wakeup[i].mask & irq_status) {
+ scu_irq_wakeup[i].valid = true;
+ scu_irq_wakeup[i].wakeup_src = irq_status & scu_irq_wakeup[i].mask;
+ } else {
+ scu_irq_wakeup[i].wakeup_src = irq_status;
+ }
pm_system_wakeup();
imx_scu_irq_notifier_call_chain(irq_status, &i);
}
@@ -135,6 +159,11 @@ int imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable)
pr_err("enable irq failed, group %d, mask %d, ret %d\n",
group, mask, ret);
+ if (enable)
+ scu_irq_wakeup[group].mask |= mask;
+ else
+ scu_irq_wakeup[group].mask &= ~mask;
+
return ret;
}
EXPORT_SYMBOL(imx_scu_irq_group_enable);
@@ -144,6 +173,25 @@ static void imx_scu_irq_callback(struct mbox_client *c, void *msg)
schedule_work(&imx_sc_irq_work);
}
+static ssize_t wakeup_source_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
+{
+ int i;
+
+ for (i = 0; i < IMX_SC_IRQ_NUM_GROUP; i++) {
+ if (!scu_irq_wakeup[i].wakeup_src)
+ continue;
+
+ if (scu_irq_wakeup[i].valid)
+ sprintf(buf, "Wakeup source group = %d, irq = 0x%x\n",
+ i, scu_irq_wakeup[i].wakeup_src);
+ else
+ sprintf(buf, "Spurious SCU wakeup, group = %d, irq = 0x%x\n",
+ i, scu_irq_wakeup[i].wakeup_src);
+ }
+
+ return strlen(buf);
+}
+
int imx_scu_enable_general_irq_channel(struct device *dev)
{
struct of_phandle_args spec;
@@ -173,8 +221,7 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
INIT_WORK(&imx_sc_irq_work, imx_scu_irq_work_handler);
- if (!of_parse_phandle_with_args(dev->of_node, "mboxes",
- "#mbox-cells", 0, &spec))
+ if (!of_parse_phandle_with_args(dev->of_node, "mboxes", "#mbox-cells", 0, &spec))
i = of_alias_get_id(spec.np, "mu");
/* use mu1 as general mu irq channel if failed */
@@ -183,6 +230,15 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
mu_resource_id = IMX_SC_R_MU_0A + i;
+ /* Create directory under /sysfs/firmware */
+ wakeup_obj = kobject_create_and_add("scu_wakeup_source", firmware_kobj);
+
+ if (sysfs_create_file(wakeup_obj, &wakeup_source_attr.attr)) {
+ pr_err("Cannot create sysfs file......\n");
+ kobject_put(wakeup_obj);
+ sysfs_remove_file(firmware_kobj, &wakeup_source_attr.attr);
+ }
+
return ret;
}
EXPORT_SYMBOL(imx_scu_enable_general_irq_channel);
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 09/10] dt-bindings: power: fsl,scu-pd: support i.MX8DXL
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
` (7 preceding siblings ...)
2023-07-24 1:47 ` [PATCH V3 8/8] firmware: imx: scu-irq: support identifying SCU wakeup source from sysfs Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
2023-07-24 8:51 ` Krzysztof Kozlowski
2023-07-24 1:47 ` [PATCH 10/10] arm64: dts: imx8dxl: update scu-pd compatible Peng Fan (OSS)
9 siblings, 1 reply; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add compatible string for i.MX8DXL
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
Documentation/devicetree/bindings/power/fsl,scu-pd.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/power/fsl,scu-pd.yaml b/Documentation/devicetree/bindings/power/fsl,scu-pd.yaml
index 407b7cfec783..4d38f9cceaab 100644
--- a/Documentation/devicetree/bindings/power/fsl,scu-pd.yaml
+++ b/Documentation/devicetree/bindings/power/fsl,scu-pd.yaml
@@ -20,6 +20,7 @@ properties:
compatible:
items:
- enum:
+ - fsl,imx8dxl-scu-pd
- fsl,imx8qm-scu-pd
- fsl,imx8qxp-scu-pd
- const: fsl,scu-pd
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 10/10] arm64: dts: imx8dxl: update scu-pd compatible
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
` (8 preceding siblings ...)
2023-07-24 1:47 ` [PATCH 09/10] dt-bindings: power: fsl,scu-pd: support i.MX8DXL Peng Fan (OSS)
@ 2023-07-24 1:47 ` Peng Fan (OSS)
9 siblings, 0 replies; 15+ messages in thread
From: Peng Fan (OSS) @ 2023-07-24 1:47 UTC (permalink / raw)
To: shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Per dt-bindings, add "fsl,imx8dxl-scu-pd" compatible string for scu-pd
node
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
arch/arm64/boot/dts/freescale/imx8dxl.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/freescale/imx8dxl.dtsi b/arch/arm64/boot/dts/freescale/imx8dxl.dtsi
index 792b7224ca5b..32c69619f22b 100644
--- a/arch/arm64/boot/dts/freescale/imx8dxl.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8dxl.dtsi
@@ -122,7 +122,7 @@ &lsio_mu1 1 0
&lsio_mu1 3 3>;
pd: power-controller {
- compatible = "fsl,scu-pd";
+ compatible = "fsl,imx8dxl-scu-pd", "fsl,scu-pd";
#power-domain-cells = <1>;
wakeup-irq = <160 163 235 236 237 228 229 230 231 238
239 240 166 169>;
--
2.37.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status
2023-07-24 1:47 ` [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status Peng Fan (OSS)
@ 2023-07-24 3:48 ` kernel test robot
2023-07-24 6:34 ` kernel test robot
1 sibling, 0 replies; 15+ messages in thread
From: kernel test robot @ 2023-07-24 3:48 UTC (permalink / raw)
To: Peng Fan (OSS), shawnguo, s.hauer
Cc: oe-kbuild-all, kernel, festevam, linux-imx, aisheng.dong,
alexander.stein, linux-arm-kernel, linux-kernel, Peng Fan
Hi Peng,
kernel test robot noticed the following build warnings:
[auto build test WARNING on shawnguo/for-next]
[also build test WARNING on linus/master v6.5-rc3 next-20230721]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Peng-Fan-OSS/firmware-imx-scu-change-init-level-to-subsys_initcall_sync/20230724-101304
base: https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git for-next
patch link: https://lore.kernel.org/r/20230724014711.2048958-7-peng.fan%40oss.nxp.com
patch subject: [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status
config: csky-randconfig-r011-20230724 (https://download.01.org/0day-ci/archive/20230724/202307241130.Ay2R8Hnf-lkp@intel.com/config)
compiler: csky-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230724/202307241130.Ay2R8Hnf-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202307241130.Ay2R8Hnf-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from drivers/net/can/flexcan/flexcan-core.c:19:
>> include/linux/firmware/imx/sci.h:52:5: warning: no previous prototype for 'imx_scu_irq_get_status' [-Wmissing-prototypes]
52 | int imx_scu_irq_get_status(u8 group, u32 *irq_status)
| ^~~~~~~~~~~~~~~~~~~~~~
vim +/imx_scu_irq_get_status +52 include/linux/firmware/imx/sci.h
51
> 52 int imx_scu_irq_get_status(u8 group, u32 *irq_status)
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status
2023-07-24 1:47 ` [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status Peng Fan (OSS)
2023-07-24 3:48 ` kernel test robot
@ 2023-07-24 6:34 ` kernel test robot
1 sibling, 0 replies; 15+ messages in thread
From: kernel test robot @ 2023-07-24 6:34 UTC (permalink / raw)
To: Peng Fan (OSS), shawnguo, s.hauer
Cc: oe-kbuild-all, kernel, festevam, linux-imx, aisheng.dong,
alexander.stein, linux-arm-kernel, linux-kernel, Peng Fan
Hi Peng,
kernel test robot noticed the following build errors:
[auto build test ERROR on shawnguo/for-next]
[also build test ERROR on linus/master v6.5-rc3 next-20230721]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Peng-Fan-OSS/firmware-imx-scu-change-init-level-to-subsys_initcall_sync/20230724-101304
base: https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git for-next
patch link: https://lore.kernel.org/r/20230724014711.2048958-7-peng.fan%40oss.nxp.com
patch subject: [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status
config: arm-defconfig (https://download.01.org/0day-ci/archive/20230724/202307241442.nX6M25Pa-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230724/202307241442.nX6M25Pa-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202307241442.nX6M25Pa-lkp@intel.com/
All errors (new ones prefixed by >>):
arm-linux-gnueabi-ld: drivers/net/ethernet/freescale/fec_ptp.o: in function `imx_scu_irq_get_status':
>> fec_ptp.c:(.text+0xc2c): multiple definition of `imx_scu_irq_get_status'; drivers/net/ethernet/freescale/fec_main.o:fec_main.c:(.text+0x6894): first defined here
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 09/10] dt-bindings: power: fsl,scu-pd: support i.MX8DXL
2023-07-24 1:47 ` [PATCH 09/10] dt-bindings: power: fsl,scu-pd: support i.MX8DXL Peng Fan (OSS)
@ 2023-07-24 8:51 ` Krzysztof Kozlowski
2023-07-24 9:08 ` Peng Fan
0 siblings, 1 reply; 15+ messages in thread
From: Krzysztof Kozlowski @ 2023-07-24 8:51 UTC (permalink / raw)
To: Peng Fan (OSS), shawnguo, s.hauer
Cc: kernel, festevam, linux-imx, aisheng.dong, alexander.stein,
linux-arm-kernel, linux-kernel, Peng Fan
On 24/07/2023 03:47, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Add compatible string for i.MX8DXL
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
Please use scripts/get_maintainers.pl to get a list of necessary people
and lists to CC. It might happen, that command when run on an older
kernel, gives you outdated entries. Therefore please be sure you base
your patches on recent Linux kernel.
You missed at least DT list (maybe more), so this won't be tested by
automated tooling. Performing review on untested code might be a waste
of time, thus I will skip this patch entirely till you follow the
process allowing the patch to be tested.
Please kindly resend and include all necessary To/Cc entries.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: [PATCH 09/10] dt-bindings: power: fsl,scu-pd: support i.MX8DXL
2023-07-24 8:51 ` Krzysztof Kozlowski
@ 2023-07-24 9:08 ` Peng Fan
0 siblings, 0 replies; 15+ messages in thread
From: Peng Fan @ 2023-07-24 9:08 UTC (permalink / raw)
To: Krzysztof Kozlowski, Peng Fan (OSS), shawnguo@kernel.org,
s.hauer@pengutronix.de
Cc: kernel@pengutronix.de, festevam@gmail.com, dl-linux-imx,
Aisheng Dong, alexander.stein@ew.tq-group.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
> Subject: Re: [PATCH 09/10] dt-bindings: power: fsl,scu-pd: support i.MX8DXL
>
> On 24/07/2023 03:47, Peng Fan (OSS) wrote:
> > From: Peng Fan <peng.fan@nxp.com>
> >
> > Add compatible string for i.MX8DXL
> >
> > Signed-off-by: Peng Fan <peng.fan@nxp.com>
>
> Please use scripts/get_maintainers.pl to get a list of necessary people and
> lists to CC. It might happen, that command when run on an older kernel,
> gives you outdated entries. Therefore please be sure you base your patches
> on recent Linux kernel.
>
> You missed at least DT list (maybe more), so this won't be tested by
> automated tooling. Performing review on untested code might be a waste of
> time, thus I will skip this patch entirely till you follow the process allowing
> the patch to be tested.
>
> Please kindly resend and include all necessary To/Cc entries.
This patch was sent out in a wrong patchset. Sorry for the noise.
Thanks,
Peng.
>
> Best regards,
> Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2023-07-24 9:09 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-24 1:47 [PATCH V3 0/8] firmware: imx: scu/scu-irq: misc update Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 1/8] firmware: imx: scu: change init level to subsys_initcall_sync Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 2/8] firmware: imx: scu: increase RPC timeout Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 3/8] firmware: imx: scu: drop return value check Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 4/8] firmware: imx: scu: use soc name for soc_id Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 5/8] firmware: imx: scu-irq: fix RCU complains after M4 partition reset Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 6/8] firmware: imx: scu-irq: export imx_scu_irq_get_status Peng Fan (OSS)
2023-07-24 3:48 ` kernel test robot
2023-07-24 6:34 ` kernel test robot
2023-07-24 1:47 ` [PATCH V3 7/8] firmware: imx: scu-irq: enlarge the IMX_SC_IRQ_NUM_GROUP Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH V3 8/8] firmware: imx: scu-irq: support identifying SCU wakeup source from sysfs Peng Fan (OSS)
2023-07-24 1:47 ` [PATCH 09/10] dt-bindings: power: fsl,scu-pd: support i.MX8DXL Peng Fan (OSS)
2023-07-24 8:51 ` Krzysztof Kozlowski
2023-07-24 9:08 ` Peng Fan
2023-07-24 1:47 ` [PATCH 10/10] arm64: dts: imx8dxl: update scu-pd compatible Peng Fan (OSS)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox