static void __init of_selftest_platform_populate(void)
 {
        int irq;
-       struct device_node *np;
+       struct device_node *np, *child;
        struct platform_device *pdev;
+       struct of_device_id match[] = {
+               { .compatible = "test-device", },
+               {}
+       };
 
        np = of_find_node_by_path("/testcase-data");
        of_platform_populate(np, of_default_bus_match_table, NULL, NULL);
        irq = platform_get_irq(pdev, 0);
        selftest(irq < 0 && irq != -EPROBE_DEFER, "device parsing error failed - %d\n", irq);
 
+       np = of_find_node_by_path("/testcase-data/platform-tests");
+       if (!np) {
+               pr_err("No testcase data in device tree\n");
+               return;
+       }
+
+       for_each_child_of_node(np, child) {
+               struct device_node *grandchild;
+               of_platform_populate(child, match, NULL, NULL);
+               for_each_child_of_node(child, grandchild)
+                       selftest(of_find_device_by_node(grandchild),
+                                "Could not create device for node '%s'\n",
+                                grandchild->name);
+       }
 }
 
 static int __init of_selftest(void)
 
--- /dev/null
+
+/ {
+       testcase-data {
+               platform-tests {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       test-device@0 {
+                               compatible = "test-device";
+                               reg = <0x0>;
+
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               dev@100 {
+                                       compatible = "test-sub-device";
+                                       reg = <0x100>;
+                               };
+                       };
+
+                       test-device@1 {
+                               compatible = "test-device";
+                               reg = <0x1>;
+
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               dev@100 {
+                                       compatible = "test-sub-device";
+                                       reg = <0x100>;
+                               };
+                       };
+               };
+       };
+};