diff options
| author | Neil Armstrong <[email protected]> | 2025-11-20 09:12:53 +0100 |
|---|---|---|
| committer | Neil Armstrong <[email protected]> | 2025-11-20 09:17:58 +0100 |
| commit | 9ab7163710d390672a7325cd0980ce32e2a8191a (patch) | |
| tree | 422be0ecb86bc7ee18f6850e00b663a62209b822 /test | |
| parent | 60a99d5ca374c83c0118f2634a7fcf4cc707b965 (diff) | |
interconnect: add DM test suite
Add a test suite exercising the whole lifetime and callbacks
of interconnect with a fake 5 providers with a split node graph.
The test suite checks the calculus are right and goes to the correct
nodes, and the lifetime of the node is correct.
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Neil Armstrong <[email protected]>
Diffstat (limited to 'test')
| -rw-r--r-- | test/dm/Makefile | 1 | ||||
| -rw-r--r-- | test/dm/interconnect.c | 195 |
2 files changed, 196 insertions, 0 deletions
diff --git a/test/dm/Makefile b/test/dm/Makefile index a261b3fb4b7..771b703b737 100644 --- a/test/dm/Makefile +++ b/test/dm/Makefile @@ -57,6 +57,7 @@ obj-$(CONFIG_DM_FPGA) += fpga.o obj-$(CONFIG_FWU_MDATA_GPT_BLK) += fwu_mdata.o obj-$(CONFIG_SANDBOX) += host.o obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock.o +obj-$(CONFIG_INTERCONNECT) += interconnect.o obj-$(CONFIG_DM_I2C) += i2c.o obj-$(CONFIG_I3C) += i3c.o obj-$(CONFIG_SOUND) += i2s.o diff --git a/test/dm/interconnect.c b/test/dm/interconnect.c new file mode 100644 index 00000000000..e8c2eccd7b1 --- /dev/null +++ b/test/dm/interconnect.c @@ -0,0 +1,195 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Linaro Limited + */ + +#include <dm.h> +#include <malloc.h> +#include <dm/test.h> +#include <asm/interconnect.h> +#include <dm/device-internal.h> +#include <dm/uclass-internal.h> +#include <test/test.h> +#include <test/ut.h> + +static int dm_test_interconnect(struct unit_test_state *uts) +{ + struct udevice *dev_interconnect_0, + *dev_interconnect_1, + *dev_interconnect_2, + *dev_interconnect_3, + *dev_interconnect_4; + struct udevice *dev_test_0, *dev_test_1, *dev; + u64 avg = 0, peak = 0; + + ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "interconnect-test-0", + &dev_test_0)); + ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "interconnect-test-1", + &dev_test_1)); + + ut_assertok(sandbox_interconnect_test_get_index(dev_test_0, 0)); + ut_assertok(sandbox_interconnect_test_get(dev_test_1, "icc-path")); + + ut_assertok(uclass_find_device_by_name(UCLASS_INTERCONNECT, + "interconnect-0", + &dev_interconnect_0)); + ut_assertok(uclass_find_device_by_name(UCLASS_INTERCONNECT, + "interconnect-1", + &dev_interconnect_1)); + ut_assertok(uclass_find_device_by_name(UCLASS_INTERCONNECT, + "interconnect-2", + &dev_interconnect_2)); + ut_assertok(uclass_find_device_by_name(UCLASS_INTERCONNECT, + "interconnect-3", + &dev_interconnect_3)); + ut_assertok(uclass_find_device_by_name(UCLASS_INTERCONNECT, + "interconnect-4", + &dev_interconnect_4)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_assertok(sandbox_interconnect_test_set_bw(dev_test_0, 10000, 100000)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 10000); ut_asserteq(peak, 100000); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_assertok(sandbox_interconnect_test_set_bw(dev_test_1, 20000, 200000)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 30000); ut_asserteq(peak, 200000); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_assertok(sandbox_interconnect_test_disable(dev_test_0)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 20000); ut_asserteq(peak, 200000); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_assertok(sandbox_interconnect_test_disable(dev_test_1)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_assertok(sandbox_interconnect_test_enable(dev_test_0)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 10000); ut_asserteq(peak, 100000); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_assertok(sandbox_interconnect_test_enable(dev_test_1)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 30000); ut_asserteq(peak, 200000); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_asserteq(-EBUSY, device_remove(dev_interconnect_0, DM_REMOVE_NORMAL)); + ut_asserteq(-EBUSY, device_remove(dev_interconnect_1, DM_REMOVE_NORMAL)); + ut_asserteq(-EBUSY, device_remove(dev_interconnect_2, DM_REMOVE_NORMAL)); + ut_asserteq(-EBUSY, device_remove(dev_interconnect_3, DM_REMOVE_NORMAL)); + ut_asserteq(-EBUSY, device_remove(dev_interconnect_4, DM_REMOVE_NORMAL)); + + ut_assertok(sandbox_interconnect_test_put(dev_test_0)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 20000); ut_asserteq(peak, 200000); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_assertok(sandbox_interconnect_test_put(dev_test_1)); + + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_0, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_1, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_2, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_3, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + ut_assertok(sandbox_interconnect_get_bw(dev_interconnect_4, &avg, &peak)); + ut_asserteq(avg, 0); ut_asserteq(peak, 0); + + ut_asserteq(-ENOENT, sandbox_interconnect_test_get_index(dev_test_0, 1)); + ut_asserteq(-ENOENT, sandbox_interconnect_test_get_index(dev_test_1, 1)); + ut_asserteq(-ENODATA, sandbox_interconnect_test_get(dev_test_1, "pwet")); + + ut_assertok(device_remove(dev_interconnect_0, DM_REMOVE_NORMAL)); + ut_assertok(device_remove(dev_interconnect_1, DM_REMOVE_NORMAL)); + ut_assertok(device_remove(dev_interconnect_2, DM_REMOVE_NORMAL)); + ut_assertok(device_remove(dev_interconnect_3, DM_REMOVE_NORMAL)); + ut_assertok(device_remove(dev_interconnect_4, DM_REMOVE_NORMAL)); + + ut_assertok(device_unbind(dev_interconnect_0)); + ut_assertok(device_unbind(dev_interconnect_1)); + ut_assertok(device_unbind(dev_interconnect_2)); + ut_assertok(device_unbind(dev_interconnect_3)); + ut_assertok(device_unbind(dev_interconnect_4)); + + uclass_find_first_device(UCLASS_INTERCONNECT, &dev); + ut_assert(!dev); + + uclass_find_first_device(UCLASS_ICC_NODE, &dev); + ut_assert(!dev); + + return 0; +} + +DM_TEST(dm_test_interconnect, UTF_SCAN_FDT); |
