All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cristian Marussi <cristian.marussi@arm.com>
To: Peng Fan <peng.fan@nxp.com>
Cc: Sudeep Holla <sudeep.holla@arm.com>,
	Cristian Marussi <cristian.marussi@arm.com>,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	Fabio Estevam <festevam@gmail.com>,
	arm-scmi@vger.kernel.org, imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/7] firmware: arm_scmi: imx: Support getting syslog of MISC protocol
Date: Fri, 27 Jun 2025 14:44:00 +0100	[thread overview]
Message-ID: <aF6gIOrY5ODBumkf@pluto> (raw)
In-Reply-To: <20250627-sm-misc-api-v1-v1-5-2b99481fe825@nxp.com>

On Fri, Jun 27, 2025 at 02:03:48PM +0800, Peng Fan wrote:
> 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    | 78 ++++++++++++++++++++++
>  include/linux/scmi_imx_protocol.h                  | 19 ++++++
>  2 files changed, 97 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 d5b24bc4d4ca6c19f4cddfaea6e9d9b32a4c92f7..1a6d75357b76ce6bb7d06461999b368c27f1fa43 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_BUILDINFO = 0x6,
>  	SCMI_IMX_MISC_SI_INFO = 0xB,
>  	SCMI_IMX_MISC_CFG_INFO = 0xC,
> +	SCMI_IMX_MISC_SYSLOG = 0xD,
>  	SCMI_IMX_MISC_CTRL_NOTIFY = 0x8,
>  };
>  
> @@ -87,6 +88,19 @@ struct scmi_imx_misc_si_info_out {
>  	u8 siname[MISC_MAX_SINAME];
>  };
>  
> +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)
>  {
> @@ -368,6 +382,69 @@ static int scmi_imx_misc_silicon_info(const struct scmi_protocol_handle *ph,
>  	return ret;
>  }
>  
> +struct scmi_imx_misc_syslog_ipriv {
> +	u32 *array;
> +};
> +
> +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;
> +
> +	st->num_returned = RETURNED(r->numlogflags);
> +	st->num_remaining = REMAINING(r->numlogflags);
> +
> +	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(const struct scmi_protocol_handle *ph, u16 size,
> +				void *array)
> +{

...so this size...

> +	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,
> +	};
> +	void *iter;
> +
> +	if (!array || !size)
> +		return -EINVAL;
> +

...which cannot be zero and is passed down to the iterator as max_resources
is meant to repreent also the length of tthe array passed here as an
argument and filled-in by the iterators ?

...and so basically array bounds-checking is enforced by the iterators
core code, because no matter what, it is always enforced that

	(returned + remaining <= max_resources (size)

...I am fine with this, I am just trying to understand and see if I can
find a mishap :D

> +	iter = ph->hops->iter_response_init(ph, &ops, size, SCMI_IMX_MISC_SYSLOG,
> +					    sizeof(struct scmi_imx_misc_syslog_in),
> +					    &ipriv);
> +	if (IS_ERR(iter))
> +		return PTR_ERR(iter);
> +
> +	return ph->hops->iter_response_run(iter);
> +}
> +
>  static const struct scmi_imx_misc_proto_ops scmi_imx_misc_proto_ops = {
>  	.misc_cfg_info = scmi_imx_misc_cfg_info,
>  	.misc_ctrl_set = scmi_imx_misc_ctrl_set,
> @@ -375,6 +452,7 @@ static const struct scmi_imx_misc_proto_ops scmi_imx_misc_proto_ops = {
>  	.misc_ctrl_req_notify = scmi_imx_misc_ctrl_notify,
>  	.misc_discover_build_info = scmi_imx_discover_build_info,
>  	.misc_silicon_info = scmi_imx_misc_silicon_info,
> +	.misc_syslog = scmi_imx_misc_syslog,
>  };
>  
>  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 0e639dfb5d16e281e2ccf006a63694b316c431f4..ff34d974046aa982fa9f5d46fc673412e01a532d 100644
> --- a/include/linux/scmi_imx_protocol.h
> +++ b/include/linux/scmi_imx_protocol.h
> @@ -71,6 +71,23 @@ struct scmi_imx_misc_system_info {
>  	u8 siname[MISC_MAX_SINAME];
>  };
>  
> +struct scmi_imx_misc_sys_sleep_rec {
> +	u32 sleepentryusec;
> +	u32 sleepexitusec;
> +	u32 sleepcnt;
> +	u32 wakesource;
> +	u32 mixpwrstat;
> +	u32 mempwrstat;
> +	u32 pllpwrstat;
> +	u32 syssleepmode;
> +	u32 syssleepflags;
> +};

So where is this used ? later in the series ?
> +
> +struct scmi_imx_misc_syslog {
> +	struct scmi_imx_misc_sys_sleep_rec syssleeprecord;
> +	uint32_t deverrlog;
> +};
> +
>  struct scmi_imx_misc_proto_ops {
>  	int (*misc_cfg_info)(const struct scmi_protocol_handle *ph,
>  			     struct scmi_imx_misc_system_info *info);
> @@ -84,6 +101,8 @@ struct scmi_imx_misc_proto_ops {
>  					struct scmi_imx_misc_system_info *info);
>  	int (*misc_silicon_info)(const struct scmi_protocol_handle *ph,
>  				 struct scmi_imx_misc_system_info *info);
> +	int (*misc_syslog)(const struct scmi_protocol_handle *ph, u16 size,
> +			  void *array);
>  };
> 

Thanks,
Cristian

  reply	other threads:[~2025-06-27 13:44 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-27  6:03 [PATCH 0/7] firmware: arm_scmi: imx: Dump syslog and system_info Peng Fan
2025-06-27  6:03 ` [PATCH 1/7] firmware: arm_scmi: imx: Add documentation for MISC_BOARD_INFO Peng Fan
2025-06-27 12:46   ` Cristian Marussi
2025-06-30  2:45     ` Peng Fan
2025-07-01 15:10       ` Peng Fan
2025-07-02 15:21   ` Sudeep Holla
2025-07-04  4:53     ` Peng Fan
2025-06-27  6:03 ` [PATCH 2/7] firmware: arm_scmi: imx: Support discovering buildinfo of MISC protocol Peng Fan
2025-06-27 12:48   ` Cristian Marussi
2025-07-02 15:21   ` Sudeep Holla
2025-07-04  5:12     ` Peng Fan
2025-07-04  8:59       ` Sudeep Holla
2025-07-08 16:10         ` Peng Fan
2025-07-08 15:38           ` Sudeep Holla
2025-06-27  6:03 ` [PATCH 3/7] firmware: arm_scmi: imx: Support getting cfg info " Peng Fan
2025-06-27 13:06   ` Cristian Marussi
2025-07-02 15:21   ` Sudeep Holla
2025-07-04 10:07     ` Peng Fan
2025-07-04  9:02       ` Sudeep Holla
2025-07-04 10:39         ` Peng Fan
2025-07-04 10:51           ` Sudeep Holla
2025-06-27  6:03 ` [PATCH 4/7] firmware: arm_scmi: imx: Support getting silicon " Peng Fan
2025-06-27 13:11   ` Cristian Marussi
2025-07-02 15:22   ` Sudeep Holla
2025-07-04 10:20     ` Peng Fan
2025-07-04  9:32       ` Sudeep Holla
2025-06-27  6:03 ` [PATCH 5/7] firmware: arm_scmi: imx: Support getting syslog " Peng Fan
2025-06-27 13:44   ` Cristian Marussi [this message]
2025-06-30  3:09     ` Peng Fan
2025-07-02 15:22   ` Sudeep Holla
2025-07-04 10:23     ` Peng Fan
2025-07-04  9:44       ` Sudeep Holla
2025-06-27  6:03 ` [PATCH 6/7] firmware: arm_scmi: imx: Support getting board info " Peng Fan
2025-06-27 13:45   ` Cristian Marussi
2025-06-30  2:50     ` Peng Fan
2025-06-27  6:03 ` [PATCH 7/7] firmware: imx: sm-misc: Dump syslog and system info Peng Fan
2025-06-27 14:11   ` Cristian Marussi
2025-06-30  3:34     ` Peng Fan
2025-06-27 18:49   ` kernel test robot
2025-06-28 14:28   ` kernel test robot
2025-07-02 15:22   ` Sudeep Holla
2025-07-04 10:28     ` Peng Fan
2025-07-04  9:45       ` Sudeep Holla
2025-07-04 10:44         ` Peng Fan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aF6gIOrY5ODBumkf@pluto \
    --to=cristian.marussi@arm.com \
    --cc=arm-scmi@vger.kernel.org \
    --cc=festevam@gmail.com \
    --cc=imx@lists.linux.dev \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peng.fan@nxp.com \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=sudeep.holla@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.