imx.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump syslog
@ 2025-10-11 11:33 Peng Fan
  2025-10-11 11:33 ` [PATCH v2 1/2] firmware: arm_scmi: imx: Support getting syslog of MISC protocol Peng Fan
                   ` (2 more replies)
  0 siblings, 3 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

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@PAXPR04MB8459.eurprd04.prod.outlook.com/T/#m6ed303ac9c584c6e2ab39f89359f3131b
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

* [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 2/2] firmware: imx: sm-misc: Dump syslog info
  2025-10-11 11:33 ` [PATCH v2 2/2] firmware: imx: sm-misc: Dump syslog info Peng Fan
@ 2025-10-11 22:52   ` kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2025-10-11 22:52 UTC (permalink / raw)
  To: Peng Fan, Sudeep Holla, Cristian Marussi, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam
  Cc: llvm, oe-kbuild-all, Dan Carpenter, Frank Li, arm-scmi, imx,
	linux-arm-kernel, linux-kernel, Peng Fan

Hi Peng,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 2b763d4652393c90eaa771a5164502ec9dd965ae]

url:    https://github.com/intel-lab-lkp/linux/commits/Peng-Fan/firmware-arm_scmi-imx-Support-getting-syslog-of-MISC-protocol/20251011-193459
base:   2b763d4652393c90eaa771a5164502ec9dd965ae
patch link:    https://lore.kernel.org/r/20251011-sm-syslog-v2-1-v2-2-f43a3f6b32e4%40nxp.com
patch subject: [PATCH v2 2/2] firmware: imx: sm-misc: Dump syslog info
config: i386-buildonly-randconfig-001-20251012 (https://download.01.org/0day-ci/archive/20251012/202510120607.1JmlmOTI-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251012/202510120607.1JmlmOTI-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/202510120607.1JmlmOTI-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/firmware/imx/sm-misc.c:55:17: warning: unused variable 'dev' [-Wunused-variable]
      55 |         struct device *dev = file->private;
         |                        ^~~
   1 warning generated.


vim +/dev +55 drivers/firmware/imx/sm-misc.c

    50	
    51	static int syslog_show(struct seq_file *file, void *priv)
    52	{
    53		/* 4KB is large enough for syslog */
    54		void *syslog __free(kfree) = kmalloc(SZ_4K, GFP_KERNEL);
  > 55		struct device *dev = file->private;
    56		/* syslog API use num words, not num bytes */
    57		u16 size = SZ_4K / 4;
    58		int ret;
    59	
    60		if (!ph)
    61			return -ENODEV;
    62	
    63		ret = imx_misc_ctrl_ops->misc_syslog(ph, &size, syslog);
    64		if (ret)
    65			return ret;
    66	
    67		seq_hex_dump(file, " ", DUMP_PREFIX_NONE, 16, sizeof(u32), syslog, size * 4, false);
    68		seq_putc(file, '\n');
    69	
    70		return 0;
    71	}
    72	DEFINE_SHOW_ATTRIBUTE(syslog);
    73	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[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

end of thread, other threads:[~2025-10-20 10:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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-11 22:52   ` kernel test robot
2025-10-20 10:41 ` [PATCH v2 0/2] firmware: arm_scmi/imx: Support dump syslog Peng Fan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).