diff options
author | Vincent Whitchurch <vincent.whitchurch@axis.com> | 2021-12-08 16:11:23 +0100 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2021-12-22 20:35:01 +0100 |
commit | b31297f04e86e4115ece79ca530d8ae1c454db75 (patch) | |
tree | 0de0a845d29525262d48d3b81c829a855806ff23 /arch/um/kernel/dtb.c | |
parent | 361640b4fdc86167b0c25d8e73c08dcaa4ecd28a (diff) | |
download | linux-b31297f04e86e4115ece79ca530d8ae1c454db75.tar.gz linux-b31297f04e86e4115ece79ca530d8ae1c454db75.tar.bz2 linux-b31297f04e86e4115ece79ca530d8ae1c454db75.zip |
um: Add devicetree support
Add a dtb=<filename> option to boot UML with a devicetree blob. This
can be used for testing driver code using UML.
Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
[rw: Add dependency on CONFIG_OF]
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um/kernel/dtb.c')
-rw-r--r-- | arch/um/kernel/dtb.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/arch/um/kernel/dtb.c b/arch/um/kernel/dtb.c new file mode 100644 index 000000000000..ca69d72025f3 --- /dev/null +++ b/arch/um/kernel/dtb.c @@ -0,0 +1,41 @@ +// 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; + } + + unflatten_device_tree(); + early_init_fdt_scan_reserved_mem(); +} + +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" +); |