/* Test that autoprobe finds all the expected devices */ static int dm_test_autoprobe(struct dm_test_state *dms) { int expected_base_add; struct udevice *dev; struct uclass *uc; int i; ut_assertok(uclass_get(UCLASS_TEST, &uc)); ut_assert(uc); ut_asserteq(1, dm_testdrv_op_count[DM_TEST_OP_INIT]); ut_asserteq(0, dm_testdrv_op_count[DM_TEST_OP_POST_PROBE]); /* The root device should not be activated until needed */ ut_assert(dms->root->flags & DM_FLAG_ACTIVATED); /* * We should be able to find the three test devices, and they should * all be activated as they are used (lazy activation, required by * U-Boot) */ for (i = 0; i < 3; i++) { ut_assertok(uclass_find_device(UCLASS_TEST, i, &dev)); ut_assert(dev); ut_assertf(!(dev->flags & DM_FLAG_ACTIVATED), "Driver %d/%s already activated", i, dev->name); /* This should activate it */ ut_assertok(uclass_get_device(UCLASS_TEST, i, &dev)); ut_assert(dev); ut_assert(dev->flags & DM_FLAG_ACTIVATED); /* Activating a device should activate the root device */ if (!i) ut_assert(dms->root->flags & DM_FLAG_ACTIVATED); } /* Our 3 dm_test_infox children should be passed to post_probe */ ut_asserteq(3, dm_testdrv_op_count[DM_TEST_OP_POST_PROBE]); /* Also we can check the per-device data */ expected_base_add = 0; for (i = 0; i < 3; i++) { struct dm_test_uclass_perdev_priv *priv; struct dm_test_pdata *pdata; ut_assertok(uclass_find_device(UCLASS_TEST, i, &dev)); ut_assert(dev); priv = dev->uclass_priv; ut_assert(priv); ut_asserteq(expected_base_add, priv->base_add); pdata = dev->platdata; expected_base_add += pdata->ping_add; } return 0; }
/* Remove all drivers and check that things work */ static int dm_test_remove(struct unit_test_state *uts) { struct udevice *dev; int i; for (i = 0; i < 3; i++) { ut_assertok(uclass_find_device(UCLASS_TEST, i, &dev)); ut_assert(dev); ut_assertf(dev->flags & DM_FLAG_ACTIVATED, "Driver %d/%s not activated", i, dev->name); ut_assertok(device_remove(dev)); ut_assertf(!(dev->flags & DM_FLAG_ACTIVATED), "Driver %d/%s should have deactivated", i, dev->name); ut_assert(!dev->priv); } return 0; }