// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2025 Linaro Limited */ #include #include #include #include #include #include #include #include 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);