xref: /rk3399_rockchip-uboot/test/dm/bus.c (revision 1ca7e2062b4e8c3b211753dcb19c063b5b9b73ca)
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