]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
firmware: scmi: fix sandbox and related tests for clock discovery
authorEtienne Carriere <etienne.carriere@linaro.org>
Mon, 21 Feb 2022 08:22:41 +0000 (09:22 +0100)
committerTom Rini <trini@konsulko.com>
Wed, 2 Mar 2022 22:42:06 +0000 (17:42 -0500)
Updates sandbox SCMI clock driver and tests since enabling CCF will
mandate clock discovery that is all exposed SCMI clocks shall be
discovered at initialization. For this reason, sandbox SCMI clock
driver must emulate all clocks exposed by SCMI server, not only those
effectively consumed by some other U-Boot devices.

Therefore the sandbox SCMI test driver exposes 3 clocks (IDs 0, 1 and 2)
and sandbox SCMI clock consumer driver gets 2 of them.

Cc: Simon Glass <sjg@chromium.org>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
arch/sandbox/dts/test.dts
arch/sandbox/include/asm/scmi_test.h
drivers/firmware/scmi/sandbox-scmi_agent.c
test/dm/scmi.c

index 30874b038bb429dd3aebfb0211f1bfea4dd9d135..3d206fdb3cf8080f15441ef311247020dbe3cf35 100644 (file)
 
        sandbox_scmi {
                compatible = "sandbox,scmi-devices";
-               clocks = <&clk_scmi 7>, <&clk_scmi 3>;
+               clocks = <&clk_scmi 2>, <&clk_scmi 0>;
                resets = <&reset_scmi 3>;
                regul0-supply = <&regul0_scmi>;
                regul1-supply = <&regul1_scmi>;
index 054be5f14efa31bbe91f7e5c611127e841c2337c..c72ec1e1cb2550044b7ab8a4a64a848cfe8c4f98 100644 (file)
@@ -17,7 +17,6 @@ struct sandbox_scmi_service;
  * @rate:      Clock rate in Hertz
  */
 struct sandbox_scmi_clk {
-       uint id;
        bool enabled;
        ulong rate;
 };
index 51474b57608f114bba44aff38baa8500f531b329..fc717a8aeab3549ba04d595a0ad0e182b272e755 100644 (file)
@@ -34,8 +34,9 @@
  */
 
 static struct sandbox_scmi_clk scmi_clk[] = {
-       { .id = 7, .rate = 1000 },
-       { .id = 3, .rate = 333 },
+       { .rate = 333 },
+       { .rate = 200 },
+       { .rate = 1000 },
 };
 
 static struct sandbox_scmi_reset scmi_reset[] = {
@@ -81,11 +82,8 @@ static void debug_print_agent_state(struct udevice *dev, char *str)
 
 static struct sandbox_scmi_clk *get_scmi_clk_state(uint clock_id)
 {
-       size_t n;
-
-       for (n = 0; n < ARRAY_SIZE(scmi_clk); n++)
-               if (scmi_clk[n].id == clock_id)
-                       return scmi_clk + n;
+       if (clock_id < ARRAY_SIZE(scmi_clk))
+               return scmi_clk + clock_id;
 
        return NULL;
 }
index d576b5fd89d2d4dcdf09573a162a51a31c05362b..795f207304a840a3b8a5e00d77d20d3a739a165d 100644 (file)
@@ -52,7 +52,7 @@ static int ut_assert_scmi_state_postprobe(struct unit_test_state *uts,
        ut_assertnonnull(scmi_ctx);
        agent = scmi_ctx->agent;
        ut_assertnonnull(agent);
-       ut_asserteq(2, agent->clk_count);
+       ut_asserteq(3, agent->clk_count);
        ut_assertnonnull(agent->clk);
        ut_asserteq(1, agent->reset_count);
        ut_assertnonnull(agent->reset);
@@ -125,14 +125,19 @@ static int dm_test_scmi_clocks(struct unit_test_state *uts)
        ut_assertnonnull(agent);
 
        /* Test SCMI clocks rate manipulation */
+       ut_asserteq(333, agent->clk[0].rate);
+       ut_asserteq(200, agent->clk[1].rate);
+       ut_asserteq(1000, agent->clk[2].rate);
+
        ut_asserteq(1000, clk_get_rate(&scmi_devices->clk[0]));
        ut_asserteq(333, clk_get_rate(&scmi_devices->clk[1]));
 
        ret_dev = clk_set_rate(&scmi_devices->clk[1], 1088);
        ut_assert(!ret_dev || ret_dev == 1088);
 
-       ut_asserteq(1000, agent->clk[0].rate);
-       ut_asserteq(1088, agent->clk[1].rate);
+       ut_asserteq(1088, agent->clk[0].rate);
+       ut_asserteq(200, agent->clk[1].rate);
+       ut_asserteq(1000, agent->clk[2].rate);
 
        ut_asserteq(1000, clk_get_rate(&scmi_devices->clk[0]));
        ut_asserteq(1088, clk_get_rate(&scmi_devices->clk[1]));
@@ -148,8 +153,8 @@ static int dm_test_scmi_clocks(struct unit_test_state *uts)
 
        ut_asserteq(0, clk_enable(&scmi_devices->clk[1]));
 
-       ut_assert(!agent->clk[0].enabled);
-       ut_assert(agent->clk[1].enabled);
+       ut_assert(agent->clk[0].enabled);
+       ut_assert(!agent->clk[1].enabled);
        ut_assert(!agent->clk[2].enabled);
 
        ut_assertok(clk_disable(&scmi_devices->clk[1]));