From: Peng Fan <peng.fan@oss.nxp.com>
To: Cristian Marussi <cristian.marussi@arm.com>
Cc: Peng Fan <peng.fan@nxp.com>, Sudeep Holla <sudeep.holla@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: Mon, 30 Jun 2025 11:09:40 +0800 [thread overview]
Message-ID: <20250630030940.GD13878@nxa18884-linux> (raw)
In-Reply-To: <aF6gIOrY5ODBumkf@pluto>
Hi Cristian,
On Fri, Jun 27, 2025 at 02:44:00PM +0100, Cristian Marussi wrote:
>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)
Right. I think set size to 0 does not make sense, so add a '(!size)' check
>
>...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;
Included here, but used in last patch in the patchset.
>> + 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,
Peng
>
>Thanks,
>Cristian
next prev parent reply other threads:[~2025-06-30 1:59 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
2025-06-30 3:09 ` Peng Fan [this message]
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=20250630030940.GD13878@nxa18884-linux \
--to=peng.fan@oss.nxp.com \
--cc=arm-scmi@vger.kernel.org \
--cc=cristian.marussi@arm.com \
--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.