diff options
Diffstat (limited to 'test/dm/bus.c')
-rw-r--r-- | test/dm/bus.c | 187 |
1 files changed, 44 insertions, 143 deletions
diff --git a/test/dm/bus.c b/test/dm/bus.c index 27b7266645..e768eab695 100644 --- a/test/dm/bus.c +++ b/test/dm/bus.c @@ -19,104 +19,6 @@ DECLARE_GLOBAL_DATA_PTR; -struct dm_test_parent_platdata { - int count; - int bind_flag; - int uclass_bind_flag; -}; - -enum { - FLAG_CHILD_PROBED = 10, - FLAG_CHILD_REMOVED = -7, -}; - -static struct dm_test_state *test_state; - -static int testbus_drv_probe(struct udevice *dev) -{ - return dm_scan_fdt_dev(dev); -} - -static int testbus_child_post_bind(struct udevice *dev) -{ - struct dm_test_parent_platdata *plat; - - plat = dev_get_parent_platdata(dev); - plat->bind_flag = 1; - plat->uclass_bind_flag = 2; - - return 0; -} - -static int testbus_child_pre_probe(struct udevice *dev) -{ - struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev); - - parent_data->flag += FLAG_CHILD_PROBED; - - return 0; -} - -static int testbus_child_pre_probe_uclass(struct udevice *dev) -{ - struct dm_test_priv *priv = dev_get_priv(dev); - - priv->uclass_flag++; - - return 0; -} - -static int testbus_child_post_probe_uclass(struct udevice *dev) -{ - struct dm_test_priv *priv = dev_get_priv(dev); - - priv->uclass_postp++; - - return 0; -} - -static int testbus_child_post_remove(struct udevice *dev) -{ - struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev); - struct dm_test_state *dms = test_state; - - parent_data->flag += FLAG_CHILD_REMOVED; - if (dms) - dms->removed = dev; - - return 0; -} - -static const struct udevice_id testbus_ids[] = { - { - .compatible = "denx,u-boot-test-bus", - .data = DM_TEST_TYPE_FIRST }, - { } -}; - -U_BOOT_DRIVER(testbus_drv) = { - .name = "testbus_drv", - .of_match = testbus_ids, - .id = UCLASS_TEST_BUS, - .probe = testbus_drv_probe, - .child_post_bind = testbus_child_post_bind, - .priv_auto_alloc_size = sizeof(struct dm_test_priv), - .platdata_auto_alloc_size = sizeof(struct dm_test_pdata), - .per_child_auto_alloc_size = sizeof(struct dm_test_parent_data), - .per_child_platdata_auto_alloc_size = - sizeof(struct dm_test_parent_platdata), - .child_pre_probe = testbus_child_pre_probe, - .child_post_remove = testbus_child_post_remove, -}; - -UCLASS_DRIVER(testbus) = { - .name = "testbus", - .id = UCLASS_TEST_BUS, - .flags = DM_UC_FLAG_SEQ_ALIAS, - .child_pre_probe = testbus_child_pre_probe_uclass, - .child_post_probe = testbus_child_post_probe_uclass, -}; - /* Test that we can probe for children */ static int dm_test_bus_children(struct unit_test_state *uts) { @@ -153,20 +55,21 @@ static int dm_test_bus_children_funcs(struct unit_test_state *uts) ut_assertok(device_get_child(bus, 0, &dev)); ut_asserteq(-ENODEV, device_get_child(bus, 4, &dev)); ut_assertok(device_get_child_by_seq(bus, 5, &dev)); - ut_assert(dev->flags & DM_FLAG_ACTIVATED); + ut_assert(dev_get_flags(dev) & DM_FLAG_ACTIVATED); ut_asserteq_str("c-test@5", dev->name); /* Device with sequence number 0 should be accessible */ - ut_asserteq(-ENODEV, device_find_child_by_seq(bus, -1, true, &dev)); - ut_assertok(device_find_child_by_seq(bus, 0, true, &dev)); - ut_assert(!(dev->flags & DM_FLAG_ACTIVATED)); - ut_asserteq(-ENODEV, device_find_child_by_seq(bus, 0, false, &dev)); + ut_asserteq(-ENODEV, device_find_child_by_seq(bus, -1, &dev)); + ut_assertok(device_find_child_by_seq(bus, 0, &dev)); + ut_assert(!(dev_get_flags(dev) & DM_FLAG_ACTIVATED)); + ut_asserteq(0, device_find_child_by_seq(bus, 0, &dev)); ut_assertok(device_get_child_by_seq(bus, 0, &dev)); - ut_assert(dev->flags & DM_FLAG_ACTIVATED); + ut_assert(dev_get_flags(dev) & DM_FLAG_ACTIVATED); + ut_asserteq(0, device_find_child_by_seq(bus, 0, &dev)); /* There is no device with sequence number 2 */ - ut_asserteq(-ENODEV, device_find_child_by_seq(bus, 2, false, &dev)); - ut_asserteq(-ENODEV, device_find_child_by_seq(bus, 2, true, &dev)); + ut_asserteq(-ENODEV, device_find_child_by_seq(bus, 2, &dev)); + ut_asserteq(-ENODEV, device_find_child_by_seq(bus, 2, &dev)); ut_asserteq(-ENODEV, device_get_child_by_seq(bus, 2, &dev)); /* Looking for something that is not a child */ @@ -193,10 +96,10 @@ static int dm_test_bus_children_of_offset(struct unit_test_state *uts) ut_assert(node > 0); ut_assertok(device_find_child_by_of_offset(bus, node, &dev)); ut_assertnonnull(dev); - ut_assert(!(dev->flags & DM_FLAG_ACTIVATED)); + ut_assert(!(dev_get_flags(dev) & DM_FLAG_ACTIVATED)); ut_assertok(device_get_child_by_of_offset(bus, node, &dev)); ut_assertnonnull(dev); - ut_assert(dev->flags & DM_FLAG_ACTIVATED); + ut_assert(dev_get_flags(dev) & DM_FLAG_ACTIVATED); return 0; } @@ -220,7 +123,7 @@ static int dm_test_bus_children_iterators(struct unit_test_state *uts) ut_asserteq_ptr(dev, NULL); /* Move to the next child without using device_find_first_child() */ - ut_assertok(device_find_child_by_seq(bus, 5, true, &dev)); + ut_assertok(device_find_child_by_seq(bus, 5, &dev)); ut_asserteq_str("c-test@5", dev->name); ut_assertok(device_find_next_child(&dev)); ut_asserteq_str("c-test@0", dev->name); @@ -245,7 +148,7 @@ static int test_bus_parent_data(struct unit_test_state *uts) ut_assertok(uclass_get_device(UCLASS_TEST_BUS, 0, &bus)); /* Check that parent data is allocated */ - ut_assertok(device_find_child_by_seq(bus, 0, true, &dev)); + ut_assertok(device_find_child_by_seq(bus, 0, &dev)); ut_asserteq_ptr(NULL, dev_get_parent_priv(dev)); ut_assertok(device_get_child_by_seq(bus, 0, &dev)); parent_data = dev_get_parent_priv(dev); @@ -312,19 +215,19 @@ static int dm_test_bus_parent_data_uclass(struct unit_test_state *uts) /* Set the driver size to 0 so that the uclass size is used */ ut_assertok(uclass_find_device(UCLASS_TEST_BUS, 0, &bus)); drv = (struct driver *)bus->driver; - size = drv->per_child_auto_alloc_size; + size = drv->per_child_auto; #ifdef CONFIG_SANDBOX os_mprotect_allow(bus->uclass->uc_drv, sizeof(*bus->uclass->uc_drv)); os_mprotect_allow(drv, sizeof(*drv)); #endif - bus->uclass->uc_drv->per_child_auto_alloc_size = size; - drv->per_child_auto_alloc_size = 0; + bus->uclass->uc_drv->per_child_auto = size; + drv->per_child_auto = 0; ret = test_bus_parent_data(uts); if (ret) return ret; - bus->uclass->uc_drv->per_child_auto_alloc_size = 0; - drv->per_child_auto_alloc_size = size; + bus->uclass->uc_drv->per_child_auto = 0; + drv->per_child_auto = size; return 0; } @@ -335,11 +238,10 @@ DM_TEST(dm_test_bus_parent_data_uclass, static int dm_test_bus_parent_ops(struct unit_test_state *uts) { struct dm_test_parent_data *parent_data; - struct dm_test_state *dms = uts->priv; struct udevice *bus, *dev; struct uclass *uc; - test_state = dms; + testbus_get_clear_removed(); ut_assertok(uclass_get_device(UCLASS_TEST_BUS, 0, &bus)); ut_assertok(uclass_get(UCLASS_TEST_FDT, &uc)); @@ -351,7 +253,7 @@ static int dm_test_bus_parent_ops(struct unit_test_state *uts) ut_assertok(device_probe(dev)); parent_data = dev_get_parent_priv(dev); - ut_asserteq(FLAG_CHILD_PROBED, parent_data->flag); + ut_asserteq(TEST_FLAG_CHILD_PROBED, parent_data->flag); } uclass_foreach_dev(dev, uc) { @@ -359,20 +261,19 @@ static int dm_test_bus_parent_ops(struct unit_test_state *uts) if (dev->parent != bus) continue; parent_data = dev_get_parent_priv(dev); - ut_asserteq(FLAG_CHILD_PROBED, parent_data->flag); + ut_asserteq(TEST_FLAG_CHILD_PROBED, parent_data->flag); ut_assertok(device_remove(dev, DM_REMOVE_NORMAL)); ut_asserteq_ptr(NULL, dev_get_parent_priv(dev)); - ut_asserteq_ptr(dms->removed, dev); + ut_asserteq_ptr(testbus_get_clear_removed(), dev); } - test_state = NULL; return 0; } DM_TEST(dm_test_bus_parent_ops, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); -static int test_bus_parent_platdata(struct unit_test_state *uts) +static int test_bus_parent_plat(struct unit_test_state *uts) { - struct dm_test_parent_platdata *plat; + struct dm_test_parent_plat *plat; struct udevice *bus, *dev; /* Check that the bus has no children */ @@ -386,7 +287,7 @@ static int test_bus_parent_platdata(struct unit_test_state *uts) dev; device_find_next_child(&dev)) { /* Check that platform data is allocated */ - plat = dev_get_parent_platdata(dev); + plat = dev_get_parent_plat(dev); ut_assert(plat != NULL); /* @@ -398,7 +299,7 @@ static int test_bus_parent_platdata(struct unit_test_state *uts) device_probe(dev); device_remove(dev, DM_REMOVE_NORMAL); - ut_asserteq_ptr(plat, dev_get_parent_platdata(dev)); + ut_asserteq_ptr(plat, dev_get_parent_plat(dev)); ut_asserteq(1, plat->count); ut_assertok(device_probe(dev)); } @@ -410,7 +311,7 @@ static int test_bus_parent_platdata(struct unit_test_state *uts) dev; device_find_next_child(&dev)) { /* Check that platform data is allocated */ - plat = dev_get_parent_platdata(dev); + plat = dev_get_parent_plat(dev); ut_assert(plat != NULL); ut_asserteq(1, plat->count); } @@ -423,13 +324,13 @@ static int test_bus_parent_platdata(struct unit_test_state *uts) device_unbind(dev); } while (dev); - /* Now the child platdata should be removed and re-added */ + /* Now the child plat should be removed and re-added */ device_probe(bus); for (device_find_first_child(bus, &dev); dev; device_find_next_child(&dev)) { /* Check that platform data is allocated */ - plat = dev_get_parent_platdata(dev); + plat = dev_get_parent_plat(dev); ut_assert(plat != NULL); ut_asserteq(0, plat->count); } @@ -439,14 +340,14 @@ static int test_bus_parent_platdata(struct unit_test_state *uts) } /* Test that the bus can store platform data about each child */ -static int dm_test_bus_parent_platdata(struct unit_test_state *uts) +static int dm_test_bus_parent_plat(struct unit_test_state *uts) { - return test_bus_parent_platdata(uts); + return test_bus_parent_plat(uts); } -DM_TEST(dm_test_bus_parent_platdata, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); +DM_TEST(dm_test_bus_parent_plat, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); /* As above but the size is controlled by the uclass */ -static int dm_test_bus_parent_platdata_uclass(struct unit_test_state *uts) +static int dm_test_bus_parent_plat_uclass(struct unit_test_state *uts) { struct udevice *bus; struct driver *drv; @@ -456,28 +357,28 @@ static int dm_test_bus_parent_platdata_uclass(struct unit_test_state *uts) /* Set the driver size to 0 so that the uclass size is used */ ut_assertok(uclass_find_device(UCLASS_TEST_BUS, 0, &bus)); drv = (struct driver *)bus->driver; - size = drv->per_child_platdata_auto_alloc_size; + size = drv->per_child_plat_auto; #ifdef CONFIG_SANDBOX os_mprotect_allow(bus->uclass->uc_drv, sizeof(*bus->uclass->uc_drv)); os_mprotect_allow(drv, sizeof(*drv)); #endif - bus->uclass->uc_drv->per_child_platdata_auto_alloc_size = size; - drv->per_child_platdata_auto_alloc_size = 0; - ret = test_bus_parent_platdata(uts); + bus->uclass->uc_drv->per_child_plat_auto = size; + drv->per_child_plat_auto = 0; + ret = test_bus_parent_plat(uts); if (ret) return ret; - bus->uclass->uc_drv->per_child_platdata_auto_alloc_size = 0; - drv->per_child_platdata_auto_alloc_size = size; + bus->uclass->uc_drv->per_child_plat_auto = 0; + drv->per_child_plat_auto = size; return 0; } -DM_TEST(dm_test_bus_parent_platdata_uclass, +DM_TEST(dm_test_bus_parent_plat_uclass, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); /* Test that the child post_bind method is called */ static int dm_test_bus_child_post_bind(struct unit_test_state *uts) { - struct dm_test_parent_platdata *plat; + struct dm_test_parent_plat *plat; struct udevice *bus, *dev; ut_assertok(uclass_get_device(UCLASS_TEST_BUS, 0, &bus)); @@ -485,7 +386,7 @@ static int dm_test_bus_child_post_bind(struct unit_test_state *uts) dev; device_find_next_child(&dev)) { /* Check that platform data is allocated */ - plat = dev_get_parent_platdata(dev); + plat = dev_get_parent_plat(dev); ut_assert(plat != NULL); ut_asserteq(1, plat->bind_flag); } @@ -498,7 +399,7 @@ DM_TEST(dm_test_bus_child_post_bind, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); /* Test that the child post_bind method is called */ static int dm_test_bus_child_post_bind_uclass(struct unit_test_state *uts) { - struct dm_test_parent_platdata *plat; + struct dm_test_parent_plat *plat; struct udevice *bus, *dev; ut_assertok(uclass_get_device(UCLASS_TEST_BUS, 0, &bus)); @@ -506,7 +407,7 @@ static int dm_test_bus_child_post_bind_uclass(struct unit_test_state *uts) dev; device_find_next_child(&dev)) { /* Check that platform data is allocated */ - plat = dev_get_parent_platdata(dev); + plat = dev_get_parent_plat(dev); ut_assert(plat != NULL); ut_asserteq(2, plat->uclass_bind_flag); } |