[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250627-sm-misc-api-v1-v1-4-2b99481fe825@nxp.com>
Date: Fri, 27 Jun 2025 14:03:47 +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 4/7] firmware: arm_scmi: imx: Support getting silicon info
of MISC protocol
MISC protocol supports getting the silicon information including revision
number, part number 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 | 34 ++++++++++++++++++++++
include/linux/scmi_imx_protocol.h | 8 +++++
2 files changed, 42 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 8ce4bf92e6535af2f30d72a34717678613b35049..d5b24bc4d4ca6c19f4cddfaea6e9d9b32a4c92f7 100644
--- a/drivers/firmware/arm_scmi/vendors/imx/imx-sm-misc.c
+++ b/drivers/firmware/arm_scmi/vendors/imx/imx-sm-misc.c
@@ -26,6 +26,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_SI_INFO = 0xB,
SCMI_IMX_MISC_CFG_INFO = 0xC,
SCMI_IMX_MISC_CTRL_NOTIFY = 0x8,
};
@@ -79,6 +80,13 @@ struct scmi_imx_misc_cfg_info_out {
u8 cfgname[MISC_MAX_CFGNAME];
};
+struct scmi_imx_misc_si_info_out {
+ __le32 deviceid;
+ __le32 sirev;
+ __le32 partnum;
+ u8 siname[MISC_MAX_SINAME];
+};
+
static int scmi_imx_misc_attributes_get(const struct scmi_protocol_handle *ph,
struct scmi_imx_misc_info *mi)
{
@@ -335,12 +343,38 @@ static int scmi_imx_misc_cfg_info(const struct scmi_protocol_handle *ph,
return ret;
}
+static int scmi_imx_misc_silicon_info(const struct scmi_protocol_handle *ph,
+ struct scmi_imx_misc_system_info *info)
+{
+ struct scmi_imx_misc_si_info_out *out;
+ struct scmi_xfer *t;
+ int ret;
+
+ ret = ph->xops->xfer_get_init(ph, SCMI_IMX_MISC_SI_INFO, 0, sizeof(*out), &t);
+ if (ret)
+ return ret;
+
+ ret = ph->xops->do_xfer(ph, t);
+ if (!ret) {
+ out = t->rx.buf;
+ info->deviceid = le32_to_cpu(out->deviceid);
+ info->sirev = le32_to_cpu(out->sirev);
+ info->partnum = le32_to_cpu(out->partnum);
+ strscpy(info->siname, out->siname, MISC_MAX_SINAME);
+ }
+
+ ph->xops->xfer_put(ph, t);
+
+ return ret;
+}
+
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,
.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,
+ .misc_silicon_info = scmi_imx_misc_silicon_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 bb0c35b5d6705acddd6c83c31474482a2667b418..0e639dfb5d16e281e2ccf006a63694b316c431f4 100644
--- a/include/linux/scmi_imx_protocol.h
+++ b/include/linux/scmi_imx_protocol.h
@@ -55,6 +55,7 @@ struct scmi_imx_misc_ctrl_notify_report {
#define MISC_MAX_BUILDDATE 16
#define MISC_MAX_BUILDTIME 16
#define MISC_MAX_CFGNAME 16
+#define MISC_MAX_SINAME 16
struct scmi_imx_misc_system_info {
u32 buildnum;
@@ -63,6 +64,11 @@ struct scmi_imx_misc_system_info {
u8 time[MISC_MAX_BUILDTIME];
u32 msel;
u8 cfgname[MISC_MAX_CFGNAME];
+ /* silicon */
+ u32 deviceid;
+ u32 sirev;
+ u32 partnum;
+ u8 siname[MISC_MAX_SINAME];
};
struct scmi_imx_misc_proto_ops {
@@ -76,6 +82,8 @@ struct scmi_imx_misc_proto_ops {
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);
+ int (*misc_silicon_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