[PATCH for-7.2 v2 00/20] QMP/HMP: add 'dumpdtb' and 'info fdt' commands

Daniel Henrique Barboza posted 20 patches 6 days, 13 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20220805093948.82561-1-danielhb413@gmail.com
Maintainers: "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Peter Maydell <peter.maydell@linaro.org>, "Edgar E. Iglesias" <edgar.iglesias@gmail.com>, Chris Wulff <crwulff@gmail.com>, Marek Vasut <marex@denx.de>, BALATON Zoltan <balaton@eik.bme.hu>, "Cédric Le Goater" <clg@kaod.org>, Daniel Henrique Barboza <danielhb413@gmail.com>, David Gibson <david@gibson.dropbear.id.au>, Greg Kurz <groug@kaod.org>, Alistair Francis <Alistair.Francis@wdc.com>, Bin Meng <bin.meng@windriver.com>, Palmer Dabbelt <palmer@dabbelt.com>, Max Filippov <jcmvbkbc@gmail.com>, Markus Armbruster <armbru@redhat.com>, Eric Blake <eblake@redhat.com>, Eduardo Habkost <eduardo@habkost.net>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, "Philippe Mathieu-Daudé" <f4bug@amsat.org>, Yanan Wang <wangyanan55@huawei.com>
hmp-commands-info.hx         |  14 +++
hmp-commands.hx              |  13 +++
hw/arm/boot.c                |   8 +-
hw/microblaze/boot.c         |  13 ++-
hw/microblaze/meson.build    |   2 +-
hw/nios2/boot.c              |  13 ++-
hw/nios2/meson.build         |   2 +-
hw/ppc/e500.c                |  15 ++-
hw/ppc/pegasos2.c            |   9 ++
hw/ppc/pnv.c                 |   6 +-
hw/ppc/ppc440_bamboo.c       |  13 ++-
hw/ppc/sam460ex.c            |  10 +-
hw/ppc/spapr.c               |   6 ++
hw/ppc/spapr_hcall.c         |   8 ++
hw/ppc/virtex_ml507.c        |  13 ++-
hw/riscv/sifive_u.c          |   8 ++
hw/riscv/spike.c             |  11 +++
hw/xtensa/meson.build        |   2 +-
hw/xtensa/xtfpga.c           |  11 ++-
include/monitor/hmp.h        |   2 +
include/sysemu/device_tree.h |   7 ++
monitor/hmp-cmds.c           |  28 ++++++
monitor/qmp-cmds.c           |  27 ++++++
qapi/machine.json            |  38 ++++++++
softmmu/device_tree.c        | 181 +++++++++++++++++++++++++++++++++++
25 files changed, 448 insertions(+), 12 deletions(-)
[PATCH for-7.2 v2 00/20] QMP/HMP: add 'dumpdtb' and 'info fdt' commands
Posted by Daniel Henrique Barboza 6 days, 13 hours ago
Hi,

This second version implements the review comments/suggestion made in
the v1 review [1].

First 13 patches are adaptations (basically set machine->fdt) I made in
several machines to enable them to work with these commands. Patches
14-20 have the actual QMP/HMP/device_tree implementation. A plan for the
machine patches would be to get an ack from the machine owners and push
them with the QMP/HMP patches. Pick the machine patches in their own
trees and push it separately also works. Or, or course, NACK the machine
changes if I somewhat messed up. Either way, patches 14-20 are
independent from the individual machine changes.

Notable cases where I chose not to change the machine code:

- hw/rx/rx-gdbsim: I didn't see the point of enabling this command in
the GDB simulator. Can be done if required;

- hw/mips/boston: the FDT is handled as a const void* pointer inside
boston_mach_init(), as result of the return type of boston_fdt_filter()
return the 'const' modifier in the FDT. I left it alone because the
required change would be to either cast the const pointer as
non-constant in machine->fdt or change boston_fdt_filter() to not return
a const pointer. Can also be done but it requires a little more thought
(unless we're ok with a "void *" cast).

Other notable changes from v1:

- 'save-fdt' was renamed as 'dumpdtb'´;

- Both commands were changed to have a base QMP implementation that does
all the work, with the HMP support calling the QMP logic behind the
scenes.  'dumpdtb' is implemented as qmp_dumpdtb(), 'info fdt' is
implemented as x-query-fdt(). I didn't mark 'dumpdtb' as unstable
because we're doing the same thing as -machine dumpdtb does for awhile.
'info fdt' is more of a debug tool than something that we expect regular
users to consume;

- 'info fdt' is now receiving a second 'propname' argument to support
printing properties, as suggested by David Gilbert;

- the QMP/HMP implementations are now gated with "ifdef CONFIG_FDT" to
allow for successful build in systems that do not have libfdt support.

All other code changes made are consequences of the changes mentioned above.

Changes from v1:
- all patches that set machine->fdt:
  - updated comments to explain why we're setting machine->fdt
- patches 2-6, 8, 10-12: new
  - set machine->fdt for most of the machines that uses the FDT via
load_device_tree()
- patch 14 (former 4):
  - renamed 'fdt-save' command to 'dumpdtb'
  - added QMP counterpart 'qmp_dumpdtb'
- patch 15 (former 5):
  - added QMP counterpart 'x-query-fdt' of 'info fdt'
- patch 20 (former 10):
  - added the 'propname' parameter to support parameters instead of parsing
the fullpath of the parameter
  - helper fdt_find_property() was removed. The logic is short enough to
be open coded in qmp_x_query_fdt()
- v1 link: https://lists.gnu.org/archive/html/qemu-devel/2022-07/msg04119.html
  
[1] https://lists.gnu.org/archive/html/qemu-devel/2022-07/msg04119.html

Daniel Henrique Barboza (20):
  hw/arm: do not free machine->fdt in arm_load_dtb()
  hw/microblaze: set machine->fdt in microblaze_load_dtb()
  hw/nios2: set machine->fdt in nios2_load_dtb()
  hw/ppc: set machine->fdt in ppce500_load_device_tree()
  hw/ppc: set machine->fdt in bamboo_load_device_tree()
  hw/ppc: set machine->fdt in sam460ex_load_device_tree()
  hw/ppc: set machine->fdt in xilinx_load_device_tree()
  hw/ppc: set machine->fdt in pegasos2_machine_reset()
  hw/ppc: set machine->fdt in pnv_reset()
  hw/ppc: set machine->fdt in spapr machine
  hw/riscv: set machine->fdt in sifive_u_machine_init()
  hw/riscv: set machine->fdt in spike_board_init()
  hw/xtensa: set machine->fdt in xtfpga_init()
  qmp/hmp, device_tree.c: introduce dumpdtb
  qmp/hmp, device_tree.c: introduce 'info fdt' command
  device_tree.c: support string props in fdt_format_node()
  device_tree.c: support remaining FDT prop types
  device_node.c: enable 'info fdt' to print subnodes
  device_tree.c: add fdt_format_property() helper
  hmp, device_tree.c: add 'info fdt <property>' support

 hmp-commands-info.hx         |  14 +++
 hmp-commands.hx              |  13 +++
 hw/arm/boot.c                |   8 +-
 hw/microblaze/boot.c         |  13 ++-
 hw/microblaze/meson.build    |   2 +-
 hw/nios2/boot.c              |  13 ++-
 hw/nios2/meson.build         |   2 +-
 hw/ppc/e500.c                |  15 ++-
 hw/ppc/pegasos2.c            |   9 ++
 hw/ppc/pnv.c                 |   6 +-
 hw/ppc/ppc440_bamboo.c       |  13 ++-
 hw/ppc/sam460ex.c            |  10 +-
 hw/ppc/spapr.c               |   6 ++
 hw/ppc/spapr_hcall.c         |   8 ++
 hw/ppc/virtex_ml507.c        |  13 ++-
 hw/riscv/sifive_u.c          |   8 ++
 hw/riscv/spike.c             |  11 +++
 hw/xtensa/meson.build        |   2 +-
 hw/xtensa/xtfpga.c           |  11 ++-
 include/monitor/hmp.h        |   2 +
 include/sysemu/device_tree.h |   7 ++
 monitor/hmp-cmds.c           |  28 ++++++
 monitor/qmp-cmds.c           |  27 ++++++
 qapi/machine.json            |  38 ++++++++
 softmmu/device_tree.c        | 181 +++++++++++++++++++++++++++++++++++
 25 files changed, 448 insertions(+), 12 deletions(-)

-- 
2.36.1