[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250627-sm-misc-api-v1-v1-2-2b99481fe825@nxp.com>
Date: Fri, 27 Jun 2025 14:03:45 +0800
From: Peng Fan <peng.fan@....com>
To: Sudeep Holla <sudeep.holla@....com>,
Cristian Marussi <cristian.marussi@....com>,
Shawn Guo <shawnguo@...nel.org>, Sascha Hauer <s.hauer@...gutronix.de>,
Pengutronix Kernel Team <kernel@...gutronix.de>,
Fabio Estevam <festevam@...il.com>
Cc: arm-scmi@...r.kernel.org, imx@...ts.linux.dev,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
Peng Fan <peng.fan@....com>
Subject: [PATCH 2/7] firmware: arm_scmi: imx: Support discovering buildinfo
of MISC protocol
MISC protocol supports discovering the System Manager(SM) build
information including build commit, build time and etc. Add the API
for user to retrieve the information from SM.
Signed-off-by: Peng Fan <peng.fan@....com>
---
.../firmware/arm_scmi/vendors/imx/imx-sm-misc.c | 35 ++++++++++++++++++++++
include/linux/scmi_imx_protocol.h | 12 ++++++++
2 files changed, 47 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 a8915d3b4df518719d56bfff38922625ad9b70f6..1b24d070c6f4856b92f515fcdba5836fd6498ce6 100644
--- a/drivers/firmware/arm_scmi/vendors/imx/imx-sm-misc.c
+++ b/drivers/firmware/arm_scmi/vendors/imx/imx-sm-misc.c
@@ -25,6 +25,7 @@
enum scmi_imx_misc_protocol_cmd {
SCMI_IMX_MISC_CTRL_SET = 0x3,
SCMI_IMX_MISC_CTRL_GET = 0x4,
+ SCMI_IMX_MISC_DISCOVER_BUILDINFO = 0x6,
SCMI_IMX_MISC_CTRL_NOTIFY = 0x8,
};
@@ -65,6 +66,13 @@ struct scmi_imx_misc_ctrl_get_out {
__le32 val[];
};
+struct scmi_imx_misc_buildinfo_out {
+ __le32 buildnum;
+ __le32 buildcommit;
+ u8 builddate[MISC_MAX_BUILDDATE];
+ u8 buildtime[MISC_MAX_BUILDTIME];
+};
+
static int scmi_imx_misc_attributes_get(const struct scmi_protocol_handle *ph,
struct scmi_imx_misc_info *mi)
{
@@ -272,10 +280,37 @@ static int scmi_imx_misc_ctrl_set(const struct scmi_protocol_handle *ph,
return ret;
}
+static int scmi_imx_discover_build_info(const struct scmi_protocol_handle *ph,
+ struct scmi_imx_misc_system_info *info)
+{
+ struct scmi_imx_misc_buildinfo_out *out;
+ struct scmi_xfer *t;
+ int ret;
+
+ ret = ph->xops->xfer_get_init(ph, SCMI_IMX_MISC_DISCOVER_BUILDINFO, 0,
+ sizeof(*out), &t);
+ if (ret)
+ return ret;
+
+ ret = ph->xops->do_xfer(ph, t);
+ if (!ret) {
+ out = t->rx.buf;
+ info->buildnum = le32_to_cpu(out->buildnum);
+ info->buildcommit = le32_to_cpu(out->buildcommit);
+ strscpy(info->date, out->builddate, MISC_MAX_BUILDDATE);
+ strscpy(info->time, out->buildtime, MISC_MAX_BUILDTIME);
+ }
+
+ ph->xops->xfer_put(ph, t);
+
+ return ret;
+}
+
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_discover_build_info = scmi_imx_discover_build_info,
};
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..826402dfe6f4d3b9e6d2e93868d6699f989e9bcc 100644
--- a/include/linux/scmi_imx_protocol.h
+++ b/include/linux/scmi_imx_protocol.h
@@ -52,6 +52,16 @@ struct scmi_imx_misc_ctrl_notify_report {
unsigned int flags;
};
+#define MISC_MAX_BUILDDATE 16
+#define MISC_MAX_BUILDTIME 16
+
+struct scmi_imx_misc_system_info {
+ u32 buildnum;
+ u32 buildcommit;
+ u8 date[MISC_MAX_BUILDDATE];
+ u8 time[MISC_MAX_BUILDTIME];
+};
+
struct scmi_imx_misc_proto_ops {
int (*misc_ctrl_set)(const struct scmi_protocol_handle *ph, u32 id,
u32 num, u32 *val);
@@ -59,6 +69,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_discover_build_info)(const struct scmi_protocol_handle *ph,
+ struct scmi_imx_misc_system_info *info);
};
/* See LMM_ATTRIBUTES in imx95.rst */
--
2.37.1
Powered by blists - more mailing lists