mbox series

[0/6] hw: Centralize handling, improve error messages for -machine dumpdtb

Message ID 20250206151214.2947842-1-peter.maydell@linaro.org
Headers show
Series hw: Centralize handling, improve error messages for -machine dumpdtb | expand

Message

Peter Maydell Feb. 6, 2025, 3:12 p.m. UTC
We originally implemented '-machine dumpdtb' in a fairly ad-hoc way:
every machine using FDT is supposed to call qemu_fdt_dumpdtb() once
it has finished creating and modifying the DTB; if the user passed in
the machine option then qemu_fdt_dumpdtb() will write the FDT to a
file and then exit QEMU.

Somewhat later we implemented the QMP and HMP dumpdtb commands; for
these to work we had to make all the FDT-using machines set
MachineState::fdt to point to the FDT blob.

This means we can clean up the handling of the -machine option, so we
can implement it in one place in machine.c.  The benefit of this is:
 * boards only need to do one thing, not two
 * we can have better error messages for the "user asked us to
   dump the DTB but this board doesn't have one" case

(In particular the bug report
https://gitlab.com/qemu-project/qemu/-/issues/2733
is essentially because we silently ignore the option if there
is no DTB to dump.)

The openrisc machines and the MIPS boston machine both were not
setting MachineState::fdt, so the HMP/QMP dumpdtb don't work for
those machines; the series starts by fixing those bugs.  Then we can
implement the centralized handling of the machine option.  Finally we
get to fix the "no error message" problem:

 $ qemu-system-aarch64 -M raspi4b,dumpdtb=/tmp/d.dtb
 qemu-system-aarch64: This machine doesn't have an FDT
 (Perhaps it doesn't support FDT at all, or perhaps you need to
 provide an FDT with the -fdt option?)

The fact that there are three places that report "this machine
doesn't have an FDT" is a bit of a wart, stemming largely from the
fact that the QMP dumpdtb command is only conditionally present if
CONFIG_FDT.  In theory we could make it unconditional, but I opted to
leave that can of worms for another day...

thanks
-- PMM

Peter Maydell (6):
  monitor/hmp-cmds.c: Clean up hmp_dumpdtb printf
  hw/openrisc: Support monitor dumpdtb command
  hw/mips/boston: Check for error return from boston_fdt_filter()
  hw/mips/boston: Support dumpdtb monitor commands
  hw: Centralize handling of -machine dumpdtb option
  hw/core/machine.c: Make -machine dumpdtb=file.dtb with no DTB an error

 include/hw/loader-fit.h      | 21 +++++++++++++++++---
 include/hw/openrisc/boot.h   |  3 ++-
 include/system/device_tree.h |  2 --
 hw/arm/boot.c                |  2 --
 hw/core/loader-fit.c         | 38 ++++++++++++++++++++----------------
 hw/core/machine.c            | 23 ++++++++++++++++++++++
 hw/loongarch/virt.c          |  1 -
 hw/mips/boston.c             | 16 ++++++++++-----
 hw/openrisc/boot.c           |  8 +++++---
 hw/openrisc/openrisc_sim.c   |  2 +-
 hw/openrisc/virt.c           |  2 +-
 hw/ppc/e500.c                |  1 -
 hw/ppc/pegasos2.c            |  1 -
 hw/ppc/pnv.c                 |  1 -
 hw/ppc/spapr.c               |  1 -
 hw/riscv/boot.c              |  2 --
 monitor/hmp-cmds.c           |  2 +-
 system/device_tree-stub.c    |  5 ++++-
 system/device_tree.c         | 22 ++++++---------------
 19 files changed, 93 insertions(+), 60 deletions(-)