summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Fan <[email protected]>2025-10-17 17:32:32 +0800
committerTom Rini <[email protected]>2025-10-24 13:47:50 -0600
commit7830ccc77a13dd2a9880a942734bb5687416c4d8 (patch)
treedebdd9de45b81fe9278565516d6020f9d490a6e4
parentd1f1c98d8468f5f76c2c8c3acb31f83d736d34ce (diff)
firmware: scmi: Support probe vendor ID 0x80 and 0x82
Preparing to add i.MX LMM and CPU protocol driver, support probe SCMI vendor ID 0x80(i.MX SCMI LMM ID) and 0x82(i.MX SCMI CPU ID). And use Kconfig option to support conditional compilation. Signed-off-by: Peng Fan <[email protected]> Reviewed-by: Alice Guo <[email protected]>
-rw-r--r--drivers/firmware/scmi/Kconfig6
-rw-r--r--drivers/firmware/scmi/scmi_agent-uclass.c20
-rw-r--r--include/scmi_agent-uclass.h6
-rw-r--r--include/scmi_protocols.h2
4 files changed, 34 insertions, 0 deletions
diff --git a/drivers/firmware/scmi/Kconfig b/drivers/firmware/scmi/Kconfig
index 8cf85f0d7a1..dca8fed9bd2 100644
--- a/drivers/firmware/scmi/Kconfig
+++ b/drivers/firmware/scmi/Kconfig
@@ -41,3 +41,9 @@ config SCMI_AGENT_OPTEE
help
Enable the SCMI communication channel based on OP-TEE transport
for compatible "linaro,scmi-optee".
+
+config SCMI_ID_VENDOR_80
+ bool
+
+config SCMI_ID_VENDOR_82
+ bool
diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c b/drivers/firmware/scmi/scmi_agent-uclass.c
index f48c2fdb27b..ad825d66da2 100644
--- a/drivers/firmware/scmi/scmi_agent-uclass.c
+++ b/drivers/firmware/scmi/scmi_agent-uclass.c
@@ -111,6 +111,16 @@ struct udevice *scmi_get_protocol(struct udevice *dev,
proto = priv->pinctrl_dev;
break;
#endif
+#if IS_ENABLED(CONFIG_SCMI_ID_VENDOR_80)
+ case SCMI_PROTOCOL_ID_VENDOR_80:
+ proto = priv->vendor_dev_80;
+ break;
+#endif
+#if IS_ENABLED(CONFIG_SCMI_ID_VENDOR_82)
+ case SCMI_PROTOCOL_ID_VENDOR_82:
+ proto = priv->vendor_dev_82;
+ break;
+#endif
default:
dev_err(dev, "Protocol not supported\n");
proto = NULL;
@@ -174,6 +184,16 @@ static int scmi_add_protocol(struct udevice *dev,
priv->pinctrl_dev = proto;
break;
#endif
+#if IS_ENABLED(CONFIG_SCMI_ID_VENDOR_80)
+ case SCMI_PROTOCOL_ID_VENDOR_80:
+ priv->vendor_dev_80 = proto;
+ break;
+#endif
+#if IS_ENABLED(CONFIG_SCMI_ID_VENDOR_82)
+ case SCMI_PROTOCOL_ID_VENDOR_82:
+ priv->vendor_dev_82 = proto;
+ break;
+#endif
default:
dev_err(dev, "Protocol not supported\n");
return -EPROTO;
diff --git a/include/scmi_agent-uclass.h b/include/scmi_agent-uclass.h
index ccedd42f367..9b36d3ae67b 100644
--- a/include/scmi_agent-uclass.h
+++ b/include/scmi_agent-uclass.h
@@ -55,6 +55,12 @@ struct scmi_agent_priv {
#if IS_ENABLED(CONFIG_PINCTRL_IMX_SCMI)
struct udevice *pinctrl_dev;
#endif
+#if IS_ENABLED(CONFIG_SCMI_ID_VENDOR_80)
+ struct udevice *vendor_dev_80;
+#endif
+#if IS_ENABLED(CONFIG_SCMI_ID_VENDOR_82)
+ struct udevice *vendor_dev_82;
+#endif
};
static inline u32 scmi_version(struct udevice *dev)
diff --git a/include/scmi_protocols.h b/include/scmi_protocols.h
index 5c9516d5595..bb74a57f79a 100644
--- a/include/scmi_protocols.h
+++ b/include/scmi_protocols.h
@@ -25,6 +25,8 @@ enum scmi_std_protocol {
SCMI_PROTOCOL_ID_RESET_DOMAIN = 0x16,
SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN = 0x17,
SCMI_PROTOCOL_ID_PINCTRL = 0x19,
+ SCMI_PROTOCOL_ID_VENDOR_80 = 0x80,
+ SCMI_PROTOCOL_ID_VENDOR_82 = 0x82,
};
enum scmi_status_code {