]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
firmware: scmi: support protocols on sandbox only if enabled
authorAKASHI Takahiro <takahiro.akashi@linaro.org>
Tue, 14 Nov 2023 02:14:25 +0000 (11:14 +0900)
committerTom Rini <trini@konsulko.com>
Wed, 29 Nov 2023 03:31:03 +0000 (22:31 -0500)
This change will be useful when we manually test SCMI on sandbox
by enabling/disabling a specific SCMI protocol.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/firmware/scmi/sandbox-scmi_agent.c
drivers/firmware/scmi/sandbox-scmi_devices.c

index d131809626629bf4e140e273b790c3ae7b2393f6..cc9011c7312f0e53878aebb9d127d9d449464243 100644 (file)
@@ -66,10 +66,10 @@ struct scmi_channel {
 };
 
 static u8 protocols[] = {
-       SCMI_PROTOCOL_ID_POWER_DOMAIN,
-       SCMI_PROTOCOL_ID_CLOCK,
-       SCMI_PROTOCOL_ID_RESET_DOMAIN,
-       SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN,
+       CONFIG_IS_ENABLED(SCMI_POWER_DOMAIN, (SCMI_PROTOCOL_ID_POWER_DOMAIN,))
+       CONFIG_IS_ENABLED(CLK_SCMI, (SCMI_PROTOCOL_ID_CLOCK,))
+       CONFIG_IS_ENABLED(RESET_SCMI, (SCMI_PROTOCOL_ID_RESET_DOMAIN,))
+       CONFIG_IS_ENABLED(DM_REGULATOR_SCMI, (SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN,))
 };
 
 #define NUM_PROTOCOLS ARRAY_SIZE(protocols)
@@ -1124,6 +1124,13 @@ unsigned int sandbox_scmi_channel_id(struct udevice *dev)
        return chan->channel_id;
 }
 
+static int sandbox_proto_not_supported(struct scmi_msg *msg)
+{
+       *(u32 *)msg->out_msg = SCMI_NOT_SUPPORTED;
+
+       return 0;
+}
+
 static int sandbox_scmi_test_process_msg(struct udevice *dev,
                                         struct scmi_channel *channel,
                                         struct scmi_msg *msg)
@@ -1160,6 +1167,9 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
                }
                break;
        case SCMI_PROTOCOL_ID_POWER_DOMAIN:
+               if (!CONFIG_IS_ENABLED(SCMI_POWER_DOMAIN))
+                       return sandbox_proto_not_supported(msg);
+
                switch (msg->message_id) {
                case SCMI_PROTOCOL_VERSION:
                        return sandbox_scmi_pwd_protocol_version(dev, msg);
@@ -1180,6 +1190,9 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
                }
                break;
        case SCMI_PROTOCOL_ID_CLOCK:
+               if (!CONFIG_IS_ENABLED(CLK_SCMI))
+                       return sandbox_proto_not_supported(msg);
+
                switch (msg->message_id) {
                case SCMI_PROTOCOL_ATTRIBUTES:
                        return sandbox_scmi_clock_protocol_attribs(dev, msg);
@@ -1196,6 +1209,9 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
                }
                break;
        case SCMI_PROTOCOL_ID_RESET_DOMAIN:
+               if (!CONFIG_IS_ENABLED(RESET_SCMI))
+                       return sandbox_proto_not_supported(msg);
+
                switch (msg->message_id) {
                case SCMI_RESET_DOMAIN_ATTRIBUTES:
                        return sandbox_scmi_rd_attribs(dev, msg);
@@ -1206,6 +1222,9 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
                }
                break;
        case SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN:
+               if (!CONFIG_IS_ENABLED(DM_REGULATOR_SCMI))
+                       return sandbox_proto_not_supported(msg);
+
                switch (msg->message_id) {
                case SCMI_VOLTAGE_DOMAIN_ATTRIBUTES:
                        return sandbox_scmi_voltd_attribs(dev, msg);
@@ -1224,8 +1243,7 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
        case SCMI_PROTOCOL_ID_SYSTEM:
        case SCMI_PROTOCOL_ID_PERF:
        case SCMI_PROTOCOL_ID_SENSOR:
-               *(u32 *)msg->out_msg = SCMI_NOT_SUPPORTED;
-               return 0;
+               return sandbox_proto_not_supported(msg);
        default:
                break;
        }
index facb5b06ffb559da65eedd86e6037b0f4cd93c23..603e2bb40aff1a8aa63005e8df37dcd903244b49 100644 (file)
@@ -62,12 +62,13 @@ static int sandbox_scmi_devices_remove(struct udevice *dev)
        if (!devices)
                return 0;
 
-       for (n = 0; n < SCMI_TEST_DEVICES_RD_COUNT; n++) {
-               int ret2 = reset_free(devices->reset + n);
+       if (CONFIG_IS_ENABLED(RESET_SCMI))
+               for (n = 0; n < SCMI_TEST_DEVICES_RD_COUNT; n++) {
+                       int ret2 = reset_free(devices->reset + n);
 
-               if (ret2 && !ret)
-                       ret = ret2;
-       }
+                       if (ret2 && !ret)
+                               ret = ret2;
+               }
 
        return ret;
 }
@@ -89,39 +90,53 @@ static int sandbox_scmi_devices_probe(struct udevice *dev)
                .regul_count = SCMI_TEST_DEVICES_VOLTD_COUNT,
        };
 
-       ret = power_domain_get_by_index(dev, priv->devices.pwdom, 0);
-       if (ret) {
-               dev_err(dev, "%s: Failed on power domain\n", __func__);
-               return ret;
-       }
-
-       for (n = 0; n < SCMI_TEST_DEVICES_CLK_COUNT; n++) {
-               ret = clk_get_by_index(dev, n, priv->devices.clk + n);
+       if (CONFIG_IS_ENABLED(SCMI_POWER_DOMAIN)) {
+               ret = power_domain_get_by_index(dev, priv->devices.pwdom, 0);
                if (ret) {
-                       dev_err(dev, "%s: Failed on clk %zu\n", __func__, n);
+                       dev_err(dev, "%s: Failed on power domain\n", __func__);
                        return ret;
                }
        }
 
-       for (n = 0; n < SCMI_TEST_DEVICES_RD_COUNT; n++) {
-               ret = reset_get_by_index(dev, n, priv->devices.reset + n);
-               if (ret) {
-                       dev_err(dev, "%s: Failed on reset %zu\n", __func__, n);
-                       goto err_reset;
+       if (CONFIG_IS_ENABLED(CLK_SCMI)) {
+               for (n = 0; n < SCMI_TEST_DEVICES_CLK_COUNT; n++) {
+                       ret = clk_get_by_index(dev, n, priv->devices.clk + n);
+                       if (ret) {
+                               dev_err(dev, "%s: Failed on clk %zu\n",
+                                       __func__, n);
+                               return ret;
+                       }
                }
        }
 
-       for (n = 0; n < SCMI_TEST_DEVICES_VOLTD_COUNT; n++) {
-               char name[32];
-
-               ret = snprintf(name, sizeof(name), "regul%zu-supply", n);
-               assert(ret >= 0 && ret < sizeof(name));
+       if (CONFIG_IS_ENABLED(RESET_SCMI)) {
+               for (n = 0; n < SCMI_TEST_DEVICES_RD_COUNT; n++) {
+                       ret = reset_get_by_index(dev, n,
+                                                priv->devices.reset + n);
+                       if (ret) {
+                               dev_err(dev, "%s: Failed on reset %zu\n",
+                                       __func__, n);
+                               goto err_reset;
+                       }
+               }
+       }
 
-               ret = device_get_supply_regulator(dev, name,
-                                                 priv->devices.regul + n);
-               if (ret) {
-                       dev_err(dev, "%s: Failed on voltd %zu\n", __func__, n);
-                       goto err_regul;
+       if (CONFIG_IS_ENABLED(DM_REGULATOR_SCMI)) {
+               for (n = 0; n < SCMI_TEST_DEVICES_VOLTD_COUNT; n++) {
+                       char name[32];
+
+                       ret = snprintf(name, sizeof(name), "regul%zu-supply",
+                                      n);
+                       assert(ret >= 0 && ret < sizeof(name));
+
+                       ret = device_get_supply_regulator(dev, name,
+                                                         priv->devices.regul
+                                                               + n);
+                       if (ret) {
+                               dev_err(dev, "%s: Failed on voltd %zu\n",
+                                       __func__, n);
+                               goto err_regul;
+                       }
                }
        }
 
@@ -130,8 +145,9 @@ static int sandbox_scmi_devices_probe(struct udevice *dev)
 err_regul:
        n = SCMI_TEST_DEVICES_RD_COUNT;
 err_reset:
-       for (; n > 0; n--)
-               reset_free(priv->devices.reset + n - 1);
+       if (CONFIG_IS_ENABLED(RESET_SCMI))
+               for (; n > 0; n--)
+                       reset_free(priv->devices.reset + n - 1);
 
        return ret;
 }