1*1ca7e206SSimon Glass /* 2*1ca7e206SSimon Glass * Copyright (c) 2014 Google, Inc 3*1ca7e206SSimon Glass * 4*1ca7e206SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 5*1ca7e206SSimon Glass */ 6*1ca7e206SSimon Glass 7*1ca7e206SSimon Glass #include <common.h> 8*1ca7e206SSimon Glass #include <dm.h> 9*1ca7e206SSimon Glass #include <dm/root.h> 10*1ca7e206SSimon Glass #include <dm/test.h> 11*1ca7e206SSimon Glass #include <dm/ut.h> 12*1ca7e206SSimon Glass #include <dm/util.h> 13*1ca7e206SSimon Glass 14*1ca7e206SSimon Glass DECLARE_GLOBAL_DATA_PTR; 15*1ca7e206SSimon Glass 16*1ca7e206SSimon Glass static int testbus_drv_probe(struct udevice *dev) 17*1ca7e206SSimon Glass { 18*1ca7e206SSimon Glass return dm_scan_fdt_node(dev, gd->fdt_blob, dev->of_offset, false); 19*1ca7e206SSimon Glass } 20*1ca7e206SSimon Glass 21*1ca7e206SSimon Glass static const struct udevice_id testbus_ids[] = { 22*1ca7e206SSimon Glass { 23*1ca7e206SSimon Glass .compatible = "denx,u-boot-test-bus", 24*1ca7e206SSimon Glass .data = DM_TEST_TYPE_FIRST }, 25*1ca7e206SSimon Glass { } 26*1ca7e206SSimon Glass }; 27*1ca7e206SSimon Glass 28*1ca7e206SSimon Glass U_BOOT_DRIVER(testbus_drv) = { 29*1ca7e206SSimon Glass .name = "testbus_drv", 30*1ca7e206SSimon Glass .of_match = testbus_ids, 31*1ca7e206SSimon Glass .id = UCLASS_TEST_BUS, 32*1ca7e206SSimon Glass .probe = testbus_drv_probe, 33*1ca7e206SSimon Glass .priv_auto_alloc_size = sizeof(struct dm_test_priv), 34*1ca7e206SSimon Glass .platdata_auto_alloc_size = sizeof(struct dm_test_pdata), 35*1ca7e206SSimon Glass }; 36*1ca7e206SSimon Glass 37*1ca7e206SSimon Glass UCLASS_DRIVER(testbus) = { 38*1ca7e206SSimon Glass .name = "testbus", 39*1ca7e206SSimon Glass .id = UCLASS_TEST_BUS, 40*1ca7e206SSimon Glass }; 41*1ca7e206SSimon Glass 42*1ca7e206SSimon Glass /* Test that we can probe for children */ 43*1ca7e206SSimon Glass static int dm_test_bus_children(struct dm_test_state *dms) 44*1ca7e206SSimon Glass { 45*1ca7e206SSimon Glass int num_devices = 4; 46*1ca7e206SSimon Glass struct udevice *bus; 47*1ca7e206SSimon Glass struct uclass *uc; 48*1ca7e206SSimon Glass 49*1ca7e206SSimon Glass ut_assertok(uclass_get(UCLASS_TEST_FDT, &uc)); 50*1ca7e206SSimon Glass ut_asserteq(num_devices, list_count_items(&uc->dev_head)); 51*1ca7e206SSimon Glass 52*1ca7e206SSimon Glass /* Probe the bus, which should yield 3 more devices */ 53*1ca7e206SSimon Glass ut_assertok(uclass_get_device(UCLASS_TEST_BUS, 0, &bus)); 54*1ca7e206SSimon Glass num_devices += 3; 55*1ca7e206SSimon Glass 56*1ca7e206SSimon Glass ut_assertok(uclass_get(UCLASS_TEST_FDT, &uc)); 57*1ca7e206SSimon Glass ut_asserteq(num_devices, list_count_items(&uc->dev_head)); 58*1ca7e206SSimon Glass 59*1ca7e206SSimon Glass ut_assert(!dm_check_devices(dms, num_devices)); 60*1ca7e206SSimon Glass 61*1ca7e206SSimon Glass return 0; 62*1ca7e206SSimon Glass } 63*1ca7e206SSimon Glass DM_TEST(dm_test_bus_children, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); 64