]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
test: dm: simplify SCMI unit test on sandbox
authorAKASHI Takahiro <takahiro.akashi@linaro.org>
Wed, 11 Oct 2023 10:07:03 +0000 (19:07 +0900)
committerTom Rini <trini@konsulko.com>
Fri, 13 Oct 2023 20:59:24 +0000 (16:59 -0400)
Adding SCMI base protocol makes it inconvenient to hold the agent instance
(udevice) locally since the agent device will be re-created per each test.
Just remove it and simplify the test flows.
The test scenario is not changed at all.

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>
arch/sandbox/include/asm/scmi_test.h
drivers/firmware/scmi/sandbox-scmi_agent.c
test/dm/scmi.c

index 75cb462a55843fa003e03d9922466461193ba654..ccb0df6c148ffe45aa0af3961e63f8700f11a837 100644 (file)
@@ -98,9 +98,11 @@ unsigned int sandbox_scmi_channel_id(struct udevice *dev);
 
 /**
  * sandbox_scmi_service_ctx - Get the simulated SCMI services context
+ * sandbox_scmi_agent_ctx - Get the simulated SCMI agent context
+ * @dev:       Reference to the test agent
  * @return:    Reference to backend simulated resources state
  */
-struct sandbox_scmi_service *sandbox_scmi_service_ctx(void);
+struct sandbox_scmi_agent *sandbox_scmi_agent_ctx(struct udevice *dev);
 
 /**
  * sandbox_scmi_devices_ctx - Get references to devices accessed through SCMI
@@ -114,7 +116,7 @@ inline unsigned int sandbox_scmi_channel_id(struct udevice *dev);
        return 0;
 }
 
-static inline struct sandbox_scmi_service *sandbox_scmi_service_ctx(void)
+static struct sandbox_scmi_agent *sandbox_scmi_agent_ctx(struct udevice *dev)
 {
        return NULL;
 }
index 716bbf97d5c99bb6db19c1037fd6505770af3b3f..eb567dd900d7ae220238a0ea3787d9bf7be1be2e 100644 (file)
@@ -86,11 +86,9 @@ static struct sandbox_scmi_voltd scmi_voltd[] = {
        { .id = 1, .voltage_uv = 1800000 },
 };
 
-static struct sandbox_scmi_service sandbox_scmi_service_state;
-
-struct sandbox_scmi_service *sandbox_scmi_service_ctx(void)
+struct sandbox_scmi_agent *sandbox_scmi_agent_ctx(struct udevice *dev)
 {
-       return &sandbox_scmi_service_state;
+       return dev_get_priv(dev);
 }
 
 static void debug_print_agent_state(struct udevice *dev, char *str)
@@ -985,16 +983,8 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
 
 static int sandbox_scmi_test_remove(struct udevice *dev)
 {
-       struct sandbox_scmi_agent *agent = dev_get_priv(dev);
-
-       if (agent != sandbox_scmi_service_ctx()->agent)
-               return -EINVAL;
-
        debug_print_agent_state(dev, "removed");
 
-       /* We only need to dereference the agent in the context */
-       sandbox_scmi_service_ctx()->agent = NULL;
-
        return 0;
 }
 
@@ -1002,9 +992,6 @@ static int sandbox_scmi_test_probe(struct udevice *dev)
 {
        struct sandbox_scmi_agent *agent = dev_get_priv(dev);
 
-       if (sandbox_scmi_service_ctx()->agent)
-               return -EINVAL;
-
        *agent = (struct sandbox_scmi_agent){
                .clk = scmi_clk,
                .clk_count = ARRAY_SIZE(scmi_clk),
@@ -1016,9 +1003,6 @@ static int sandbox_scmi_test_probe(struct udevice *dev)
 
        debug_print_agent_state(dev, "probed");
 
-       /* Save reference for tests purpose */
-       sandbox_scmi_service_ctx()->agent = agent;
-
        return 0;
 };
 
index 8db3ad32f85ee4683f368d3e81333ab61e97e4a2..a7d05f66b753370e70eac1c4da4137d232d60e98 100644 (file)
 #include <power/regulator.h>
 #include <test/ut.h>
 
-static int ut_assert_scmi_state_preprobe(struct unit_test_state *uts)
-{
-       struct sandbox_scmi_service *scmi_ctx = sandbox_scmi_service_ctx();
-
-       ut_assertnonnull(scmi_ctx);
-       ut_assertnull(scmi_ctx->agent);
-
-       return 0;
-}
-
 static int ut_assert_scmi_state_postprobe(struct unit_test_state *uts,
+                                         struct sandbox_scmi_agent *agent,
                                          struct udevice *dev)
 {
        struct sandbox_scmi_devices *scmi_devices;
-       struct sandbox_scmi_service *scmi_ctx;
-       struct sandbox_scmi_agent *agent;
 
        /* Device references to check context against test sequence */
        scmi_devices = sandbox_scmi_devices_ctx(dev);
@@ -50,10 +39,6 @@ static int ut_assert_scmi_state_postprobe(struct unit_test_state *uts,
        ut_asserteq(2, scmi_devices->regul_count);
 
        /* State of the simulated SCMI server exposed */
-       scmi_ctx = sandbox_scmi_service_ctx();
-       ut_assertnonnull(scmi_ctx);
-       agent = scmi_ctx->agent;
-       ut_assertnonnull(agent);
        ut_asserteq(3, agent->clk_count);
        ut_assertnonnull(agent->clk);
        ut_asserteq(1, agent->reset_count);
@@ -65,27 +50,32 @@ static int ut_assert_scmi_state_postprobe(struct unit_test_state *uts,
 }
 
 static int load_sandbox_scmi_test_devices(struct unit_test_state *uts,
+                                         struct sandbox_scmi_agent **ctx,
                                          struct udevice **dev)
 {
-       int ret;
+       struct udevice *agent_dev;
 
-       ret = ut_assert_scmi_state_preprobe(uts);
-       if (ret)
-               return ret;
+       ut_assertok(uclass_get_device_by_name(UCLASS_SCMI_AGENT, "scmi",
+                                             &agent_dev));
+       ut_assertnonnull(agent_dev);
 
+       *ctx = sandbox_scmi_agent_ctx(agent_dev);
+       ut_assertnonnull(*ctx);
+
+       /* probe */
        ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "sandbox_scmi",
                                              dev));
        ut_assertnonnull(*dev);
 
-       return ut_assert_scmi_state_postprobe(uts, *dev);
+       return ut_assert_scmi_state_postprobe(uts, *ctx, *dev);
 }
 
 static int release_sandbox_scmi_test_devices(struct unit_test_state *uts,
                                             struct udevice *dev)
 {
+       /* un-probe */
        ut_assertok(device_remove(dev, DM_REMOVE_NORMAL));
 
-       /* Not sure test devices are fully removed, agent may not be visible */
        return 0;
 }
 
@@ -95,10 +85,11 @@ static int release_sandbox_scmi_test_devices(struct unit_test_state *uts,
  */
 static int dm_test_scmi_sandbox_agent(struct unit_test_state *uts)
 {
+       struct sandbox_scmi_agent *ctx;
        struct udevice *dev = NULL;
        int ret;
 
-       ret = load_sandbox_scmi_test_devices(uts, &dev);
+       ret = load_sandbox_scmi_test_devices(uts, &ctx, &dev);
        if (!ret)
                ret = release_sandbox_scmi_test_devices(uts, dev);
 
@@ -108,23 +99,18 @@ DM_TEST(dm_test_scmi_sandbox_agent, UT_TESTF_SCAN_FDT);
 
 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 sandbox_scmi_devices *scmi_devices;
        struct udevice *agent_dev, *clock_dev, *dev;
        int ret_dev;
        int ret;
 
-       ret = load_sandbox_scmi_test_devices(uts, &dev);
+       ret = load_sandbox_scmi_test_devices(uts, &agent, &dev);
        if (ret)
                return ret;
 
        scmi_devices = sandbox_scmi_devices_ctx(dev);
        ut_assertnonnull(scmi_devices);
-       scmi_ctx = sandbox_scmi_service_ctx();
-       ut_assertnonnull(scmi_ctx);
-       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",
@@ -179,22 +165,17 @@ DM_TEST(dm_test_scmi_clocks, UT_TESTF_SCAN_FDT);
 
 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 sandbox_scmi_devices *scmi_devices;
        struct udevice *agent_dev, *reset_dev, *dev = NULL;
        int ret;
 
-       ret = load_sandbox_scmi_test_devices(uts, &dev);
+       ret = load_sandbox_scmi_test_devices(uts, &agent, &dev);
        if (ret)
                return ret;
 
        scmi_devices = sandbox_scmi_devices_ctx(dev);
        ut_assertnonnull(scmi_devices);
-       scmi_ctx = sandbox_scmi_service_ctx();
-       ut_assertnonnull(scmi_ctx);
-       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",
@@ -219,21 +200,16 @@ DM_TEST(dm_test_scmi_resets, UT_TESTF_SCAN_FDT);
 
 static int dm_test_scmi_voltage_domains(struct unit_test_state *uts)
 {
-       struct sandbox_scmi_devices *scmi_devices;
-       struct sandbox_scmi_service *scmi_ctx;
        struct sandbox_scmi_agent *agent;
+       struct sandbox_scmi_devices *scmi_devices;
        struct dm_regulator_uclass_plat *uc_pdata;
        struct udevice *dev;
        struct udevice *regul0_dev;
 
-       ut_assertok(load_sandbox_scmi_test_devices(uts, &dev));
+       ut_assertok(load_sandbox_scmi_test_devices(uts, &agent, &dev));
 
        scmi_devices = sandbox_scmi_devices_ctx(dev);
        ut_assertnonnull(scmi_devices);
-       scmi_ctx = sandbox_scmi_service_ctx();
-       ut_assertnonnull(scmi_ctx);
-       agent = scmi_ctx->agent;
-       ut_assertnonnull(agent);
 
        /* Set/Get an SCMI voltage domain level */
        regul0_dev = scmi_devices->regul[0];