Message ID | 20230726083808.140780-9-takahiro.akashi@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | firmware: scmi: add SCMI base protocol support | expand |
> From: AKASHI Takahiro <takahiro.akashi@linaro.org> > Sent: Wednesday, July 26, 2023 10:38 > > 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 | 7 ++- > drivers/firmware/scmi/sandbox-scmi_agent.c | 20 +------ > drivers/firmware/scmi/scmi_agent-uclass.c | 3 - > test/dm/scmi.c | 64 +++++++--------------- > 4 files changed, 26 insertions(+), 68 deletions(-) > > diff --git a/arch/sandbox/include/asm/scmi_test.h b/arch/sandbox/include/asm/scmi_test.h > index c72ec1e1cb25..2718336a9a50 100644 > --- a/arch/sandbox/include/asm/scmi_test.h > +++ b/arch/sandbox/include/asm/scmi_test.h > @@ -89,10 +89,11 @@ struct sandbox_scmi_devices { > > #ifdef CONFIG_SCMI_FIRMWARE > /** > - * 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 > @@ -101,7 +102,7 @@ struct sandbox_scmi_service *sandbox_scmi_service_ctx(void); > */ > struct sandbox_scmi_devices *sandbox_scmi_devices_ctx(struct udevice *dev); > #else > -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; > } > diff --git a/drivers/firmware/scmi/sandbox-scmi_agent.c b/drivers/firmware/scmi/sandbox-scmi_agent.c > index 1f0261ea5c94..ab8afb01de40 100644 > --- a/drivers/firmware/scmi/sandbox-scmi_agent.c > +++ b/drivers/firmware/scmi/sandbox-scmi_agent.c > @@ -66,11 +66,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) > @@ -898,16 +896,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; > } > > @@ -915,9 +905,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), > @@ -929,9 +916,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; > }; > > diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c b/drivers/firmware/scmi/scmi_agent-uclass.c > index 279c2c218913..91cb172f3005 100644 > --- a/drivers/firmware/scmi/scmi_agent-uclass.c > +++ b/drivers/firmware/scmi/scmi_agent-uclass.c > @@ -412,9 +412,6 @@ static int scmi_bind_protocols(struct udevice *dev) > } > } > > - if (!ret) > - scmi_agent = dev; > - > return ret; > } > > diff --git a/test/dm/scmi.c b/test/dm/scmi.c > index d87e2731ce42..881be3171b7c 100644 > --- a/test/dm/scmi.c > +++ b/test/dm/scmi.c > @@ -23,22 +23,11 @@ > #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); > @@ -48,10 +37,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); > @@ -63,27 +48,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; > } > > @@ -93,10 +83,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); > > @@ -106,23 +97,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 *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); > > /* Test SCMI clocks rate manipulation */ > ut_asserteq(333, agent->clk[0].rate); > @@ -169,22 +155,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 *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); > > /* Test SCMI resect controller manipulation */ > ut_assert(!agent->reset[0].asserted); > @@ -201,21 +182,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]; > -- > 2.41.0 >
diff --git a/arch/sandbox/include/asm/scmi_test.h b/arch/sandbox/include/asm/scmi_test.h index c72ec1e1cb25..2718336a9a50 100644 --- a/arch/sandbox/include/asm/scmi_test.h +++ b/arch/sandbox/include/asm/scmi_test.h @@ -89,10 +89,11 @@ struct sandbox_scmi_devices { #ifdef CONFIG_SCMI_FIRMWARE /** - * 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 @@ -101,7 +102,7 @@ struct sandbox_scmi_service *sandbox_scmi_service_ctx(void); */ struct sandbox_scmi_devices *sandbox_scmi_devices_ctx(struct udevice *dev); #else -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; } diff --git a/drivers/firmware/scmi/sandbox-scmi_agent.c b/drivers/firmware/scmi/sandbox-scmi_agent.c index 1f0261ea5c94..ab8afb01de40 100644 --- a/drivers/firmware/scmi/sandbox-scmi_agent.c +++ b/drivers/firmware/scmi/sandbox-scmi_agent.c @@ -66,11 +66,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) @@ -898,16 +896,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; } @@ -915,9 +905,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), @@ -929,9 +916,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; }; diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c b/drivers/firmware/scmi/scmi_agent-uclass.c index 279c2c218913..91cb172f3005 100644 --- a/drivers/firmware/scmi/scmi_agent-uclass.c +++ b/drivers/firmware/scmi/scmi_agent-uclass.c @@ -412,9 +412,6 @@ static int scmi_bind_protocols(struct udevice *dev) } } - if (!ret) - scmi_agent = dev; - return ret; } diff --git a/test/dm/scmi.c b/test/dm/scmi.c index d87e2731ce42..881be3171b7c 100644 --- a/test/dm/scmi.c +++ b/test/dm/scmi.c @@ -23,22 +23,11 @@ #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); @@ -48,10 +37,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); @@ -63,27 +48,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; } @@ -93,10 +83,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); @@ -106,23 +97,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 *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); /* Test SCMI clocks rate manipulation */ ut_asserteq(333, agent->clk[0].rate); @@ -169,22 +155,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 *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); /* Test SCMI resect controller manipulation */ ut_assert(!agent->reset[0].asserted); @@ -201,21 +182,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];