// SPDX-License-Identifier: GPL-2.0-only #include <linux/init.h> #include <linux/of_fdt.h> #include <linux/printk.h> #include <linux/memblock.h> #include <init.h> #include "um_arch.h" static char *dtb __initdata; void uml_dtb_init(void) { long long size; void *area; area = uml_load_file(dtb, &size); if (!area) return; if (!early_init_dt_scan(area)) { pr_err("invalid DTB %s\n", dtb); memblock_free(area, size); return; } early_init_fdt_scan_reserved_mem(); unflatten_device_tree(); } static int __init uml_dtb_setup(char *line, int *add) { dtb = line; return 0; } __uml_setup("dtb=", uml_dtb_setup, "dtb=<file>\n" " Boot the kernel with the devicetree blob from the specified file.\n" );