From: Ruslan Ruslichenko <[email protected]> Add new '-hw-dtb' command-line option and corresponding MachineState property. The 'hw-dtb' option allows to specify a Device tree binary with hardware description which Qemu should emulate.
Signed-off-by: Ruslan Ruslichenko <[email protected]> --- hw/core/machine.c | 19 +++++++++++++++++++ include/hw/core/boards.h | 1 + qemu-options.hx | 9 +++++++++ system/vl.c | 3 +++ 4 files changed, 32 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index d4ef620c17..affd24cd49 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -363,6 +363,20 @@ static void machine_set_dtb(Object *obj, const char *value, Error **errp) ms->dtb = g_strdup(value); } +static char *machine_get_hw_dtb(Object *obj, Error **errp) +{ + MachineState *ms = MACHINE(obj); + + return g_strdup(ms->hw_dtb); +} + +static void machine_set_hw_dtb(Object *obj, const char *value, Error **errp) +{ + MachineState *ms = MACHINE(obj); + + ms->hw_dtb = g_strdup(value); +} + static char *machine_get_dumpdtb(Object *obj, Error **errp) { MachineState *ms = MACHINE(obj); @@ -1145,6 +1159,11 @@ static void machine_class_init(ObjectClass *oc, const void *data) object_class_property_set_description(oc, "dtb", "Linux kernel device tree file"); + object_class_property_add_str(oc, "hw-dtb", + machine_get_hw_dtb, machine_set_hw_dtb); + object_class_property_set_description(oc, "hw-dtb", + "A device tree binary used to describe the hardware to QEMU"); + object_class_property_add_str(oc, "dumpdtb", machine_get_dumpdtb, machine_set_dumpdtb); object_class_property_set_description(oc, "dumpdtb", diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index edbe8d03e5..722b79b5e4 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -403,6 +403,7 @@ struct MachineState { void *fdt; char *dtb; + char *hw_dtb; char *dumpdtb; int phandle_start; char *dt_compatible; diff --git a/qemu-options.hx b/qemu-options.hx index 33fcfe7ce6..1568f3ce4c 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4518,6 +4518,15 @@ SRST(initrd) ERST +DEF("hw-dtb", HAS_ARG, QEMU_OPTION_hw_dtb, \ + "-hw-dtb file use 'file' as device tree image\n", QEMU_ARCH_ALL) +SRST +``-hw-dtb file`` + Use <file> as a device tree binary (dtb) image used to create the + emulated machine. This dtb will not be passed to the kernel, use -dtb + for that. +ERST + DEF("dtb", HAS_ARG, QEMU_OPTION_dtb, \ "-dtb file use 'file' as device tree image\n", QEMU_ARCH_ALL) SRST diff --git a/system/vl.c b/system/vl.c index aa9a155041..c890da586c 100644 --- a/system/vl.c +++ b/system/vl.c @@ -3020,6 +3020,9 @@ void qemu_init(int argc, char **argv) case QEMU_OPTION_dtb: qdict_put_str(machine_opts_dict, "dtb", optarg); break; + case QEMU_OPTION_hw_dtb: + qdict_put_str(machine_opts_dict, "hw-dtb", optarg); + break; case QEMU_OPTION_cdrom: drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS); break; -- 2.43.0
