diff options
Diffstat (limited to 'test/dm/bus.c')
-rw-r--r-- | test/dm/bus.c | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/test/dm/bus.c b/test/dm/bus.c index 08137a2216..93f3acd430 100644 --- a/test/dm/bus.c +++ b/test/dm/bus.c | |||
@@ -63,6 +63,15 @@ static int testbus_child_pre_probe_uclass(struct udevice *dev) | |||
63 | return 0; | 63 | return 0; |
64 | } | 64 | } |
65 | 65 | ||
66 | static int testbus_child_post_probe_uclass(struct udevice *dev) | ||
67 | { | ||
68 | struct dm_test_priv *priv = dev_get_priv(dev); | ||
69 | |||
70 | priv->uclass_postp++; | ||
71 | |||
72 | return 0; | ||
73 | } | ||
74 | |||
66 | static int testbus_child_post_remove(struct udevice *dev) | 75 | static int testbus_child_post_remove(struct udevice *dev) |
67 | { | 76 | { |
68 | struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev); | 77 | struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev); |
@@ -102,12 +111,13 @@ UCLASS_DRIVER(testbus) = { | |||
102 | .id = UCLASS_TEST_BUS, | 111 | .id = UCLASS_TEST_BUS, |
103 | .flags = DM_UC_FLAG_SEQ_ALIAS, | 112 | .flags = DM_UC_FLAG_SEQ_ALIAS, |
104 | .child_pre_probe = testbus_child_pre_probe_uclass, | 113 | .child_pre_probe = testbus_child_pre_probe_uclass, |
114 | .child_post_probe = testbus_child_post_probe_uclass, | ||
105 | }; | 115 | }; |
106 | 116 | ||
107 | /* Test that we can probe for children */ | 117 | /* Test that we can probe for children */ |
108 | static int dm_test_bus_children(struct unit_test_state *uts) | 118 | static int dm_test_bus_children(struct unit_test_state *uts) |
109 | { | 119 | { |
110 | int num_devices = 7; | 120 | int num_devices = 8; |
111 | struct udevice *bus; | 121 | struct udevice *bus; |
112 | struct uclass *uc; | 122 | struct uclass *uc; |
113 | 123 | ||
@@ -547,3 +557,38 @@ static int dm_test_bus_child_pre_probe_uclass(struct unit_test_state *uts) | |||
547 | } | 557 | } |
548 | DM_TEST(dm_test_bus_child_pre_probe_uclass, | 558 | DM_TEST(dm_test_bus_child_pre_probe_uclass, |
549 | DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); | 559 | DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); |
560 | |||
561 | /* | ||
562 | * Test that the bus' uclass' child_post_probe() is called after the | ||
563 | * device's probe() method | ||
564 | */ | ||
565 | static int dm_test_bus_child_post_probe_uclass(struct unit_test_state *uts) | ||
566 | { | ||
567 | struct udevice *bus, *dev; | ||
568 | int child_count; | ||
569 | |||
570 | /* | ||
571 | * See testfdt_drv_probe() which effectively initializes that | ||
572 | * the uclass postp flag is set to a value | ||
573 | */ | ||
574 | ut_assertok(uclass_get_device(UCLASS_TEST_BUS, 0, &bus)); | ||
575 | for (device_find_first_child(bus, &dev), child_count = 0; | ||
576 | dev; | ||
577 | device_find_next_child(&dev)) { | ||
578 | struct dm_test_priv *priv = dev_get_priv(dev); | ||
579 | |||
580 | /* Check that things happened in the right order */ | ||
581 | ut_asserteq_ptr(NULL, priv); | ||
582 | ut_assertok(device_probe(dev)); | ||
583 | |||
584 | priv = dev_get_priv(dev); | ||
585 | ut_assert(priv != NULL); | ||
586 | ut_asserteq(0, priv->uclass_postp); | ||
587 | child_count++; | ||
588 | } | ||
589 | ut_asserteq(3, child_count); | ||
590 | |||
591 | return 0; | ||
592 | } | ||
593 | DM_TEST(dm_test_bus_child_post_probe_uclass, | ||
594 | DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); | ||