mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-06 23:01:36 +00:00
test: dm: core: Add test case for uclass driver's child_post_probe()
Add test case to cover uclass driver's child_post_probe() method. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
651d0c019a
commit
d92878aa40
3 changed files with 51 additions and 2 deletions
|
@ -69,6 +69,7 @@ struct dm_test_priv {
|
||||||
int op_count[DM_TEST_OP_COUNT];
|
int op_count[DM_TEST_OP_COUNT];
|
||||||
int uclass_flag;
|
int uclass_flag;
|
||||||
int uclass_total;
|
int uclass_total;
|
||||||
|
int uclass_postp;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -63,6 +63,15 @@ static int testbus_child_pre_probe_uclass(struct udevice *dev)
|
||||||
return 0;
|
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)
|
static int testbus_child_post_remove(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev);
|
struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev);
|
||||||
|
@ -102,6 +111,7 @@ UCLASS_DRIVER(testbus) = {
|
||||||
.id = UCLASS_TEST_BUS,
|
.id = UCLASS_TEST_BUS,
|
||||||
.flags = DM_UC_FLAG_SEQ_ALIAS,
|
.flags = DM_UC_FLAG_SEQ_ALIAS,
|
||||||
.child_pre_probe = testbus_child_pre_probe_uclass,
|
.child_pre_probe = testbus_child_pre_probe_uclass,
|
||||||
|
.child_post_probe = testbus_child_post_probe_uclass,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Test that we can probe for children */
|
/* Test that we can probe for children */
|
||||||
|
@ -547,3 +557,38 @@ static int dm_test_bus_child_pre_probe_uclass(struct unit_test_state *uts)
|
||||||
}
|
}
|
||||||
DM_TEST(dm_test_bus_child_pre_probe_uclass,
|
DM_TEST(dm_test_bus_child_pre_probe_uclass,
|
||||||
DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
|
DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test that the bus' uclass' child_post_probe() is called after the
|
||||||
|
* device's probe() method
|
||||||
|
*/
|
||||||
|
static int dm_test_bus_child_post_probe_uclass(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
struct udevice *bus, *dev;
|
||||||
|
int child_count;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* See testfdt_drv_probe() which effectively initializes that
|
||||||
|
* the uclass postp flag is set to a value
|
||||||
|
*/
|
||||||
|
ut_assertok(uclass_get_device(UCLASS_TEST_BUS, 0, &bus));
|
||||||
|
for (device_find_first_child(bus, &dev), child_count = 0;
|
||||||
|
dev;
|
||||||
|
device_find_next_child(&dev)) {
|
||||||
|
struct dm_test_priv *priv = dev_get_priv(dev);
|
||||||
|
|
||||||
|
/* Check that things happened in the right order */
|
||||||
|
ut_asserteq_ptr(NULL, priv);
|
||||||
|
ut_assertok(device_probe(dev));
|
||||||
|
|
||||||
|
priv = dev_get_priv(dev);
|
||||||
|
ut_assert(priv != NULL);
|
||||||
|
ut_asserteq(0, priv->uclass_postp);
|
||||||
|
child_count++;
|
||||||
|
}
|
||||||
|
ut_asserteq(3, child_count);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
DM_TEST(dm_test_bus_child_post_probe_uclass,
|
||||||
|
DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
|
||||||
|
|
|
@ -55,10 +55,13 @@ static int testfdt_drv_probe(struct udevice *dev)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this device is on a bus, the uclass_flag will be set before
|
* If this device is on a bus, the uclass_flag will be set before
|
||||||
* calling this function. This is used by
|
* calling this function. In the meantime the uclass_postp is
|
||||||
* dm_test_bus_child_pre_probe_uclass().
|
* initlized to a value -1. These are used respectively by
|
||||||
|
* dm_test_bus_child_pre_probe_uclass() and
|
||||||
|
* dm_test_bus_child_post_probe_uclass().
|
||||||
*/
|
*/
|
||||||
priv->uclass_total += priv->uclass_flag;
|
priv->uclass_total += priv->uclass_flag;
|
||||||
|
priv->uclass_postp = -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue