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