From a89d9f41e002f67317245d3aee34f3865e14ac56 Mon Sep 17 00:00:00 2001 From: AKASHI Takahiro Date: Wed, 11 Oct 2023 19:06:59 +0900 Subject: [PATCH] test: dm: add protocol-specific channel test Any SCMI protocol may have its own channel. Test this feature on sandbox as the necessary framework was added in a prior commit. Signed-off-by: AKASHI Takahiro Reviewed-by: Simon Glass Reviewed-by: Etienne Carriere --- arch/sandbox/dts/test.dts | 1 + test/dm/scmi.c | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index 6abce9e3963..50c8715f769 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -739,6 +739,7 @@ clk_scmi: protocol@14 { reg = <0x14>; #clock-cells = <1>; + linaro,sandbox-channel-id = <0x14>; }; reset_scmi: protocol@16 { diff --git a/test/dm/scmi.c b/test/dm/scmi.c index d87e2731ce4..8db3ad32f85 100644 --- a/test/dm/scmi.c +++ b/test/dm/scmi.c @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include #include @@ -109,7 +111,7 @@ static int dm_test_scmi_clocks(struct unit_test_state *uts) struct sandbox_scmi_devices *scmi_devices; struct sandbox_scmi_service *scmi_ctx; struct sandbox_scmi_agent *agent; - struct udevice *dev; + struct udevice *agent_dev, *clock_dev, *dev; int ret_dev; int ret; @@ -124,6 +126,14 @@ static int dm_test_scmi_clocks(struct unit_test_state *uts) agent = scmi_ctx->agent; ut_assertnonnull(agent); + /* Sandbox SCMI clock protocol has its own channel */ + ut_assertok(uclass_get_device_by_name(UCLASS_SCMI_AGENT, "scmi", + &agent_dev)); + ut_assertnonnull(agent_dev); + clock_dev = scmi_get_protocol(agent_dev, SCMI_PROTOCOL_ID_CLOCK); + ut_assertnonnull(clock_dev); + ut_asserteq(0x14, sandbox_scmi_channel_id(clock_dev)); + /* Test SCMI clocks rate manipulation */ ut_asserteq(333, agent->clk[0].rate); ut_asserteq(200, agent->clk[1].rate); @@ -172,7 +182,7 @@ static int dm_test_scmi_resets(struct unit_test_state *uts) struct sandbox_scmi_devices *scmi_devices; struct sandbox_scmi_service *scmi_ctx; struct sandbox_scmi_agent *agent; - struct udevice *dev = NULL; + struct udevice *agent_dev, *reset_dev, *dev = NULL; int ret; ret = load_sandbox_scmi_test_devices(uts, &dev); @@ -186,6 +196,14 @@ static int dm_test_scmi_resets(struct unit_test_state *uts) agent = scmi_ctx->agent; ut_assertnonnull(agent); + /* Sandbox SCMI reset protocol doesn't have its own channel */ + ut_assertok(uclass_get_device_by_name(UCLASS_SCMI_AGENT, "scmi", + &agent_dev)); + ut_assertnonnull(agent_dev); + reset_dev = scmi_get_protocol(agent_dev, SCMI_PROTOCOL_ID_RESET_DOMAIN); + ut_assertnonnull(reset_dev); + ut_asserteq(0x0, sandbox_scmi_channel_id(reset_dev)); + /* Test SCMI resect controller manipulation */ ut_assert(!agent->reset[0].asserted);