From 58543c0d410716d3871c490050819ef7265b7597 Mon Sep 17 00:00:00 2001
From: AKASHI Takahiro <takahiro.akashi@linaro.org>
Date: Wed, 11 Oct 2023 19:07:01 +0900
Subject: [PATCH] firmware: scmi: add a version check against base protocol

In SCMI base protocol version 2 (0x20000), new interfaces,
BASE_SET_DEVICE_PERMISSIONS/BASE_SET_PROTOCOL_PERMISSIONS/
BASE_RESET_AGENT_CONFIGURATION, were added. Moreover, the api of
BASE_DISCOVER_AGENT was changed to support self-agent discovery.

So the driver expects SCMI firmware support version 2 of base protocol.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
---
 drivers/firmware/scmi/base.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/firmware/scmi/base.c b/drivers/firmware/scmi/base.c
index ee84e26194..1d41a8a98f 100644
--- a/drivers/firmware/scmi/base.c
+++ b/drivers/firmware/scmi/base.c
@@ -481,6 +481,7 @@ static int scmi_base_reset_agent_configuration_int(struct udevice *dev,
  */
 static int scmi_base_probe(struct udevice *dev)
 {
+	u32 version;
 	int ret;
 
 	ret = devm_scmi_of_get_channel(dev);
@@ -488,6 +489,13 @@ static int scmi_base_probe(struct udevice *dev)
 		dev_err(dev, "get_channel failed\n");
 		return ret;
 	}
+	ret = scmi_base_protocol_version_int(dev, &version);
+	if (ret) {
+		dev_err(dev, "getting protocol version failed\n");
+		return ret;
+	}
+	if (version < SCMI_BASE_PROTOCOL_VERSION)
+		return -EINVAL;
 
 	return ret;
 }
-- 
2.39.5