aboutsummaryrefslogtreecommitdiff
path: root/test/dm/scmi.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2023-11-10 12:01:50 -0500
committerTom Rini <trini@konsulko.com>2023-11-10 12:01:50 -0500
commite7d3ae8f173028c31468ea3b3dd746c03f7a40af (patch)
tree841273f18d31769bdbda8f6730e0e8a22fcdaea8 /test/dm/scmi.c
parent277ad71dd1bd83c51d6b626212aa7936325fe88b (diff)
parenteed03ed5311eb624e77577b8b5c9e95c922d7469 (diff)
downloadu-boot-WIP/10Nov2023-next.zip
u-boot-WIP/10Nov2023-next.tar.gz
u-boot-WIP/10Nov2023-next.tar.bz2
Merge patch series "cmd: add scmi command"WIP/10Nov2023-next
To quote the author: "Scmi" command will be re-introduced per Michal's request. The functionality is the same as I put it in my patch set of adding SCMI base protocol support, but made some tweak to make UT, "ut dm scmi_cmd," more flexible and tolerable when enabling/disabling a specific SCMI protocol for test purpose. Each commit may have some change history inherited from the preceding patch series. Test ==== The patch series was tested on the following platforms: * sandbox
Diffstat (limited to 'test/dm/scmi.c')
-rw-r--r--test/dm/scmi.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/test/dm/scmi.c b/test/dm/scmi.c
index da45314..2bcf7ac 100644
--- a/test/dm/scmi.c
+++ b/test/dm/scmi.c
@@ -19,6 +19,7 @@
#include <scmi_agent.h>
#include <scmi_agent-uclass.h>
#include <scmi_protocols.h>
+#include <vsprintf.h>
#include <asm/scmi_test.h>
#include <dm/device-internal.h>
#include <dm/test.h>
@@ -206,6 +207,86 @@ static int dm_test_scmi_base(struct unit_test_state *uts)
DM_TEST(dm_test_scmi_base, UT_TESTF_SCAN_FDT);
+static int dm_test_scmi_cmd(struct unit_test_state *uts)
+{
+ struct udevice *agent_dev;
+ int num_proto = 0;
+ char cmd_out[30];
+
+ if (!IS_ENABLED(CONFIG_CMD_SCMI))
+ return 0;
+
+ /* preparation */
+ ut_assertok(uclass_get_device_by_name(UCLASS_SCMI_AGENT, "scmi",
+ &agent_dev));
+ ut_assertnonnull(agent_dev);
+
+ /*
+ * Estimate the number of provided protocols.
+ * This estimation is correct as far as a corresponding
+ * protocol support is added to sandbox fake serer.
+ */
+ if (IS_ENABLED(CONFIG_SCMI_POWER_DOMAIN))
+ num_proto++;
+ if (IS_ENABLED(CONFIG_CLK_SCMI))
+ num_proto++;
+ if (IS_ENABLED(CONFIG_RESET_SCMI))
+ num_proto++;
+ if (IS_ENABLED(CONFIG_DM_REGULATOR_SCMI))
+ num_proto++;
+
+ /* scmi info */
+ ut_assertok(run_command("scmi info", 0));
+
+ ut_assert_nextline("SCMI device: scmi");
+ snprintf(cmd_out, 30, " protocol version: 0x%x",
+ SCMI_BASE_PROTOCOL_VERSION);
+ ut_assert_nextline(cmd_out);
+ ut_assert_nextline(" # of agents: 2");
+ ut_assert_nextline(" 0: platform");
+ ut_assert_nextline(" > 1: OSPM");
+ snprintf(cmd_out, 30, " # of protocols: %d", num_proto);
+ ut_assert_nextline(cmd_out);
+ if (IS_ENABLED(CONFIG_SCMI_POWER_DOMAIN))
+ ut_assert_nextline(" Power domain management");
+ if (IS_ENABLED(CONFIG_CLK_SCMI))
+ ut_assert_nextline(" Clock management");
+ if (IS_ENABLED(CONFIG_RESET_SCMI))
+ ut_assert_nextline(" Reset domain management");
+ if (IS_ENABLED(CONFIG_DM_REGULATOR_SCMI))
+ ut_assert_nextline(" Voltage domain management");
+ ut_assert_nextline(" vendor: U-Boot");
+ ut_assert_nextline(" sub vendor: Sandbox");
+ ut_assert_nextline(" impl version: 0x1");
+
+ ut_assert_console_end();
+
+ /* scmi perm_dev */
+ ut_assertok(run_command("scmi perm_dev 1 0 1", 0));
+ ut_assert_console_end();
+
+ ut_assert(run_command("scmi perm_dev 1 0 0", 0));
+ ut_assert_nextline("Denying access to device:0 failed (-13)");
+ ut_assert_console_end();
+
+ /* scmi perm_proto */
+ ut_assertok(run_command("scmi perm_proto 1 0 14 1", 0));
+ ut_assert_console_end();
+
+ ut_assert(run_command("scmi perm_proto 1 0 14 0", 0));
+ ut_assert_nextline("Denying access to protocol:0x14 on device:0 failed (-13)");
+ ut_assert_console_end();
+
+ /* scmi reset */
+ ut_assert(run_command("scmi reset 1 1", 0));
+ ut_assert_nextline("Reset failed (-13)");
+ ut_assert_console_end();
+
+ return 0;
+}
+
+DM_TEST(dm_test_scmi_cmd, UT_TESTF_SCAN_FDT);
+
static int dm_test_scmi_power_domains(struct unit_test_state *uts)
{
struct sandbox_scmi_agent *agent;
@@ -217,6 +298,9 @@ static int dm_test_scmi_power_domains(struct unit_test_state *uts)
u8 *name;
int ret;
+ if (!IS_ENABLED(CONFIG_SCMI_POWER_DOMAIN))
+ return 0;
+
/* preparation */
ut_assertok(load_sandbox_scmi_test_devices(uts, &agent, &dev));
ut_assertnonnull(agent);
@@ -317,6 +401,9 @@ static int dm_test_scmi_clocks(struct unit_test_state *uts)
int ret_dev;
int ret;
+ if (!IS_ENABLED(CONFIG_CLK_SCMI))
+ return 0;
+
ret = load_sandbox_scmi_test_devices(uts, &agent, &dev);
if (ret)
return ret;
@@ -382,6 +469,9 @@ static int dm_test_scmi_resets(struct unit_test_state *uts)
struct udevice *agent_dev, *reset_dev, *dev = NULL;
int ret;
+ if (!IS_ENABLED(CONFIG_RESET_SCMI))
+ return 0;
+
ret = load_sandbox_scmi_test_devices(uts, &agent, &dev);
if (ret)
return ret;
@@ -418,6 +508,9 @@ static int dm_test_scmi_voltage_domains(struct unit_test_state *uts)
struct udevice *dev;
struct udevice *regul0_dev;
+ if (!IS_ENABLED(CONFIG_DM_REGULATOR_SCMI))
+ return 0;
+
ut_assertok(load_sandbox_scmi_test_devices(uts, &agent, &dev));
scmi_devices = sandbox_scmi_devices_ctx(dev);