On Mon, Feb 23, 2026 at 2:23 PM Alex Bennée <[email protected]> wrote:
>
> Thomas Huth <[email protected]> writes:
>
> >  Hi!
> >
> > On 19/02/2026 15.48, Ruslan Ruslichenko wrote:
> >> 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");
> >
> > Do the hardware dtbs differ from the ones that are passed to the Linux
> > kernel? If not, I think you likely could use the existing "dtb"
> > property for your new feature?
>
> They have to - the normal DTB cannot define the whole system because its
> only concerned with reporting what the kernel can see to the kernel and
> not defining the whole system including what the firmware sees.
>

Yes, Indeed.
Normal DTB was explored, but there is not enough information to create
QEMU models from it.
Thus we need to have a separate device tree.

> >
> > ...
> >> 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
> >
> > Please don't add any new top level options if it is not really
> > necessary. We already got too much duplicated logic in QEMU, so we try
> > to avoid this nowadays. In your case here, it should be fine to simply
> > configure the hw-dtb via the -machine property.

Agreed. As for now there is only one user of this hw option, we can move to the
arm-generic-fdt machine option itself. I'll move this for the next version.

> >
> >  Thanks,
> >   Thomas
>
> --
> Alex Bennée
> Virtualisation Tech Lead @ Linaro


--
BR,
Ruslan Ruslichenko

Reply via email to