Message ID | 20220908194040.518400-8-danielhb413@gmail.com |
---|---|
State | New |
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 > virtex_ml507 machine. > > Setting machine->fdt requires a MachineState pointer to be used inside > xilinx_load_device_tree(). Let's change the function to receive this > pointer from the caller. kernel_cmdline' can be retrieved directly from > the 'machine' pointer. 'ramsize' wasn't being used so can be removed. > > Cc: Edgar E. Iglesias <edgar.iglesias@gmail.com> > Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu> > --- > hw/ppc/virtex_ml507.c | 25 ++++++++++++++----------- > 1 file changed, 14 insertions(+), 11 deletions(-) > > diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c > index 493ea0c19f..13cace229b 100644 > --- a/hw/ppc/virtex_ml507.c > +++ b/hw/ppc/virtex_ml507.c > @@ -45,6 +45,8 @@ > #include "hw/qdev-properties.h" > #include "ppc405.h" > > +#include <libfdt.h> > + > #define EPAPR_MAGIC (0x45504150) > #define FLASH_SIZE (16 * MiB) > > @@ -144,11 +146,10 @@ static void main_cpu_reset(void *opaque) > } > > #define BINARY_DEVICE_TREE_FILE "virtex-ml507.dtb" > -static int xilinx_load_device_tree(hwaddr addr, > - uint32_t ramsize, > - hwaddr initrd_base, > - hwaddr initrd_size, > - const char *kernel_cmdline) > +static int xilinx_load_device_tree(MachineState *machine, > + hwaddr addr, > + hwaddr initrd_base, > + hwaddr initrd_size) > { > char *path; > int fdt_size; > @@ -190,18 +191,21 @@ static int xilinx_load_device_tree(hwaddr addr, > error_report("couldn't set /chosen/linux,initrd-end"); > } > > - r = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", kernel_cmdline); > + r = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", > + machine->kernel_cmdline); > if (r < 0) > fprintf(stderr, "couldn't set /chosen/bootargs\n"); > cpu_physical_memory_write(addr, fdt, fdt_size); > - g_free(fdt); > + > + /* Set machine->fdt for 'dumpdtb' QMP/HMP command */ > + machine->fdt = fdt; > + > return fdt_size; > } > > static void virtex_init(MachineState *machine) > { > const char *kernel_filename = machine->kernel_filename; > - const char *kernel_cmdline = machine->kernel_cmdline; > hwaddr initrd_base = 0; > int initrd_size = 0; > MemoryRegion *address_space_mem = get_system_memory(); > @@ -294,9 +298,8 @@ static void virtex_init(MachineState *machine) > boot_info.fdt = high + (8192 * 2); > boot_info.fdt &= ~8191; > > - xilinx_load_device_tree(boot_info.fdt, machine->ram_size, > - initrd_base, initrd_size, > - kernel_cmdline); > + xilinx_load_device_tree(machine, boot_info.fdt, > + initrd_base, initrd_size); > } > env->load_info = &boot_info; > } >
diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index 493ea0c19f..13cace229b 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -45,6 +45,8 @@ #include "hw/qdev-properties.h" #include "ppc405.h" +#include <libfdt.h> + #define EPAPR_MAGIC (0x45504150) #define FLASH_SIZE (16 * MiB) @@ -144,11 +146,10 @@ static void main_cpu_reset(void *opaque) } #define BINARY_DEVICE_TREE_FILE "virtex-ml507.dtb" -static int xilinx_load_device_tree(hwaddr addr, - uint32_t ramsize, - hwaddr initrd_base, - hwaddr initrd_size, - const char *kernel_cmdline) +static int xilinx_load_device_tree(MachineState *machine, + hwaddr addr, + hwaddr initrd_base, + hwaddr initrd_size) { char *path; int fdt_size; @@ -190,18 +191,21 @@ static int xilinx_load_device_tree(hwaddr addr, error_report("couldn't set /chosen/linux,initrd-end"); } - r = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", kernel_cmdline); + r = qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", + machine->kernel_cmdline); if (r < 0) fprintf(stderr, "couldn't set /chosen/bootargs\n"); cpu_physical_memory_write(addr, fdt, fdt_size); - g_free(fdt); + + /* Set machine->fdt for 'dumpdtb' QMP/HMP command */ + machine->fdt = fdt; + return fdt_size; } static void virtex_init(MachineState *machine) { const char *kernel_filename = machine->kernel_filename; - const char *kernel_cmdline = machine->kernel_cmdline; hwaddr initrd_base = 0; int initrd_size = 0; MemoryRegion *address_space_mem = get_system_memory(); @@ -294,9 +298,8 @@ static void virtex_init(MachineState *machine) boot_info.fdt = high + (8192 * 2); boot_info.fdt &= ~8191; - xilinx_load_device_tree(boot_info.fdt, machine->ram_size, - initrd_base, initrd_size, - kernel_cmdline); + xilinx_load_device_tree(machine, boot_info.fdt, + initrd_base, initrd_size); } env->load_info = &boot_info; }
This will enable support for 'dumpdtb' QMP/HMP command for the virtex_ml507 machine. Setting machine->fdt requires a MachineState pointer to be used inside xilinx_load_device_tree(). Let's change the function to receive this pointer from the caller. kernel_cmdline' can be retrieved directly from the 'machine' pointer. 'ramsize' wasn't being used so can be removed. Cc: Edgar E. Iglesias <edgar.iglesias@gmail.com> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- hw/ppc/virtex_ml507.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-)