* [PATCH v2 1/2] firmware: arm_scmi: imx: Support getting syslog of MISC protocol
2025-10-11 11:33 [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump syslog Peng Fan
@ 2025-10-11 11:33 ` Peng Fan
2025-10-11 11:33 ` [PATCH v2 2/2] firmware: imx: sm-misc: Dump syslog info Peng Fan
2025-10-20 10:41 ` [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump syslog Peng Fan
2 siblings, 0 replies; 5+ messages in thread
From: Peng Fan @ 2025-10-11 11:33 UTC (permalink / raw)
To: Sudeep Holla, Cristian Marussi, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam
Cc: Dan Carpenter, Frank Li, arm-scmi, imx, linux-arm-kernel,
linux-kernel, Peng Fan
MISC protocol supports getting system log regarding system sleep latency,
wakeup interrupt and etc. Add the API for user to retrieve the information
from SM.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
.../firmware/arm_scmi/vendors/imx/imx-sm-misc.c | 83 ++++++++++++++++++++++
include/linux/scmi_imx_protocol.h | 2 +
2 files changed, 85 insertions(+)
diff --git a/drivers/firmware/arm_scmi/vendors/imx/imx-sm-misc.c b/drivers/firmware/arm_scmi/vendors/imx/imx-sm-misc.c
index 700a3f24f4efc153ca4a9ef1a9e50a7ece492a18..eae0b0562f6cf1931be612852ba2651f60820e6d 100644
--- a/drivers/firmware/arm_scmi/vendors/imx/imx-sm-misc.c
+++ b/drivers/firmware/arm_scmi/vendors/imx/imx-sm-misc.c
@@ -28,6 +28,7 @@ enum scmi_imx_misc_protocol_cmd {
SCMI_IMX_MISC_DISCOVER_BUILD_INFO = 0x6,
SCMI_IMX_MISC_CTRL_NOTIFY = 0x8,
SCMI_IMX_MISC_CFG_INFO_GET = 0xC,
+ SCMI_IMX_MISC_SYSLOG_GET = 0xD,
SCMI_IMX_MISC_BOARD_INFO = 0xE,
};
@@ -89,6 +90,19 @@ struct scmi_imx_misc_cfg_info_out {
u8 cfgname[MISC_MAX_CFGNAME];
};
+struct scmi_imx_misc_syslog_in {
+ __le32 flags;
+ __le32 index;
+};
+
+#define REMAINING(x) le32_get_bits((x), GENMASK(31, 20))
+#define RETURNED(x) le32_get_bits((x), GENMASK(11, 0))
+
+struct scmi_imx_misc_syslog_out {
+ __le32 numlogflags;
+ __le32 syslog[];
+};
+
static int scmi_imx_misc_attributes_get(const struct scmi_protocol_handle *ph,
struct scmi_imx_misc_info *mi)
{
@@ -371,10 +385,79 @@ static int scmi_imx_misc_cfg_info_get(const struct scmi_protocol_handle *ph)
return ret;
}
+struct scmi_imx_misc_syslog_ipriv {
+ u32 *array;
+ u16 *size;
+};
+
+static void iter_misc_syslog_prepare_message(void *message, u32 desc_index,
+ const void *priv)
+{
+ struct scmi_imx_misc_syslog_in *msg = message;
+
+ msg->flags = cpu_to_le32(0);
+ msg->index = cpu_to_le32(desc_index);
+}
+
+static int iter_misc_syslog_update_state(struct scmi_iterator_state *st,
+ const void *response, void *priv)
+{
+ const struct scmi_imx_misc_syslog_out *r = response;
+ struct scmi_imx_misc_syslog_ipriv *p = priv;
+
+ st->num_returned = RETURNED(r->numlogflags);
+ st->num_remaining = REMAINING(r->numlogflags);
+ *p->size = st->num_returned + st->num_remaining;
+
+ return 0;
+}
+
+static int
+iter_misc_syslog_process_response(const struct scmi_protocol_handle *ph,
+ const void *response,
+ struct scmi_iterator_state *st, void *priv)
+{
+ const struct scmi_imx_misc_syslog_out *r = response;
+ struct scmi_imx_misc_syslog_ipriv *p = priv;
+
+ p->array[st->desc_index + st->loop_idx] =
+ le32_to_cpu(r->syslog[st->loop_idx]);
+
+ return 0;
+}
+
+static int scmi_imx_misc_syslog_get(const struct scmi_protocol_handle *ph, u16 *size,
+ void *array)
+{
+ struct scmi_iterator_ops ops = {
+ .prepare_message = iter_misc_syslog_prepare_message,
+ .update_state = iter_misc_syslog_update_state,
+ .process_response = iter_misc_syslog_process_response,
+ };
+ struct scmi_imx_misc_syslog_ipriv ipriv = {
+ .array = array,
+ .size = size,
+ };
+ void *iter;
+
+ if (!array || !size || !*size)
+ return -EINVAL;
+
+ iter = ph->hops->iter_response_init(ph, &ops, *size, SCMI_IMX_MISC_SYSLOG_GET,
+ sizeof(struct scmi_imx_misc_syslog_in),
+ &ipriv);
+ if (IS_ERR(iter))
+ return PTR_ERR(iter);
+
+ /* If firmware return NOT SUPPORTED, propagate value to caller */
+ return ph->hops->iter_response_run(iter);
+}
+
static const struct scmi_imx_misc_proto_ops scmi_imx_misc_proto_ops = {
.misc_ctrl_set = scmi_imx_misc_ctrl_set,
.misc_ctrl_get = scmi_imx_misc_ctrl_get,
.misc_ctrl_req_notify = scmi_imx_misc_ctrl_notify,
+ .misc_syslog = scmi_imx_misc_syslog_get,
};
static int scmi_imx_misc_protocol_init(const struct scmi_protocol_handle *ph)
diff --git a/include/linux/scmi_imx_protocol.h b/include/linux/scmi_imx_protocol.h
index 27bd372cbfb142b6acb0b1cf4b82f061529d0d45..2407d7693b6ba1303e07629e45e2a7eaaa906fd3 100644
--- a/include/linux/scmi_imx_protocol.h
+++ b/include/linux/scmi_imx_protocol.h
@@ -59,6 +59,8 @@ struct scmi_imx_misc_proto_ops {
u32 *num, u32 *val);
int (*misc_ctrl_req_notify)(const struct scmi_protocol_handle *ph,
u32 ctrl_id, u32 evt_id, u32 flags);
+ int (*misc_syslog)(const struct scmi_protocol_handle *ph, u16 *size,
+ void *array);
};
/* See LMM_ATTRIBUTES in imx95.rst */
--
2.37.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH v2 2/2] firmware: imx: sm-misc: Dump syslog info
2025-10-11 11:33 [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump syslog Peng Fan
2025-10-11 11:33 ` [PATCH v2 1/2] firmware: arm_scmi: imx: Support getting syslog of MISC protocol Peng Fan
@ 2025-10-11 11:33 ` Peng Fan
2025-10-11 22:52 ` kernel test robot
2025-10-20 10:41 ` [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump syslog Peng Fan
2 siblings, 1 reply; 5+ messages in thread
From: Peng Fan @ 2025-10-11 11:33 UTC (permalink / raw)
To: Sudeep Holla, Cristian Marussi, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam
Cc: Dan Carpenter, Frank Li, arm-scmi, imx, linux-arm-kernel,
linux-kernel, Peng Fan
Add debugfs interface to read System Manager syslog info
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/firmware/imx/sm-misc.c | 38 +++++++++++++++++++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/drivers/firmware/imx/sm-misc.c b/drivers/firmware/imx/sm-misc.c
index fc3ee12c2be878e0285183e3381c9514a63d5142..d99b9420277ed11b297234acb62a6e695576c844 100644
--- a/drivers/firmware/imx/sm-misc.c
+++ b/drivers/firmware/imx/sm-misc.c
@@ -3,12 +3,16 @@
* Copyright 2024 NXP
*/
+#include <linux/debugfs.h>
+#include <linux/device/devres.h>
#include <linux/firmware/imx/sm.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/scmi_protocol.h>
#include <linux/scmi_imx_protocol.h>
+#include <linux/seq_file.h>
+#include <linux/sizes.h>
static const struct scmi_imx_misc_proto_ops *imx_misc_ctrl_ops;
static struct scmi_protocol_handle *ph;
@@ -44,10 +48,39 @@ static int scmi_imx_misc_ctrl_notifier(struct notifier_block *nb,
return 0;
}
+static int syslog_show(struct seq_file *file, void *priv)
+{
+ /* 4KB is large enough for syslog */
+ void *syslog __free(kfree) = kmalloc(SZ_4K, GFP_KERNEL);
+ struct device *dev = file->private;
+ /* syslog API use num words, not num bytes */
+ u16 size = SZ_4K / 4;
+ int ret;
+
+ if (!ph)
+ return -ENODEV;
+
+ ret = imx_misc_ctrl_ops->misc_syslog(ph, &size, syslog);
+ if (ret)
+ return ret;
+
+ seq_hex_dump(file, " ", DUMP_PREFIX_NONE, 16, sizeof(u32), syslog, size * 4, false);
+ seq_putc(file, '\n');
+
+ return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(syslog);
+
+static void scmi_imx_misc_put(void *p)
+{
+ debugfs_remove((struct dentry *)p);
+}
+
static int scmi_imx_misc_ctrl_probe(struct scmi_device *sdev)
{
const struct scmi_handle *handle = sdev->handle;
struct device_node *np = sdev->dev.of_node;
+ struct dentry *scmi_imx_dentry;
u32 src_id, flags;
int ret, i, num;
@@ -98,7 +131,10 @@ static int scmi_imx_misc_ctrl_probe(struct scmi_device *sdev)
}
}
- return 0;
+ scmi_imx_dentry = debugfs_create_dir("scmi_imx", NULL);
+ debugfs_create_file("syslog", 0444, scmi_imx_dentry, &sdev->dev, &syslog_fops);
+
+ return devm_add_action_or_reset(&sdev->dev, scmi_imx_misc_put, scmi_imx_dentry);
}
static const struct scmi_device_id scmi_id_table[] = {
--
2.37.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* RE: [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump syslog
2025-10-11 11:33 [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump syslog Peng Fan
2025-10-11 11:33 ` [PATCH v2 1/2] firmware: arm_scmi: imx: Support getting syslog of MISC protocol Peng Fan
2025-10-11 11:33 ` [PATCH v2 2/2] firmware: imx: sm-misc: Dump syslog info Peng Fan
@ 2025-10-20 10:41 ` Peng Fan
2 siblings, 0 replies; 5+ messages in thread
From: Peng Fan @ 2025-10-20 10:41 UTC (permalink / raw)
To: Sudeep Holla, Cristian Marussi, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam
Cc: Dan Carpenter, Frank Li, arm-scmi@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Hi Sudeep, Cristian and all.
> Subject: [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump
> syslog
There a minor build warning that I missed to remove an unused
variable in patch 2. I am thinking to post v3 with that warning fixed
in the end of this week or early next week.
Thanks,
Peng.
>
> This is the patch 5 and 6 from patchset [1] with switching to using raw
> dump, per check with Sudeep and NXP i.MX SM firmware owner
>
> System Manager firmware provides API to dump system log
> information.
> So add the interface for Linux to retrieve the information.
>
> In patch 1, I drop the two structures compared to patch 5 in [1]:
> struct scmi_imx_misc_sys_sleep_rec
> struct scmi_imx_misc_syslog
> No other changes in this patch.
>
> In patch 2, I switched to use debugfs to do raw dump the syslog,
> compared with patch 6 in [1].
>
> [1] https://lore.kernel.org/arm-
> scmi/PAXPR04MB845937237E3C1AF5A2ABA8FA880CA@PAXPR04MB
> 8459.eurprd04.prod.outlook.com/T/#m6ed303ac9c584c6e2ab39f893
> 59f3131b
> dfcc9e5
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> Changes in v2:
> - Rebased to next-20251010
> - Patch 2: Remove the IS_ERR check for debugfs_create_dir per Dan
> Carpenter
> Change 'return 0' to 'return devm_add_action_or_reset'
> Drop the size check
> Include 'linux/sizes.h' to avoid build break
> - Link to v1: https://lore.kernel.org/r/20250910-sm-syslog-v1-0-
> 5b36f8f21da6@nxp.com
>
> ---
> Peng Fan (2):
> firmware: arm_scmi: imx: Support getting syslog of MISC protocol
> firmware: imx: sm-misc: Dump syslog info
>
> .../firmware/arm_scmi/vendors/imx/imx-sm-misc.c | 83
> ++++++++++++++++++++++
> drivers/firmware/imx/sm-misc.c | 38 +++++++++-
> include/linux/scmi_imx_protocol.h | 2 +
> 3 files changed, 122 insertions(+), 1 deletion(-)
> ---
> base-commit: 2b763d4652393c90eaa771a5164502ec9dd965ae
> change-id: 20251011-sm-syslog-v2-1-51c0da2fe1d0
>
> Best regards,
> --
> Peng Fan <peng.fan@nxp.com>
^ permalink raw reply [flat|nested] 5+ messages in thread