test: dm: add scmi command test

In this test, "scmi" command is tested against different sub-commands.
Please note that scmi command is for debug purpose and is not intended
in production system.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
This commit is contained in:
AKASHI Takahiro 2023-11-14 11:14:28 +09:00 committed by Tom Rini
parent 23b159ed4a
commit 3d6fe58437
2 changed files with 82 additions and 0 deletions

View File

@ -121,6 +121,7 @@ CONFIG_CMD_REGULATOR=y
CONFIG_CMD_AES=y
CONFIG_CMD_TPM=y
CONFIG_CMD_TPM_TEST=y
CONFIG_CMD_SCMI=y
CONFIG_CMD_BTRFS=y
CONFIG_CMD_CBFS=y
CONFIG_CMD_CRAMFS=y

View File

@ -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 (!CONFIG_IS_ENABLED(CMD_SCMI))
return -EAGAIN;
/* 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 (CONFIG_IS_ENABLED(POWER_DOMAIN))
num_proto++;
if (CONFIG_IS_ENABLED(CLK_SCMI))
num_proto++;
if (CONFIG_IS_ENABLED(RESET_SCMI))
num_proto++;
if (CONFIG_IS_ENABLED(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 (CONFIG_IS_ENABLED(SCMI_POWER_DOMAIN))
ut_assert_nextline(" Power domain management");
if (CONFIG_IS_ENABLED(CLK_SCMI))
ut_assert_nextline(" Clock management");
if (CONFIG_IS_ENABLED(RESET_SCMI))
ut_assert_nextline(" Reset domain management");
if (CONFIG_IS_ENABLED(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;