[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250627-sm-misc-api-v1-v1-3-2b99481fe825@nxp.com>
Date: Fri, 27 Jun 2025 14:03:46 +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 3/7] firmware: arm_scmi: imx: Support getting cfg info of
MISC protocol
MISC protocol supports getting the System Manager(SM) mode selection
and configuration name. 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 | 30 ++++++++++++++++++++++
include/linux/scmi_imx_protocol.h | 5 ++++
2 files changed, 35 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 1b24d070c6f4856b92f515fcdba5836fd6498ce6..8ce4bf92e6535af2f30d72a34717678613b35049 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_CFG_INFO = 0xC,
SCMI_IMX_MISC_CTRL_NOTIFY = 0x8,
};
@@ -73,6 +74,11 @@ struct scmi_imx_misc_buildinfo_out {
u8 buildtime[MISC_MAX_BUILDTIME];
};
+struct scmi_imx_misc_cfg_info_out {
+ __le32 msel;
+ u8 cfgname[MISC_MAX_CFGNAME];
+};
+
static int scmi_imx_misc_attributes_get(const struct scmi_protocol_handle *ph,
struct scmi_imx_misc_info *mi)
{
@@ -306,7 +312,31 @@ static int scmi_imx_discover_build_info(const struct scmi_protocol_handle *ph,
return ret;
}
+static int scmi_imx_misc_cfg_info(const struct scmi_protocol_handle *ph,
+ struct scmi_imx_misc_system_info *info)
+{
+ struct scmi_imx_misc_cfg_info_out *out;
+ struct scmi_xfer *t;
+ int ret;
+
+ ret = ph->xops->xfer_get_init(ph, SCMI_IMX_MISC_CFG_INFO, 0, sizeof(*out), &t);
+ if (ret)
+ return ret;
+
+ ret = ph->xops->do_xfer(ph, t);
+ if (!ret) {
+ out = t->rx.buf;
+ info->msel = le32_to_cpu(out->msel);
+ strscpy(info->cfgname, out->cfgname, MISC_MAX_CFGNAME);
+ }
+
+ 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,
diff --git a/include/linux/scmi_imx_protocol.h b/include/linux/scmi_imx_protocol.h
index 826402dfe6f4d3b9e6d2e93868d6699f989e9bcc..bb0c35b5d6705acddd6c83c31474482a2667b418 100644
--- a/include/linux/scmi_imx_protocol.h
+++ b/include/linux/scmi_imx_protocol.h
@@ -54,15 +54,20 @@ struct scmi_imx_misc_ctrl_notify_report {
#define MISC_MAX_BUILDDATE 16
#define MISC_MAX_BUILDTIME 16
+#define MISC_MAX_CFGNAME 16
struct scmi_imx_misc_system_info {
u32 buildnum;
u32 buildcommit;
u8 date[MISC_MAX_BUILDDATE];
u8 time[MISC_MAX_BUILDTIME];
+ u32 msel;
+ u8 cfgname[MISC_MAX_CFGNAME];
};
struct scmi_imx_misc_proto_ops {
+ int (*misc_cfg_info)(const struct scmi_protocol_handle *ph,
+ struct scmi_imx_misc_system_info *info);
int (*misc_ctrl_set)(const struct scmi_protocol_handle *ph, u32 id,
u32 num, u32 *val);
int (*misc_ctrl_get)(const struct scmi_protocol_handle *ph, u32 id,
--
2.37.1
Powered by blists - more mailing lists