Message ID | 20220908194040.518400-6-danielhb413@gmail.com |
---|---|
State | Changes Requested |
Headers | show |
Series | QMP/HMP: introduce 'dumpdtb' | expand |
On Thu, 8 Sep 2022, Daniel Henrique Barboza wrote: > This will enable support for 'dumpdtb' QMP/HMP command for the bamboo > machine. > > Setting machine->fdt requires a MachineState pointer to be used inside > bamboo_load_device_tree(). Let's change the function to receive this > pointer from the caller. 'ramsize' and 'kernel_cmdline' can be retrieved > directly from the 'machine' pointer. > > Cc: Cédric Le Goater <clg@kaod.org> > Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu> > --- > hw/ppc/ppc440_bamboo.c | 25 ++++++++++++++----------- > 1 file changed, 14 insertions(+), 11 deletions(-) > > diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c > index ea945a1c99..9cc58fccf9 100644 > --- a/hw/ppc/ppc440_bamboo.c > +++ b/hw/ppc/ppc440_bamboo.c > @@ -34,6 +34,8 @@ > #include "hw/qdev-properties.h" > #include "qapi/error.h" > > +#include <libfdt.h> > + > #define BINARY_DEVICE_TREE_FILE "bamboo.dtb" > > /* from u-boot */ > @@ -56,14 +58,13 @@ static const ram_addr_t ppc440ep_sdram_bank_sizes[] = { > > static hwaddr entry; > > -static int bamboo_load_device_tree(hwaddr addr, > - uint32_t ramsize, > - hwaddr initrd_base, > - hwaddr initrd_size, > - const char *kernel_cmdline) > +static int bamboo_load_device_tree(MachineState *machine, > + hwaddr addr, > + hwaddr initrd_base, > + hwaddr initrd_size) > { > int ret = -1; > - uint32_t mem_reg_property[] = { 0, 0, cpu_to_be32(ramsize) }; > + uint32_t mem_reg_property[] = { 0, 0, cpu_to_be32(machine->ram_size) }; > char *filename; > int fdt_size; > void *fdt; > @@ -98,7 +99,7 @@ static int bamboo_load_device_tree(hwaddr addr, > fprintf(stderr, "couldn't set /chosen/linux,initrd-end\n"); > } > ret = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", > - kernel_cmdline); > + machine->kernel_cmdline); > if (ret < 0) { > fprintf(stderr, "couldn't set /chosen/bootargs\n"); > } > @@ -119,7 +120,10 @@ static int bamboo_load_device_tree(hwaddr addr, > tb_freq); > > rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr); > - g_free(fdt); > + > + /* Set ms->fdt for 'dumpdtb' QMP/HMP command */ > + machine->fdt = fdt; > + > return 0; > } > > @@ -163,7 +167,6 @@ static void main_cpu_reset(void *opaque) > static void bamboo_init(MachineState *machine) > { > const char *kernel_filename = machine->kernel_filename; > - const char *kernel_cmdline = machine->kernel_cmdline; > const char *initrd_filename = machine->initrd_filename; > unsigned int pci_irq_nrs[4] = { 28, 27, 26, 25 }; > MemoryRegion *address_space_mem = get_system_memory(); > @@ -289,8 +292,8 @@ static void bamboo_init(MachineState *machine) > > /* If we're loading a kernel directly, we must load the device tree too. */ > if (kernel_filename) { > - if (bamboo_load_device_tree(FDT_ADDR, machine->ram_size, RAMDISK_ADDR, > - initrd_size, kernel_cmdline) < 0) { > + if (bamboo_load_device_tree(machine, FDT_ADDR, > + RAMDISK_ADDR, initrd_size) < 0) { > error_report("couldn't load device tree"); > exit(1); > } >
diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index ea945a1c99..9cc58fccf9 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -34,6 +34,8 @@ #include "hw/qdev-properties.h" #include "qapi/error.h" +#include <libfdt.h> + #define BINARY_DEVICE_TREE_FILE "bamboo.dtb" /* from u-boot */ @@ -56,14 +58,13 @@ static const ram_addr_t ppc440ep_sdram_bank_sizes[] = { static hwaddr entry; -static int bamboo_load_device_tree(hwaddr addr, - uint32_t ramsize, - hwaddr initrd_base, - hwaddr initrd_size, - const char *kernel_cmdline) +static int bamboo_load_device_tree(MachineState *machine, + hwaddr addr, + hwaddr initrd_base, + hwaddr initrd_size) { int ret = -1; - uint32_t mem_reg_property[] = { 0, 0, cpu_to_be32(ramsize) }; + uint32_t mem_reg_property[] = { 0, 0, cpu_to_be32(machine->ram_size) }; char *filename; int fdt_size; void *fdt; @@ -98,7 +99,7 @@ static int bamboo_load_device_tree(hwaddr addr, fprintf(stderr, "couldn't set /chosen/linux,initrd-end\n"); } ret = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", - kernel_cmdline); + machine->kernel_cmdline); if (ret < 0) { fprintf(stderr, "couldn't set /chosen/bootargs\n"); } @@ -119,7 +120,10 @@ static int bamboo_load_device_tree(hwaddr addr, tb_freq); rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr); - g_free(fdt); + + /* Set ms->fdt for 'dumpdtb' QMP/HMP command */ + machine->fdt = fdt; + return 0; } @@ -163,7 +167,6 @@ static void main_cpu_reset(void *opaque) static void bamboo_init(MachineState *machine) { const char *kernel_filename = machine->kernel_filename; - const char *kernel_cmdline = machine->kernel_cmdline; const char *initrd_filename = machine->initrd_filename; unsigned int pci_irq_nrs[4] = { 28, 27, 26, 25 }; MemoryRegion *address_space_mem = get_system_memory(); @@ -289,8 +292,8 @@ static void bamboo_init(MachineState *machine) /* If we're loading a kernel directly, we must load the device tree too. */ if (kernel_filename) { - if (bamboo_load_device_tree(FDT_ADDR, machine->ram_size, RAMDISK_ADDR, - initrd_size, kernel_cmdline) < 0) { + if (bamboo_load_device_tree(machine, FDT_ADDR, + RAMDISK_ADDR, initrd_size) < 0) { error_report("couldn't load device tree"); exit(1); }
This will enable support for 'dumpdtb' QMP/HMP command for the bamboo machine. Setting machine->fdt requires a MachineState pointer to be used inside bamboo_load_device_tree(). Let's change the function to receive this pointer from the caller. 'ramsize' and 'kernel_cmdline' can be retrieved directly from the 'machine' pointer. Cc: Cédric Le Goater <clg@kaod.org> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- hw/ppc/ppc440_bamboo.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-)