static void *__unflatten_device_tree(const void *blob,
                                     struct device_node *dad,
                                     struct device_node **mynodes,
-                                    void *(*dt_alloc)(u64 size, u64 align))
+                                    void *(*dt_alloc)(u64 size, u64 align),
+                                    bool detached)
 {
        int size;
        void *mem;
                pr_warning("End of tree marker overwritten: %08x\n",
                           be32_to_cpup(mem + size));
 
+       if (detached) {
+               of_node_set_flag(*mynodes, OF_DETACHED);
+               pr_debug("unflattened tree is detached\n");
+       }
+
        pr_debug(" <- unflatten_device_tree()\n");
        return mem;
 }
        void *mem;
 
        mutex_lock(&of_fdt_unflatten_mutex);
-       mem = __unflatten_device_tree(blob, dad, mynodes, &kernel_tree_alloc);
+       mem = __unflatten_device_tree(blob, dad, mynodes, &kernel_tree_alloc,
+                                     true);
        mutex_unlock(&of_fdt_unflatten_mutex);
 
        return mem;
 void __init unflatten_device_tree(void)
 {
        __unflatten_device_tree(initial_boot_params, NULL, &of_root,
-                               early_init_dt_alloc_memory_arch);
+                               early_init_dt_alloc_memory_arch, false);
 
        /* Get pointer to "/chosen" and "/aliases" nodes for use everywhere */
        of_alias_scan(early_init_dt_alloc_memory_arch);